OLD | NEW |
1 // (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // (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 "dart:isolate"; | 10 import "dart:isolate"; |
(...skipping 27 matching lines...) Expand all Loading... |
38 Socket.connect("127.0.0.1", server.port).then((socket) { | 38 Socket.connect("127.0.0.1", server.port).then((socket) { |
39 socket.write("GET / HTTP/1.0\r\n\r\n"); | 39 socket.write("GET / HTTP/1.0\r\n\r\n"); |
40 | 40 |
41 List<int> response = []; | 41 List<int> response = []; |
42 socket.listen( | 42 socket.listen( |
43 response.addAll, | 43 response.addAll, |
44 onDone: () { | 44 onDone: () { |
45 count++; | 45 count++; |
46 socket.destroy(); | 46 socket.destroy(); |
47 String s = new String.fromCharCodes(response).toLowerCase(); | 47 String s = new String.fromCharCodes(response).toLowerCase(); |
48 Expect.equals("z", s[s.length - 1]); | |
49 Expect.isTrue(s.indexOf("\r\ncontent-length: 1\r\n") > 0); | 48 Expect.isTrue(s.indexOf("\r\ncontent-length: 1\r\n") > 0); |
50 Expect.equals(-1, s.indexOf("keep-alive")); | 49 Expect.equals(-1, s.indexOf("keep-alive")); |
51 if (count < 10) { | 50 if (count < 10) { |
52 makeRequest(); | 51 makeRequest(); |
53 } else { | 52 } else { |
54 server.close(); | 53 server.close(); |
55 } | 54 } |
56 }); | 55 }); |
57 }); | 56 }); |
58 } | 57 } |
59 makeRequest(); | 58 makeRequest(); |
60 }); | 59 }); |
61 } | 60 } |
62 | 61 |
63 | 62 |
64 // Client makes a HTTP 1.0 request and the server does not set a | 63 // Client makes a HTTP 1.0 request and the server does not set a |
65 // content length so it has to close the connection to mark the end of | 64 // content length so it has to close the connection to mark the end of |
66 // the response. | 65 // the response. |
67 void testHttp10ServerClose() { | 66 void testHttp10ServerClose() { |
68 HttpServer.bind().then((server) { | 67 HttpServer.bind().then((server) { |
69 server.listen( | 68 server.listen( |
70 (HttpRequest request) { | 69 (HttpRequest request) { |
71 Expect.isNull(request.headers.value('content-length')); | 70 Expect.isNull(request.headers.value('content-length')); |
72 Expect.equals(-1, request.contentLength); | 71 Expect.equals(-1, request.contentLength); |
73 var response = request.response; | 72 request.listen((_) {}, onDone: () { |
74 Expect.equals("1.0", request.protocolVersion); | 73 var response = request.response; |
75 response.write("Z"); | 74 Expect.equals("1.0", request.protocolVersion); |
76 response.close(); | 75 response.write("Z"); |
| 76 response.close(); |
| 77 }); |
77 }, | 78 }, |
78 onError: (e) => Expect.fail("Unexpected error $e")); | 79 onError: (e) => Expect.fail("Unexpected error $e")); |
79 | 80 |
80 int count = 0; | 81 int count = 0; |
81 makeRequest() { | 82 makeRequest() { |
82 Socket.connect("127.0.0.1", server.port).then((socket) { | 83 Socket.connect("127.0.0.1", server.port).then((socket) { |
83 socket.write("GET / HTTP/1.0\r\n\r\n"); | 84 socket.write("GET / HTTP/1.0\r\n"); |
84 socket.write("Connection: Keep-Alive\r\n\r\n"); | 85 socket.write("Connection: Keep-Alive\r\n\r\n"); |
85 | 86 |
86 List<int> response = []; | 87 List<int> response = []; |
87 socket.listen( | 88 socket.listen( |
88 response.addAll, | 89 response.addAll, |
89 onDone: () { | 90 onDone: () { |
90 socket.destroy(); | 91 socket.destroy(); |
91 count++; | 92 count++; |
92 String s = new String.fromCharCodes(response).toLowerCase(); | 93 String s = new String.fromCharCodes(response).toLowerCase(); |
93 print(s); | |
94 Expect.equals("z", s[s.length - 1]); | 94 Expect.equals("z", s[s.length - 1]); |
95 Expect.equals(-1, s.indexOf("content-length:")); | 95 Expect.equals(-1, s.indexOf("content-length:")); |
96 Expect.equals(-1, s.indexOf("keep-alive")); | 96 Expect.equals(-1, s.indexOf("keep-alive")); |
97 if (count < 10) { | 97 if (count < 10) { |
98 makeRequest(); | 98 makeRequest(); |
99 } else { | 99 } else { |
100 server.close(); | 100 server.close(); |
101 } | 101 } |
102 }, | 102 }, |
103 onError: (e) => print(e)); | 103 onError: (e) => print(e)); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 }); | 199 }); |
200 }); | 200 }); |
201 } | 201 } |
202 makeRequest(); | 202 makeRequest(); |
203 }); | 203 }); |
204 } | 204 } |
205 | 205 |
206 | 206 |
207 void main() { | 207 void main() { |
208 testHttp10NoKeepAlive(); | 208 testHttp10NoKeepAlive(); |
209 // TODO(8871): This test fails with short socket writes. | 209 testHttp10ServerClose(); |
210 //testHttp10ServerClose(); | |
211 testHttp10KeepAlive(); | 210 testHttp10KeepAlive(); |
212 testHttp10KeepAliveServerCloses(); | 211 testHttp10KeepAliveServerCloses(); |
213 } | 212 } |
OLD | NEW |