Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: tests/standalone/io/http_server_early_client_close_test.dart

Issue 12316036: Merge IO v2 branch to bleeding edge (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebased to r18818 Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import "dart:async"; 5 import "dart:async";
6 import "dart:io"; 6 import "dart:io";
7 import "dart:isolate"; 7 import "dart:isolate";
8 8
9 void sendData(List<int> data, int port) { 9 void sendData(List<int> data, int port) {
10 Socket socket = new Socket("127.0.0.1", port); 10 Socket.connect("127.0.0.1", port).then((socket) {
11 socket.onConnect = () { 11 socket.listen((data) {
12 socket.onData = () { 12 Expect.fail("No data response was expected");
13 Expect.fail("No data response was expected"); 13 });
14 }; 14 socket.add(data);
15 socket.outputStream.onNoPendingWrites = () { 15 socket.close();
16 socket.close(true); 16 socket.done.then((_) {
17 }; 17 socket.destroy();
18 socket.outputStream.write(data); 18 });
19 }; 19 });
20 } 20 }
21 21
22 class EarlyCloseTest { 22 class EarlyCloseTest {
23 EarlyCloseTest(this.data, 23 EarlyCloseTest(this.data,
24 String this.exception, 24 String this.exception,
25 [bool this.expectRequest = false]); 25 [bool this.expectRequest = false]);
26 26
27 Future execute(HttpServer server) { 27 Future execute(HttpServer server) {
28 Completer c = new Completer(); 28 Completer c = new Completer();
29 29
30 bool calledOnRequest = false; 30 bool calledOnRequest = false;
31 bool calledOnError = false; 31 bool calledOnError = false;
32 server.defaultRequestHandler = 32 ReceivePort port = new ReceivePort();
33 (HttpRequest request, HttpResponse response) { 33 server.listen(
34 (request) {
34 Expect.isTrue(expectRequest); 35 Expect.isTrue(expectRequest);
35 Expect.isFalse(calledOnError); 36 Expect.isFalse(calledOnError);
36 Expect.isFalse(calledOnRequest, "onRequest called multiple times"); 37 Expect.isFalse(calledOnRequest, "onRequest called multiple times");
37 calledOnRequest = true; 38 calledOnRequest = true;
38 }; 39 request.listen(
39 ReceivePort port = new ReceivePort(); 40 (_) {},
40 server.onError = (error) { 41 onError: (e) {
41 Expect.isFalse(calledOnError); 42 Expect.isFalse(calledOnError);
42 Expect.equals(exception, error.message); 43 Expect.equals(exception, e.error.message);
43 Expect.equals(expectRequest, calledOnRequest); 44 calledOnError = true;
44 calledOnError = true; 45 port.close();
45 port.close(); 46 c.complete(null);
46 c.complete(null); 47 });
47 }; 48 },
49 onError: (e) {
50 Expect.isFalse(calledOnError);
51 Expect.equals(exception, e.error.message);
52 Expect.equals(expectRequest, calledOnRequest);
53 calledOnError = true;
54 port.close();
55 c.complete(null);
56 });
48 57
49 List<int> d; 58 List<int> d;
50 if (data is List<int>) d = data; 59 if (data is List<int>) d = data;
51 if (data is String) d = data.charCodes; 60 if (data is String) d = data.charCodes;
52 if (d == null) Expect.fail("Invalid data"); 61 if (d == null) Expect.fail("Invalid data");
53 sendData(d, server.port); 62 sendData(d, server.port);
54 63
55 return c.future; 64 return c.future;
56 } 65 }
57 66
58 final data; 67 final data;
59 final String exception; 68 final String exception;
60 final bool expectRequest; 69 final bool expectRequest;
61 } 70 }
62 71
63 void testEarlyClose1() { 72 void testEarlyClose1() {
64 List<EarlyCloseTest> tests = new List<EarlyCloseTest>(); 73 List<EarlyCloseTest> tests = new List<EarlyCloseTest>();
65 void add(Object data, String exception, {bool expectRequest: false}) { 74 void add(Object data, String exception, {bool expectRequest: false}) {
66 tests.add(new EarlyCloseTest(data, exception, expectRequest)); 75 tests.add(new EarlyCloseTest(data, exception, expectRequest));
67 } 76 }
68 // The empty packet is valid. 77 // The empty packet is valid.
69 78
70 // Close while sending header 79 // Close while sending header
71 String message = "Connection closed before full request header was received"; 80 String message = "Connection closed before full header was received";
72 add("G", message); 81 add("G", message);
73 add("GET /", message); 82 add("GET /", message);
74 add("GET / HTTP/1.1", message); 83 add("GET / HTTP/1.1", message);
75 add("GET / HTTP/1.1\r\n", message); 84 add("GET / HTTP/1.1\r\n", message);
76 85
77 // Close while sending content 86 // Close while sending content
78 add("GET / HTTP/1.1\r\nContent-Length: 100\r\n\r\n", 87 add("GET / HTTP/1.1\r\nContent-Length: 100\r\n\r\n",
79 "Connection closed before full request body was received", 88 "Connection closed while receiving data",
80 expectRequest: true); 89 expectRequest: true);
81 add("GET / HTTP/1.1\r\nContent-Length: 100\r\n\r\n1", 90 add("GET / HTTP/1.1\r\nContent-Length: 100\r\n\r\n1",
82 "Connection closed before full request body was received", 91 "Connection closed while receiving data",
83 expectRequest: true); 92 expectRequest: true);
84 93
85
86 HttpServer server = new HttpServer();
87 server.listen("127.0.0.1", 0);
88 void runTest(Iterator it) { 94 void runTest(Iterator it) {
89 if (it.moveNext()) { 95 if (it.moveNext()) {
90 it.current.execute(server).then((_) => runTest(it)); 96 HttpServer.bind("127.0.0.1", 0).then((server) {
91 } else { 97 it.current.execute(server).then((_) {
92 server.close(); 98 runTest(it);
99 server.close();
100 });
101 });
93 } 102 }
94 } 103 }
95 runTest(tests.iterator); 104 runTest(tests.iterator);
96 } 105 }
97 106
98 testEarlyClose2() { 107 testEarlyClose2() {
99 var server = new HttpServer(); 108 HttpServer.bind("127.0.0.1", 0).then((server) {
100 server.listen("127.0.0.1", 0); 109 server.listen(
101 server.onError = (e) { /* ignore */ }; 110 (request) {
102 server.defaultRequestHandler = (request, response) { 111 String name = new Options().script;
103 String name = new Options().script; 112 new File(name).openRead().pipe(request.response);
104 new File(name).openInputStream().pipe(response.outputStream); 113 },
105 }; 114 onError: (e) { /* ignore */ });
106 115
107 var count = 0; 116 var count = 0;
108 var makeRequest; 117 makeRequest() {
109 makeRequest = () { 118 Socket.connect("127.0.0.1", server.port).then((socket) {
110 Socket socket = new Socket("127.0.0.1", server.port); 119 var data = "GET / HTTP/1.1\r\nContent-Length: 0\r\n\r\n".charCodes;
111 socket.onConnect = () { 120 socket.add(data);
112 var data = "GET / HTTP/1.1\r\nContent-Length: 0\r\n\r\n".charCodes; 121 socket.close();
113 socket.writeList(data, 0, data.length); 122 socket.done.then((_) {
114 socket.close(); 123 socket.destroy();
115 if (++count < 10) { 124 if (++count < 10) {
116 makeRequest(); 125 makeRequest();
117 } else { 126 } else {
118 server.close(); 127 server.close();
119 } 128 }
120 }; 129 });
121 }; 130 });
122 131 }
123 makeRequest(); 132 makeRequest();
133 });
124 } 134 }
125 135
126 void main() { 136 void main() {
127 testEarlyClose1(); 137 testEarlyClose1();
128 testEarlyClose2(); 138 // testEarlyClose2();
129 } 139 }
OLDNEW
« no previous file with comments | « tests/standalone/io/http_redirect_test.dart ('k') | tests/standalone/io/http_server_early_server_close_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698