comunicationLeap/node_modules/ws/test/Receiver.test.js
node_modules/ws/test/Receiver.test.jsRaw
1var assert = require('assert')
2 , Receiver = require('../lib/Receiver');
3require('should');
4require('./hybi-common');
5
6describe('Receiver', function() {
7 it('can parse unmasked text message', function() {
8 var p = new Receiver();
9 var packet = '81 05 48 65 6c 6c 6f';
10
11 var gotData = false;
12 p.ontext = function(data) {
13 gotData = true;
14 assert.equal('Hello', data);
15 };
16
17 p.add(getBufferFromHexString(packet));
18 gotData.should.be.ok;
19 });
20 it('can parse close message', function() {
21 var p = new Receiver();
22 var packet = '88 00';
23
24 var gotClose = false;
25 p.onclose = function(data) {
26 gotClose = true;
27 };
28
29 p.add(getBufferFromHexString(packet));
30 gotClose.should.be.ok;
31 });
32 it('can parse masked text message', function() {
33 var p = new Receiver();
34 var packet = '81 93 34 83 a8 68 01 b9 92 52 4f a1 c6 09 59 e6 8a 52 16 e6 cb 00 5b a1 d5';
35
36 var gotData = false;
37 p.ontext = function(data) {
38 gotData = true;
39 assert.equal('5:::{"name":"echo"}', data);
40 };
41
42 p.add(getBufferFromHexString(packet));
43 gotData.should.be.ok;
44 });
45 it('can parse a masked text message longer than 125 bytes', function() {
46 var p = new Receiver();
47 var message = 'A';
48 for (var i = 0; i < 300; ++i) message += (i % 5).toString();
49 var packet = '81 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
50
51 var gotData = false;
52 p.ontext = function(data) {
53 gotData = true;
54 assert.equal(message, data);
55 };
56
57 p.add(getBufferFromHexString(packet));
58 gotData.should.be.ok;
59 });
60 it('can parse a really long masked text message', function() {
61 var p = new Receiver();
62 var message = 'A';
63 for (var i = 0; i < 64*1024; ++i) message += (i % 5).toString();
64 var packet = '81 FF ' + pack(16, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
65
66 var gotData = false;
67 p.ontext = function(data) {
68 gotData = true;
69 assert.equal(message, data);
70 };
71
72 p.add(getBufferFromHexString(packet));
73 gotData.should.be.ok;
74 });
75 it('can parse a fragmented masked text message of 300 bytes', function() {
76 var p = new Receiver();
77 var message = 'A';
78 for (var i = 0; i < 300; ++i) message += (i % 5).toString();
79 var msgpiece1 = message.substr(0, 150);
80 var msgpiece2 = message.substr(150);
81 var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
82 var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
83
84 var gotData = false;
85 p.ontext = function(data) {
86 gotData = true;
87 assert.equal(message, data);
88 };
89
90 p.add(getBufferFromHexString(packet1));
91 p.add(getBufferFromHexString(packet2));
92 gotData.should.be.ok;
93 });
94 it('can parse a ping message', function() {
95 var p = new Receiver();
96 var message = 'Hello';
97 var packet = '89 ' + getHybiLengthAsHexString(message.length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
98
99 var gotPing = false;
100 p.onping = function(data) {
101 gotPing = true;
102 assert.equal(message, data);
103 };
104
105 p.add(getBufferFromHexString(packet));
106 gotPing.should.be.ok;
107 });
108 it('can parse a ping with no data', function() {
109 var p = new Receiver();
110 var packet = '89 00';
111
112 var gotPing = false;
113 p.onping = function(data) {
114 gotPing = true;
115 };
116
117 p.add(getBufferFromHexString(packet));
118 gotPing.should.be.ok;
119 });
120 it('can parse a fragmented masked text message of 300 bytes with a ping in the middle', function() {
121 var p = new Receiver();
122 var message = 'A';
123 for (var i = 0; i < 300; ++i) message += (i % 5).toString();
124
125 var msgpiece1 = message.substr(0, 150);
126 var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
127
128 var pingMessage = 'Hello';
129 var pingPacket = '89 ' + getHybiLengthAsHexString(pingMessage.length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68'));
130
131 var msgpiece2 = message.substr(150);
132 var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
133
134 var gotData = false;
135 p.ontext = function(data) {
136 gotData = true;
137 assert.equal(message, data);
138 };
139 var gotPing = false;
140 p.onping = function(data) {
141 gotPing = true;
142 assert.equal(pingMessage, data);
143 };
144
145 p.add(getBufferFromHexString(packet1));
146 p.add(getBufferFromHexString(pingPacket));
147 p.add(getBufferFromHexString(packet2));
148 gotData.should.be.ok;
149 gotPing.should.be.ok;
150 });
151 it('can parse a fragmented masked text message of 300 bytes with a ping in the middle, which is delievered over sevaral tcp packets', function() {
152 var p = new Receiver();
153 var message = 'A';
154 for (var i = 0; i < 300; ++i) message += (i % 5).toString();
155
156 var msgpiece1 = message.substr(0, 150);
157 var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
158
159 var pingMessage = 'Hello';
160 var pingPacket = '89 ' + getHybiLengthAsHexString(pingMessage.length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68'));
161
162 var msgpiece2 = message.substr(150);
163 var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
164
165 var gotData = false;
166 p.ontext = function(data) {
167 gotData = true;
168 assert.equal(message, data);
169 };
170 var gotPing = false;
171 p.onping = function(data) {
172 gotPing = true;
173 assert.equal(pingMessage, data);
174 };
175
176 var buffers = [];
177 buffers = buffers.concat(splitBuffer(getBufferFromHexString(packet1)));
178 buffers = buffers.concat(splitBuffer(getBufferFromHexString(pingPacket)));
179 buffers = buffers.concat(splitBuffer(getBufferFromHexString(packet2)));
180 for (var i = 0; i < buffers.length; ++i) {
181 p.add(buffers[i]);
182 }
183 gotData.should.be.ok;
184 gotPing.should.be.ok;
185 });
186 it('can parse a 100 byte long masked binary message', function() {
187 var p = new Receiver();
188 var length = 100;
189 var message = new Buffer(length);
190 for (var i = 0; i < length; ++i) message[i] = i % 256;
191 var originalMessage = getHexStringFromBuffer(message);
192 var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
193
194 var gotData = false;
195 p.onbinary = function(data) {
196 gotData = true;
197 assert.equal(originalMessage, getHexStringFromBuffer(data));
198 };
199
200 p.add(getBufferFromHexString(packet));
201 gotData.should.be.ok;
202 });
203 it('can parse a 256 byte long masked binary message', function() {
204 var p = new Receiver();
205 var length = 256;
206 var message = new Buffer(length);
207 for (var i = 0; i < length; ++i) message[i] = i % 256;
208 var originalMessage = getHexStringFromBuffer(message);
209 var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
210
211 var gotData = false;
212 p.onbinary = function(data) {
213 gotData = true;
214 assert.equal(originalMessage, getHexStringFromBuffer(data));
215 };
216
217 p.add(getBufferFromHexString(packet));
218 gotData.should.be.ok;
219 });
220 it('can parse a 200kb long masked binary message', function() {
221 var p = new Receiver();
222 var length = 200 * 1024;
223 var message = new Buffer(length);
224 for (var i = 0; i < length; ++i) message[i] = i % 256;
225 var originalMessage = getHexStringFromBuffer(message);
226 var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
227
228 var gotData = false;
229 p.onbinary = function(data) {
230 gotData = true;
231 assert.equal(originalMessage, getHexStringFromBuffer(data));
232 };
233
234 p.add(getBufferFromHexString(packet));
235 gotData.should.be.ok;
236 });
237 it('can parse a 200kb long unmasked binary message', function() {
238 var p = new Receiver();
239 var length = 200 * 1024;
240 var message = new Buffer(length);
241 for (var i = 0; i < length; ++i) message[i] = i % 256;
242 var originalMessage = getHexStringFromBuffer(message);
243 var packet = '82 ' + getHybiLengthAsHexString(length, false) + ' ' + getHexStringFromBuffer(message);
244
245 var gotData = false;
246 p.onbinary = function(data) {
247 gotData = true;
248 assert.equal(originalMessage, getHexStringFromBuffer(data));
249 };
250
251 p.add(getBufferFromHexString(packet));
252 gotData.should.be.ok;
253 });
254});
255