| Index: pkg/http_server/test/virtual_host_test.dart
|
| diff --git a/pkg/http_server/test/virtual_host_test.dart b/pkg/http_server/test/virtual_host_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a08e7935ca20f5b6505e711ca8c4b3f748f62d45
|
| --- /dev/null
|
| +++ b/pkg/http_server/test/virtual_host_test.dart
|
| @@ -0,0 +1,181 @@
|
| +// 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.
|
| +
|
| +import 'dart:async';
|
| +import 'dart:io';
|
| +
|
| +import "package:unittest/unittest.dart";
|
| +import "package:http_server/http_server.dart";
|
| +
|
| +import 'utils.dart';
|
| +
|
| +void main() {
|
| + setupSecure();
|
| +
|
| + test('empty-host', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var virHost = new VirtualHost(server);
|
| + return getStatusCode(server.port, '/')
|
| + .whenComplete(server.close);
|
| + }), completion(equals(HttpStatus.FORBIDDEN)));
|
| + });
|
| +
|
| + test('empty-host-unhandled', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var virHost = new VirtualHost(server);
|
| + expect(virHost.unhandled.first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + return getStatusCode(server.port, '/')
|
| + .whenComplete(server.close);
|
| + }), completion(equals(HttpStatus.OK)));
|
| + });
|
| +
|
| + test('single-host', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var virHost = new VirtualHost(server);
|
| + expect(virHost.addHost('*.host.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + return getStatusCode(server.port, '/', host: 'my.host.com')
|
| + .whenComplete(server.close);
|
| + }), completion(equals(HttpStatus.OK)));
|
| + });
|
| +
|
| + test('multiple-host', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var virHost = new VirtualHost(server);
|
| + expect(virHost.addHost('*.host1.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('*.host2.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('*.host3.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + return Future.wait([
|
| + getStatusCode(server.port, '/', host: 'my.host1.com'),
|
| + getStatusCode(server.port, '/', host: 'my.host2.com'),
|
| + getStatusCode(server.port, '/', host: 'my.host3.com')])
|
| + .whenComplete(server.close);
|
| + }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
|
| + });
|
| +
|
| + test('multiple-source-https', () {
|
| + expect(Future.wait([
|
| + HttpServer.bind('localhost', 0),
|
| + HttpServer.bindSecure('localhost', 0, certificateName: CERTIFICATE)])
|
| + .then((servers) {
|
| + var virHost = new VirtualHost();
|
| + virHost.addSource(servers[0]);
|
| + virHost.addSource(servers[1]);
|
| + virHost.unhandled.listen((request) {
|
| + request.response.close();
|
| + });
|
| + return Future.wait([
|
| + getStatusCode(servers[0].port, '/', host: 'myhost1.com'),
|
| + getStatusCode(
|
| + servers[1].port, '/', host: 'myhost2.com', secure: true)])
|
| + .whenComplete(() => servers.forEach((s) => s.close()));
|
| + }), completion(equals([HttpStatus.OK, HttpStatus.OK])));
|
| + });
|
| +
|
| + group('domain', () {
|
| + test('specific-sub-domain', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var virHost = new VirtualHost(server);
|
| + expect(virHost.addHost('my1.host.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('my2.host.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('my3.host.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + return Future.wait([
|
| + getStatusCode(server.port, '/', host: 'my1.host.com'),
|
| + getStatusCode(server.port, '/', host: 'my2.host.com'),
|
| + getStatusCode(server.port, '/', host: 'my3.host.com')])
|
| + .whenComplete(server.close);
|
| + }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
|
| + });
|
| +
|
| + test('wildcard-sub-domain', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var virHost = new VirtualHost(server);
|
| + expect(virHost.addHost('*.host1.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('*.host2.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('*.host3.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + return Future.wait([
|
| + getStatusCode(server.port, '/', host: 'my.host1.com'),
|
| + getStatusCode(server.port, '/', host: 'my.host2.com'),
|
| + getStatusCode(server.port, '/', host: 'my.host3.com')])
|
| + .whenComplete(server.close);
|
| + }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
|
| + });
|
| +
|
| + test('mix-sub-domain', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var virHost = new VirtualHost(server);
|
| + expect(virHost.addHost('my1.host.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('my2.host.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('*.host.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + return Future.wait([
|
| + getStatusCode(server.port, '/', host: 'my1.host.com'),
|
| + getStatusCode(server.port, '/', host: 'my2.host.com'),
|
| + getStatusCode(server.port, '/', host: 'my3.host.com')])
|
| + .whenComplete(server.close);
|
| + }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
|
| + });
|
| +
|
| +
|
| + test('wildcard', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var virHost = new VirtualHost(server);
|
| + expect(virHost.addHost('*').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('*.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + expect(virHost.addHost('*.host.com').first.then((request) {
|
| + request.response.close();
|
| + }), completion(isNull));
|
| + return Future.wait([
|
| + getStatusCode(server.port, '/', host: 'some.host.dk'),
|
| + getStatusCode(server.port, '/', host: 'my.host2.com'),
|
| + getStatusCode(server.port, '/', host: 'long.sub.of.host.com')])
|
| + .whenComplete(server.close);
|
| + }), completion(equals([HttpStatus.OK, HttpStatus.OK, HttpStatus.OK])));
|
| + });
|
| +
|
| + test('duplicate-domain', () {
|
| + var virHost = new VirtualHost();
|
| + virHost.addHost('my1.host.com');
|
| + expect(() => (virHost.addHost('my1.host.com')), throwsArgumentError);
|
| + virHost.addHost('*.host.com');
|
| + expect(() => (virHost.addHost('*.host.com')), throwsArgumentError);
|
| + virHost.addHost('my2.host.com');
|
| + virHost.addHost('my3.host.com');
|
| + virHost.addHost('*.com');
|
| + virHost.addHost('*');
|
| + expect(() => (virHost.addHost('*')), throwsArgumentError);
|
| + });
|
| + });
|
| +}
|
| +
|
|
|