first commit
This commit is contained in:
136
app_vue/node_modules/hpack.js/test/compressor-test.js
generated
vendored
Normal file
136
app_vue/node_modules/hpack.js/test/compressor-test.js
generated
vendored
Normal file
@ -0,0 +1,136 @@
|
||||
var assert = require('assert');
|
||||
var hpack = require('../');
|
||||
var fixtures = require('./fixtures');
|
||||
|
||||
describe('hpack/compressor', function() {
|
||||
var comp;
|
||||
|
||||
beforeEach(function() {
|
||||
comp = hpack.compressor.create({
|
||||
table: {
|
||||
maxSize: 1024
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function expect(arr, enc) {
|
||||
function isNumber(num) {
|
||||
return typeof num === 'number';
|
||||
}
|
||||
|
||||
var out = comp.read().toString('hex');
|
||||
if (Array.isArray(arr) && !arr.every(isNumber)) {
|
||||
arr = arr.map(function(item) {
|
||||
return new Buffer(item, enc);
|
||||
});
|
||||
arr = Buffer.concat(arr);
|
||||
} else {
|
||||
arr = new Buffer(arr, enc);
|
||||
}
|
||||
var actual = arr.toString('hex');
|
||||
assert.equal(out, actual);
|
||||
}
|
||||
|
||||
describe('indexed field', function() {
|
||||
it('should lookup entry from static table', function() {
|
||||
comp.write([{ name: ':method', value: 'GET' }]);
|
||||
expect([ 0b10000000 | 2 ]);
|
||||
});
|
||||
|
||||
it('should fetch entry from the end of the static table', function() {
|
||||
comp.write([{ name: 'www-authenticate', value: '' }]);
|
||||
expect([ 0b10000000 | 61 ]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('literal field', function() {
|
||||
it('should lookup name in the table (incremental)', function() {
|
||||
comp.write([{ name: 'host', value: 'localhost' }]);
|
||||
expect('6686a0e41d139d09', 'hex');
|
||||
|
||||
comp.write([{ name: 'host', value: 'localhost' }]);
|
||||
expect([ 0b10000000 | 62 ]);
|
||||
});
|
||||
|
||||
it('should lookup name in the table (not-incremental)', function() {
|
||||
comp.write([{ name: 'host', value: 'localhost', incremental: false }]);
|
||||
expect('0f1786a0e41d139d09', 'hex');
|
||||
|
||||
// Should not use the table
|
||||
comp.write([{ name: 'host', value: 'localhost' }]);
|
||||
expect('6686a0e41d139d09', 'hex');
|
||||
});
|
||||
|
||||
it('should evict header field from the table', function() {
|
||||
for (var i = 0; i < 1000; i++) {
|
||||
comp.write([{ name: 'host', value: 'localhost' + i }]);
|
||||
comp.read();
|
||||
}
|
||||
|
||||
assert(comp._table.size < comp._table.maxSize);
|
||||
assert.equal(comp._table.dynamic.length, 21);
|
||||
});
|
||||
});
|
||||
|
||||
describe('update size', function() {
|
||||
it('should evict header field from the table', function() {
|
||||
comp.write([{ name: 'host', value: 'localhost' }]);
|
||||
expect('6686a0e41d139d09', 'hex');
|
||||
|
||||
comp.reset();
|
||||
|
||||
// update=0, update=maxSize
|
||||
expect('203fe107', 'hex');
|
||||
|
||||
comp.write([{ name: 'host', value: 'localhost' }]);
|
||||
expect('6686a0e41d139d09', 'hex');
|
||||
});
|
||||
|
||||
it('should send dynamic update if size >= protocolMaxSize', function() {
|
||||
comp.updateTableSize(Infinity);
|
||||
|
||||
// update=maxSize
|
||||
expect('3fe107', 'hex');
|
||||
});
|
||||
});
|
||||
|
||||
describe('spec examples', function() {
|
||||
beforeEach(function() {
|
||||
comp = hpack.compressor.create({
|
||||
table: {
|
||||
maxSize: 256
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var tests = fixtures.specExamples;
|
||||
|
||||
tests.forEach(function(test, i) {
|
||||
var prev = tests[i - 1];
|
||||
it('should give expected output on ' + test.id, function() {
|
||||
var startFrom = test.continuation ? prev.comp : comp;
|
||||
if (!startFrom)
|
||||
throw new Error('Previous test failed');
|
||||
comp = startFrom;
|
||||
|
||||
comp.write(test.output.map(function(pair) {
|
||||
return { name: pair[0], value: pair[1], huffman: test.huffman };
|
||||
}));
|
||||
expect(test.input.replace(/ /g, ''), 'hex');
|
||||
|
||||
// Verify table contents
|
||||
assert.deepEqual(comp._table.dynamic.map(function(header) {
|
||||
return [ header.name, header.value, header.totalSize ];
|
||||
}).reverse(), test.table);
|
||||
|
||||
// Verify table size
|
||||
var expectedSize = test.table.reduce(function(acc, item) {
|
||||
return acc + item[2];
|
||||
}, 0);
|
||||
assert.equal(comp._table.size, expectedSize);
|
||||
|
||||
test.comp = comp;
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user