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

Side by Side Diff: pkg/http_server/test/virtual_host_test.dart

Issue 17581002: Add new VirtualHost class to http_server package, for handling multiple hosts on multiple sources (… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'dart:async';
6 import 'dart:io';
7
8 import "package:unittest/unittest.dart";
9 import "package:http_server/http_server.dart";
10
11
12 const CERTIFICATE = "localhost_cert";
13
14 Future<int> getStatusCode(int port,
15 String path,
16 {String host,
17 bool secure: false}) {
18 var uri = (secure ? "https" : "http") + '://localhost:$port$path';
Søren Gjesse 2013/06/24 07:58:37 Mow about using the new Uri.http / Uri.https const
Anders Johnsen 2013/06/24 10:07:06 Done.
19 return new HttpClient().getUrl(Uri.parse(uri))
20 .then((request) {
21 if (host != null) request.headers.host = host;
22 return request.close();
23 })
24 .then((response) => response.drain().then(
25 (_) => response.statusCode));
26 }
27
28
29 void main() {
30 Path scriptDir = new Path(new Options().script).directoryPath;
31 Path certificateDatabase = scriptDir.append('pkcert');
32 SecureSocket.initialize(database: certificateDatabase.toNativePath(),
33 password: 'dartdart');
34
35 test('empty-host', () {
36 expect(HttpServer.bind('localhost', 0).then((server) {
37 var virHost = new VirtualHost(server);
38 return getStatusCode(server.port, '/')
39 .whenComplete(server.close);
40 }), completion(equals(HttpStatus.FORBIDDEN)));
41 });
42
43 test('empty-host-unhandled', () {
44 expect(HttpServer.bind('localhost', 0).then((server) {
45 var virHost = new VirtualHost(server);
46 expect(virHost.unhandled.first.then((request) {
47 request.response.close();
48 }), completion(isNull));
49 return getStatusCode(server.port, '/')
50 .whenComplete(server.close);
51 }), completion(equals(HttpStatus.OK)));
52 });
53
54 test('single-host', () {
55 expect(HttpServer.bind('localhost', 0).then((server) {
56 var virHost = new VirtualHost(server);
57 expect(virHost.addHost('*.host.com').first.then((request) {
58 request.response.close();
59 }), completion(isNull));
60 return getStatusCode(server.port, '/', host: 'my.host.com')
61 .whenComplete(server.close);
62 }), completion(equals(HttpStatus.OK)));
63 });
64
65 test('multiple-host', () {
66 expect(HttpServer.bind('localhost', 0).then((server) {
67 var virHost = new VirtualHost(server);
68 expect(virHost.addHost('*.host1.com').first.then((request) {
69 request.response.close();
70 }), completion(isNull));
71 expect(virHost.addHost('*.host2.com').first.then((request) {
72 request.response.close();
73 }), completion(isNull));
74 expect(virHost.addHost('*.host3.com').first.then((request) {
75 request.response.close();
76 }), completion(isNull));
77 return Future.wait([
78 getStatusCode(server.port, '/', host: 'my.host1.com'),
79 getStatusCode(server.port, '/', host: 'my.host2.com'),
80 getStatusCode(server.port, '/', host: 'my.host3.com')])
81 .whenComplete(server.close);
82 }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
83 });
84
85 test('multiple-source-https', () {
86 expect(Future.wait([
87 HttpServer.bind('localhost', 0),
88 HttpServer.bindSecure('localhost', 0, certificateName: CERTIFICATE)])
89 .then((servers) {
90 var virHost = new VirtualHost();
91 virHost.addSource(servers[0]);
92 virHost.addSource(servers[1]);
93 virHost.unhandled.listen((request) {
94 request.response.close();
95 });
96 return Future.wait([
97 getStatusCode(servers[0].port, '/', host: 'myhost1.com'),
98 getStatusCode(servers[1].port, '/', host: 'myhost2.com', secure: true) ])
ricow1 2013/06/24 07:41:30 long line
Anders Johnsen 2013/06/24 10:07:06 Done.
99 .whenComplete(() => servers.forEach((s) => s.close()));
100 }), completion(equals([HttpStatus.OK, HttpStatus.OK])));
101 });
102
103 group('domain', () {
104 test('specific-sub-domain', () {
105 expect(HttpServer.bind('localhost', 0).then((server) {
106 var virHost = new VirtualHost(server);
107 expect(virHost.addHost('my1.host.com').first.then((request) {
108 request.response.close();
109 }), completion(isNull));
110 expect(virHost.addHost('my2.host.com').first.then((request) {
111 request.response.close();
112 }), completion(isNull));
113 expect(virHost.addHost('my3.host.com').first.then((request) {
114 request.response.close();
115 }), completion(isNull));
116 return Future.wait([
117 getStatusCode(server.port, '/', host: 'my1.host.com'),
118 getStatusCode(server.port, '/', host: 'my2.host.com'),
119 getStatusCode(server.port, '/', host: 'my3.host.com')])
120 .whenComplete(server.close);
121 }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
122 });
123
124 test('wildcard-sub-domain', () {
125 expect(HttpServer.bind('localhost', 0).then((server) {
126 var virHost = new VirtualHost(server);
127 expect(virHost.addHost('*.host1.com').first.then((request) {
128 request.response.close();
129 }), completion(isNull));
130 expect(virHost.addHost('*.host2.com').first.then((request) {
131 request.response.close();
132 }), completion(isNull));
133 expect(virHost.addHost('*.host3.com').first.then((request) {
134 request.response.close();
135 }), completion(isNull));
136 return Future.wait([
137 getStatusCode(server.port, '/', host: 'my.host1.com'),
138 getStatusCode(server.port, '/', host: 'my.host2.com'),
139 getStatusCode(server.port, '/', host: 'my.host3.com')])
140 .whenComplete(server.close);
141 }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
142 });
143
144 test('mix-sub-domain', () {
145 expect(HttpServer.bind('localhost', 0).then((server) {
146 var virHost = new VirtualHost(server);
147 expect(virHost.addHost('my1.host.com').first.then((request) {
148 request.response.close();
149 }), completion(isNull));
150 expect(virHost.addHost('my2.host.com').first.then((request) {
151 request.response.close();
152 }), completion(isNull));
153 expect(virHost.addHost('*.host.com').first.then((request) {
154 request.response.close();
155 }), completion(isNull));
156 return Future.wait([
157 getStatusCode(server.port, '/', host: 'my1.host.com'),
158 getStatusCode(server.port, '/', host: 'my2.host.com'),
159 getStatusCode(server.port, '/', host: 'my3.host.com')])
160 .whenComplete(server.close);
161 }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
162 });
163
164
165 test('wildcard', () {
166 expect(HttpServer.bind('localhost', 0).then((server) {
167 var virHost = new VirtualHost(server);
168 expect(virHost.addHost('*').first.then((request) {
169 request.response.close();
170 }), completion(isNull));
171 expect(virHost.addHost('*.com').first.then((request) {
172 request.response.close();
173 }), completion(isNull));
174 expect(virHost.addHost('*.host.com').first.then((request) {
175 request.response.close();
176 }), completion(isNull));
177 return Future.wait([
178 getStatusCode(server.port, '/', host: 'some.host.dk'),
179 getStatusCode(server.port, '/', host: 'my.host2.com'),
180 getStatusCode(server.port, '/', host: 'long.sub.of.host.com')])
181 .whenComplete(server.close);
182 }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
183 });
184
185 test('duplicate-domain', () {
186 var virHost = new VirtualHost();
187 virHost.addHost('my1.host.com');
188 expect(() => (virHost.addHost('my1.host.com')), throwsArgumentError);
189 virHost.addHost('*.host.com');
190 expect(() => (virHost.addHost('*.host.com')), throwsArgumentError);
191 virHost.addHost('my2.host.com');
192 virHost.addHost('my3.host.com');
193 virHost.addHost('*.com');
194 virHost.addHost('*');
195 expect(() => (virHost.addHost('*')), throwsArgumentError);
196 });
197 });
198 }
199
OLDNEW
« pkg/http_server/lib/src/virtual_host.dart ('K') | « pkg/http_server/lib/src/virtual_host.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698