Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 // VMOptions= | 5 // VMOptions= |
| 6 // VMOptions=--short_socket_read | 6 // VMOptions=--short_socket_read |
| 7 // VMOptions=--short_socket_write | 7 // VMOptions=--short_socket_write |
| 8 // VMOptions=--short_socket_read --short_socket_write | 8 // VMOptions=--short_socket_read --short_socket_write |
| 9 | 9 |
| 10 import "package:expect/expect.dart"; | 10 import "package:expect/expect.dart"; |
| 11 import "dart:async"; | 11 import "dart:async"; |
| 12 import "dart:io"; | 12 import "dart:io"; |
| 13 import "dart:typed_data"; | 13 import "dart:typed_data"; |
| 14 | 14 |
| 15 void testServerRequest(void handler(server, request), {int bytes}) { | 15 void testServerRequest(void handler(server, request), |
| 16 {int bytes, | |
| 17 bool closeClient}) { | |
| 16 HttpServer.bind("127.0.0.1", 0).then((server) { | 18 HttpServer.bind("127.0.0.1", 0).then((server) { |
| 17 server.listen((request) { | 19 server.listen((request) { |
| 18 handler(server, request); | 20 handler(server, request); |
| 19 }); | 21 }); |
| 20 | 22 |
| 21 var client = new HttpClient(); | 23 var client = new HttpClient(); |
| 22 // We only close the client on either | 24 // We only close the client on either |
| 23 // - Bad response headers | 25 // - Bad response headers |
| 24 // - Response done (with optional errors in between). | 26 // - Response done (with optional errors in between). |
| 25 client.get("127.0.0.1", server.port, "/") | 27 client.get("127.0.0.1", server.port, "/") |
| 26 .then((request) => request.close()) | 28 .then((request) => request.close()) |
| 27 .then((response) { | 29 .then((response) { |
| 28 int received = 0; | 30 int received = 0; |
| 29 response.listen( | 31 var subscription; |
| 30 (data) => received += data.length, | 32 subscription = response.listen( |
| 33 (data) { | |
| 34 if (closeClient == true) { | |
| 35 subscription.cancel(); | |
| 36 client.close(); | |
| 37 } else { | |
| 38 received += data.length; | |
| 39 } | |
| 40 }, | |
| 31 onDone: () { | 41 onDone: () { |
| 32 if (bytes != null) Expect.equals(received, bytes); | 42 if (bytes != null) Expect.equals(received, bytes); |
| 33 client.close(); | 43 client.close(); |
| 34 }, | 44 }, |
| 35 onError: (error) { | 45 onError: (error) { |
| 36 Expect.isTrue(error is HttpParserException); | 46 Expect.isTrue(error is HttpParserException); |
| 37 }); | 47 }); |
| 38 }) | 48 }) |
| 39 .catchError((error) { | 49 .catchError((error) { |
| 40 client.close(); | 50 client.close(); |
| 41 }, test: (e) => e is HttpParserException); | 51 }, test: (e) => e is HttpParserException); |
| 42 }); | 52 }); |
| 43 } | 53 } |
| 44 | 54 |
| 55 | |
| 45 void testResponseDone() { | 56 void testResponseDone() { |
| 46 testServerRequest((server, request) { | 57 testServerRequest((server, request) { |
| 47 request.response.close(); | 58 request.response.close(); |
| 48 request.response.done.then((response) { | 59 request.response.done.then((response) { |
| 49 Expect.equals(request.response, response); | 60 Expect.equals(request.response, response); |
| 50 server.close(); | 61 server.close(); |
| 51 }); | 62 }); |
| 52 }); | 63 }); |
| 53 | 64 |
| 54 testServerRequest((server, request) { | 65 testServerRequest((server, request) { |
| 55 new File("__not_exitsing_file_").openRead().pipe(request.response) | 66 new File("__not_exitsing_file_").openRead().pipe(request.response) |
| 56 .catchError((e) { | 67 .catchError((e) { |
| 57 server.close(); | 68 server.close(); |
| 58 }); | 69 }); |
| 59 }); | 70 }); |
| 60 | 71 |
| 61 testServerRequest((server, request) { | 72 testServerRequest((server, request) { |
| 62 request.response.done.then((_) { | 73 request.response.done.then((_) { |
| 63 server.close(); | 74 server.close(); |
| 64 }); | 75 }); |
| 65 request.response.contentLength = 0; | 76 request.response.contentLength = 0; |
| 66 request.response.close(); | 77 request.response.close(); |
| 67 }); | 78 }); |
| 68 } | 79 } |
| 69 | 80 |
| 81 | |
| 70 void testResponseAddStream() { | 82 void testResponseAddStream() { |
| 71 int bytes = new File(new Options().script).lengthSync(); | 83 int bytes = new File(new Options().script).lengthSync(); |
| 72 | 84 |
| 73 testServerRequest((server, request) { | 85 testServerRequest((server, request) { |
| 74 request.response.addStream(new File(new Options().script).openRead()) | 86 request.response.addStream(new File(new Options().script).openRead()) |
| 75 .then((response) { | 87 .then((response) { |
| 76 response.close(); | 88 response.close(); |
| 77 response.done.then((_) => server.close()); | 89 response.done.then((_) => server.close()); |
| 78 }); | 90 }); |
| 79 }, bytes: bytes); | 91 }, bytes: bytes); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 107 }); | 119 }); |
| 108 | 120 |
| 109 testServerRequest((server, request) { | 121 testServerRequest((server, request) { |
| 110 new File("__not_exitsing_file_").openRead().pipe(request.response) | 122 new File("__not_exitsing_file_").openRead().pipe(request.response) |
| 111 .catchError((e) { | 123 .catchError((e) { |
| 112 server.close(); | 124 server.close(); |
| 113 }); | 125 }); |
| 114 }); | 126 }); |
| 115 } | 127 } |
| 116 | 128 |
| 129 | |
| 130 void testResponseAddStreamClosed() { | |
| 131 testServerRequest((server, request) { | |
| 132 request.response.addStream(new File(new Options().script).openRead()) | |
| 133 .then((response) { | |
| 134 response.close(); | |
| 135 response.done.then((_) => server.close()); | |
| 136 }); | |
| 137 }, closeClient: true); | |
| 138 | |
| 139 testServerRequest((server, request) { | |
| 140 int count = 0; | |
| 141 write() { | |
|
Søren Gjesse
2013/05/23 13:48:15
Maybe interleave the addStream calls with some Str
Anders Johnsen
2013/05/23 13:54:50
Done.
| |
| 142 request.response.addStream(new File(new Options().script).openRead()) | |
| 143 .then((response) { | |
| 144 count++; | |
| 145 if (count < 1000) { | |
| 146 write(); | |
| 147 } else { | |
| 148 response.close(); | |
| 149 response.done.then((_) => server.close()); | |
| 150 } | |
| 151 }); | |
| 152 } | |
| 153 write(); | |
| 154 }, closeClient: true); | |
| 155 } | |
| 156 | |
| 157 | |
| 158 void testResponseAddClosed() { | |
| 159 testServerRequest((server, request) { | |
| 160 request.response.add(new File(new Options().script).readAsBytesSync()); | |
| 161 request.response.close(); | |
| 162 request.response.done.then((_) => server.close()); | |
| 163 }, closeClient: true); | |
| 164 | |
| 165 testServerRequest((server, request) { | |
| 166 for (int i = 0; i < 1000; i++) { | |
| 167 request.response.add(new File(new Options().script).readAsBytesSync()); | |
| 168 } | |
| 169 request.response.close(); | |
| 170 request.response.done.then((_) => server.close()); | |
| 171 }, closeClient: true); | |
| 172 | |
| 173 testServerRequest((server, request) { | |
| 174 int count = 0; | |
| 175 write() { | |
| 176 request.response.add(new File(new Options().script).readAsBytesSync()); | |
| 177 Timer.run(() { | |
| 178 count++; | |
| 179 if (count < 1000) { | |
| 180 write(); | |
| 181 } else { | |
| 182 request.response.close(); | |
| 183 request. response.done.then((_) => server.close()); | |
| 184 } | |
| 185 }); | |
| 186 } | |
| 187 write(); | |
| 188 }, closeClient: true); | |
| 189 } | |
| 190 | |
| 191 | |
| 117 void testBadResponseAdd() { | 192 void testBadResponseAdd() { |
| 118 testServerRequest((server, request) { | 193 testServerRequest((server, request) { |
| 119 request.response.contentLength = 0; | 194 request.response.contentLength = 0; |
| 120 request.response.add([0]); | 195 request.response.add([0]); |
| 121 request.response.close(); | 196 request.response.close(); |
| 122 request.response.done.catchError((error) { | 197 request.response.done.catchError((error) { |
| 123 server.close(); | 198 server.close(); |
| 124 }, test: (e) => e is HttpException); | 199 }, test: (e) => e is HttpException); |
| 125 }); | 200 }); |
| 126 | 201 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 139 request.response.add(new Uint8List(64 * 1024)); | 214 request.response.add(new Uint8List(64 * 1024)); |
| 140 request.response.add(new Uint8List(64 * 1024)); | 215 request.response.add(new Uint8List(64 * 1024)); |
| 141 request.response.add(new Uint8List(64 * 1024)); | 216 request.response.add(new Uint8List(64 * 1024)); |
| 142 request.response.close(); | 217 request.response.close(); |
| 143 request.response.done.catchError((error) { | 218 request.response.done.catchError((error) { |
| 144 server.close(); | 219 server.close(); |
| 145 }, test: (e) => e is HttpException); | 220 }, test: (e) => e is HttpException); |
| 146 }); | 221 }); |
| 147 } | 222 } |
| 148 | 223 |
| 224 | |
| 149 void testBadResponseClose() { | 225 void testBadResponseClose() { |
| 150 testServerRequest((server, request) { | 226 testServerRequest((server, request) { |
| 151 request.response.contentLength = 5; | 227 request.response.contentLength = 5; |
| 152 request.response.close(); | 228 request.response.close(); |
| 153 request.response.done.catchError((error) { | 229 request.response.done.catchError((error) { |
| 154 server.close(); | 230 server.close(); |
| 155 }, test: (e) => e is HttpException); | 231 }, test: (e) => e is HttpException); |
| 156 }); | 232 }); |
| 157 | 233 |
| 158 testServerRequest((server, request) { | 234 testServerRequest((server, request) { |
| 159 request.response.contentLength = 5; | 235 request.response.contentLength = 5; |
| 160 request.response.add([0]); | 236 request.response.add([0]); |
| 161 request.response.close(); | 237 request.response.close(); |
| 162 request.response.done.catchError((error) { | 238 request.response.done.catchError((error) { |
| 163 server.close(); | 239 server.close(); |
| 164 }, test: (e) => e is HttpException); | 240 }, test: (e) => e is HttpException); |
| 165 }); | 241 }); |
| 166 } | 242 } |
| 167 | 243 |
| 244 | |
| 168 void main() { | 245 void main() { |
| 169 testResponseDone(); | 246 testResponseDone(); |
| 170 testResponseAddStream(); | 247 testResponseAddStream(); |
| 248 testResponseAddStreamClosed(); | |
| 249 testResponseAddClosed(); | |
| 171 testBadResponseAdd(); | 250 testBadResponseAdd(); |
| 172 testBadResponseClose(); | 251 testBadResponseClose(); |
| 173 } | 252 } |
| OLD | NEW |