You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.4 KiB
125 lines
3.4 KiB
var common = require('../../common');
|
|
var test = require('utest');
|
|
var assert = require('assert');
|
|
var Parser = require(common.lib + '/protocol/Parser');
|
|
|
|
function packet(bytes) {
|
|
var buffer = new Buffer(bytes);
|
|
var parser = new Parser();
|
|
|
|
parser.append(buffer);
|
|
|
|
return parser;
|
|
}
|
|
|
|
test('Parser', {
|
|
"parseBuffer: buffer won\'t change after appending another one": function() {
|
|
var startBuffer = new Buffer(5);
|
|
startBuffer.fill('a');
|
|
|
|
var parser = new Parser();
|
|
parser.append(startBuffer);
|
|
|
|
var value = parser.parseBuffer(4);
|
|
|
|
assert.equal(value.toString(), 'aaaa');
|
|
|
|
parser.append(new Buffer('b'));
|
|
|
|
assert.equal(value.toString(), 'aaaa');
|
|
},
|
|
|
|
'parseUnsignedNumber: 1 byte': function() {
|
|
var value = packet([5]).parseUnsignedNumber(1);
|
|
assert.equal(value, 5);
|
|
},
|
|
|
|
'parseUnsignedNumber: 2 bytes': function() {
|
|
var value = packet([1, 1]).parseUnsignedNumber(2);
|
|
assert.equal(value, 256 + 1);
|
|
},
|
|
|
|
'parseUnsignedNumber: honors offsets': function() {
|
|
var parser = packet([1, 2]);
|
|
assert.equal(parser.parseUnsignedNumber(1), 1);
|
|
assert.equal(parser.parseUnsignedNumber(1), 2);
|
|
},
|
|
|
|
'parseLengthCodedNumber: 1 byte': function() {
|
|
var parser = packet([250]);
|
|
assert.strictEqual(parser.parseLengthCodedNumber(), 250);
|
|
},
|
|
|
|
'parseLengthCodedNumber: 251 = null': function() {
|
|
var parser = packet([251]);
|
|
assert.strictEqual(parser.parseLengthCodedNumber(), null);
|
|
},
|
|
|
|
'parseLengthCodedNumber: 252 = 16 bit': function() {
|
|
var parser = packet([252, 2, 1]);
|
|
var expected =
|
|
2 * Math.pow(256, 0) +
|
|
1 * Math.pow(256, 1);
|
|
assert.strictEqual(parser.parseLengthCodedNumber(), expected);
|
|
},
|
|
|
|
'parseLengthCodedNumber: 253 = 24 bit': function() {
|
|
var parser = packet([253, 3, 2, 1]);
|
|
var expected =
|
|
3 * Math.pow(256, 0) +
|
|
2 * Math.pow(256, 1) +
|
|
1 * Math.pow(256, 2);
|
|
|
|
assert.strictEqual(parser.parseLengthCodedNumber(), expected);
|
|
},
|
|
|
|
'parseLengthCodedNumber: 254 = 64 bit': function() {
|
|
var parser = packet([254, 8, 7, 6, 5, 4, 3, 2, 0]);
|
|
var expected =
|
|
8 * Math.pow(256, 0) +
|
|
7 * Math.pow(256, 1) +
|
|
6 * Math.pow(256, 2) +
|
|
5 * Math.pow(256, 3) +
|
|
4 * Math.pow(256, 4) +
|
|
3 * Math.pow(256, 5) +
|
|
2 * Math.pow(256, 6) +
|
|
0 * Math.pow(256, 7);
|
|
|
|
assert.strictEqual(parser.parseLengthCodedNumber(), expected);
|
|
},
|
|
|
|
'parseLengthCodedNumber: < 53 bit = no problemo': function() {
|
|
var parser = packet([254, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00]);
|
|
assert.strictEqual(parser.parseLengthCodedNumber(), Math.pow(2, 53) - 1);
|
|
},
|
|
|
|
'parseLengthCodedNumber: 53 bit = Error': function() {
|
|
var parser = packet([254, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00]);
|
|
assert.throws(function() {
|
|
parser.parseLengthCodedNumber();
|
|
}, /precision/i);
|
|
},
|
|
|
|
'parseLengthCodedNumber: 255 = Error': function() {
|
|
var parser = packet([255]);
|
|
assert.throws(function() {
|
|
parser.parseLengthCodedNumber();
|
|
}, /unexpected/i);
|
|
},
|
|
|
|
'parsePacketTerminatedString: regular case': function() {
|
|
var parser = packet([0x48, 0x69]);
|
|
parser._packetEnd = 2;
|
|
|
|
var str = parser.parsePacketTerminatedString();
|
|
assert.equal(str, 'Hi');
|
|
},
|
|
|
|
'parsePacketTerminatedString: 0x00 terminated': function() {
|
|
var parser = packet([0x48, 0x69, 0x00]);
|
|
parser._packetEnd = 2;
|
|
|
|
var str = parser.parsePacketTerminatedString();
|
|
assert.equal(str, 'Hi');
|
|
},
|
|
});
|