OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 | 5 |
6 #import("dart:io"); | 6 #import("dart:io"); |
7 #import("dart:uri"); | 7 #import("dart:uri"); |
8 | 8 |
9 HttpServer setupServer() { | 9 HttpServer setupServer() { |
10 HttpServer server = new HttpServer(); | 10 HttpServer server = new HttpServer(); |
11 server.listen("127.0.0.1", 0, backlog: 5); | 11 server.listen("127.0.0.1", 0, backlog: 5); |
12 | 12 |
13 void addRedirectHandler(int number, int statusCode) { | 13 void addRedirectHandler(int number, int statusCode) { |
14 server.addRequestHandler( | 14 server.addRequestHandler( |
15 (HttpRequest request) => request.path == "/$number", | 15 (HttpRequest request) => request.path == "/$number", |
16 (HttpRequest request, HttpResponse response) { | 16 (HttpRequest request, HttpResponse response) { |
17 response.headers.set(HttpHeaders.LOCATION, | 17 response.headers.set(HttpHeaders.LOCATION, |
18 "http://127.0.0.1:${server.port}/${number + 1}"); | 18 "http://127.0.0.1:${server.port}/${number + 1}"); |
19 response.statusCode = statusCode; | 19 response.statusCode = statusCode; |
20 response.outputStream.close(); | 20 response.outputStream.close(); |
21 }); | 21 }); |
22 } | 22 } |
23 | 23 |
24 // Setup simple redirect. | |
25 server.addRequestHandler( | |
26 (HttpRequest request) => request.path == "/redirect", | |
27 (HttpRequest request, HttpResponse response) { | |
28 response.headers.set(HttpHeaders.LOCATION, | |
29 "http://127.0.0.1:${server.port}/location"); | |
30 response.statusCode = HttpStatus.MOVED_PERMANENTLY; | |
31 response.outputStream.close(); | |
32 } | |
33 ); | |
34 server.addRequestHandler( | |
35 (HttpRequest request) => request.path == "/location", | |
36 (HttpRequest request, HttpResponse response) { | |
37 response.outputStream.close(); | |
38 } | |
39 ); | |
40 | |
24 // Setup redirect chain. | 41 // Setup redirect chain. |
25 int n = 1; | 42 int n = 1; |
26 addRedirectHandler(n++, HttpStatus.MOVED_PERMANENTLY); | 43 addRedirectHandler(n++, HttpStatus.MOVED_PERMANENTLY); |
27 addRedirectHandler(n++, HttpStatus.MOVED_TEMPORARILY); | 44 addRedirectHandler(n++, HttpStatus.MOVED_TEMPORARILY); |
28 addRedirectHandler(n++, HttpStatus.SEE_OTHER); | 45 addRedirectHandler(n++, HttpStatus.SEE_OTHER); |
29 addRedirectHandler(n++, HttpStatus.TEMPORARY_REDIRECT); | 46 addRedirectHandler(n++, HttpStatus.TEMPORARY_REDIRECT); |
30 for (int i = n; i < 10; i++) { | 47 for (int i = n; i < 10; i++) { |
31 addRedirectHandler(i, HttpStatus.MOVED_PERMANENTLY); | 48 addRedirectHandler(i, HttpStatus.MOVED_PERMANENTLY); |
32 } | 49 } |
33 | 50 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
87 client.shutdown(); | 104 client.shutdown(); |
88 } | 105 } |
89 }; | 106 }; |
90 }; | 107 }; |
91 } | 108 } |
92 | 109 |
93 void testAutoRedirect() { | 110 void testAutoRedirect() { |
94 HttpServer server = setupServer(); | 111 HttpServer server = setupServer(); |
95 HttpClient client = new HttpClient(); | 112 HttpClient client = new HttpClient(); |
96 | 113 |
114 var requestCount = 0; | |
115 | |
116 void onRequest(HttpClientRequest request) { | |
117 requestCount++; | |
118 request.outputStream.close(); | |
119 } | |
120 | |
121 void onResponse(HttpClientResponse response) { | |
122 response.inputStream.onData = | |
123 () => Expect.fail("Response data not expected"); | |
124 response.inputStream.onClosed = () { | |
125 Expect.equals(1, requestCount); | |
126 server.close(); | |
127 client.shutdown(); | |
128 }; | |
129 }; | |
130 | |
131 HttpClientConnection conn = | |
132 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/redirect ")); | |
Mads Ager (google)
2012/11/09 09:31:21
Long line.
Søren Gjesse
2012/11/09 09:36:13
Done.
| |
133 conn.onRequest = onRequest; | |
134 conn.onResponse = onResponse; | |
135 conn.onError = (e) => Expect.fail("Error not expected ($e)"); | |
136 } | |
137 | |
138 void testAutoRedirectLimit() { | |
139 HttpServer server = setupServer(); | |
140 HttpClient client = new HttpClient(); | |
141 | |
97 HttpClientConnection conn = | 142 HttpClientConnection conn = |
98 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")); | 143 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")); |
99 conn.onResponse = (HttpClientResponse response) { | 144 conn.onResponse = (HttpClientResponse response) { |
100 response.inputStream.onData = () => Expect.fail("Response not expected"); | 145 response.inputStream.onData = () => Expect.fail("Response not expected"); |
101 response.inputStream.onClosed = () => Expect.fail("Response not expected"); | 146 response.inputStream.onClosed = () => Expect.fail("Response not expected"); |
102 }; | 147 }; |
103 conn.onError = (e) { | 148 conn.onError = (e) { |
104 Expect.isTrue(e is RedirectLimitExceededException); | 149 Expect.isTrue(e is RedirectLimitExceededException); |
105 Expect.equals(5, e.redirects.length); | 150 Expect.equals(5, e.redirects.length); |
106 server.close(); | 151 server.close(); |
(...skipping 16 matching lines...) Expand all Loading... | |
123 Expect.isTrue(e is RedirectLoopException); | 168 Expect.isTrue(e is RedirectLoopException); |
124 Expect.equals(2, e.redirects.length); | 169 Expect.equals(2, e.redirects.length); |
125 server.close(); | 170 server.close(); |
126 client.shutdown(); | 171 client.shutdown(); |
127 }; | 172 }; |
128 } | 173 } |
129 | 174 |
130 main() { | 175 main() { |
131 testManualRedirect(); | 176 testManualRedirect(); |
132 testAutoRedirect(); | 177 testAutoRedirect(); |
178 testAutoRedirectRequestBody(); | |
179 testAutoRedirectLimit(); | |
133 testRedirectLoop(); | 180 testRedirectLoop(); |
134 } | 181 } |
OLD | NEW |