blob: ea4636a27d737b0871c7f7bd2c58d9ca074a2a99 [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: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);
});
}