| Index: tests/standalone/src/io/WebSocketProtocolProcessorTest.dart
|
| diff --git a/tests/standalone/src/io/WebSocketProtocolProcessorTest.dart b/tests/standalone/src/io/WebSocketProtocolProcessorTest.dart
|
| deleted file mode 100644
|
| index ab381e78d11a56aa7e5307d54b4df5ad0d4c1b27..0000000000000000000000000000000000000000
|
| --- a/tests/standalone/src/io/WebSocketProtocolProcessorTest.dart
|
| +++ /dev/null
|
| @@ -1,220 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -#source("../../../../runtime/bin/websocket.dart");
|
| -#source("../../../../runtime/bin/websocket_impl.dart");
|
| -
|
| -class WebSocketFrame {
|
| - WebSocketFrame(int opcode, List<int> data);
|
| -}
|
| -
|
| -// Class that when hooked up to the web socket protocol processor will
|
| -// collect the message and expect it to be equal to the
|
| -// expectedMessage field when fully received.
|
| -class WebSocketMessageCollector {
|
| - WebSocketMessageCollector(_WebSocketProtocolProcessor this.processor,
|
| - [List<int> this.expectedMessage = null]) {
|
| - processor.onMessageStart = onMessageStart;
|
| - processor.onMessageData = onMessageData;
|
| - processor.onMessageEnd = onMessageEnd;
|
| - processor.onClosed = onClosed;
|
| - }
|
| -
|
| - void onMessageStart(int type) {
|
| - data = new List<int>();
|
| - }
|
| -
|
| - void onMessageData(List<int> buffer, int index, int count) {
|
| - data.addAll(buffer.getRange(index, count));
|
| - }
|
| -
|
| - void onMessageEnd() {
|
| - messageCount++;
|
| - Expect.listEquals(expectedMessage, data);
|
| - data = null;
|
| - }
|
| -
|
| - void onClosed(int status, String reason) {
|
| - closeCount++;
|
| - }
|
| -
|
| - void onError(e) {
|
| - Expect.fail("Unexpected error $e");
|
| - }
|
| -
|
| - _WebSocketProtocolProcessor processor;
|
| - List<int> expectedMessage;
|
| -
|
| - List<int> data;
|
| - int messageCount = 0;
|
| - int closeCount = 0;
|
| -}
|
| -
|
| -
|
| -// Web socket constants.
|
| -final int FRAME_OPCODE_TEXT = 1;
|
| -final int FRAME_OPCODE_BINARY = 2;
|
| -
|
| -
|
| -// Function for building a web socket frame.
|
| -List<int> createFrame(bool fin,
|
| - int opcode,
|
| - int maskingKey,
|
| - List<int> data,
|
| - int offset,
|
| - int count) {
|
| - int frameSize = 2;
|
| - if (count > 125) frameSize += 2;
|
| - if (count > 65535) frameSize += 6;
|
| - frameSize += count;
|
| - // No masking.
|
| - assert(maskingKey == null);
|
| - List<int> frame = new List<int>(frameSize);
|
| - int frameIndex = 0;
|
| - frame[frameIndex++] = (fin ? 0x80 : 0x00) | opcode;
|
| - if (count < 126) {
|
| - frame[frameIndex++] = count;
|
| - } else if (count < 65536) {
|
| - frame[frameIndex++] = 126;
|
| - frame[frameIndex++] = count >> 8;
|
| - frame[frameIndex++] = count & 0xFF;
|
| - } else {
|
| - frame[frameIndex++] = 127;
|
| - for (int i = 0; i < 8; i++) {
|
| - frame[frameIndex++] = count >> ((7 - i) * 8) & 0xFF;
|
| - }
|
| - }
|
| - frame.setRange(frameIndex, count, data, offset);
|
| - return frame;
|
| -}
|
| -
|
| -
|
| -// Test processing messages which are sent in a single frame.
|
| -void testFullMessages() {
|
| - // Use the same web socket protocol processor for all frames.
|
| - _WebSocketProtocolProcessor processor = new _WebSocketProtocolProcessor();
|
| - WebSocketMessageCollector mc = new WebSocketMessageCollector(processor);
|
| -
|
| - int messageCount = 0;
|
| -
|
| - void testMessage(int opcode, List<int> message) {
|
| - mc.expectedMessage = message;
|
| - List<int> frame = createFrame(
|
| - true, opcode, null, message, 0, message.length);
|
| -
|
| - // Update the processor with one big chunk.
|
| - messageCount++;
|
| - processor.update(frame, 0, frame.length);
|
| - Expect.isNull(mc.data);
|
| - Expect.equals(0, processor._state);
|
| -
|
| - // Only run this part on small messages.
|
| - if (message.length < 1000) {
|
| - // Update the processor one byte at the time.
|
| - messageCount++;
|
| - for (int i = 0; i < frame.length; i++) {
|
| - processor.update(frame, i, 1);
|
| - }
|
| - Expect.equals(0, processor._state);
|
| - Expect.isNull(mc.data);
|
| -
|
| - // Update the processor two bytes at the time.
|
| - messageCount++;
|
| - for (int i = 0; i < frame.length; i += 2) {
|
| - processor.update(frame, i, i + 1 < frame.length ? 2 : 1);
|
| - }
|
| - Expect.equals(0, processor._state);
|
| - Expect.isNull(mc.data);
|
| - }
|
| - }
|
| -
|
| - void runTest(int from, int to, int step) {
|
| - for (int messageLength = from; messageLength < to; messageLength += step) {
|
| - List<int> message = new List<int>(messageLength);
|
| - for (int i = 0; i < messageLength; i++) message[i] = i & 0xFF;
|
| - testMessage(FRAME_OPCODE_TEXT, message);
|
| - testMessage(FRAME_OPCODE_BINARY, message);
|
| - }
|
| - }
|
| -
|
| - // Test different message sizes.
|
| - runTest(0, 10, 1);
|
| - runTest(120, 130, 1);
|
| - runTest(0, 1000, 100);
|
| - runTest(65534, 65537, 1);
|
| - print("Messages test, messages $messageCount");
|
| - Expect.equals(messageCount, mc.messageCount);
|
| - Expect.equals(0, mc.closeCount);
|
| -}
|
| -
|
| -
|
| -// Test processing of frames which are split into fragments.
|
| -void testFragmentedMessages() {
|
| - // Use the same web socket protocol processor for all frames.
|
| - _WebSocketProtocolProcessor processor = new _WebSocketProtocolProcessor();
|
| - WebSocketMessageCollector mc = new WebSocketMessageCollector(processor);
|
| -
|
| - int messageCount = 0;
|
| - int frameCount = 0;
|
| -
|
| - void testFragmentMessage(int opcode, List<int> message, int fragmentSize) {
|
| - messageCount++;
|
| - int messageIndex = 0;
|
| - int remaining = message.length;
|
| - bool firstFrame = true;
|
| - bool lastFrame = false;
|
| - while (!lastFrame) {
|
| - int payloadSize = Math.min(fragmentSize, remaining);
|
| - lastFrame = payloadSize == remaining;
|
| - List<int> frame = createFrame(lastFrame,
|
| - firstFrame ? opcode : 0x00,
|
| - null,
|
| - message,
|
| - messageIndex,
|
| - payloadSize);
|
| - frameCount++;
|
| - messageIndex += payloadSize;
|
| - processor.update(frame, 0, frame.length);
|
| - remaining -= payloadSize;
|
| - firstFrame = false;
|
| - }
|
| - }
|
| -
|
| - void testMessageFragmentation(int opcode, List<int> message) {
|
| - mc.expectedMessage = message;
|
| -
|
| - // Test with fragmenting the message in different fragment sizes.
|
| - if (message.length <= 10) {
|
| - for (int i = 1; i < 10; i++) {
|
| - testFragmentMessage(opcode, message, i);
|
| - }
|
| - } else {
|
| - testFragmentMessage(opcode, message, 10);
|
| - testFragmentMessage(opcode, message, 100);
|
| - }
|
| - }
|
| -
|
| - void runTest(int from, int to, int step) {
|
| - for (int messageLength = from; messageLength < to; messageLength += step) {
|
| - List<int> message = new List<int>(messageLength);
|
| - for (int i = 0; i < messageLength; i++) message[i] = i & 0xFF;
|
| - testMessageFragmentation(FRAME_OPCODE_TEXT, message);
|
| - testMessageFragmentation(FRAME_OPCODE_BINARY, message);
|
| - }
|
| - }
|
| -
|
| - // Test different message sizes.
|
| - runTest(0, 10, 1);
|
| - runTest(120, 130, 1);
|
| - runTest(0, 1000, 100);
|
| - runTest(65534, 65537, 1);
|
| - print("Fragment messages test, messages $messageCount, frames $frameCount");
|
| - Expect.equals(messageCount, mc.messageCount);
|
| - Expect.equals(0, mc.closeCount);
|
| -}
|
| -
|
| -void main() {
|
| - testFullMessages();
|
| - testFragmentedMessages();
|
| -}
|
|
|