flocore-node/test/services/header/encoding.unit.js
2017-09-26 11:05:24 -04:00

93 lines
3.0 KiB
JavaScript

'use strict';
var should = require('chai').should();
var Encoding = require('../../../lib/services/header/encoding');
describe('Header service encoding', function() {
var servicePrefix = new Buffer('0000', 'hex');
var hashPrefix = new Buffer('00', 'hex');
var heightPrefix = new Buffer('01', 'hex');
var encoding = new Encoding(servicePrefix);
var hash = '91b58f19b6eecba94ed0f6e463e8e334ec0bcda7880e2985c82a8f32e4d03add';
var hashBuf = new Buffer(hash, 'hex');
var header = {
hash: hash,
prevHash: '91b58f19b6eecba94ed0f6e463e8e334ec0bcda7880e2985c82a8f32e4d03ade',
version: 0x2000012,
merkleRoot: '91b58f19b6eecba94ed0f6e463e8e334ec0bcda7880e2985c82a8f32e4d03adf',
timestamp: 1E9,
bits: 400000,
nonce: 123456,
height: 123,
chainwork: '0000000000000000000000000000000000000000000000000000000200020002',
nextHash: '91b58f19b6eecba94ed0f6e463e8e334ec0bcda7880e2985c82a8f32e4d03ade'
};
var versionBuf = new Buffer(4);
var prevHashBuf = new Buffer(header.prevHash, 'hex');
var nextHashBuf = new Buffer(header.nextHash, 'hex');
var merkleRootBuf = new Buffer(header.merkleRoot, 'hex');
var tsBuf = new Buffer(4);
var bitsBuf = new Buffer(4);
var nonceBuf = new Buffer(4);
var heightBuf = new Buffer(4);
var chainBuf = new Buffer('0000000000000000000000000000000000000000000000000000000200020002', 'hex');
heightBuf.writeUInt32BE(header.height);
it('should encode header hash key' , function() {
encoding.encodeHeaderHashKey(hash).should.deep.equal(Buffer.concat([servicePrefix, hashPrefix, hashBuf]));
});
it('should decode header hash key', function() {
encoding.decodeHeaderHashKey(Buffer.concat([servicePrefix, hashPrefix, hashBuf]))
.should.deep.equal(hash);
});
it('should encode header height key' , function() {
encoding.encodeHeaderHeightKey(header.height).should.deep.equal(Buffer.concat([servicePrefix, heightPrefix, heightBuf]));
});
it('should decode header height key', function() {
encoding.decodeHeaderHeightKey(Buffer.concat([servicePrefix, heightPrefix, heightBuf]))
.should.deep.equal(header.height);
});
it('should encode header value', function() {
var prevHashBuf = new Buffer(header.prevHash, 'hex');
versionBuf.writeInt32BE(header.version); // signed
tsBuf.writeUInt32BE(header.timestamp);
bitsBuf.writeUInt32BE(header.bits);
nonceBuf.writeUInt32BE(header.nonce);
heightBuf.writeUInt32BE(header.height);
encoding.encodeHeaderValue(header).should.deep.equal(Buffer.concat([
hashBuf,
versionBuf,
prevHashBuf,
merkleRootBuf,
tsBuf,
bitsBuf,
nonceBuf,
heightBuf,
chainBuf,
nextHashBuf
]));
});
it('should decode header value', function() {
encoding.decodeHeaderValue(Buffer.concat([
hashBuf,
versionBuf,
prevHashBuf,
merkleRootBuf,
tsBuf,
bitsBuf,
nonceBuf,
heightBuf,
chainBuf,
nextHashBuf
])).should.deep.equal(header);
});
});