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

Unified Diff: tests/standalone/io/http_session_test.dart

Issue 11175030: Add sessions to HttpServer. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Review update. Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
« runtime/bin/http_impl.dart ('K') | « runtime/bin/io_sources.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
new file mode 100644
index 0000000000000000000000000000000000000000..dd2e059aa6de6606da1c1dd0398b0a6945bde551
--- /dev/null
+++ b/tests/standalone/io/http_session_test.dart
@@ -0,0 +1,103 @@
+// Copyright (c) 2012, 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.
+
+#import("dart:io");
+
+const SESSION_ID = "DARTSESSID";
+
+String getSessionId(List<Cookie> cookies) {
+ var id = cookies.reduce(null, (last, cookie) {
+ if (last != null) return last;
+ if (cookie.name.toUpperCase() == SESSION_ID) {
+ return cookie.value;
+ }
+ return null;
+ });
+ Expect.isNotNull(id);
+ 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) {
+ client.shutdown();
+ c.complete(getSessionId(response.cookies));
+ };
+ return c.future;
+}
+
+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 futures = [];
+ for (int i = 0; i < sessionCount; i++) {
+ futures.add(connectGetSession(server.port).chain((session) {
+ Expect.isNotNull(session);
+ Expect.isTrue(sessions.contains(session));
+ return connectGetSession(server.port, session).transform((session2) {
+ Expect.equals(session2, session);
+ Expect.isTrue(sessions.contains(session2));
+ return session2;
+ });
+ }));
+ }
+ Futures.wait(futures).then((clientSessions) {
+ Expect.equals(sessions.length, sessionCount);
+ Expect.setEquals(new Set.from(clientSessions), sessions);
+ server.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 futures = [];
+ for (int i = 0; i < sessionCount; i++) {
+ futures.add(connectGetSession(server.port));
+ }
+ Futures.wait(futures).then((clientSessions) {
+ Futures.wait(timeouts).then((_) {
+ futures = [];
+ for (var id in clientSessions) {
+ futures.add(connectGetSession(server.port, id).transform((session) {
+ Expect.isNotNull(session);
+ Expect.notEquals(id, session);
+ }));
+ }
+ Futures.wait(futures).then((_) {
+ server.close();
+ });
+ });
+ });
+}
+
+void main() {
+ testSessions(5);
+ testTimeout(5);
+}
« runtime/bin/http_impl.dart ('K') | « runtime/bin/io_sources.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698