Index: tests/standalone/io/http_session_test.dart |
diff --git a/tests/standalone/io/http_session_test.dart b/tests/standalone/io/http_session_test.dart |
index 796408f17185d6d02560dc27e8bc1670dd458a45..69f6a6b0d9b0f096099903986311ba635886a182 100644 |
--- a/tests/standalone/io/http_session_test.dart |
+++ b/tests/standalone/io/http_session_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. |
@@ -20,89 +20,137 @@ String getSessionId(List<Cookie> cookies) { |
return id; |
} |
-Future<String> connectGetSession(int port, [String session]) { |
- var c = new Completer(); |
- var client = new HttpClient(); |
- var conn = client.get("127.0.0.1", port, "/"); |
- conn.onRequest = (request) { |
- if (session != null) { |
- request.cookies.add(new Cookie(SESSION_ID, session)); |
- } |
- request.outputStream.close(); |
- }; |
- conn.onResponse = (response) { |
- response.inputStream.onData = response.inputStream.read; |
- response.inputStream.onClosed = () { |
- client.shutdown(); |
- c.complete(getSessionId(response.cookies)); |
- }; |
- }; |
- return c.future; |
+Future<String> connectGetSession( |
+ HttpClient client, int port, [String session]) { |
+ return client.get("127.0.0.1", port, "/") |
+ .then((request) { |
+ if (session != null) { |
+ request.cookies.add(new Cookie(SESSION_ID, session)); |
+ } |
+ return request.close(); |
+ }) |
+ .then((response) { |
+ return response.reduce(getSessionId(response.cookies), (v, _) => v); |
+ }); |
} |
void testSessions(int sessionCount) { |
- HttpServer server = new HttpServer(); |
- server.listen("127.0.0.1", 0); |
- var sessions = new Set(); |
- server.defaultRequestHandler = (request, response) { |
- sessions.add(request.session().id); |
- response.outputStream.close(); |
- }; |
+ var client = new HttpClient(); |
+ HttpServer.bind().then((server) { |
+ var sessions = new Set(); |
+ server.listen((request) { |
+ sessions.add(request.session.id); |
+ request.response.close(); |
+ }); |
- var futures = []; |
- for (int i = 0; i < sessionCount; i++) { |
- futures.add(connectGetSession(server.port).then((session) { |
- Expect.isNotNull(session); |
- Expect.isTrue(sessions.contains(session)); |
- return connectGetSession(server.port, session).then((session2) { |
- Expect.equals(session2, session); |
- Expect.isTrue(sessions.contains(session2)); |
- return session2; |
+ var futures = []; |
+ for (int i = 0; i < sessionCount; i++) { |
+ futures.add(connectGetSession(client, server.port).then((session) { |
+ Expect.isNotNull(session); |
+ Expect.isTrue(sessions.contains(session)); |
+ return connectGetSession(client, server.port, session).then((session2) { |
+ Expect.equals(session2, session); |
+ Expect.isTrue(sessions.contains(session2)); |
+ return session2; |
}); |
- })); |
- } |
- Future.wait(futures).then((clientSessions) { |
- Expect.equals(sessions.length, sessionCount); |
- Expect.setEquals(new Set.from(clientSessions), sessions); |
- server.close(); |
+ })); |
+ } |
+ Future.wait(futures).then((clientSessions) { |
+ Expect.equals(sessions.length, sessionCount); |
+ Expect.setEquals(new Set.from(clientSessions), sessions); |
+ server.close(); |
+ client.close(); |
+ }); |
}); |
} |
void testTimeout(int sessionCount) { |
- HttpServer server = new HttpServer(); |
- server.sessionTimeout = 0; |
- server.listen("127.0.0.1", 0); |
- var timeouts = []; |
- server.defaultRequestHandler = (request, response) { |
- var c = new Completer(); |
- timeouts.add(c.future); |
- request.session().onTimeout = () { |
- c.complete(null); |
- }; |
- response.outputStream.close(); |
- }; |
+ var client = new HttpClient(); |
+ HttpServer.bind().then((server) { |
+ server.sessionTimeout = 0; |
+ var timeouts = []; |
+ server.listen((request) { |
+ var c = new Completer(); |
+ timeouts.add(c.future); |
+ request.session.onTimeout = () { |
+ c.complete(null); |
+ }; |
+ request.response.close(); |
+ }); |
- var futures = []; |
- for (int i = 0; i < sessionCount; i++) { |
- futures.add(connectGetSession(server.port)); |
- } |
- Future.wait(futures).then((clientSessions) { |
- Future.wait(timeouts).then((_) { |
- futures = []; |
- for (var id in clientSessions) { |
- futures.add(connectGetSession(server.port, id).then((session) { |
- Expect.isNotNull(session); |
- Expect.notEquals(id, session); |
- })); |
- } |
- Future.wait(futures).then((_) { |
- server.close(); |
+ var futures = []; |
+ for (int i = 0; i < sessionCount; i++) { |
+ futures.add(connectGetSession(client, server.port)); |
+ } |
+ Future.wait(futures).then((clientSessions) { |
+ Future.wait(timeouts).then((_) { |
+ futures = []; |
+ for (var id in clientSessions) { |
+ futures.add(connectGetSession( |
+ client, server.port, id).then((session) { |
+ Expect.isNotNull(session); |
+ Expect.notEquals(id, session); |
+ })); |
+ } |
+ Future.wait(futures).then((_) { |
+ server.close(); |
+ client.close(); |
+ }); |
}); |
}); |
}); |
} |
+void testSessionsData() { |
+ HttpServer.bind().then((server) { |
+ bool firstHit = false; |
+ bool secondHit = false; |
+ server.listen((request) { |
+ var c = new Completer(); |
+ var session = request.session; |
+ if (session.isNew) { |
+ Expect.isFalse(firstHit); |
+ Expect.isFalse(secondHit); |
+ firstHit = true; |
+ session["data"] = "some data"; |
+ } else { |
+ Expect.isTrue(firstHit); |
+ Expect.isFalse(secondHit); |
+ secondHit = true; |
+ Expect.isTrue(session.containsKey("data")); |
+ Expect.equals("some data", session["data"]); |
+ }; |
+ request.response.close(); |
+ }); |
+ |
+ var client = new HttpClient(); |
+ client.get("127.0.0.1", server.port, "/") |
+ .then((request) => request.close()) |
+ .then((response) { |
+ response.listen((_) {}, onDone: () { |
+ var id = getSessionId(response.cookies); |
+ Expect.isNotNull(id); |
+ client.get("127.0.0.1", server.port, "/") |
+ .then((request) { |
+ request.cookies.add(new Cookie(SESSION_ID, id)); |
+ return request.close(); |
+ }) |
+ .then((response) { |
+ response.listen((_) {}, onDone: () { |
+ Expect.isTrue(firstHit); |
+ Expect.isTrue(secondHit); |
+ Expect.equals(id, getSessionId(response.cookies)); |
+ server.close(); |
+ client.close(); |
+ }); |
+ }); |
+ }); |
+ }); |
+ }); |
+} |
+ |
void main() { |
- testSessions(5); |
+ testSessions(1); |
testTimeout(5); |
+ testSessionsData(); |
} |