OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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:convert'; | 6 import 'dart:convert'; |
7 import "dart:io"; | 7 import "dart:io"; |
8 | 8 |
9 import "package:expect/expect.dart"; | 9 import "package:expect/expect.dart"; |
10 | 10 |
11 void test(responseBytes, bodyLength) async { | 11 void test(responseBytes, bodyLength) async { |
12 fullRequest(bytes) { | 12 fullRequest(bytes) { |
13 var len = bytes.length; | 13 var len = bytes.length; |
14 return len > 4 && | 14 return len > 4 && |
15 bytes[len - 4] == 13 && | 15 bytes[len - 4] == 13 && |
16 bytes[len - 3] == 10 && | 16 bytes[len - 3] == 10 && |
17 bytes[len - 2] == 13 && | 17 bytes[len - 2] == 13 && |
18 bytes[len - 1] == 10; | 18 bytes[len - 1] == 10; |
19 } | 19 } |
20 | 20 |
21 handleSocket(socket) async { | 21 handleSocket(socket) async { |
22 var bytes = []; | 22 var bytes = []; |
23 await for (var data in socket) { | 23 await for (var data in socket) { |
24 bytes.addAll(data); | 24 bytes.addAll(data); |
25 if (fullRequest(bytes)) { | 25 if (fullRequest(bytes)) { |
26 socket.add(responseBytes); | 26 socket.add(responseBytes); |
27 socket.close(); | 27 socket.close(); |
28 } | 28 } |
29 } | 29 } |
30 } | 30 } |
31 | 31 |
32 var server = await ServerSocket.bind('127.0.0.1', 0); | 32 var server = await ServerSocket.bind('127.0.0.1', 0); |
33 server.listen(handleSocket); | 33 server.listen(handleSocket); |
34 | 34 |
35 var client = new HttpClient(); | 35 var client = new HttpClient(); |
36 var request = | 36 var request = |
37 await client.getUrl(Uri.parse('http://127.0.0.1:${server.port}/')); | 37 await client.getUrl(Uri.parse('http://127.0.0.1:${server.port}/')); |
38 var response = await request.close(); | 38 var response = await request.close(); |
39 Expect.equals(response.statusCode, 200); | 39 Expect.equals(response.statusCode, 200); |
40 Expect.equals(bodyLength, | 40 Expect.equals( |
41 (await response.fold([], (p, e) => p..addAll(e))).length); | 41 bodyLength, (await response.fold([], (p, e) => p..addAll(e))).length); |
42 server.close(); | 42 server.close(); |
43 } | 43 } |
44 | 44 |
45 main() { | 45 main() { |
46 var r1 = ''' | 46 var r1 = ''' |
47 HTTP/1.1 100 Continue\r | 47 HTTP/1.1 100 Continue\r |
48 \r | 48 \r |
49 HTTP/1.1 200 OK\r | 49 HTTP/1.1 200 OK\r |
50 \r | 50 \r |
51 '''; | 51 '''; |
(...skipping 12 matching lines...) Expand all Loading... |
64 \r | 64 \r |
65 HTTP/1.1 200 OK\r | 65 HTTP/1.1 200 OK\r |
66 Content-Length: 2\r | 66 Content-Length: 2\r |
67 \r | 67 \r |
68 AB'''; | 68 AB'''; |
69 | 69 |
70 test(ASCII.encode(r1), 0); | 70 test(ASCII.encode(r1), 0); |
71 test(ASCII.encode(r2), 0); | 71 test(ASCII.encode(r2), 0); |
72 test(ASCII.encode(r3), 2); | 72 test(ASCII.encode(r3), 2); |
73 } | 73 } |
OLD | NEW |