flocore-node/test/services/block/index.unit.js
Chris Kleeschulte 73687b36cf wip
2017-06-26 08:46:32 -04:00

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']);
});
});
});