all test working again with level DB

This commit is contained in:
Matias Alejo Garcia 2014-02-05 11:23:41 -03:00
parent e4095cbf8e
commit 548572bfa3
12 changed files with 99 additions and 62 deletions

View File

@ -63,7 +63,6 @@ function spec() {
if (err) return cb(err);
txOut.forEach(function(txItem){
var v = parseInt(txItem.value_sat);
self.totalReceivedSat += v;
@ -76,7 +75,7 @@ function spec() {
else {
// spent
self.totalSentSat += v;
self.transactions.push(txItem.spendTxid);
self.transactions.push(txItem.spendTxId);
self.txApperances +=2;
}
});

View File

@ -18,8 +18,12 @@ function spec() {
BitcoreBlock= require('bitcore/Block').class(),
config = require('../config/config');
var BlockDb = function() {
this.db = levelup(config.leveldb + '/blocks');
var BlockDb = function(db) {
this.db = db || levelup(config.leveldb + '/blocks');
};
BlockDb.prototype.close = function(cb) {
this.db.close(cb);
};
BlockDb.prototype.drop = function(cb) {

View File

@ -13,7 +13,7 @@ function spec() {
function Sync() {
this.blockDb = new BlockDb();
this.bDb = new BlockDb();
this.txDb = new TransactionDb();
}
@ -52,17 +52,18 @@ function spec() {
else return cb();
};
Sync.prototype.close = function() {
if ( this.db && this.db.readyState ) {
this.db.close();
}
Sync.prototype.close = function(cb) {
var self = this;
self.txDb.close(function() {
self.bDb.close(cb);
});
};
Sync.prototype.destroy = function(next) {
var self = this;
async.series([
function(b) { self.blockDb.drop(b); },
function(b) { self.bDb.drop(b); },
function(b) { self.txDb.drop(b); },
], next);
};
@ -74,7 +75,7 @@ function spec() {
self.txDb.createFromBlock(block, function(err, insertedTxs, updateAddrs) {
if (err) return cb(err);
self.blockDb.add(block, function(err){
self.bDb.add(block, function(err){
if (err) return cb(err);
self._handleBroadcast(block, insertedTxs, updateAddrs);
return cb();
@ -100,13 +101,13 @@ console.log('[Sync.js.109] WARN: Reach reog depth limit'); //TODO
},
function (w_c) {
//check with RPC if the block is mainchain
self.blockDb.fromHashWithInfo(hash, function (err, info) {
self.bDb.fromHashWithInfo(hash, function (err, info) {
if (!info) {
console.log('[Sync.js.107:hash:ORPHAN]',hash); //TODO
self.txDb.setOrphan(hash, function(err) {
if (err) return w_c(err);
self.blockDb.setOrphan(hash, function(err, prevHash){
self.bDb.setOrphan(hash, function(err, prevHash){
hash = prevHash;
return w_c(err);
});

View File

@ -6,7 +6,7 @@ require('classtool');
function spec() {
// blockHash -> txid mapping (to reorgs)
var ROOT = 'tx-b-'; //tx-b-<txid>-<block> => 1
var ROOT = 'tx-b-'; //tx-b-<txid>-<block> => 1/0 (connected or not)
// to show tx outs
var OUTS_ROOT = 'txouts-'; //txouts-<txid>-<n> => [addr, btc_sat]
@ -29,8 +29,12 @@ function spec() {
config = require('../config/config'),
assert = require('assert');
var TransactionDb = function() {
this.db = levelup(config.leveldb + '/txs');
var TransactionDb = function(db) {
this.db = db || levelup(config.leveldb + '/txs');
};
TransactionDb.prototype.close = function(cb) {
this.db.close(cb);
};
TransactionDb.prototype.drop = function(cb) {
@ -221,7 +225,6 @@ function spec() {
});
},
function(err) {
console.log('[TransactionDb.js.165]', ret); //TODO
return cb(err,ret);
});
});

View File

@ -20,6 +20,11 @@ describe('TransactionDb fromIdWithInfo', function(){
return c();
});
after(function(c) {
txDb.close(c);
});
var txid = '7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c';
it('tx info ' + txid, function(done) {
txDb.fromIdWithInfo(txid, function(err, tx) {
@ -116,6 +121,16 @@ describe('TransactionDb fromIdWithInfo', function(){
describe('TransactionDb Outs', function(){
before(function(c) {
txDb = new TransactionDb();
return c();
});
after(function(c) {
txDb.close(c);
});
txItemsValid.forEach( function(v) {
if (v.disabled) return;
it('test a processing tx ' + v.txid, function(done) {

View File

@ -15,37 +15,43 @@ var
var spentValid = JSON.parse(fs.readFileSync('test/integration/spent.json'));
describe('TransactionDb Expenses', function(){
var tdb = new TransactionDb();
var txDb;
before(function(done) {
describe('TransactionDb Expenses', function(){
before(function(c) {
txDb = new TransactionDb();
// lets spend!
async.each(Object.keys(spentValid),
function(txid,c_out) {
async.each(spentValid[txid],
function(i,c_in) {
tdb.createFromArray([i.txid], null, function(err) {
txDb.createFromArray([i.txid], null, function(err) {
return c_in();
});
},
function(err) {
console.log('Done spending ', txid); //TODO
return c_out();
}
);
},
function(err) {
return done();
return c();
}
);
});
after(function(c) {
txDb.close(c);
});
Object.keys(spentValid).forEach( function(txid) {
it('test result of spending tx ' + txid, function(done) {
var s = spentValid[txid];
var c=0;
tdb.fromTxId( txid, function(err, readItems) {
txDb.fromTxId( txid, function(err, readItems) {
s.forEach( function(v) {
assert.equal(readItems[c].spendTxId,v.txid);
assert.equal(readItems[c].spendIndex,v.n);

View File

@ -17,6 +17,11 @@ describe('Address balances', function(){
return c();
});
after(function(c) {
txDb.close(c);
});
addrValid.forEach( function(v) {
if (v.disabled) {
@ -43,7 +48,7 @@ describe('Address balances', function(){
if (v.transactions) {
v.transactions.forEach( function(tx) {
assert(a.transactions.indexOf(tx)>-1);
assert(a.transactions.indexOf(tx)>-1,'have tx '+tx);
});
}
done();

View File

@ -37,14 +37,14 @@
},
{
"addr": "mgqvRGJMwR9JU5VhJ3x9uX9MTkzTsmmDgQ",
"balance": 43.1,
"txApperances": 19
"txApperances": 27,
"balance": 5.1
},
{
"addr": "mzW2hdZN2um7WBvTDerdahKqRgj3md9C29",
"txApperances": 2034,
"balance": 1049.69744099,
"totalReceived": 1049.69744099,
"txApperances": 6033,
"balance": 1049.69744101,
"totalReceived": 1049.69744101,
"totalSent": 0
},
{
@ -67,6 +67,7 @@
"balance": 10580.50027254,
"totalReceived": 12157.65075053,
"totalSent": 1577.15047799,
"txApperances": 459,
"transactions": [
"91800d80bb4c69b238c9bfd94eb5155ab821e6b25cae5c79903d12853bbb4ed5",
"f6e80d4fd1a2377406856c67d0cee5ac7e5120993ff97e617ca9aac33b4c6b1e",

View File

@ -11,12 +11,23 @@ var
config = require('../../config/config'),
BlockDb = require('../../lib/BlockDb').class();
var bDb;
describe('BlockDb fromHashWithInfo', function(){
var bdb = new BlockDb();
before(function(c) {
bDb = new BlockDb();
return c();
});
after(function(c) {
bDb.close(c);
});
it('should poll block\'s info from bitcoind', function(done) {
bdb.fromHashWithInfo(TESTING_BLOCK, function(err, b2) {
bDb.fromHashWithInfo(TESTING_BLOCK, function(err, b2) {
if (err) done(err);
assert.equal(b2.hash, TESTING_BLOCK);
assert.equal(b2.info.hash, TESTING_BLOCK);
@ -25,7 +36,7 @@ describe('BlockDb fromHashWithInfo', function(){
});
});
it('return true in has', function(done) {
bdb.has(TESTING_BLOCK, function(err, has) {
bDb.has(TESTING_BLOCK, function(err, has) {
assert.equal(has, true);
done();
});
@ -34,12 +45,12 @@ describe('BlockDb fromHashWithInfo', function(){
var b16 = '00000000c4cbd75af741f3a2b2ff72d9ed4d83a048462c1efe331be31ccf006b';
var b17 = '00000000fe198cce4c8abf9dca0fee1182cb130df966cc428ad2a230df8da743';
bdb.has(b17, function(err, has) {
bDb.has(b17, function(err, has) {
assert(has);
bdb.setOrphan(b17, function(err, oldPrev) {
bDb.setOrphan(b17, function(err, oldPrev) {
assert.equal(oldPrev, b16);
bdb.setPrev(b17, b16, function(err, oldPrev) {
bdb.getPrev(b17, function(err, p) {
bDb.setPrev(b17, b16, function(err, oldPrev) {
bDb.getPrev(b17, function(err, p) {
assert.equal(p, b16);
done();
});

View File

@ -13,7 +13,7 @@ var assert = require('assert'),
//var txItemsValid = JSON.parse(fs.readFileSync('test/model/txitems.json'));
describe('TransactionOut', function(){
describe('BlockExtractor', function(){
var be = new BlockExtractor(config.bitcoind.dataDir, config.network);
@ -51,7 +51,7 @@ describe('TransactionOut', function(){
});
});
it('should read 100000 blocks with no error ', function(done) {
it.skip('should read 100000 blocks with no error ', function(done) {
var i=0;
while(i++<100000) {

View File

@ -1,25 +1,13 @@
#!/usr/bin/env node
'use strict';
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var
assert = require('assert'),
config = require('../../config/config'),
Status = require('../../app/models/Status').class(),
mongoose= require('mongoose');
var assert = require('assert'),
Status = require('../../app/models/Status').class();
describe('Status', function(){
before(function(done) {
mongoose.connect(config.db);
done();
});
after(function(done) {
mongoose.connection.close();
done();
});
it('getInfo', function(done) {
var d = new Status();

View File

@ -20,7 +20,7 @@ var b = [
var fix = function(s,cb) {
async.each([1,2,3,4], function(i,c) {
s.blockDb.setPrev(b[i],b[i-1], function() {
s.bDb.setPrev(b[i],b[i-1], function() {
return c();
});
}, cb);
@ -28,12 +28,12 @@ var fix = function(s,cb) {
var test = function(s,cb) {
async.each([2,3,4], function(i,c) {
s.blockDb.getPrev(b[i], function(err, p) {
s.bDb.getPrev(b[i], function(err, p) {
assert.equal(p,0);
return c();
});
}, function() {
s.blockDb.getPrev(b[1], function(err, p) {
s.bDb.getPrev(b[1], function(err, p) {
assert.equal(p,b[0]);
return cb();
});
@ -44,12 +44,12 @@ var test = function(s,cb) {
var testNo = function(s,cb) {
async.each([2,3,4], function(i,c) {
s.blockDb.getPrev(b[i], function(err, p) {
s.bDb.getPrev(b[i], function(err, p) {
assert.equal(p,b[i-1]);
return c();
});
}, function() {
s.blockDb.getPrev(b[1], function(err, p) {
s.bDb.getPrev(b[1], function(err, p) {
assert.equal(p,b[0]);
return cb();
});
@ -68,15 +68,19 @@ describe('Sync checkOrphan', function(){
});
after(function(done) {
fix(s,done);
fix(s,function() {
s.close(done);
});
});
it('checkOrphan', function(done) {
this.timeout(100000);
s.blockDb.has(b[0], function(err, has) {
s.bDb.has(b[0], function(err, has) {
assert(has);
s.blockDb.has(b[1], function(err, has) {
s.bDb.has(b[1], function(err, has) {
assert(has);
s.checkOrphan(b[4],b[1], function() {
testNo(s,done);