UNPKG

fast-protocol

Version:

FAST streaming protocol for Node.js (Encoder/Decoder for Javascript) (FAST protocol version 1.1)

218 lines (189 loc) 6.2 kB
var fastStream = require('./index.js') var diff = require('deep-diff') var Long = require('long') var logDebug = false function toHexString(byteArray) { var s = '' byteArray.forEach(function(byte) { s += ('0' + (byte & 0xFF).toString(16)).slice(-2) + ' ' }) return s } function join(array) { var s = '' array.forEach(function(token) { s += (token === parseInt(token, 10)) ? '[' + token + ']' : (s.length ? '.' : '') + token }) return s } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // - encode provided messages // - decode encoded binary buffer // - compare excepted and encoded message // - print out differences if exists // ////////////////////////////////////////////////////////////////////////////////////////////////////////////// function testCodec(messages) { var buffer = [] // encode messages ony by one var encoder = new fastStream.Encoder('test.xml') for (var i = 0; i < messages.length; ++i) { if (logDebug) console.log('Input message:', messages[i].msg) buffer = buffer.concat(encoder.encode(messages[i].name, messages[i].msg)) } if (logDebug) console.log('\n', toHexString(buffer), '\n') // decode buffer var decoder = new fastStream.Decoder('test.xml') var i = 0 decoder.decode(buffer, function(msg, name) { if (logDebug) console.log('Output message:', msg) var differences = diff(messages[i].msg, msg) if (differences != null) { for (var d = 0; d < differences.length; ++d) { switch (differences[d].kind) { case 'N': // indicates a newly added property/element console.log('Error: Additional property found:', messages[i].name, '.', join(differences[d].path)) break case 'D': // indicates a property/element was deleted console.log('Error: Property ', messages[i].name, '.', join(differences[d].path), 'missing') break case 'E': // indicates a property/element was changed console.log('Error: Property value', messages[i].name, '.', join(differences[d].path), 'differs:', differences[d].lhs, '<>', differences[d].rhs) break case 'A': // indicates a change occurred within an array console.log('Error: Array content ', messages[i].name, '.', join(differences[d].path), 'differs:', differences[d].lhs, '<>', differences[d].rhs) break } } throw new Error('Decoded message does not match expected message') } //console.log('Info: ', messages[i].name, 'passed test') ++i //assert.deepEqual(messages[i].msg, msg, differences) /* if (JSON.stringify(messages[i++].msg) !== JSON.stringify(msg)) { console.log('Output message:', msg) console.log('Expected message:', messages[i-1].msg) throw new Error('Decoded message does not match input message') }*/ }) } console.log('\n'.repeat(30)) console.log('Start testing fast-protocol encode/decode') var u32_ranges = [ {start: 0, end: 150}, {start: 1024, end: 16400}, {start: 2097100, end: 2097500}, {start: 1073741820, end: 1073741900}, {start: 2147483640, end: 2147483660}, {start: 4294967280, end: 4294967295}, ] u32_ranges.forEach(function(range) { console.log('Start unsigned 32 range', range.start, range.end) for (var i = range.start; i <= range.end; ++i) { testCodec([{ name: "UInt32EncodingTestMessage", msg: { MandatoryUInt32: i } }]) if (!(i % 1000)) { console.log('Unsigned 32 loop #', i) } } }) var s32_ranges = [ {start: -2147483648, end: -2147483600}, {start: -2024, end: 2024}, {start: 2147483500, end: 2147483647}, ] s32_ranges.forEach(function(range) { console.log('Start signed 32 range', range.start, range.end) for (var i = range.start; i <= range.end; ++i) { testCodec([{ name: "Int32EncodingTestMessage", msg: { MandatoryInt32: i } }]) if (!(i % 1000)) { console.log('Signed 32 loop #', i) } } }) // var u64_ranges = [ {start: "0", end: "150"}, {start: "1000", end: "3400"}, {start: "15000", end: "16400"}, {start: "2097100", end: "2097500"}, {start: "1073741820", end: "1073741900"}, {start: "2147483640", end: "2147483660"}, {start: "4294967280", end: "4294967295"}, {start: "18446744073709551600", end: "18446744073709551614"}, ] u64_ranges.forEach(function(range) { console.log('Start unsigned 64 range', range.start, range.end) var end = Long.fromString(range.end, true) for (var i = Long.fromString(range.start, true); i.lessThanOrEqual(end); i = i.add(Long.UONE)) { testCodec([{ name: "UInt64EncodingTestMessage", msg: { MandatoryUInt64: i.toString(10) } }]) if ((i.modulo(1000).equals(Long.UZERO))) { console.log('Unsigned 64 loop #', i.toString(10)) } } }) var s64_ranges = [ {start: "-9223372036854775808", end: "-9223372036854775800"}, {start: "-1", end: "1"}, {start: "-2147483648", end: "-2147483600"}, {start: "-2024", end: "2024"}, {start: "2147483500", end: "2147483647"}, {start: "9223372036854775800", end: "9223372036854775806"}, ] s64_ranges.forEach(function(range) { console.log('Start signed 64 range', range.start, range.end) var end = Long.fromString(range.end) for (var i = Long.fromString(range.start); i.lessThanOrEqual(end); i = i.add(Long.ONE)) { //console.log('TEST S64:', i.toString(10), i.toString(16)) testCodec([{ name: "Int64EncodingTestMessage", msg: { MandatoryInt64: i.toString(10) } }]) if (i.modulo(1000).equals(Long.ZERO)) { console.log('Signed 64 loop #', i.toString(10)) } } }) /* for (var i = 0; i < 4294967295; ++i) { testCodec([{ name: "UInt32EncodingTestMessage", msg: { MandatoryUInt32: i } }]) if (!(i % 1000)) { console.log('Unsigned loop #', i) } } for (var i = -2147483648; i < 2147483647; ++i) { testCodec([{ name: "Int32EncodingTestMessage", msg: { MandatoryInt32: i } }]) if (!(i % 1000)) { console.log('Signed loop #', i) } } */ console.log('Test done.')