platform/common/http_server/test/virtual_host_test.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);
});
});
}