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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 var assert = require('assert'),
     2     spdy = require('../../'),
     3     Buffer = require('buffer').Buffer;
     5 suite('A Parser of SPDY module', function() {
     6   var parser;
     8   [2,3].forEach(function(version) {
     9     suite('version ' +  version, function() {
    10       setup(function() {
    11         var deflate = spdy.utils.createDeflate(version),
    12             inflate = spdy.utils.createInflate(version);
    14         parser = new spdy.parser.create({
    15           socket: {
    16             setNoDelay: function() {}
    17           },
    18           write: function() {}
    19         }, deflate, inflate);
    21         parser.createFramer(version);
    22       });
    24       test('should wait for headers initially', function() {
    25         assert.equal(parser.waiting, 8);
    26       });
    28       test('should update buffered property once given < 8 bytes', function() {
    29         parser.write(new Buffer(5));
    30         assert.equal(parser.buffered, 5);
    31       });
    33       test('given SYN_STREAM header should start waiting for body', function() {
    34         parser.write(new Buffer([
    35           0x80, 0x02, 0x00, 0x01, // Control frame, version, type (SYN_STREAM)
    36           0x00, 0x00, 0x12, 0x34
    37         ]));
    39         assert.equal(parser.waiting, 0x1234);
    40         assert.equal(parser.state.type, 'frame-body');
    41         assert.ok(parser.state.header.control);
    42         assert.equal(parser.state.header.flags, 0);
    43         assert.equal(parser.state.header.length, 0x1234);
    44       });
    46       test('given DATA header should start waiting for body', function() {
    47         parser.write(new Buffer([
    48           0x00, 0x00, 0x00, 0x01, // Data frame, stream ID
    49           0x00, 0x00, 0x12, 0x34
    50         ]));
    52         assert.equal(parser.waiting, 0x1234);
    53         assert.equal(parser.state.type, 'frame-body');
    54         assert.ok(!parser.state.header.control);
    55         assert.equal(parser.state.header.id, 1);
    56         assert.equal(parser.state.header.flags, 0);
    57         assert.equal(parser.state.header.length, 0x1234);
    58       });
    60       test('given chunked header should not fail', function() {
    61         parser.write(new Buffer([
    62           0x80, 0x02, 0x00, 0x01 // Control frame, version, type (SYN_STREAM)
    63         ]));
    64         assert.equal(parser.buffered, 4);
    66         parser.write(new Buffer([
    67           0x00, 0x00, 0x12, 0x34
    68         ]));
    69         assert.equal(parser.buffered, 0);
    71         assert.equal(parser.waiting, 0x1234);
    72         assert.equal(parser.state.type, 'frame-body');
    73         assert.ok(parser.state.header.control);
    74         assert.equal(parser.state.header.flags, 0);
    75         assert.equal(parser.state.header.length, 0x1234);
    76       });
    78       test('given header and body should emit `frame`', function(done) {
    79         parser.on('frame', function(frame) {
    80           assert.ok(frame.type === 'DATA');
    81           assert.equal(frame.id, 1);
    82           assert.equal(frame.data.length, 4);
    83           assert.equal(frame.data[0], 0x01);
    84           assert.equal(frame.data[1], 0x02);
    85           assert.equal(frame.data[2], 0x03);
    86           assert.equal(frame.data[3], 0x04);
    87           done();
    88         });
    90         parser.write(new Buffer([
    91           0x00, 0x00, 0x00, 0x01, // Data frame, stream ID
    92           0x00, 0x00, 0x00, 0x04,
    93           0x01, 0x02, 0x03, 0x04  // Body
    94         ]));
    96         // Waits for next frame
    97         assert.equal(parser.waiting, 8);
    98         assert.equal(parser.state.type, 'frame-head');
    99       });
   100     });
   101   });
   102 });

mercurial