Added more tests.

This commit is contained in:
Chris Kleeschulte 2017-09-24 12:32:41 -04:00
parent 423eb31992
commit 76b9ff5042
No known key found for this signature in database
GPG Key ID: 33195D27EF6BDB7F
2 changed files with 57 additions and 25 deletions

View File

@ -232,12 +232,12 @@ var startBitcoind = function(count, callback) {
console.log(count + ' bitcoind\'s started at pid(s): ' + pids); console.log(count + ' bitcoind\'s started at pid(s): ' + pids);
async.retry({ interval: 1000, times: 1000 }, function(next) { async.retry({ interval: 1000, times: 1000 }, function(next) {
rpc1.getInfo(function(err, res) { rpc1.getInfo(function(err) {
if (err) { if (err) {
return next(err); return next(err);
} }
// there is a bit of time even after the rpc server comes online that the rpc server is not truly ready // there is a bit of time even after the rpc server comes online that the rpc server is not truly ready
setTimeout(function(err) { setTimeout(function() {
next(); next();
}, 1000); }, 1000);
}); });
@ -292,14 +292,14 @@ var buildInitialChain = function(callback) {
rpc1.sendToAddress(rpc2Address, 25, next); rpc1.sendToAddress(rpc2Address, 25, next);
}, },
function(res, next) { function(res, next) {
console.log('TXID: ' + res.result); //console.log('TXID: ' + res.result);
console.log('generating 7 blocks'); console.log('generating 7 blocks');
blocksGenerated += 7; blocksGenerated += 7;
rpc1.generate(7, next); rpc1.generate(7, next);
}, },
function(res, next) { function(res, next) {
rpc2.getBalance(function(err, res) { rpc2.getBalance(function(err, res) {
console.log(res); //console.log(res);
next(); next();
}); });
}, },
@ -318,7 +318,7 @@ var buildInitialChain = function(callback) {
}, },
function(res, next) { function(res, next) {
txid = res.result; txid = res.result;
console.log('sending from rpc2Address TXID: ', res); //console.log('sending from rpc2Address TXID: ', res);
console.log('generating 6 blocks'); console.log('generating 6 blocks');
blocksGenerated += 6; blocksGenerated += 6;
rpc2.generate(6, next); rpc2.generate(6, next);
@ -329,7 +329,7 @@ var buildInitialChain = function(callback) {
return callback(err); return callback(err);
} }
rpc1.getInfo(function(err, res) { rpc1.getInfo(function(err, res) {
console.log(res); //console.log(res);
callback(); callback();
}); });
}); });
@ -423,7 +423,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
console.log(data); //console.log(data);
expect(data.balance).to.equal(0); expect(data.balance).to.equal(0);
expect(data.totalSent).to.equal(25); expect(data.totalSent).to.equal(25);
done(); done();
@ -450,7 +450,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
console.log(data); //console.log(data);
expect(data.length).equal(1); expect(data.length).equal(1);
expect(data[0].amount).equal(20); expect(data[0].amount).equal(20);
expect(data[0].satoshis).equal(2000000000); expect(data[0].satoshis).equal(2000000000);
@ -479,7 +479,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
console.log(data); //console.log(data);
expect(data.length).to.equal(1); expect(data.length).to.equal(1);
expect(data[0].amount).to.equal(20); expect(data[0].amount).to.equal(20);
expect(data[0].satoshis).to.equal(2000000000); expect(data[0].satoshis).to.equal(2000000000);
@ -513,7 +513,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
console.log(data); //console.log(data);
expect(data.length).to.equal(1); expect(data.length).to.equal(1);
expect(data[0].amount).to.equal(20); expect(data[0].amount).to.equal(20);
expect(data[0].satoshis).to.equal(2000000000); expect(data[0].satoshis).to.equal(2000000000);
@ -538,7 +538,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
console.log(data); //console.log(data);
expect(data.items.length).to.equal(3); expect(data.items.length).to.equal(3);
expect(data.from).to.equal(0); expect(data.from).to.equal(0);
expect(data.to).to.equal(3); expect(data.to).to.equal(3);
@ -571,7 +571,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
console.log(data); //console.log(data);
expect(data.items.length).to.equal(3); expect(data.items.length).to.equal(3);
expect(data.from).to.equal(0); expect(data.from).to.equal(0);
expect(data.to).to.equal(3); expect(data.to).to.equal(3);
@ -599,7 +599,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
var data = JSON.parse(data); data = JSON.parse(data);
expect(data).to.equal(2000000000); expect(data).to.equal(2000000000);
done(); done();
@ -626,7 +626,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
var data = JSON.parse(data); data = JSON.parse(data);
expect(data).to.equal(0); expect(data).to.equal(0);
done(); done();
}); });
@ -650,8 +650,7 @@ describe('Address', function() {
if(err) { if(err) {
return done(err); return done(err);
} }
data = JSON.parse(data);
var data = JSON.parse(data);
expect(data).to.equal(0); expect(data).to.equal(0);
done(); done();
}); });
@ -664,6 +663,7 @@ describe('Address', function() {
var pk1; var pk1;
var tx; var tx;
var utxo; var utxo;
var amt = 0;
async.waterfall([ async.waterfall([
function(next) { function(next) {
@ -678,14 +678,15 @@ describe('Address', function() {
pk1 = new PrivateKey('testnet'); pk1 = new PrivateKey('testnet');
var change = new PrivateKey('testnet'); var change = new PrivateKey('testnet');
var changeAddress = change.toAddress(); var changeAddress = change.toAddress();
amt = utxo.amount * 1e8;
var from = { var from = {
txId: utxo.txid, txId: utxo.txid,
address: utxo.address, address: utxo.address,
script: utxo.scriptPubKey, script: utxo.scriptPubKey,
satoshis: utxo.amount * 1e8, satoshis: amt,
outputIndex: utxo.vout outputIndex: utxo.vout
}; };
tx = new Transaction().from(from).to(pk1.toAddress(), 2500000000).change(changeAddress).sign(pk); tx = new Transaction().from(from).to(pk1.toAddress(), amt - 1000).change(changeAddress).sign(pk);
rpc2.sendRawTransaction(tx.serialize(), next); rpc2.sendRawTransaction(tx.serialize(), next);
}, },
function(res, next) { function(res, next) {
@ -696,11 +697,11 @@ describe('Address', function() {
function(res, next) { function(res, next) {
var tx2 = new Transaction().from({ var tx2 = new Transaction().from({
txId: txid, txId: txid,
satoshis: 2500000000, satoshis: amt - 1000,
outputIndex: 0, outputIndex: 0,
script: tx.outputs[0].script.toHex(), script: tx.outputs[0].script.toHex(),
address: pk1.toAddress() address: pk1.toAddress()
}).to(pk1.toAddress(), 2500000000 - 1000).sign(pk1); }).to(pk1.toAddress(), amt - 2000).sign(pk1);
rpc2.sendRawTransaction(tx2.serialize(), next); rpc2.sendRawTransaction(tx2.serialize(), next);
}, },
function(res, next) { function(res, next) {
@ -734,7 +735,7 @@ describe('Address', function() {
return done(err); return done(err);
} }
console.log(data); //console.log(data);
expect(data.transactions.length).to.equal(2); expect(data.transactions.length).to.equal(2);
done(); done();

View File

@ -28,6 +28,7 @@ var bitcore = require('bitcore-lib');
*/ */
var reorgBlock;
var blocksGenerated = 0; var blocksGenerated = 0;
var rpcConfig = { var rpcConfig = {
@ -322,6 +323,23 @@ var startBitcore = function(callback) {
}; };
var sync100Blocks = function(callback) {
// regtests can generate high numbers of blocks all at one time, but
// the full node may not relay those blocks faithfully. This is a problem
// with the full node and not bitcore. So, generate blocks at a slow rate
async.timesSeries(100, function(n, next) {
rpc2.generate(1, function(err) {
if (err) {
return next(err);
}
setTimeout(function() {
next();
}, 100);
});
}, callback);
};
var performTest = function(callback) { var performTest = function(callback) {
async.series([ async.series([
@ -410,7 +428,7 @@ var performTest = function(callback) {
console.log('step 8: generating 100 blocks on bitcoin 2.'); console.log('step 8: generating 100 blocks on bitcoin 2.');
blocksGenerated += 100; blocksGenerated += 100;
console.log('generating 100 blocks on bitcoin 2.'); console.log('generating 100 blocks on bitcoin 2.');
rpc2.generate(100, next); sync100Blocks(next);
}, },
// 9. let bitcore connect and sync those 100 blocks // 9. let bitcore connect and sync those 100 blocks
function(next) { function(next) {
@ -443,7 +461,13 @@ var performTest = function(callback) {
console.log('step 12: generating one block'); console.log('step 12: generating one block');
// resetting height to 11 // resetting height to 11
blocksGenerated = 11; blocksGenerated = 11;
rpc1.generate(1, next); rpc1.generate(1, function(err, res) {
if(err) {
return next(err);
}
reorgBlock = res.result[0];
next();
});
}, },
// 13. let bitcore sync that block and reorg back to it // 13. let bitcore sync that block and reorg back to it
function(next) { function(next) {
@ -464,13 +488,19 @@ describe('Reorg', function() {
this.timeout(60000); this.timeout(60000);
after(function(done) { after(function(done) {
shutdownBitcoind(done); shutdownBitcore(function() {
shutdownBitcoind(done);
});
}); });
it('should reorg correctly when starting and a reorg happen whilst shutdown', function(done) { it('should reorg correctly when starting and a reorg happen whilst shutdown', function(done) {
performTest(function(err) { performTest(function(err) {
return done();
if(err) {
return done(err);
}
var httpOpts = { var httpOpts = {
hostname: 'localhost', hostname: 'localhost',
port: 53001, port: 53001,
@ -488,6 +518,7 @@ describe('Reorg', function() {
} }
console.log(data); console.log(data);
expect(data.height).to.equal(11);
done(); done();
}); });