Files
tubestation/testing/xpcshell/node-spdy/test/unit/parser-test.js

92 lines
2.7 KiB
JavaScript

var assert = require('assert'),
spdy = require('../../'),
Buffer = require('buffer').Buffer;
suite('A Parser of SPDY module', function() {
var parser;
setup(function() {
var deflate = spdy.utils.createDeflate(),
inflate = spdy.utils.createInflate();
parser = new spdy.parser.create(deflate, inflate);
});
test('should wait for headers initially', function() {
assert.equal(parser.waiting, 8);
});
test('should update buffered property once given < 8 bytes', function() {
parser.write(new Buffer(5));
assert.equal(parser.buffered, 5);
});
test('given SYN_STREAM header should start waiting for body', function() {
parser.write(new Buffer([
0x80, 0x02, 0x00, 0x01, // Control frame, version, type (SYN_STREAM)
0x00, 0x00, 0x12, 0x34
]));
assert.equal(parser.waiting, 0x1234);
assert.equal(parser.state.type, 'frame-body');
assert.ok(parser.state.header.control);
assert.equal(parser.state.header.flags, 0);
assert.equal(parser.state.header.length, 0x1234);
});
test('given DATA header should start waiting for body', function() {
parser.write(new Buffer([
0x00, 0x00, 0x00, 0x01, // Data frame, stream ID
0x00, 0x00, 0x12, 0x34
]));
assert.equal(parser.waiting, 0x1234);
assert.equal(parser.state.type, 'frame-body');
assert.ok(!parser.state.header.control);
assert.equal(parser.state.header.id, 1);
assert.equal(parser.state.header.flags, 0);
assert.equal(parser.state.header.length, 0x1234);
});
test('given chunked header should not fail', function() {
parser.write(new Buffer([
0x80, 0x02, 0x00, 0x01 // Control frame, version, type (SYN_STREAM)
]));
assert.equal(parser.buffered, 4);
parser.write(new Buffer([
0x00, 0x00, 0x12, 0x34
]));
assert.equal(parser.buffered, 0);
assert.equal(parser.waiting, 0x1234);
assert.equal(parser.state.type, 'frame-body');
assert.ok(parser.state.header.control);
assert.equal(parser.state.header.flags, 0);
assert.equal(parser.state.header.length, 0x1234);
});
test('given header and body should emit `frame`', function(done) {
parser.on('frame', function(frame) {
assert.ok(frame.type === 'DATA');
assert.equal(frame.id, 1);
assert.equal(frame.data.length, 4);
assert.equal(frame.data[0], 0x01);
assert.equal(frame.data[1], 0x02);
assert.equal(frame.data[2], 0x03);
assert.equal(frame.data[3], 0x04);
done();
});
parser.write(new Buffer([
0x00, 0x00, 0x00, 0x01, // Data frame, stream ID
0x00, 0x00, 0x00, 0x04,
0x01, 0x02, 0x03, 0x04 // Body
]));
// Waits for next frame
assert.equal(parser.waiting, 8);
assert.equal(parser.state.type, 'frame-head');
});
});