Chromium Code Reviews| Index: tests/standalone/io/web_socket_compression_test.dart |
| diff --git a/tests/standalone/io/web_socket_compression_test.dart b/tests/standalone/io/web_socket_compression_test.dart |
| index b1fd13ffd9fb36ab4bf6d8461071d52f37638353..912b855da3d9e24cdc64b0a49d762e75b104cc88 100644 |
| --- a/tests/standalone/io/web_socket_compression_test.dart |
| +++ b/tests/standalone/io/web_socket_compression_test.dart |
| @@ -171,13 +171,15 @@ class SecurityConfiguration { |
| }); |
| } |
| - void testReturnHeaders(String headerValue, String expected) { |
| + void testReturnHeaders(String headerValue, String expected, { |
| + CompressionOptions serverCompression: CompressionOptions.DEFAULT}) { |
| asyncStart(); |
| createServer().then((server) { |
| server.listen((request) { |
| // Stuff |
| Expect.isTrue(WebSocketTransformer.isUpgradeRequest(request)); |
| - WebSocketTransformer.upgrade(request).then((webSocket) { |
| + WebSocketTransformer.upgrade(request, compression: serverCompression) |
| + .then((webSocket) { |
| webSocket.listen((message) { |
| Expect.equals("Hello World", message); |
| @@ -216,6 +218,47 @@ class SecurityConfiguration { |
| }); // End createServer |
| } |
| + void testClientRequestHeaders(CompressionOptions compression) { |
| + asyncStart(); |
| + createServer().then((server) { |
| + server.listen((request) { |
| + var extensionHeader = request.headers.value('Sec-WebSocket-Extensions'); |
| + var hv = HeaderValue.parse(extensionHeader); |
| + Expect.equals(compression.serverNoContextTakeover, |
| + hv.parameters.containsKey('server_no_context_takeover')); |
| + Expect.equals(compression.clientNoContextTakeover, |
| + hv.parameters.containsKey('client_no_context_takeover')); |
| + Expect.equals(compression.serverMaxWindowBits?.toString(), |
| + hv.parameters['server_max_window_bits']); |
| + Expect.equals(compression.clientMaxWindowBits?.toString(), |
| + hv.parameters['client_max_window_bits']); |
| + |
| + WebSocketTransformer.upgrade(request).then((webSocket) { |
| + webSocket.listen((message) { |
| + Expect.equals('Hello World', message); |
| + |
| + webSocket.add(message); |
| + webSocket.close(); |
| + }); |
| + }); |
| + }); |
| + |
| + var url = '${secure ? "wss" : "ws"}://$HOST_NAME:${server.port}/'; |
| + |
| + WebSocket.connect(url, compression: compression).then((websocket) { |
| + var future = websocket.listen((message) { |
| + Expect.equals('Hello World', message); |
| + websocket.close(); |
| + }).asFuture(); |
| + websocket.add('Hello World'); |
|
Søren Gjesse
2016/01/18 07:36:00
With the different options of context take-over an
|
| + return future; |
| + }).then((_) { |
| + server.close(); |
| + asyncEnd(); |
| + }); |
| + }); |
| + } |
| + |
| void runTests() { |
| // No compression or takeover |
| testCompressionSupport(); |
| @@ -237,9 +280,39 @@ class SecurityConfiguration { |
| "permessage-deflate; client_max_window_bits=15"); |
| // Ensure max_window_bits resize appropriately. |
| testReturnHeaders('permessage-deflate; server_max_window_bits=10', |
| - "permessage-deflate;" |
| + "permessage-deflate;" |
| " server_max_window_bits=10;" |
| " client_max_window_bits=10"); |
| + // Don't provider context takeover if requested but not enabled. |
| + // Default is not enabled. |
| + testReturnHeaders('permessage-deflate; client_max_window_bits;' |
| + 'client_no_context_takeover', |
| + 'permessage-deflate; client_max_window_bits=15'); |
| + // Enable context Takeover and provide if requested. |
| + var compression = new CompressionOptions(clientNoContextTakeover: true, |
| + serverNoContextTakeover: true); |
| + testReturnHeaders('permessage-deflate; client_max_window_bits; ' |
| + 'client_no_context_takeover', |
| + 'permessage-deflate; client_no_context_takeover; ' |
| + 'client_max_window_bits=15', |
| + serverCompression: compression); |
| + // Enable context takeover and don't provide if not requested |
| + compression = new CompressionOptions(clientNoContextTakeover: true, |
| + serverNoContextTakeover: true); |
| + testReturnHeaders('permessage-deflate; client_max_window_bits; ', |
| + 'permessage-deflate; client_max_window_bits=15', |
| + serverCompression: compression); |
| + |
| + compression = CompressionOptions.DEFAULT; |
| + testClientRequestHeaders(compression); |
| + compression = new CompressionOptions(clientNoContextTakeover: true, |
| + serverNoContextTakeover: true); |
| + testClientRequestHeaders(compression); |
| + compression = new CompressionOptions(clientNoContextTakeover: true, |
| + serverNoContextTakeover: true, |
| + clientMaxWindowBits: 8, |
| + serverMaxWindowBits: 8); |
| + testClientRequestHeaders(compression); |
| } |
| } |