blob: e18743329abe9eb2a88de4b53119174ffa248dc9 [file] [log] [blame]
// Copyright (c) 2024, 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:convert';
import 'dart:developer';
import 'dart:io';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';
void main() {
HttpClient? client;
VmService? service;
tearDown(() async {
client?.close();
await service?.dispose();
});
test('Enabling the VM service starts DDS and serves DevTools', () async {
var serviceInfo = await Service.getInfo();
expect(serviceInfo.serverUri, isNull);
serviceInfo = await Service.controlWebServer(
enable: true,
silenceOutput: true,
);
print('VM service started');
expect(serviceInfo.serverUri, isNotNull);
final serverWebSocketUri = serviceInfo.serverWebSocketUri!;
service = await vmServiceConnectUri(
serverWebSocketUri.toString(),
);
// Check that DDS has been launched.
final supportedProtocols =
(await service!.getSupportedProtocols()).protocols!;
expect(supportedProtocols.length, 2);
expect(supportedProtocols.map((e) => e.protocolName), contains('DDS'));
// Check that DevTools assets are accessible.
client = HttpClient();
final devtoolsRequest = await client!.getUrl(serviceInfo.serverUri!);
final devtoolsResponse = await devtoolsRequest.close();
expect(devtoolsResponse.statusCode, 200);
final devtoolsContent =
await devtoolsResponse.transform(utf8.decoder).join();
expect(devtoolsContent, startsWith('<!DOCTYPE html>'));
});
}