Index: tests/standalone/io/http_advanced_test.dart |
diff --git a/tests/standalone/io/http_advanced_test.dart b/tests/standalone/io/http_advanced_test.dart |
index d6e1ad416fc68ebcf2d3e81d10685e5d8f45c310..e19365f66a892fb3c4a7e1f6b2152da9357ad310 100644 |
--- a/tests/standalone/io/http_advanced_test.dart |
+++ b/tests/standalone/io/http_advanced_test.dart |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
// |
@@ -11,11 +11,11 @@ import 'dart:async'; |
import 'dart:io'; |
import 'dart:isolate'; |
-class TestServerMain { |
- TestServerMain() |
+class IsolatedHttpServer { |
+ IsolatedHttpServer() |
: _statusPort = new ReceivePort(), |
_serverPort = null { |
- _serverPort = spawnFunction(startTestServer); |
+ _serverPort = spawnFunction(startIsolatedHttpServer); |
} |
void setServerStartedHandler(void startedCallback(int port)) { |
@@ -31,20 +31,22 @@ class TestServerMain { |
}); |
// Send server start message to the server. |
- var command = new TestServerCommand.start(); |
+ var command = new IsolatedHttpServerCommand.start(); |
_serverPort.send(command, _statusPort.toSendPort()); |
} |
void shutdown() { |
// Send server stop message to the server. |
- _serverPort.send(new TestServerCommand.stop(), _statusPort.toSendPort()); |
+ _serverPort.send(new IsolatedHttpServerCommand.stop(), |
+ _statusPort.toSendPort()); |
_statusPort.close(); |
} |
void chunkedEncoding() { |
// Send chunked encoding message to the server. |
_serverPort.send( |
- new TestServerCommand.chunkedEncoding(), _statusPort.toSendPort()); |
+ new IsolatedHttpServerCommand.chunkedEncoding(), |
+ _statusPort.toSendPort()); |
} |
ReceivePort _statusPort; // Port for receiving messages from the server. |
@@ -53,14 +55,14 @@ class TestServerMain { |
} |
-class TestServerCommand { |
+class IsolatedHttpServerCommand { |
static const START = 0; |
static const STOP = 1; |
static const CHUNKED_ENCODING = 2; |
- TestServerCommand.start() : _command = START; |
- TestServerCommand.stop() : _command = STOP; |
- TestServerCommand.chunkedEncoding() : _command = CHUNKED_ENCODING; |
+ IsolatedHttpServerCommand.start() : _command = START; |
+ IsolatedHttpServerCommand.stop() : _command = STOP; |
+ IsolatedHttpServerCommand.chunkedEncoding() : _command = CHUNKED_ENCODING; |
bool get isStart => _command == START; |
bool get isStop => _command == STOP; |
@@ -70,14 +72,14 @@ class TestServerCommand { |
} |
-class TestServerStatus { |
+class IsolatedHttpServerStatus { |
static const STARTED = 0; |
static const STOPPED = 1; |
static const ERROR = 2; |
- TestServerStatus.started(this._port) : _state = STARTED; |
- TestServerStatus.stopped() : _state = STOPPED; |
- TestServerStatus.error() : _state = ERROR; |
+ IsolatedHttpServerStatus.started(this._port) : _state = STARTED; |
+ IsolatedHttpServerStatus.stopped() : _state = STOPPED; |
+ IsolatedHttpServerStatus.error() : _state = ERROR; |
bool get isStarted => _state == STARTED; |
bool get isStopped => _state == STOPPED; |
@@ -90,7 +92,7 @@ class TestServerStatus { |
} |
-void startTestServer() { |
+void startIsolatedHttpServer() { |
var server = new TestServer(); |
server.init(); |
port.receive(server.dispatch); |
@@ -99,40 +101,45 @@ void startTestServer() { |
class TestServer { |
// Return a 404. |
- void _notFoundHandler(HttpRequest request, HttpResponse response) { |
+ void _notFoundHandler(HttpRequest request) { |
+ var response = request.response; |
response.statusCode = HttpStatus.NOT_FOUND; |
response.headers.set("Content-Type", "text/html; charset=UTF-8"); |
response.outputStream.writeString("Page not found"); |
- response.outputStream.close(); |
+ response.close(); |
} |
// Check the "Host" header. |
- void _hostHandler(HttpRequest request, HttpResponse response) { |
+ void _hostHandler(HttpRequest request) { |
+ var response = request.response; |
Expect.equals(1, request.headers["Host"].length); |
Expect.equals("www.dartlang.org:1234", request.headers["Host"][0]); |
Expect.equals("www.dartlang.org", request.headers.host); |
Expect.equals(1234, request.headers.port); |
response.statusCode = HttpStatus.OK; |
- response.outputStream.close(); |
+ response.close(); |
} |
// Set the "Expires" header using the expires property. |
- void _expires1Handler(HttpRequest request, HttpResponse response) { |
+ void _expires1Handler(HttpRequest request) { |
+ var response = request.response; |
DateTime date = new DateTime.utc(1999, DateTime.JUN, 11, 18, 46, 53, 0); |
response.headers.expires = date; |
Expect.equals(date, response.headers.expires); |
- response.outputStream.close(); |
+ response.close(); |
} |
// Set the "Expires" header. |
- void _expires2Handler(HttpRequest request, HttpResponse response) { |
+ void _expires2Handler(HttpRequest request) { |
+ var response = request.response; |
response.headers.set("Expires", "Fri, 11 Jun 1999 18:46:53 GMT"); |
DateTime date = new DateTime.utc(1999, DateTime.JUN, 11, 18, 46, 53, 0); |
Expect.equals(date, response.headers.expires); |
- response.outputStream.close(); |
+ response.close(); |
} |
- void _contentType1Handler(HttpRequest request, HttpResponse response) { |
+ void _contentType1Handler(HttpRequest request) { |
+ var response = request.response; |
Expect.equals("text/html", request.headers.contentType.value); |
Expect.equals("text", request.headers.contentType.primaryType); |
Expect.equals("html", request.headers.contentType.subType); |
@@ -141,10 +148,11 @@ class TestServer { |
ContentType contentType = new ContentType("text", "html"); |
contentType.parameters["charset"] = "utf-8"; |
response.headers.contentType = contentType; |
- response.outputStream.close(); |
+ response.close(); |
} |
- void _contentType2Handler(HttpRequest request, HttpResponse response) { |
+ void _contentType2Handler(HttpRequest request) { |
+ var response = request.response; |
Expect.equals("text/html", request.headers.contentType.value); |
Expect.equals("text", request.headers.contentType.primaryType); |
Expect.equals("html", request.headers.contentType.subType); |
@@ -152,10 +160,12 @@ class TestServer { |
response.headers.set(HttpHeaders.CONTENT_TYPE, |
"text/html; charset = utf-8"); |
- response.outputStream.close(); |
+ response.close(); |
} |
- void _cookie1Handler(HttpRequest request, HttpResponse response) { |
+ void _cookie1Handler(HttpRequest request) { |
+ var response = request.response; |
+ |
// No cookies passed with this request. |
Expect.equals(0, request.cookies.length); |
@@ -170,84 +180,56 @@ class TestServer { |
cookie2.domain = ".example.com"; |
cookie2.path = "/shop"; |
response.cookies.add(cookie2); |
- response.outputStream.close(); |
+ response.close(); |
} |
- void _cookie2Handler(HttpRequest request, HttpResponse response) { |
+ void _cookie2Handler(HttpRequest request) { |
+ var response = request.response; |
+ |
// Two cookies passed with this request. |
Expect.equals(2, request.cookies.length); |
- response.outputStream.close(); |
- } |
- |
- void _flushHandler(HttpRequest request, HttpResponse response) { |
- response.outputStream.flush(); |
- response.outputStream.close(); |
+ response.close(); |
} |
void init() { |
// Setup request handlers. |
_requestHandlers = new Map(); |
- _requestHandlers["/host"] = |
- (HttpRequest request, HttpResponse response) { |
- _hostHandler(request, response); |
- }; |
- _requestHandlers["/expires1"] = |
- (HttpRequest request, HttpResponse response) { |
- _expires1Handler(request, response); |
- }; |
- _requestHandlers["/expires2"] = |
- (HttpRequest request, HttpResponse response) { |
- _expires2Handler(request, response); |
- }; |
- _requestHandlers["/contenttype1"] = |
- (HttpRequest request, HttpResponse response) { |
- _contentType1Handler(request, response); |
- }; |
- _requestHandlers["/contenttype2"] = |
- (HttpRequest request, HttpResponse response) { |
- _contentType2Handler(request, response); |
- }; |
- _requestHandlers["/cookie1"] = |
- (HttpRequest request, HttpResponse response) { |
- _cookie1Handler(request, response); |
- }; |
- _requestHandlers["/cookie2"] = |
- (HttpRequest request, HttpResponse response) { |
- _cookie2Handler(request, response); |
- }; |
- _requestHandlers["/flush"] = |
- (HttpRequest request, HttpResponse response) { |
- _flushHandler(request, response); |
- }; |
+ _requestHandlers["/host"] = _hostHandler; |
+ _requestHandlers["/expires1"] = _expires1Handler; |
+ _requestHandlers["/expires2"] = _expires2Handler; |
+ _requestHandlers["/contenttype1"] = _contentType1Handler; |
+ _requestHandlers["/contenttype2"] = _contentType2Handler; |
+ _requestHandlers["/cookie1"] = _cookie1Handler; |
+ _requestHandlers["/cookie2"] = _cookie2Handler; |
} |
void dispatch(message, replyTo) { |
if (message.isStart) { |
- _server = new HttpServer(); |
try { |
- _server.listen("127.0.0.1", 0); |
- _server.defaultRequestHandler = (HttpRequest req, HttpResponse rsp) { |
- _requestReceivedHandler(req, rsp); |
- }; |
- replyTo.send(new TestServerStatus.started(_server.port), null); |
+ HttpServer.bind().then((server) { |
+ _server = server; |
+ _server.listen(_requestReceivedHandler); |
+ replyTo.send(new IsolatedHttpServerStatus.started(_server.port), |
+ null); |
+ }); |
} catch (e) { |
- replyTo.send(new TestServerStatus.error(), null); |
+ replyTo.send(new IsolatedHttpServerStatus.error(), null); |
} |
} else if (message.isStop) { |
_server.close(); |
port.close(); |
- replyTo.send(new TestServerStatus.stopped(), null); |
+ replyTo.send(new IsolatedHttpServerStatus.stopped(), null); |
} else if (message.isChunkedEncoding) { |
_chunkedEncoding = true; |
} |
} |
- void _requestReceivedHandler(HttpRequest request, HttpResponse response) { |
- var requestHandler =_requestHandlers[request.path]; |
+ void _requestReceivedHandler(HttpRequest request) { |
+ var requestHandler =_requestHandlers[request.uri.path]; |
if (requestHandler != null) { |
- requestHandler(request, response); |
+ requestHandler(request); |
} else { |
- _notFoundHandler(request, response); |
+ _notFoundHandler(request); |
} |
} |
@@ -258,52 +240,52 @@ class TestServer { |
Future testHost() { |
Completer completer = new Completer(); |
- TestServerMain testServerMain = new TestServerMain(); |
- testServerMain.setServerStartedHandler((int port) { |
+ IsolatedHttpServer server = new IsolatedHttpServer(); |
+ server.setServerStartedHandler((int port) { |
HttpClient httpClient = new HttpClient(); |
- HttpClientConnection conn = |
- httpClient.get("127.0.0.1", port, "/host"); |
- conn.onRequest = (HttpClientRequest request) { |
- Expect.equals("127.0.0.1:$port", request.headers["host"][0]); |
- request.headers.host = "www.dartlang.com"; |
- Expect.equals("www.dartlang.com:$port", request.headers["host"][0]); |
- Expect.equals("www.dartlang.com", request.headers.host); |
- Expect.equals(port, request.headers.port); |
- request.headers.port = 1234; |
- Expect.equals("www.dartlang.com:1234", request.headers["host"][0]); |
- Expect.equals(1234, request.headers.port); |
- request.headers.port = HttpClient.DEFAULT_HTTP_PORT; |
- Expect.equals(HttpClient.DEFAULT_HTTP_PORT, request.headers.port); |
- Expect.equals("www.dartlang.com", request.headers["host"][0]); |
- request.headers.set("Host", "www.dartlang.org"); |
- Expect.equals("www.dartlang.org", request.headers.host); |
- Expect.equals(HttpClient.DEFAULT_HTTP_PORT, request.headers.port); |
- request.headers.set("Host", "www.dartlang.org:"); |
- Expect.equals("www.dartlang.org", request.headers.host); |
- Expect.equals(HttpClient.DEFAULT_HTTP_PORT, request.headers.port); |
- request.headers.set("Host", "www.dartlang.org:1234"); |
- Expect.equals("www.dartlang.org", request.headers.host); |
- Expect.equals(1234, request.headers.port); |
- request.outputStream.close(); |
- }; |
- conn.onResponse = (HttpClientResponse response) { |
- Expect.equals(HttpStatus.OK, response.statusCode); |
- response.inputStream.onData = response.inputStream.read; |
- response.inputStream.onClosed = () { |
- httpClient.shutdown(); |
- testServerMain.shutdown(); |
- completer.complete(true); |
- }; |
- }; |
+ httpClient.get("127.0.0.1", port, "/host") |
+ .then((request) { |
+ Expect.equals("127.0.0.1:$port", request.headers["host"][0]); |
+ request.headers.host = "www.dartlang.com"; |
+ Expect.equals("www.dartlang.com:$port", request.headers["host"][0]); |
+ Expect.equals("www.dartlang.com", request.headers.host); |
+ Expect.equals(port, request.headers.port); |
+ request.headers.port = 1234; |
+ Expect.equals("www.dartlang.com:1234", request.headers["host"][0]); |
+ Expect.equals(1234, request.headers.port); |
+ request.headers.port = HttpClient.DEFAULT_HTTP_PORT; |
+ Expect.equals(HttpClient.DEFAULT_HTTP_PORT, request.headers.port); |
+ Expect.equals("www.dartlang.com", request.headers["host"][0]); |
+ request.headers.set("Host", "www.dartlang.org"); |
+ Expect.equals("www.dartlang.org", request.headers.host); |
+ Expect.equals(HttpClient.DEFAULT_HTTP_PORT, request.headers.port); |
+ request.headers.set("Host", "www.dartlang.org:"); |
+ Expect.equals("www.dartlang.org", request.headers.host); |
+ Expect.equals(HttpClient.DEFAULT_HTTP_PORT, request.headers.port); |
+ request.headers.set("Host", "www.dartlang.org:1234"); |
+ Expect.equals("www.dartlang.org", request.headers.host); |
+ Expect.equals(1234, request.headers.port); |
+ return request.close(); |
+ }) |
+ .then((response) { |
+ Expect.equals(HttpStatus.OK, response.statusCode); |
+ response.listen( |
+ (_) { }, |
+ onDone: () { |
+ httpClient.close(); |
+ server.shutdown(); |
+ completer.complete(true); |
+ }); |
+ }); |
}); |
- testServerMain.start(); |
+ server.start(); |
return completer.future; |
} |
Future testExpires() { |
Completer completer = new Completer(); |
- TestServerMain testServerMain = new TestServerMain(); |
- testServerMain.setServerStartedHandler((int port) { |
+ IsolatedHttpServer server = new IsolatedHttpServer(); |
+ server.setServerStartedHandler((int port) { |
int responses = 0; |
HttpClient httpClient = new HttpClient(); |
@@ -313,34 +295,32 @@ Future testExpires() { |
response.headers["expires"][0]); |
Expect.equals(new DateTime.utc(1999, DateTime.JUN, 11, 18, 46, 53, 0), |
response.headers.expires); |
- response.inputStream.onData = response.inputStream.read; |
- response.inputStream.onClosed = () { |
- responses++; |
- if (responses == 2) { |
- httpClient.shutdown(); |
- testServerMain.shutdown(); |
- completer.complete(true); |
- } |
- }; |
+ response.listen((_) { }, |
+ onDone: () { |
+ responses++; |
+ if (responses == 2) { |
+ httpClient.close(); |
+ server.shutdown(); |
+ completer.complete(true); |
+ } |
+ }); |
} |
- HttpClientConnection conn1 = httpClient.get("127.0.0.1", port, "/expires1"); |
- conn1.onResponse = (HttpClientResponse response) { |
- processResponse(response); |
- }; |
- HttpClientConnection conn2 = httpClient.get("127.0.0.1", port, "/expires2"); |
- conn2.onResponse = (HttpClientResponse response) { |
- processResponse(response); |
- }; |
+ httpClient.get("127.0.0.1", port, "/expires1") |
+ .then((request) => request.close()) |
+ .then(processResponse); |
+ httpClient.get("127.0.0.1", port, "/expires2") |
+ .then((request) => request.close()) |
+ .then(processResponse); |
}); |
- testServerMain.start(); |
+ server.start(); |
return completer.future; |
} |
Future testContentType() { |
Completer completer = new Completer(); |
- TestServerMain testServerMain = new TestServerMain(); |
- testServerMain.setServerStartedHandler((int port) { |
+ IsolatedHttpServer server = new IsolatedHttpServer(); |
+ server.setServerStartedHandler((int port) { |
int responses = 0; |
HttpClient httpClient = new HttpClient(); |
@@ -353,132 +333,100 @@ Future testContentType() { |
Expect.equals("html", response.headers.contentType.subType); |
Expect.equals("utf-8", |
response.headers.contentType.parameters["charset"]); |
- response.inputStream.onData = response.inputStream.read; |
- response.inputStream.onClosed = () { |
- responses++; |
- if (responses == 2) { |
- httpClient.shutdown(); |
- testServerMain.shutdown(); |
- completer.complete(true); |
- } |
- }; |
+ response.listen( |
+ (_) { }, |
+ onDone: () { |
+ responses++; |
+ if (responses == 2) { |
+ httpClient.close(); |
+ server.shutdown(); |
+ completer.complete(true); |
+ } |
+ }); |
} |
- HttpClientConnection conn1 = |
- httpClient.get("127.0.0.1", port, "/contenttype1"); |
- conn1.onRequest = (HttpClientRequest request) { |
- ContentType contentType = new ContentType(); |
- contentType.value = "text/html"; |
- contentType.parameters["charset"] = "utf-8"; |
- request.headers.contentType = contentType; |
- request.outputStream.close(); |
- }; |
- conn1.onResponse = (HttpClientResponse response) { |
- processResponse(response); |
- }; |
- HttpClientConnection conn2 = |
- httpClient.get("127.0.0.1", port, "/contenttype2"); |
- conn2.onRequest = (HttpClientRequest request) { |
- request.headers.set(HttpHeaders.CONTENT_TYPE, |
- "text/html; charset = utf-8"); |
- request.outputStream.close(); |
- }; |
- conn2.onResponse = (HttpClientResponse response) { |
- processResponse(response); |
- }; |
+ httpClient.get("127.0.0.1", port, "/contenttype1") |
+ .then((request) { |
+ ContentType contentType = new ContentType(); |
+ contentType.value = "text/html"; |
+ contentType.parameters["charset"] = "utf-8"; |
+ request.headers.contentType = contentType; |
+ return request.close(); |
+ }) |
+ .then(processResponse); |
+ |
+ httpClient.get("127.0.0.1", port, "/contenttype2") |
+ .then((request) { |
+ request.headers.set(HttpHeaders.CONTENT_TYPE, |
+ "text/html; charset = utf-8"); |
+ return request.close(); |
+ }) |
+ .then(processResponse); |
}); |
- testServerMain.start(); |
+ server.start(); |
return completer.future; |
} |
Future testCookies() { |
Completer completer = new Completer(); |
- TestServerMain testServerMain = new TestServerMain(); |
- testServerMain.setServerStartedHandler((int port) { |
+ IsolatedHttpServer server = new IsolatedHttpServer(); |
+ server.setServerStartedHandler((int port) { |
int responses = 0; |
HttpClient httpClient = new HttpClient(); |
- HttpClientConnection conn1 = |
- httpClient.get("127.0.0.1", port, "/cookie1"); |
- conn1.onResponse = (HttpClientResponse response) { |
- Expect.equals(2, response.cookies.length); |
- response.cookies.forEach((cookie) { |
- if (cookie.name == "name1") { |
- Expect.equals("value1", cookie.value); |
- DateTime date = new DateTime.utc(2014, DateTime.JAN, 5, 23, 59, 59, 0); |
- Expect.equals(date, cookie.expires); |
- Expect.equals("www.example.com", cookie.domain); |
- Expect.isTrue(cookie.httpOnly); |
- } else if (cookie.name == "name2") { |
- Expect.equals("value2", cookie.value); |
- Expect.equals(100, cookie.maxAge); |
- Expect.equals(".example.com", cookie.domain); |
- Expect.equals("/shop", cookie.path); |
- } else { |
- Expect.fail("Unexpected cookie"); |
- } |
- }); |
- HttpClientConnection conn2 = |
- httpClient.get("127.0.0.1", port, "/cookie2"); |
- conn2.onRequest = (HttpClientRequest request) { |
- request.cookies.add(response.cookies[0]); |
- request.cookies.add(response.cookies[1]); |
- request.outputStream.close(); |
- }; |
- conn2.onResponse = (HttpClientResponse response) { |
- response.inputStream.onData = response.inputStream.read; |
- response.inputStream.onClosed = () { |
- httpClient.shutdown(); |
- testServerMain.shutdown(); |
- completer.complete(true); |
- }; |
- }; |
- }; |
- }); |
- testServerMain.start(); |
- return completer.future; |
-} |
- |
-Future testFlush() { |
- Completer completer = new Completer(); |
- TestServerMain testServerMain = new TestServerMain(); |
- testServerMain.setServerStartedHandler((int port) { |
- HttpClient httpClient = new HttpClient(); |
- |
- HttpClientConnection conn = httpClient.get("127.0.0.1", port, "/flush"); |
- conn.onRequest = (HttpClientRequest request) { |
- request.outputStream.flush(); |
- request.outputStream.close(); |
- }; |
- conn.onResponse = (HttpClientResponse response) { |
- Expect.equals(HttpStatus.OK, response.statusCode); |
- response.inputStream.onData = response.inputStream.read; |
- response.inputStream.onClosed = () { |
- httpClient.shutdown(); |
- testServerMain.shutdown(); |
- completer.complete(true); |
- }; |
- }; |
+ httpClient.get("127.0.0.1", port, "/cookie1") |
+ .then((request) => request.close()) |
+ .then((response) { |
+ Expect.equals(2, response.cookies.length); |
+ response.cookies.forEach((cookie) { |
+ if (cookie.name == "name1") { |
+ Expect.equals("value1", cookie.value); |
+ DateTime date = |
+ new DateTime.utc(2014, DateTime.JAN, 5, 23, 59, 59, 0); |
+ Expect.equals(date, cookie.expires); |
+ Expect.equals("www.example.com", cookie.domain); |
+ Expect.isTrue(cookie.httpOnly); |
+ } else if (cookie.name == "name2") { |
+ Expect.equals("value2", cookie.value); |
+ Expect.equals(100, cookie.maxAge); |
+ Expect.equals(".example.com", cookie.domain); |
+ Expect.equals("/shop", cookie.path); |
+ } else { |
+ Expect.fail("Unexpected cookie"); |
+ } |
+ }); |
+ |
+ response.listen( |
+ (_) { }, |
+ onDone: () { |
+ httpClient.get("127.0.0.1", port, "/cookie2") |
+ .then((request) { |
+ request.cookies.add(response.cookies[0]); |
+ request.cookies.add(response.cookies[1]); |
+ return request.close(); |
+ }) |
+ .then((response) { |
+ response.listen( |
+ (_) { }, |
+ onDone: () { |
+ httpClient.close(); |
+ server.shutdown(); |
+ completer.complete(true); |
+ }); |
+ }); |
+ }); |
+ }); |
}); |
- testServerMain.start(); |
+ server.start(); |
return completer.future; |
} |
void main() { |
- print('testHost()'); |
testHost().then((_) { |
- print('testExpires()'); |
return testExpires().then((_) { |
- print('testContentType()'); |
return testContentType().then((_) { |
- print('testCookies()'); |
- return testCookies().then((_) { |
- print('testFlush()'); |
- return testFlush(); |
- }); |
+ return testCookies(); |
}); |
}); |
- }).then((_) { |
- print('done'); |
}); |
} |