Skip to content

Commit 6a8783e

Browse files
authored
Merge pull request #461 from theturtle32/codex/add-tests-for-tobuffer-with-different-payload-sizes
Add frame size tests
2 parents 2da1bd9 + e77ccf5 commit 6a8783e

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

test/unit/websocketFrame.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,78 @@ test('Serializing a WebSocket Frame with no data', function(t) {
3434

3535
t.end();
3636
});
37+
38+
test('Serializing a WebSocket Frame with 16-bit length payload', function(t) {
39+
t.plan(2);
40+
41+
var maskBytesBuffer = bufferAllocUnsafe(4);
42+
var frameHeaderBuffer = bufferAllocUnsafe(10);
43+
44+
var payload = bufferAllocUnsafe(200);
45+
for (var i = 0; i < payload.length; i++) {
46+
payload[i] = i % 256;
47+
}
48+
49+
var frameBytes;
50+
var frame = new WebSocketFrame(maskBytesBuffer, frameHeaderBuffer, {});
51+
frame.fin = true;
52+
frame.mask = true;
53+
frame.opcode = 0x02; // WebSocketFrame.BINARY
54+
frame.binaryPayload = payload;
55+
t.doesNotThrow(
56+
function() { frameBytes = frame.toBuffer(true); },
57+
'should not throw an error'
58+
);
59+
60+
var expected = bufferAllocUnsafe(2 + 2 + 4 + payload.length);
61+
expected[0] = 0x82;
62+
expected[1] = 0xFE;
63+
expected.writeUInt16BE(payload.length, 2);
64+
expected.writeUInt32BE(0, 4);
65+
payload.copy(expected, 8);
66+
67+
t.assert(
68+
bufferEqual(frameBytes, expected),
69+
'Generated bytes should be correct'
70+
);
71+
72+
t.end();
73+
});
74+
75+
test('Serializing a WebSocket Frame with 64-bit length payload', function(t) {
76+
t.plan(2);
77+
78+
var maskBytesBuffer = bufferAllocUnsafe(4);
79+
var frameHeaderBuffer = bufferAllocUnsafe(10);
80+
81+
var payload = bufferAllocUnsafe(66000);
82+
for (var i = 0; i < payload.length; i++) {
83+
payload[i] = i % 256;
84+
}
85+
86+
var frameBytes;
87+
var frame = new WebSocketFrame(maskBytesBuffer, frameHeaderBuffer, {});
88+
frame.fin = true;
89+
frame.mask = true;
90+
frame.opcode = 0x02; // WebSocketFrame.BINARY
91+
frame.binaryPayload = payload;
92+
t.doesNotThrow(
93+
function() { frameBytes = frame.toBuffer(true); },
94+
'should not throw an error'
95+
);
96+
97+
var expected = bufferAllocUnsafe(2 + 8 + 4 + payload.length);
98+
expected[0] = 0x82;
99+
expected[1] = 0xFF;
100+
expected.writeUInt32BE(0, 2);
101+
expected.writeUInt32BE(payload.length, 6);
102+
expected.writeUInt32BE(0, 10);
103+
payload.copy(expected, 14);
104+
105+
t.assert(
106+
bufferEqual(frameBytes, expected),
107+
'Generated bytes should be correct'
108+
);
109+
110+
t.end();
111+
});

0 commit comments

Comments
 (0)