Index: tests/standalone/io/http_proxy_test.dart |
diff --git a/tests/standalone/io/http_proxy_test.dart b/tests/standalone/io/http_proxy_test.dart |
index 36abf04f1571ea361813d16f83afbc719ba7dfa6..365ce2960d43fc237e0fc85b86a46e19279e58db 100644 |
--- a/tests/standalone/io/http_proxy_test.dart |
+++ b/tests/standalone/io/http_proxy_test.dart |
@@ -34,7 +34,7 @@ class Server { |
bool direct = directRequestPaths.fold( |
false, |
(prev, path) => prev ? prev : path == request.uri.path); |
- if (!direct && proxyHops > 0) { |
+ if (!secure && !direct && proxyHops > 0) { |
Expect.isNotNull(request.headers[HttpHeaders.VIA]); |
Expect.equals(1, request.headers[HttpHeaders.VIA].length); |
Expect.equals( |
@@ -122,28 +122,41 @@ class ProxyServer { |
} |
} |
// Open the connection from the proxy. |
- client.openUrl(request.method, request.uri) |
- .then((HttpClientRequest clientRequest) { |
- // Forward all headers. |
- request.headers.forEach((String name, List<String> values) { |
- values.forEach((String value) { |
- if (name != "content-length" && name != "via") { |
- clientRequest.headers.add(name, value); |
- } |
+ if (request.method == "CONNECT") { |
+ var tmp = request.uri.toString().split(":"); |
+ Socket.connect(tmp[0], int.parse(tmp[1])) |
+ .then((socket) { |
+ request.response.reasonPhrase = "Connection established"; |
+ request.response.detachSocket() |
+ .then((detached) { |
+ socket.pipe(detached); |
+ detached.pipe(socket); |
+ }); |
+ }); |
+ } else { |
+ client.openUrl(request.method, request.uri) |
+ .then((HttpClientRequest clientRequest) { |
+ // Forward all headers. |
+ request.headers.forEach((String name, List<String> values) { |
+ values.forEach((String value) { |
+ if (name != "content-length" && name != "via") { |
+ clientRequest.headers.add(name, value); |
+ } |
+ }); |
}); |
+ // Special handling of Content-Length and Via. |
+ clientRequest.contentLength = request.contentLength; |
+ List<String> via = request.headers[HttpHeaders.VIA]; |
+ String viaPrefix = via == null ? "" : "${via[0]}, "; |
+ clientRequest.headers.add( |
+ HttpHeaders.VIA, "${viaPrefix}1.1 localhost:$port"); |
+ // Copy all content. |
+ return request.pipe(clientRequest); |
+ }) |
+ .then((HttpClientResponse clientResponse) { |
+ clientResponse.pipe(request.response); |
}); |
- // Special handling of Content-Length and Via. |
- clientRequest.contentLength = request.contentLength; |
- List<String> via = request.headers[HttpHeaders.VIA]; |
- String viaPrefix = via == null ? "" : "${via[0]}, "; |
- clientRequest.headers.add( |
- HttpHeaders.VIA, "${viaPrefix}1.1 localhost:$port"); |
- // Copy all content. |
- return request.pipe(clientRequest); |
- }) |
- .then((HttpClientResponse clientResponse) { |
- clientResponse.pipe(request.response); |
- }); |
+ } |
}); |
}); |
return x.future; |
@@ -429,23 +442,21 @@ void testProxyAuthenticate() { |
return clientRequest.close(); |
}) |
.then((HttpClientResponse response) { |
- response.listen((_) {}, onDone: () { |
- testProxyAuthenticateCount++; |
- Expect.equals(HttpStatus.PROXY_AUTHENTICATION_REQUIRED, |
- response.statusCode); |
- if (testProxyAuthenticateCount == loopCount * 2) { |
- Expect.equals(0, server.requestCount); |
- Expect.equals(0, secureServer.requestCount); |
- step1.complete(null); |
- } |
- }); |
- }); |
+ Expect.fail("No response expected"); |
+ }). |
+ catchError((e) { |
+ testProxyAuthenticateCount++; |
+ if (testProxyAuthenticateCount == loopCount * 2) { |
+ Expect.equals(0, server.requestCount); |
+ Expect.equals(0, secureServer.requestCount); |
+ step1.complete(null); |
+ } |
+ }); |
} |
test(false); |
test(true); |
} |
- |
step1.future.then((_) { |
testProxyAuthenticateCount = 0; |
client.findProxy = (Uri uri) { |