73 lines
2.1 KiB
JavaScript
73 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
var expect = require('chai').expect;
|
|
var BlockService = require('../../../lib/services/block');
|
|
var LRU = require('lru-cache');
|
|
|
|
describe('Block Service', function() {
|
|
|
|
var blockService;
|
|
|
|
beforeEach(function() {
|
|
blockService = new BlockService({ node: { services: []}});
|
|
blockService._chainTips = LRU(50);
|
|
});
|
|
|
|
|
|
describe('Chain Tips', function() {
|
|
it('should merge blocks into chain tips using active chain blocks only' , function() {
|
|
|
|
var blocks = ['aa','bb','cc','dd','ee'];
|
|
|
|
blocks.forEach(function(n, index) {
|
|
|
|
var buf = new Buffer('00', 'hex');
|
|
if (index) {
|
|
buf = new Buffer(blocks[index-1], 'hex');
|
|
}
|
|
|
|
var block = { header: { prevHash: buf }, hash: n };
|
|
blockService._mergeBlockIntoChainTips(block);
|
|
});
|
|
|
|
expect(blockService._chainTips.length).to.equal(1);
|
|
expect(blockService._chainTips.get('ee')).to.deep.equal(['dd', 'cc', 'bb', 'aa', '00']);
|
|
});
|
|
|
|
it('should merge blocks into chain tips using out of order blocks' , function() {
|
|
|
|
var blocks = ['ee','aa','bb','dd','cc'];
|
|
var prevBlocks = ['dd','00','aa','cc','bb'];
|
|
|
|
blocks.forEach(function(n, index) {
|
|
var block = { header: { prevHash: new Buffer(prevBlocks[index], 'hex') }, hash: n };
|
|
blockService._mergeBlockIntoChainTips(block);
|
|
});
|
|
|
|
|
|
expect(blockService._chainTips.length).to.equal(1);
|
|
expect(blockService._chainTips.get('ee')).to.deep.equal(['dd', 'cc', 'bb', 'aa', '00']);
|
|
});
|
|
|
|
it('should merge chain tips where there is a fork (a parent block has more than one child)' , function() {
|
|
|
|
var blocks = ['aa','bb','cc','dd','ee'];
|
|
var prevBlocks = ['00','aa','aa','cc','dd'];
|
|
|
|
blocks.forEach(function(n, index) {
|
|
var block = { header: { prevHash: new Buffer(prevBlocks[index], 'hex') }, hash: n };
|
|
blockService._mergeBlockIntoChainTips(block);
|
|
});
|
|
|
|
|
|
expect(blockService._chainTips.length).to.equal(2);
|
|
expect(blockService._chainTips.get('ee')).to.deep.equal(['dd', 'cc', 'aa', '00']);
|
|
});
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|