summaryrefslogtreecommitdiff
path: root/node_modules/ws/test/Receiver.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/ws/test/Receiver.test.js')
-rw-r--r--node_modules/ws/test/Receiver.test.js255
1 files changed, 255 insertions, 0 deletions
diff --git a/node_modules/ws/test/Receiver.test.js b/node_modules/ws/test/Receiver.test.js
new file mode 100644
index 0000000..b0b5c0a
--- /dev/null
+++ b/node_modules/ws/test/Receiver.test.js
@@ -0,0 +1,255 @@
+var assert = require('assert')
+ , Receiver = require('../lib/Receiver');
+require('should');
+require('./hybi-common');
+
+describe('Receiver', function() {
+ it('can parse unmasked text message', function() {
+ var p = new Receiver();
+ var packet = '81 05 48 65 6c 6c 6f';
+
+ var gotData = false;
+ p.ontext = function(data) {
+ gotData = true;
+ assert.equal('Hello', data);
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotData.should.be.ok;
+ });
+ it('can parse close message', function() {
+ var p = new Receiver();
+ var packet = '88 00';
+
+ var gotClose = false;
+ p.onclose = function(data) {
+ gotClose = true;
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotClose.should.be.ok;
+ });
+ it('can parse masked text message', function() {
+ var p = new Receiver();
+ 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';
+
+ var gotData = false;
+ p.ontext = function(data) {
+ gotData = true;
+ assert.equal('5:::{"name":"echo"}', data);
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotData.should.be.ok;
+ });
+ it('can parse a masked text message longer than 125 bytes', function() {
+ var p = new Receiver();
+ var message = 'A';
+ for (var i = 0; i < 300; ++i) message += (i % 5).toString();
+ var packet = '81 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
+
+ var gotData = false;
+ p.ontext = function(data) {
+ gotData = true;
+ assert.equal(message, data);
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotData.should.be.ok;
+ });
+ it('can parse a really long masked text message', function() {
+ var p = new Receiver();
+ var message = 'A';
+ for (var i = 0; i < 64*1024; ++i) message += (i % 5).toString();
+ var packet = '81 FF ' + pack(16, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
+
+ var gotData = false;
+ p.ontext = function(data) {
+ gotData = true;
+ assert.equal(message, data);
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotData.should.be.ok;
+ });
+ it('can parse a fragmented masked text message of 300 bytes', function() {
+ var p = new Receiver();
+ var message = 'A';
+ for (var i = 0; i < 300; ++i) message += (i % 5).toString();
+ var msgpiece1 = message.substr(0, 150);
+ var msgpiece2 = message.substr(150);
+ var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
+ var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
+
+ var gotData = false;
+ p.ontext = function(data) {
+ gotData = true;
+ assert.equal(message, data);
+ };
+
+ p.add(getBufferFromHexString(packet1));
+ p.add(getBufferFromHexString(packet2));
+ gotData.should.be.ok;
+ });
+ it('can parse a ping message', function() {
+ var p = new Receiver();
+ var message = 'Hello';
+ var packet = '89 ' + getHybiLengthAsHexString(message.length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
+
+ var gotPing = false;
+ p.onping = function(data) {
+ gotPing = true;
+ assert.equal(message, data);
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotPing.should.be.ok;
+ });
+ it('can parse a ping with no data', function() {
+ var p = new Receiver();
+ var packet = '89 00';
+
+ var gotPing = false;
+ p.onping = function(data) {
+ gotPing = true;
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotPing.should.be.ok;
+ });
+ it('can parse a fragmented masked text message of 300 bytes with a ping in the middle', function() {
+ var p = new Receiver();
+ var message = 'A';
+ for (var i = 0; i < 300; ++i) message += (i % 5).toString();
+
+ var msgpiece1 = message.substr(0, 150);
+ var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
+
+ var pingMessage = 'Hello';
+ var pingPacket = '89 ' + getHybiLengthAsHexString(pingMessage.length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68'));
+
+ var msgpiece2 = message.substr(150);
+ var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
+
+ var gotData = false;
+ p.ontext = function(data) {
+ gotData = true;
+ assert.equal(message, data);
+ };
+ var gotPing = false;
+ p.onping = function(data) {
+ gotPing = true;
+ assert.equal(pingMessage, data);
+ };
+
+ p.add(getBufferFromHexString(packet1));
+ p.add(getBufferFromHexString(pingPacket));
+ p.add(getBufferFromHexString(packet2));
+ gotData.should.be.ok;
+ gotPing.should.be.ok;
+ });
+ 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() {
+ var p = new Receiver();
+ var message = 'A';
+ for (var i = 0; i < 300; ++i) message += (i % 5).toString();
+
+ var msgpiece1 = message.substr(0, 150);
+ var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68'));
+
+ var pingMessage = 'Hello';
+ var pingPacket = '89 ' + getHybiLengthAsHexString(pingMessage.length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68'));
+
+ var msgpiece2 = message.substr(150);
+ var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68'));
+
+ var gotData = false;
+ p.ontext = function(data) {
+ gotData = true;
+ assert.equal(message, data);
+ };
+ var gotPing = false;
+ p.onping = function(data) {
+ gotPing = true;
+ assert.equal(pingMessage, data);
+ };
+
+ var buffers = [];
+ buffers = buffers.concat(splitBuffer(getBufferFromHexString(packet1)));
+ buffers = buffers.concat(splitBuffer(getBufferFromHexString(pingPacket)));
+ buffers = buffers.concat(splitBuffer(getBufferFromHexString(packet2)));
+ for (var i = 0; i < buffers.length; ++i) {
+ p.add(buffers[i]);
+ }
+ gotData.should.be.ok;
+ gotPing.should.be.ok;
+ });
+ it('can parse a 100 byte long masked binary message', function() {
+ var p = new Receiver();
+ var length = 100;
+ var message = new Buffer(length);
+ for (var i = 0; i < length; ++i) message[i] = i % 256;
+ var originalMessage = getHexStringFromBuffer(message);
+ var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
+
+ var gotData = false;
+ p.onbinary = function(data) {
+ gotData = true;
+ assert.equal(originalMessage, getHexStringFromBuffer(data));
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotData.should.be.ok;
+ });
+ it('can parse a 256 byte long masked binary message', function() {
+ var p = new Receiver();
+ var length = 256;
+ var message = new Buffer(length);
+ for (var i = 0; i < length; ++i) message[i] = i % 256;
+ var originalMessage = getHexStringFromBuffer(message);
+ var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
+
+ var gotData = false;
+ p.onbinary = function(data) {
+ gotData = true;
+ assert.equal(originalMessage, getHexStringFromBuffer(data));
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotData.should.be.ok;
+ });
+ it('can parse a 200kb long masked binary message', function() {
+ var p = new Receiver();
+ var length = 200 * 1024;
+ var message = new Buffer(length);
+ for (var i = 0; i < length; ++i) message[i] = i % 256;
+ var originalMessage = getHexStringFromBuffer(message);
+ var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68'));
+
+ var gotData = false;
+ p.onbinary = function(data) {
+ gotData = true;
+ assert.equal(originalMessage, getHexStringFromBuffer(data));
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotData.should.be.ok;
+ });
+ it('can parse a 200kb long unmasked binary message', function() {
+ var p = new Receiver();
+ var length = 200 * 1024;
+ var message = new Buffer(length);
+ for (var i = 0; i < length; ++i) message[i] = i % 256;
+ var originalMessage = getHexStringFromBuffer(message);
+ var packet = '82 ' + getHybiLengthAsHexString(length, false) + ' ' + getHexStringFromBuffer(message);
+
+ var gotData = false;
+ p.onbinary = function(data) {
+ gotData = true;
+ assert.equal(originalMessage, getHexStringFromBuffer(data));
+ };
+
+ p.add(getBufferFromHexString(packet));
+ gotData.should.be.ok;
+ });
+});
+