source: trip-planner-front/node_modules/hpack.js/test/decoder-test.js@ 6a80231

Last change on this file since 6a80231 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 5.2 KB
RevLine 
[6a3a178]1var assert = require('assert');
2var hpack = require('../');
3
4describe('hpack/decoder', function() {
5 var decoder;
6
7 beforeEach(function() {
8 decoder = hpack.decoder.create();
9 });
10
11 describe('bit', function() {
12 it('should decode number bit-by-bit', function() {
13 decoder.push([ 0b11101010, 0b10101111 ]);
14 var out = '';
15 for (var i = 0; i < 16; i++)
16 out += decoder.decodeBit();
17 assert.equal(out, '11101010' + '10101111');
18 });
19 });
20
21 describe('integer', function() {
22 it('should decode 10 in prefix-5 (C.1.1)', function() {
23 decoder.push([ 0b11101010 ]);
24 decoder.skipBits(3);
25 assert.equal(decoder.decodeInt(), 10);
26 });
27
28 it('should decode 1337 in prefix-5 (C.1.2)', function() {
29 decoder.push([ 0b11111111, 0b10011010, 0b00001010 ]);
30 decoder.skipBits(3);
31 assert.equal(decoder.decodeInt(), 1337);
32 });
33
34 it('should decode 42 at octect boundary (C.1.3)', function() {
35 decoder.push([ 0b00101010 ]);
36 assert.equal(decoder.decodeInt(8), 42);
37 });
38
39 it('should throw on empty input', function() {
40 assert.throws(function() {
41 decoder.decodeInt();
42 });
43 });
44
45 it('should throw on incomplete int', function() {
46 decoder.push([ 0b11111111, 0b10011010 ]);
47 decoder.skipBits(3);
48 assert.throws(function() {
49 decoder.decodeInt();
50 });
51 });
52
53 it('should throw on overflowing int', function() {
54 decoder.push([
55 0b11111111,
56 0b10011010,
57 0b10011010,
58 0b10011010,
59 0b10011010,
60 0b10011010
61 ]);
62 decoder.skipBits(3);
63 assert.throws(function() {
64 decoder.decodeInt();
65 });
66 });
67 });
68
69 describe('string', function() {
70 it('should decode literal from (C.2.1)', function() {
71 decoder.push([ 0x0a ]);
72 decoder.push(new Buffer('custom-key'));
73
74 assert.equal(decoder.decodeStr().toString(), 'custom-key');
75 });
76
77 it('should decode literal from (C.4.1)', function() {
78 decoder.push(new Buffer(
79 '8c' +
80 'f1e3 c2e5 f23a 6ba0 ab90 f4ff'.replace(/ /g, ''),
81 'hex'));
82
83 assert.equal(new Buffer(decoder.decodeStr()).toString(),
84 'www.example.com');
85 });
86
87 it('should decode literal from (C.4.2)', function() {
88 decoder.push(new Buffer(
89 '86' +
90 'a8eb 1064 9cbf'.replace(/ /g, ''),
91 'hex'));
92
93 assert.equal(new Buffer(decoder.decodeStr()).toString(), 'no-cache');
94 });
95
96 it('should decode literal from (C.4.3) #1', function() {
97 decoder.push(new Buffer(
98 '88' +
99 '25a8 49e9 5ba9 7d7f'.replace(/ /g, ''),
100 'hex'));
101
102 assert.equal(new Buffer(decoder.decodeStr()).toString(), 'custom-key');
103 });
104
105 it('should decode literal from (C.4.3) #2', function() {
106 decoder.push(new Buffer(
107 '89' +
108 '25a8 49e9 5bb8 e8b4 bf'.replace(/ /g, ''),
109 'hex'));
110
111 assert.equal(new Buffer(decoder.decodeStr()).toString(), 'custom-value');
112 });
113
114 it('should decode literal from (C.6.1) #1', function() {
115 decoder.push(new Buffer(
116 ('96' +
117 'd07a be94 1054 d444 a820 0595 040b 8166' +
118 'e082 a62d 1bff').replace(/ /g, ''),
119 'hex'));
120
121 assert.equal(new Buffer(decoder.decodeStr()).toString(),
122 'Mon, 21 Oct 2013 20:13:21 GMT');
123 });
124
125 it('should decode literal from (C.6.1) #2', function() {
126 decoder.push(new Buffer(
127 ('91' +
128 '9d29 ad17 1863 c78f 0b97 c8e9 ae82 ae43' +
129 'd3').replace(/ /g, ''),
130 'hex'));
131 assert.equal(new Buffer(decoder.decodeStr()).toString(),
132 'https://www.example.com');
133 });
134
135 it('should decode many 5 bit chars', function() {
136 // e = 00101, 0x294A5294A5 = 00101 x 8
137 decoder.push(new Buffer('85294A5294A5', 'hex'));
138 assert.equal(new Buffer(decoder.decodeStr()).toString(), 'eeeeeeee');
139 });
140
141 it('should decode many 5 bit chars with 3-bit EOS', function() {
142 // e = 00101, EOS=111,
143 // 0x294A5294A52F = 00101 x 9 + 111
144 decoder.push(new Buffer('86294A5294A52F', 'hex'));
145 assert.equal(new Buffer(decoder.decodeStr()).toString(), 'eeeeeeeee');
146 });
147
148 it('should decode many 5 bit chars with 2-bit EOS', function() {
149 // e = 00101, EOS=11,
150 // 0x294A5297 = 00101 x 6 + 11
151 decoder.push(new Buffer('84294A5297', 'hex'));
152 assert.equal(new Buffer(decoder.decodeStr()).toString(), 'eeeeee');
153 });
154
155 it('should decode many multi-octet chars', function() {
156 decoder.push(new Buffer(
157 '97ffffb1ffff63fffec7fffd8ffffb1ffff63fffec7fffd8',
158 'hex'));
159 assert.deepEqual(decoder.decodeStr(), [
160 1, 1, 1, 1, 1, 1, 1, 1
161 ]);
162 });
163
164 it('should fail on 8 bit EOS', function() {
165 // e = 00101, 0x294A5294A5 = 00101 x 8
166 decoder.push(new Buffer('86294A5294A5ff', 'hex'));
167 assert.throws(function() {
168 decoder.decodeStr();
169 });
170 });
171
172 it('should fail on invalid 2-bit EOS', function() {
173 // e = 00101, EOS=10,
174 // 0x294A5297 = 00101 x 6 + 11
175 decoder.push(new Buffer('84294A5296', 'hex'));
176 assert.throws(function() {
177 decoder.decodeStr();
178 });
179 });
180 });
181});
Note: See TracBrowser for help on using the repository browser.