blob: 522ed6d490c9f442d4b8a87cc934dd97ca53804a [file] [log] [blame]
// Copyright (c) 2020, 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';
import 'package:dds/dds.dart';
import 'package:test/test.dart';
import 'common/test_helper.dart';
void main() {
late Process process;
late DartDevelopmentService dds;
setUp(() async {
process = await spawnDartProcess('smoke.dart');
});
tearDown(() async {
await dds.shutdown();
process.kill();
});
Future<int> getAvailablePort() async {
final tmpServer = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
final port = tmpServer.port;
await tmpServer.close();
return port;
}
group('Ensure DDS URIs are consistent', () {
test('without authentication codes', () async {
final port = await getAvailablePort();
final serviceUri = Uri.parse('http://127.0.0.1:$port/');
dds = await DartDevelopmentService.startDartDevelopmentService(
remoteVmServiceUri,
serviceUri: serviceUri,
enableAuthCodes: false,
);
expect(dds.uri, serviceUri);
expect(
dds.sseUri,
serviceUri.replace(
scheme: 'sse',
pathSegments: ['\$debugHandler'],
),
);
expect(
dds.wsUri,
serviceUri.replace(
scheme: 'ws',
pathSegments: ['ws'],
),
);
});
test('with authentication codes', () async {
final port = await getAvailablePort();
final serviceUri = Uri.parse('http://127.0.0.1:$port/');
dds = await DartDevelopmentService.startDartDevelopmentService(
remoteVmServiceUri,
serviceUri: serviceUri,
);
// We need to pull the authentication code out of the main DDS URI, so
// just make sure that it's at the right address and port.
expect(dds.uri.toString().contains(serviceUri.toString()), isTrue);
expect(dds.uri!.pathSegments, isNotEmpty);
final authCode = dds.uri!.pathSegments.first;
expect(
dds.sseUri,
serviceUri.replace(
scheme: 'sse',
pathSegments: [authCode, '\$debugHandler'],
),
);
expect(
dds.wsUri,
serviceUri.replace(
scheme: 'ws',
pathSegments: [authCode, 'ws'],
),
);
});
});
}