diff --git a/pkg/dds/test/control_web_server_starts_dds_test.dart b/pkg/dds/test/control_web_server_starts_dds_test.dart deleted file mode 100644 index 4fb25fba6ab..00000000000 --- a/pkg/dds/test/control_web_server_starts_dds_test.dart +++ /dev/null @@ -1,51 +0,0 @@ -// 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, - ); - 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('')); - }); -} diff --git a/runtime/observatory/tests/service/developer_server_control_test.dart b/runtime/observatory/tests/service/developer_server_control_test.dart index 3e6c2a8b9bd..18498f233b4 100644 --- a/runtime/observatory/tests/service/developer_server_control_test.dart +++ b/runtime/observatory/tests/service/developer_server_control_test.dart @@ -15,7 +15,7 @@ Uri? wsServerUri; Future testeeBefore() async { print('testee before'); - // First grab the URL where the VM service is listening and the + // First grab the URL where the observatory is listening on and the // service protocol version numbers. We expect the URL to be null as // the server has not been started yet. ServiceProtocolInfo info = await Service.getInfo(); diff --git a/sdk/lib/_internal/vm/bin/vmservice_io.dart b/sdk/lib/_internal/vm/bin/vmservice_io.dart index 56fa7fa4688..d16187640b8 100644 --- a/sdk/lib/_internal/vm/bin/vmservice_io.dart +++ b/sdk/lib/_internal/vm/bin/vmservice_io.dart @@ -96,7 +96,7 @@ class _DebuggingSession { bool disableServiceAuthCodes, bool enableDevTools, ) async { - final dartDir = File(Platform.executable).parent.path; + final dartDir = File(Platform.resolvedExecutable).parent.path; final executable = [ dartDir, 'dart${Platform.isWindows ? '.exe' : ''}', @@ -133,7 +133,7 @@ class _DebuggingSession { // is changed to ensure consistency. const devToolsMessagePrefix = 'The Dart DevTools debugger and profiler is available at:'; - serverPrint('$devToolsMessagePrefix $devToolsUri'); + print('$devToolsMessagePrefix $devToolsUri'); } if (result case { @@ -141,7 +141,7 @@ class _DebuggingSession { 'uri': String dtdUri, } } when _printDtd) { - serverPrint('The Dart Tooling Daemon (DTD) is available at: $dtdUri'); + print('The Dart Tooling Daemon (DTD) is available at: $dtdUri'); } } else { printError(result['error'] ?? result); @@ -308,37 +308,18 @@ Future>> listFilesCallback(Uri dirPath) async { Uri? serverInformationCallback() => _lazyServerBoot().serverAddress; -Future _toggleWebServer(Server server) async { - // Toggle HTTP server. - if (server.running) { - await server.shutdown(true).then((_) async { - ddsInstance?.shutdown(); - ddsInstance = null; - await VMService().clearState(); - serverFuture = null; - }); - } else { - await server.startup().then((_) async { - if (_waitForDdsToAdvertiseService) { - ddsInstance = _DebuggingSession(); - await ddsInstance!.start( - _ddsIP, - _ddsPort.toString(), - _authCodesDisabled, - _serveDevtools, - ); - } - }); - } -} - Future webServerControlCallback(bool enable, bool? silenceOutput) async { if (silenceOutput != null) { silentObservatory = silenceOutput; } final _server = _lazyServerBoot(); if (_server.running != enable) { - await _toggleWebServer(_server); + if (enable) { + await _server.startup(); + // TODO: if dds is enabled a dds instance needs to be started. + } else { + await _server.shutdown(true); + } } return _server.serverAddress; } @@ -348,13 +329,32 @@ void webServerAcceptNewWebSocketConnections(bool enable) { _server.acceptNewWebSocketConnections = enable; } -Future _onSignal(ProcessSignal signal) async { +_onSignal(ProcessSignal signal) async { if (serverFuture != null) { // Still waiting. return; } - final server = _lazyServerBoot(); - await _toggleWebServer(server); + final _server = _lazyServerBoot(); + // Toggle HTTP server. + if (_server.running) { + _server.shutdown(true).then((_) async { + ddsInstance?.shutdown(); + await VMService().clearState(); + serverFuture = null; + }); + } else { + _server.startup().then((_) { + if (_waitForDdsToAdvertiseService) { + ddsInstance = _DebuggingSession() + ..start( + _ddsIP, + _ddsPort.toString(), + _authCodesDisabled, + _serveDevtools, + ); + } + }); + } } Timer? _registerSignalHandlerTimer; @@ -400,10 +400,18 @@ main() { // can be delivered and waiting loaders can be cancelled. VMService(); if (_autoStart) { - assert(server == null); final _server = _lazyServerBoot(); - assert(!_server.running); - _toggleWebServer(_server); + _server.startup().then((_) { + if (_waitForDdsToAdvertiseService) { + ddsInstance = _DebuggingSession() + ..start( + _ddsIP, + _ddsPort.toString(), + _authCodesDisabled, + _serveDevtools, + ); + } + }); // It's just here to push an event on the event loop so that we invoke the // scheduled microtasks. Timer.run(() {});