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

Side by Side Diff: tests/standalone/io/http_proxy_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
« no previous file with comments | « tests/standalone/io/http_parser_test.dart ('k') | tests/standalone/io/http_read_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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:io"; 6 import "dart:io";
6 import "dart:uri"; 7 import "dart:uri";
7 8
8 class Server { 9 class Server {
9 HttpServer server; 10 HttpServer server;
10 bool secure; 11 bool secure;
11 int proxyHops; 12 int proxyHops;
12 List<String> directRequestPaths; 13 List<String> directRequestPaths;
13 int requestCount = 0; 14 int requestCount = 0;
14 15
15 Server(this.proxyHops, this.directRequestPaths, this.secure) { 16 Server(this.proxyHops, this.directRequestPaths, this.secure);
16 server = secure ? new HttpsServer() : new HttpServer();
17 }
18 17
19 void start() { 18 Future<Server> start() {
20 server.listen("127.0.0.1", 0, certificate_name: 'CN=localhost'); 19 var x = new Completer();
21 server.defaultRequestHandler = 20 Future f = secure
22 (HttpRequest request, HttpResponse response) { 21 ? HttpServer.bindSecure(
23 requestCount++; 22 "127.0.0.1", 0, certificateName: 'localhost_cert')
24 // Check whether a proxy or direct connection is expected. 23 : HttpServer.bind();
25 bool direct = directRequestPaths.reduce( 24 return f.then((s) {
26 false, 25 server = s;
27 (prev, path) => prev ? prev : path == request.path); 26 x.complete(this);
28 if (!direct && proxyHops > 0) { 27 server.listen((request) {
29 Expect.isNotNull(request.headers[HttpHeaders.VIA]); 28 var response = request.response;
30 Expect.equals(1, request.headers[HttpHeaders.VIA].length); 29 requestCount++;
31 Expect.equals( 30 // Check whether a proxy or direct connection is expected.
32 proxyHops, 31 bool direct = directRequestPaths.reduce(
33 request.headers[HttpHeaders.VIA][0].split(",").length); 32 false,
34 } else { 33 (prev, path) => prev ? prev : path == request.uri.path);
35 Expect.isNull(request.headers[HttpHeaders.VIA]); 34 if (!direct && proxyHops > 0) {
36 } 35 Expect.isNotNull(request.headers[HttpHeaders.VIA]);
37 StringInputStream stream = new StringInputStream(request.inputStream); 36 Expect.equals(1, request.headers[HttpHeaders.VIA].length);
38 StringBuffer body = new StringBuffer(); 37 Expect.equals(
39 stream.onData = () => body.add(stream.read()); 38 proxyHops,
40 stream.onClosed = () { 39 request.headers[HttpHeaders.VIA][0].split(",").length);
41 String path = request.path.substring(1); 40 } else {
42 String content = "$path$path$path"; 41 Expect.isNull(request.headers[HttpHeaders.VIA]);
43 Expect.equals(content, body.toString()); 42 }
44 response.outputStream.writeString(request.path); 43 var body = new StringBuffer();
45 response.outputStream.close(); 44 request.listen(
46 }; 45 (data) {
47 }; 46 body.add(new String.fromCharCodes(data));
47 },
48 onDone: () {
49 String path = request.uri.path.substring(1);
50 String content = "$path$path$path";
51 Expect.equals(content, body.toString());
52 response.addString(request.uri.path);
53 response.close();
54 });
55 });
56 return x.future;
57 });
48 } 58 }
49 59
50 void shutdown() { 60 void shutdown() {
51 server.close(); 61 server.close();
52 } 62 }
53 63
54 int get port => server.port; 64 int get port => server.port;
55 } 65 }
56 66
57 Server setupServer(int proxyHops, 67 Future<Server> setupServer(int proxyHops,
58 {List<String> directRequestPaths: const <String>[], 68 {List<String> directRequestPaths: const <String>[],
59 secure: false}) { 69 secure: false}) {
60 Server server = new Server(proxyHops, directRequestPaths, secure); 70 Server server = new Server(proxyHops, directRequestPaths, secure);
61 server.start(); 71 return server.start();
62 return server;
63 } 72 }
64 73
65 class ProxyServer { 74 class ProxyServer {
66 HttpServer server; 75 HttpServer server;
67 HttpClient client; 76 HttpClient client;
68 int requestCount = 0; 77 int requestCount = 0;
69 78
70 ProxyServer() : server = new HttpServer(), client = new HttpClient(); 79 ProxyServer() : client = new HttpClient();
71 80
72 void start() { 81 Future<ProxyServer> start() {
73 server.listen("127.0.0.1", 0); 82 var x = new Completer();
74 server.defaultRequestHandler = 83 HttpServer.bind().then((s) {
75 (HttpRequest request, HttpResponse response) { 84 server = s;
76 requestCount++; 85 x.complete(this);
77 // Open the connection from the proxy. 86 server.listen((HttpRequest request) {
78 HttpClientConnection conn = 87 requestCount++;
79 client.openUrl(request.method, Uri.parse(request.path)); 88 // Open the connection from the proxy.
80 conn.onRequest = (HttpClientRequest clientRequest) { 89 client.openUrl(request.method, request.uri)
90 .then((HttpClientRequest clientRequest) {
81 // Forward all headers. 91 // Forward all headers.
82 request.headers.forEach((String name, List<String> values) { 92 request.headers.forEach((String name, List<String> values) {
83 values.forEach((String value) { 93 values.forEach((String value) {
84 if (name != "content-length" && name != "via") { 94 if (name != "content-length" && name != "via") {
85 clientRequest.headers.add(name, value); 95 clientRequest.headers.add(name, value);
86 } 96 }
87 }); 97 });
88 }); 98 });
89 // Special handling of Content-Length and Via. 99 // Special handling of Content-Length and Via.
90 clientRequest.contentLength = request.contentLength; 100 clientRequest.contentLength = request.contentLength;
91 List<String> via = request.headers[HttpHeaders.VIA]; 101 List<String> via = request.headers[HttpHeaders.VIA];
92 String viaPrefix = via == null ? "" : "${via[0]}, "; 102 String viaPrefix = via == null ? "" : "${via[0]}, ";
93 clientRequest.headers.add( 103 clientRequest.headers.add(
94 HttpHeaders.VIA, "${viaPrefix}1.1 localhost:$port"); 104 HttpHeaders.VIA, "${viaPrefix}1.1 localhost:$port");
95 // Copy all content. 105 // Copy all content.
96 request.inputStream.pipe(clientRequest.outputStream); 106 request.pipe(clientRequest);
97 }; 107 return clientRequest.response;
98 conn.onResponse = (HttpClientResponse clientResponse) { 108 })
99 clientResponse.inputStream.pipe(response.outputStream); 109 .then((HttpClientResponse clientResponse) {
100 }; 110 clientResponse.pipe(request.response);
101 }; 111 });
112 });
113 });
114 return x.future;
102 } 115 }
103 116
104 void shutdown() { 117 void shutdown() {
105 server.close(); 118 server.close();
106 client.shutdown(); 119 client.close();
107 } 120 }
108 121
109 int get port => server.port; 122 int get port => server.port;
110 } 123 }
111 124
112 ProxyServer setupProxyServer() { 125 Future<ProxyServer> setupProxyServer() {
113 ProxyServer proxyServer = new ProxyServer(); 126 ProxyServer proxyServer = new ProxyServer();
114 proxyServer.start(); 127 return proxyServer.start();
115 return proxyServer;
116 } 128 }
117 129
118 testInvalidProxy() { 130 testInvalidProxy() {
119 HttpClient client = new HttpClient(); 131 HttpClient client = new HttpClient();
120 132
121 // TODO(sgjesse): This should not throw errors, but call 133 client.findProxy = (Uri uri) => "";
122 // HttpClientConnection onError. 134 client.getUrl(Uri.parse("http://www.google.com/test"))
135 .catchError((error) {}, test: (e) => e is HttpException);
136
123 client.findProxy = (Uri uri) => "XXX"; 137 client.findProxy = (Uri uri) => "XXX";
124 Expect.throws( 138 client.getUrl(Uri.parse("http://www.google.com/test"))
125 () => client.getUrl(Uri.parse("http://www.google.com/test")), 139 .catchError((error) {}, test: (e) => e is HttpException);
126 (e) => e is HttpException);
127 140
128 client.findProxy = (Uri uri) => "PROXY www.google.com"; 141 client.findProxy = (Uri uri) => "PROXY www.google.com";
129 Expect.throws( 142 client.getUrl(Uri.parse("http://www.google.com/test"))
130 () => client.getUrl(Uri.parse("http://www.google.com/test")), 143 .catchError((error) {}, test: (e) => e is HttpException);
131 (e) => e is HttpException);
132 144
133 client.findProxy = (Uri uri) => "PROXY www.google.com:http"; 145 client.findProxy = (Uri uri) => "PROXY www.google.com:http";
134 Expect.throws( 146 client.getUrl(Uri.parse("http://www.google.com/test"))
135 () => client.getUrl(Uri.parse("http://www.google.com/test")), 147 .catchError((error) {}, test: (e) => e is HttpException);
136 (e) => e is HttpException);
137 } 148 }
138 149
139 int testDirectDoneCount = 0; 150 int testDirectDoneCount = 0;
140 void testDirectProxy() { 151 void testDirectProxy() {
141 Server server = setupServer(0); 152 setupServer(0).then((server) {
142 HttpClient client = new HttpClient(); 153 HttpClient client = new HttpClient();
143 List<String> proxy = 154 List<String> proxy =
144 ["DIRECT", " DIRECT ", "DIRECT ;", " DIRECT ; ", 155 ["DIRECT", " DIRECT ", "DIRECT ;", " DIRECT ; ",
145 ";DIRECT", " ; DIRECT ", ";;DIRECT;;"]; 156 ";DIRECT", " ; DIRECT ", ";;DIRECT;;"];
146 157
147 client.findProxy = (Uri uri) { 158 client.findProxy = (Uri uri) {
148 int index = int.parse(uri.path.substring(1)); 159 int index = int.parse(uri.path.substring(1));
149 return proxy[index]; 160 return proxy[index];
150 }; 161 };
151 162
152 for (int i = 0; i < proxy.length; i++) { 163 for (int i = 0; i < proxy.length; i++) {
153 HttpClientConnection conn = 164 client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/$i"))
154 client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/$i")); 165 .then((HttpClientRequest clientRequest) {
155 conn.onRequest = (HttpClientRequest clientRequest) { 166 String content = "$i$i$i";
156 String content = "$i$i$i"; 167 clientRequest.contentLength = content.length;
157 clientRequest.contentLength = content.length; 168 clientRequest.addString(content);
158 clientRequest.outputStream.writeString(content); 169 return clientRequest.close();
159 clientRequest.outputStream.close(); 170 })
160 }; 171 .then((HttpClientResponse response) {
161 conn.onResponse = (HttpClientResponse response) { 172 response.listen((_) {}, onDone: () {
162 response.inputStream.onData = () => response.inputStream.read(); 173 testDirectDoneCount++;
163 response.inputStream.onClosed = () { 174 if (testDirectDoneCount == proxy.length) {
164 testDirectDoneCount++; 175 Expect.equals(proxy.length, server.requestCount);
165 if (testDirectDoneCount == proxy.length) { 176 server.shutdown();
166 Expect.equals(proxy.length, server.requestCount); 177 client.close();
167 server.shutdown(); 178 }
168 client.shutdown(); 179 });
169 } 180 });
170 }; 181 }
171 }; 182 });
172 }
173 } 183 }
174 184
175 int testProxyDoneCount = 0; 185 int testProxyDoneCount = 0;
176 void testProxy() { 186 void testProxy() {
177 ProxyServer proxyServer = setupProxyServer(); 187 setupProxyServer().then((proxyServer) {
178 Server server = setupServer(1, directRequestPaths: ["/4"]); 188 setupServer(1, directRequestPaths: ["/4"]).then((server) {
179 Server secureServer = setupServer(1, directRequestPaths: ["/4"], secure: true) ; 189 setupServer(1, directRequestPaths: ["/4"], secure: true).then((secureServer) {
180 HttpClient client = new HttpClient(); 190 HttpClient client = new HttpClient();
181 191
182 List<String> proxy = 192 List<String> proxy =
183 ["PROXY localhost:${proxyServer.port}", 193 ["PROXY localhost:${proxyServer.port}",
184 "PROXY localhost:${proxyServer.port}; PROXY hede.hule.hest:8080", 194 "PROXY localhost:${proxyServer.port}; PROXY hede.hule.hest:8080",
185 "PROXY hede.hule.hest:8080; PROXY localhost:${proxyServer.port}", 195 "PROXY hede.hule.hest:8080; PROXY localhost:${proxyServer.port}",
186 "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; PROXY localhost:${ proxyServer.port}", 196 "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181;"
187 "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; DIRECT", 197 " PROXY localhost:${proxyServer.port}",
188 "PROXY localhost:${proxyServer.port}; DIRECT"]; 198 "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; DIRECT",
189 199 "PROXY localhost:${proxyServer.port}; DIRECT"];
190 client.findProxy = (Uri uri) { 200
191 // Pick the proxy configuration based on the request path. 201 client.findProxy = (Uri uri) {
192 int index = int.parse(uri.path.substring(1)); 202 // Pick the proxy configuration based on the request path.
193 return proxy[index]; 203 int index = int.parse(uri.path.substring(1));
194 }; 204 return proxy[index];
195 205 };
196 for (int i = 0; i < proxy.length; i++) { 206
197 test(bool secure) { 207 for (int i = 0; i < proxy.length; i++) {
198 String url = secure 208 test(bool secure) {
199 ? "https://localhost:${secureServer.port}/$i" 209 String url = secure
200 : "http://127.0.0.1:${server.port}/$i"; 210 ? "https://localhost:${secureServer.port}/$i"
201 211 : "http://127.0.0.1:${server.port}/$i";
202 HttpClientConnection conn = client.postUrl(Uri.parse(url)); 212
203 conn.onRequest = (HttpClientRequest clientRequest) { 213 client.postUrl(Uri.parse(url))
204 String content = "$i$i$i"; 214 .then((HttpClientRequest clientRequest) {
205 clientRequest.outputStream.writeString(content); 215 String content = "$i$i$i";
206 clientRequest.outputStream.close(); 216 clientRequest.addString(content);
207 }; 217 return clientRequest.close();
208 conn.onResponse = (HttpClientResponse response) { 218 })
209 response.inputStream.onData = () => response.inputStream.read(); 219 .then((HttpClientResponse response) {
210 response.inputStream.onClosed = () { 220 response.listen((_) {}, onDone: () {
211 testProxyDoneCount++; 221 testProxyDoneCount++;
212 if (testProxyDoneCount == proxy.length * 2) { 222 if (testProxyDoneCount == proxy.length * 2) {
213 Expect.equals(proxy.length, server.requestCount); 223 Expect.equals(proxy.length, server.requestCount);
214 proxyServer.shutdown(); 224 proxyServer.shutdown();
215 server.shutdown(); 225 server.shutdown();
216 secureServer.shutdown(); 226 secureServer.shutdown();
217 client.shutdown(); 227 client.close();
218 } 228 }
219 }; 229 });
220 }; 230 });
221 } 231 }
222 232
223 test(false); 233 test(false);
224 test(true); 234 test(true);
225 } 235 }
236 });
237 });
238 });
226 } 239 }
227 240
228 int testProxyChainDoneCount = 0; 241 int testProxyChainDoneCount = 0;
229 void testProxyChain() { 242 void testProxyChain() {
230 // Setup two proxy servers having the first using the second as its proxy. 243 // Setup two proxy servers having the first using the second as its proxy.
231 ProxyServer proxyServer1 = setupProxyServer(); 244 setupProxyServer().then((proxyServer1) {
232 ProxyServer proxyServer2 = setupProxyServer(); 245 setupProxyServer().then((proxyServer2) {
233 proxyServer1.client.findProxy = (_) => "PROXY 127.0.0.1:${proxyServer2.port}"; 246 proxyServer1.client.findProxy = (_) => "PROXY 127.0.0.1:${proxyServer2.port}";
234 247
235 Server server = setupServer(2, directRequestPaths: ["/4"]); 248 setupServer(2, directRequestPaths: ["/4"]).then((server) {
236 HttpClient client = new HttpClient(); 249 HttpClient client = new HttpClient();
237 250
238 List<String> proxy = 251 List<String> proxy =
239 ["PROXY localhost:${proxyServer1.port}", 252 ["PROXY localhost:${proxyServer1.port}",
240 "PROXY localhost:${proxyServer1.port}; PROXY hede.hule.hest:8080", 253 "PROXY localhost:${proxyServer1.port}; PROXY hede.hule.hest:8080",
241 "PROXY hede.hule.hest:8080; PROXY localhost:${proxyServer1.port}", 254 "PROXY hede.hule.hest:8080; PROXY localhost:${proxyServer1.port}",
242 "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; PROXY localhost:${ proxyServer1.port}", 255 "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; PROXY localhost: ${proxyServer1.port}",
243 "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; DIRECT", 256 "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; DIRECT",
244 "PROXY localhost:${proxyServer1.port}; DIRECT"]; 257 "PROXY localhost:${proxyServer1.port}; DIRECT"];
245 258
246 client.findProxy = (Uri uri) { 259 client.findProxy = (Uri uri) {
247 // Pick the proxy configuration based on the request path. 260 // Pick the proxy configuration based on the request path.
248 int index = int.parse(uri.path.substring(1)); 261 int index = int.parse(uri.path.substring(1));
249 return proxy[index]; 262 return proxy[index];
250 }; 263 };
251 264
252 for (int i = 0; i < proxy.length; i++) { 265 for (int i = 0; i < proxy.length; i++) {
253 HttpClientConnection conn = 266 client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/$i"))
254 client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/$i")); 267 .then((HttpClientRequest clientRequest) {
255 conn.onRequest = (HttpClientRequest clientRequest) { 268 String content = "$i$i$i";
256 String content = "$i$i$i"; 269 clientRequest.contentLength = content.length;
257 clientRequest.contentLength = content.length; 270 clientRequest.addString(content);
258 clientRequest.outputStream.writeString(content); 271 return clientRequest.close();
259 clientRequest.outputStream.close(); 272 })
260 }; 273 .then((HttpClientResponse response) {
261 conn.onResponse = (HttpClientResponse response) { 274 response.listen((_) {}, onDone: () {
262 response.inputStream.onData = () => response.inputStream.read(); 275 testProxyChainDoneCount++;
263 response.inputStream.onClosed = () { 276 if (testProxyChainDoneCount == proxy.length) {
264 testProxyChainDoneCount++; 277 Expect.equals(proxy.length, server.requestCount);
265 if (testProxyChainDoneCount == proxy.length) { 278 proxyServer1.shutdown();
266 Expect.equals(proxy.length, server.requestCount); 279 proxyServer2.shutdown();
267 proxyServer1.shutdown(); 280 server.shutdown();
268 proxyServer2.shutdown(); 281 client.close();
269 server.shutdown(); 282 }
270 client.shutdown(); 283 });
271 } 284 });
272 }; 285 }
273 }; 286 });
274 } 287 });
288 });
275 } 289 }
276 290
277 int testRealProxyDoneCount = 0; 291 int testRealProxyDoneCount = 0;
278 void testRealProxy() { 292 void testRealProxy() {
279 Server server = setupServer(1); 293 setupServer(1).then((server) {
280 HttpClient client = new HttpClient(); 294 HttpClient client = new HttpClient();
281 295
282 List<String> proxy = 296 List<String> proxy =
283 ["PROXY localhost:8080", 297 ["PROXY localhost:8080",
284 "PROXY localhost:8080; PROXY hede.hule.hest:8080", 298 "PROXY localhost:8080; PROXY hede.hule.hest:8080",
285 "PROXY hede.hule.hest:8080; PROXY localhost:8080", 299 "PROXY hede.hule.hest:8080; PROXY localhost:8080",
286 "PROXY localhost:8080; DIRECT"]; 300 "PROXY localhost:8080; DIRECT"];
287 301
288 client.findProxy = (Uri uri) { 302 client.findProxy = (Uri uri) {
289 // Pick the proxy configuration based on the request path. 303 // Pick the proxy configuration based on the request path.
290 int index = int.parse(uri.path.substring(1)); 304 int index = int.parse(uri.path.substring(1));
291 return proxy[index]; 305 return proxy[index];
292 }; 306 };
293 307
294 for (int i = 0; i < proxy.length; i++) { 308 for (int i = 0; i < proxy.length; i++) {
295 HttpClientConnection conn = 309 client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/$i"))
296 client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/$i")); 310 .then((HttpClientRequest clientRequest) {
297 conn.onRequest = (HttpClientRequest clientRequest) { 311 String content = "$i$i$i";
298 String content = "$i$i$i"; 312 clientRequest.contentLength = content.length;
299 clientRequest.contentLength = content.length; 313 clientRequest.addString(content);
300 clientRequest.outputStream.writeString(content); 314 return clientRequest.close();
301 clientRequest.outputStream.close(); 315 })
302 }; 316 .then((HttpClientResponse response) {
303 conn.onResponse = (HttpClientResponse response) { 317 response.listen((_) {}, onDone: () {
304 response.inputStream.onData = () => response.inputStream.read(); 318 testRealProxyDoneCount++;
305 response.inputStream.onClosed = () { 319 if (testRealProxyDoneCount == proxy.length) {
306 testRealProxyDoneCount++; 320 Expect.equals(proxy.length, server.requestCount);
307 if (testRealProxyDoneCount == proxy.length) { 321 server.shutdown();
308 Expect.equals(proxy.length, server.requestCount); 322 client.close();
309 server.shutdown(); 323 }
310 client.shutdown(); 324 });
311 } 325 });
312 }; 326 }
313 }; 327 });
314 }
315 } 328 }
316 329
317 void InitializeSSL() { 330 void InitializeSSL() {
318 var testPkcertDatabase = 331 var testPkcertDatabase =
319 new Path(new Options().script).directoryPath.append('pkcert/'); 332 new Path(new Options().script).directoryPath.append('pkcert/');
320 SecureSocket.initialize(database: testPkcertDatabase.toNativePath(), 333 SecureSocket.initialize(database: testPkcertDatabase.toNativePath(),
321 password: 'dartdart'); 334 password: 'dartdart');
322 } 335 }
323 336
324 main() { 337 main() {
325 InitializeSSL(); 338 InitializeSSL();
326 testInvalidProxy(); 339 testInvalidProxy();
327 testDirectProxy(); 340 testDirectProxy();
328 testProxy(); 341 testProxy();
329 testProxyChain(); 342 testProxyChain();
330 // This test is not normally run. It can be used for locally testing 343 // This test is not normally run. It can be used for locally testing
331 // with a real proxy server (e.g. Apache). 344 // with a real proxy server (e.g. Apache).
332 // testRealProxy(); 345 //testRealProxy();
333 } 346 }
OLDNEW
« no previous file with comments | « tests/standalone/io/http_parser_test.dart ('k') | tests/standalone/io/http_read_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698