Chromium Code Reviews| Index: tests/standalone/io/raw_secure_socket_pause_test.dart |
| diff --git a/tests/standalone/io/raw_secure_socket_pause_test.dart b/tests/standalone/io/raw_secure_socket_pause_test.dart |
| index a223e81d5bb21457b5f3662070fa8b7d3930c34a..109e0019b76e84da698719f0ceb64146ffb4486c 100644 |
| --- a/tests/standalone/io/raw_secure_socket_pause_test.dart |
| +++ b/tests/standalone/io/raw_secure_socket_pause_test.dart |
| @@ -1,81 +1,107 @@ |
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| +// Copyright (c) 2013, 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. |
| // |
| // VMOptions= |
| // VMOptions=--short_socket_read |
| -// VMOptions=--short_socket_write |
| -// VMOptions=--short_socket_read --short_socket_write |
| +// XXVMOptions=--short_socket_write |
|
Anders Johnsen
2013/02/26 09:42:14
XX?
Søren Gjesse
2013/02/26 10:00:00
This was the simple way to disable short socket wr
|
| +// XXVMOptions=--short_socket_read --short_socket_write |
| import "dart:async"; |
| import "dart:io"; |
| import "dart:isolate"; |
| +Future<HttpServer> startServer() { |
| + return HttpServer.bindSecure( |
| + "127.0.0.1", |
| + 0, |
| + backlog: 5, |
| + certificateName: 'localhost_cert').then((server) { |
| + server.listen((HttpRequest request) { |
| + request.listen( |
| + (_) { }, |
| + onDone: () { |
| + request.response.contentLength = 100; |
| + for (int i = 0; i < 10; i++) { |
| + request.response.add([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); |
| + } |
| + request.response.close(); |
| + }); |
| + }); |
| + return server; |
| + }); |
| +} |
| + |
| +void InitializeSSL() { |
| + var testPkcertDatabase = |
| + new Path(new Options().script).directoryPath.append('pkcert/'); |
| + SecureSocket.initialize(database: testPkcertDatabase.toNativePath(), |
| + password: 'dartdart'); |
| +} |
| void main() { |
| - List<int> message = "GET / HTTP/1.0\r\nHost: www.google.dk\r\n\r\n".codeUnits; |
| + List<int> message = "GET / HTTP/1.0\r\nHost: localhost\r\n\r\n".codeUnits; |
| int written = 0; |
| - List<String> chunks = <String>[]; |
| - SecureSocket.initialize(); |
| - // TODO(whesse): Use a Dart HTTPS server for this test. |
| - // The Dart HTTPS server works on bleeding-edge, but not on IOv2. |
| - // When we use a Dart HTTPS server, allow --short_socket_write. The flag |
| - // causes fragmentation of the client hello message, which doesn't seem to |
| - // work with www.google.dk. |
| - RawSecureSocket.connect("www.google.dk", 443).then((socket) { |
| - StreamSubscription subscription; |
| - bool paused = false; |
| - bool readEventsTested = false; |
| - bool readEventsPaused = false; |
| + List<int> body = <int>[]; |
| + InitializeSSL(); |
| + startServer().then((server) { |
| + RawSecureSocket.connect("localhost", server.port).then((socket) { |
| + StreamSubscription subscription; |
| + bool paused = false; |
| + bool readEventsTested = false; |
| + bool readEventsPaused = false; |
| - void runPauseTest() { |
| - subscription.pause(); |
| - paused = true; |
| - new Timer(500, (_) { |
| - paused = false; |
| - subscription.resume(); |
| - }); |
| - } |
| - |
| - void runReadEventTest() { |
| - if (readEventsTested) return; |
| - readEventsTested = true; |
| - socket.readEventsEnabled = false; |
| - readEventsPaused = true; |
| - new Timer(500, (_) { |
| - readEventsPaused = false; |
| - socket.readEventsEnabled = true; |
| - }); |
| - } |
| + void runPauseTest() { |
| + subscription.pause(); |
| + paused = true; |
| + new Timer(500, (_) { |
| + paused = false; |
| + subscription.resume(); |
| + }); |
| + } |
| - subscription = socket.listen((RawSocketEvent event) { |
| - Expect.isFalse(paused); |
| - switch (event) { |
| - case RawSocketEvent.READ: |
| - Expect.isFalse(readEventsPaused); |
| - runReadEventTest(); |
| - var data = socket.read(); |
| - var received = new String.fromCharCodes(data); |
| - chunks.add(received); |
| - break; |
| - case RawSocketEvent.WRITE: |
| - written += |
| - socket.write(message, written, message.length - written); |
| - if (written < message.length) { |
| - socket.writeEventsEnabled = true; |
| - } else { |
| - socket.shutdown(SocketDirection.SEND); |
| - runPauseTest(); |
| - } |
| - break; |
| - case RawSocketEvent.READ_CLOSED: |
| - String fullPage = chunks.join(); |
| - Expect.isTrue(fullPage.contains('</body></html>')); |
| - break; |
| - default: throw "Unexpected event $event"; |
| + void runReadEventTest() { |
| + if (readEventsTested) return; |
| + readEventsTested = true; |
| + socket.readEventsEnabled = false; |
| + readEventsPaused = true; |
| + new Timer(500, (_) { |
| + readEventsPaused = false; |
| + socket.readEventsEnabled = true; |
| + }); |
| } |
| - }, onError: (AsyncError a) { |
| - Expect.fail("onError handler of RawSecureSocket stream hit: $a"); |
| - }); |
| + |
| + subscription = socket.listen( |
| + (RawSocketEvent event) { |
| + Expect.isFalse(paused); |
| + switch (event) { |
| + case RawSocketEvent.READ: |
| + Expect.isFalse(readEventsPaused); |
| + runReadEventTest(); |
| + body.addAll(socket.read()); |
| + break; |
| + case RawSocketEvent.WRITE: |
| + written += |
| + socket.write(message, written, message.length - written); |
| + if (written < message.length) { |
| + socket.writeEventsEnabled = true; |
| + } else { |
| + socket.shutdown(SocketDirection.SEND); |
| + runPauseTest(); |
| + } |
| + break; |
| + case RawSocketEvent.READ_CLOSED: |
| + Expect.isTrue(body.length > 100); |
| + Expect.equals(72, body[0]); |
| + Expect.equals(9, body[body.length - 1]); |
| + server.close(); |
| + break; |
| + default: throw "Unexpected event $event"; |
| + } |
| + }, |
| + onError: (AsyncError a) { |
| + Expect.fail("onError handler of RawSecureSocket stream hit: $a"); |
| + }); |
| + }); |
| }); |
| } |