// 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: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( 'long_sleep_script.dart', pauseOnStart: false, subscribeToStdio: false, ); }); tearDown(() async { await dds.shutdown(); process.kill(); }); test('Ensure DDS starts when isolate is blocked', () async { // Wait for the Dart program to start running, then wait a bit more to make // sure the isolate is actually blocked on the sleep(...) call. await process.stdout.transform(utf8.decoder).first; await Future.delayed(const Duration(milliseconds: 500)); print('Starting DDS...'); // Before the fix for b/323386606, this call would hang as the isolate // waiting on the sleep(...) call would never respond to a service request, // preventing DDS initialization from completing. dds = await DartDevelopmentService.startDartDevelopmentService( remoteVmServiceUri, ); print('DDS started'); expect(dds.isRunning, true); }); }