compact: more compact block tests.

This commit is contained in:
Christopher Jeffrey 2016-08-25 20:47:24 -07:00
parent 902fa59ca9
commit acdd9c0a8a
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
3 changed files with 89 additions and 0 deletions

View File

@ -10,6 +10,8 @@ var block300025 = require('./data/block300025.json');
var fs = require('fs');
var cmpct = fs.readFileSync(__dirname + '/data/compactblock.hex', 'utf8').trim().split('\n');
var bip152 = require('../lib/net/bip152');
var cmpct2 = fs.readFileSync(__dirname + '/data/cmpct2', 'utf8').trim();
var cmpct2block = fs.readFileSync(__dirname + '/data/cmpct2.bin');
describe('Block', function() {
var mblock = bcoin.merkleblock({
@ -292,4 +294,90 @@ describe('Block', function() {
cb();
});
it('should handle compact block', function(cb) {
var cblock = bip152.CompactBlock.fromRaw(cmpct2, 'hex');
var block = bcoin.block.fromRaw(cmpct2block);
var cblock2 = bip152.CompactBlock.fromBlock(block, cblock.keyNonce);
var map = {};
assert.equal(cblock.toRaw().toString('hex'), cmpct2);
assert.equal(cblock2.toRaw().toString('hex'), cmpct2);
for (var i = 0; i < block.txs.length; i++) {
var tx = block.txs[i];
map[tx.hash('hex')] = tx;
}
var fakeMempool = {
getSnapshot: function(callback) {
return Object.keys(map);
},
getTX: function(hash, callback) {
return map[hash];
}
};
//assert.equal(cblock.sid(block.txs[1].hash()), 125673511480291);
var result = cblock.fillMempool(fakeMempool);
assert(result);
for (var i = 0; i < cblock.available.length; i++)
assert(cblock.available[i]);
assert.equal(cblock.toBlock().toRaw().toString('hex'), block.toRaw().toString('hex'));
cb();
});
it('should handle half-full compact block', function(cb) {
var cblock = bip152.CompactBlock.fromRaw(cmpct2, 'hex');
var block = bcoin.block.fromRaw(cmpct2block);
var cblock2 = bip152.CompactBlock.fromBlock(block, cblock.keyNonce);
var map = {};
assert.equal(cblock.toRaw().toString('hex'), cmpct2);
assert.equal(cblock2.toRaw().toString('hex'), cmpct2);
for (var i = 0; i < block.txs.length; i++) {
var tx = block.txs[i];
map[tx.hash('hex')] = tx;
}
var mid = block.txs.length >>> 1;
var keys = Object.keys(map).slice(0, mid);
var fakeMempool = {
getSnapshot: function(callback) {
return keys;
},
getTX: function(hash, callback) {
return map[hash];
}
};
//assert.equal(cblock.sid(block.txs[1].hash()), 125673511480291);
var result = cblock.fillMempool(fakeMempool);
assert(!result);
var req = cblock.toRequest();
assert.equal(req.hash, cblock.hash('hex'));
//assert.deepEqual(req.indexes, [5, 6, 7, 8, 9]);
req = bip152.TXRequest.fromRaw(req.toRaw());
assert.equal(req.hash, cblock.hash('hex'));
//assert.deepEqual(req.indexes, [5, 6, 7, 8, 9]);
var res = bip152.TXResponse.fromBlock(block, req);
res = bip152.TXResponse.fromRaw(res.toRaw());
var result = cblock.fillMissing(res);
assert(result);
for (var i = 0; i < cblock.available.length; i++)
assert(cblock.available[i]);
assert.equal(cblock.toBlock().toRaw().toString('hex'), block.toRaw().toString('hex'));
cb();
});
});

1
test/data/cmpct2 Normal file

File diff suppressed because one or more lines are too long

BIN
test/data/cmpct2.bin Normal file

Binary file not shown.