157 lines
5.2 KiB
Dart
157 lines
5.2 KiB
Dart
// 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:test/test.dart';
|
|
import 'package:platform_http_server/http_server.dart';
|
|
|
|
import 'utils.dart';
|
|
|
|
void main() {
|
|
setUpAll(setupSecure);
|
|
|
|
group('virtual host', () {
|
|
late HttpServer server;
|
|
late VirtualHost virHost;
|
|
|
|
setUp(() async {
|
|
server = await HttpServer.bind('localhost', 0);
|
|
virHost = VirtualHost(server);
|
|
});
|
|
|
|
tearDown(() async {
|
|
await server.close();
|
|
});
|
|
test('empty-host', () async {
|
|
var statusCode = await fetchStatusCode(server.port, '/');
|
|
expect(statusCode, equals(HttpStatus.forbidden));
|
|
});
|
|
|
|
test('empty-host-unhandled', () async {
|
|
var statusCodes = fetchStatusCode(server.port, '/');
|
|
var request = await virHost.unhandled.first;
|
|
await request.response.close();
|
|
expect(await statusCodes, equals(HttpStatus.ok));
|
|
});
|
|
|
|
test('single-host', () async {
|
|
var host = virHost.addHost('*.host.com');
|
|
var statusCode = fetchStatusCode(server.port, '/', host: 'my.host.com');
|
|
var request = await host.first;
|
|
await request.response.close();
|
|
expect(await statusCode, equals(HttpStatus.ok));
|
|
});
|
|
|
|
test('multiple-host', () async {});
|
|
|
|
group('domain', () {
|
|
test('specific-sub-domain', () async {
|
|
var hosts = [
|
|
virHost.addHost('my1.host.com'),
|
|
virHost.addHost('my2.host.com'),
|
|
virHost.addHost('my3.host.com'),
|
|
];
|
|
var statusCodes = [
|
|
fetchStatusCode(server.port, '/', host: 'my1.host.com'),
|
|
fetchStatusCode(server.port, '/', host: 'my2.host.com'),
|
|
fetchStatusCode(server.port, '/', host: 'my3.host.com'),
|
|
];
|
|
for (var host in hosts) {
|
|
var request = await host.first;
|
|
await request.response.close();
|
|
}
|
|
expect(await Future.wait(statusCodes),
|
|
equals([HttpStatus.ok, HttpStatus.ok, HttpStatus.ok]));
|
|
});
|
|
|
|
test('wildcard-sub-domain', () async {
|
|
var hosts = [
|
|
virHost.addHost('*.host1.com'),
|
|
virHost.addHost('*.host2.com'),
|
|
virHost.addHost('*.host3.com'),
|
|
];
|
|
var statusCodes = [
|
|
fetchStatusCode(server.port, '/', host: 'my.host1.com'),
|
|
fetchStatusCode(server.port, '/', host: 'my.host2.com'),
|
|
fetchStatusCode(server.port, '/', host: 'my.host3.com'),
|
|
];
|
|
for (var host in hosts) {
|
|
var request = await host.first;
|
|
await request.response.close();
|
|
}
|
|
expect(await Future.wait(statusCodes),
|
|
equals([HttpStatus.ok, HttpStatus.ok, HttpStatus.ok]));
|
|
});
|
|
|
|
test('mix-sub-domain', () async {
|
|
var hosts = [
|
|
virHost.addHost('my1.host.com'),
|
|
virHost.addHost('my2.host.com'),
|
|
virHost.addHost('*.host.com'),
|
|
];
|
|
var statusCodes = [
|
|
fetchStatusCode(server.port, '/', host: 'my1.host.com'),
|
|
fetchStatusCode(server.port, '/', host: 'my2.host.com'),
|
|
fetchStatusCode(server.port, '/', host: 'my3.host.com'),
|
|
];
|
|
for (var host in hosts) {
|
|
var request = await host.first;
|
|
await request.response.close();
|
|
}
|
|
expect(await Future.wait(statusCodes),
|
|
equals([HttpStatus.ok, HttpStatus.ok, HttpStatus.ok]));
|
|
});
|
|
|
|
test('wildcard', () async {
|
|
var hosts = [
|
|
virHost.addHost('*'),
|
|
virHost.addHost('*.com'),
|
|
virHost.addHost('*.host.com'),
|
|
];
|
|
var statusCodes = [
|
|
fetchStatusCode(server.port, '/', host: 'some.host.dk'),
|
|
fetchStatusCode(server.port, '/', host: 'my.host2.com'),
|
|
fetchStatusCode(server.port, '/', host: 'long.sub.of.host.com'),
|
|
];
|
|
for (var host in hosts) {
|
|
var request = await host.first;
|
|
await request.response.close();
|
|
}
|
|
expect(await Future.wait(statusCodes),
|
|
equals([HttpStatus.ok, HttpStatus.ok, HttpStatus.ok]));
|
|
});
|
|
});
|
|
|
|
test('multiple-source-https', () async {
|
|
var secondServer =
|
|
await HttpServer.bindSecure('localhost', 0, serverContext);
|
|
virHost.addSource(secondServer);
|
|
virHost.unhandled.listen((request) {
|
|
request.response.close();
|
|
});
|
|
var statusCodes = await Future.wait([
|
|
fetchStatusCode(server.port, '/', host: 'myhost1.com'),
|
|
fetchStatusCode(secondServer.port, '/',
|
|
host: 'myhost2.com', secure: true)
|
|
]);
|
|
expect(statusCodes, [HttpStatus.ok, HttpStatus.ok]);
|
|
await secondServer.close();
|
|
});
|
|
|
|
test('duplicate-domain', () {
|
|
var virHost = 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);
|
|
});
|
|
});
|
|
}
|