bdec682558
Previously the test would create and run an isolate, then checking the debugName of the isolate.
However, if the isolate ran to completion and got collected before the check happened, the debugName would be null, causing the test to fail.
The test was running at about 1.5% flakiness when run locally before.
With the change no flakiness was observed across several couple hundred runs.
Tested:
tools/test.py -n dartk-optcounter-linux-release-x64 \
lib_2/isolate/spawn_function_test --repeat=1000
Change-Id: I0aea6bbae08fbe321e1bea7301655ad06ec3dcd2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108410
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Clement Skau <cskau@google.com>
44 lines
1.2 KiB
Dart
44 lines
1.2 KiB
Dart
// Copyright (c) 2012, 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.
|
|
|
|
// Example of spawning an isolate from a function.
|
|
library spawn_tests;
|
|
|
|
import 'dart:isolate';
|
|
import 'package:unittest/unittest.dart';
|
|
import "remote_unittest_helper.dart";
|
|
|
|
isolateEntryPoint(args) {
|
|
var msg = args[0];
|
|
var sendPort = args[1];
|
|
sendPort.send('re: $msg');
|
|
}
|
|
|
|
void main([args, port]) {
|
|
if (testRemote(main, port)) {
|
|
return;
|
|
}
|
|
|
|
test('message - reply chain', () async {
|
|
const String debugName = 'spawnedIsolate';
|
|
|
|
ReceivePort port = new ReceivePort();
|
|
port.listen(expectAsync((msg) {
|
|
port.close();
|
|
expect(msg, equals('re: hi'));
|
|
}));
|
|
|
|
// Start new isolate; paused so it's alive till we read the debugName.
|
|
// If the isolate runs to completion, the isolate might get cleaned up
|
|
// and debugName might be null.
|
|
final isolate = await Isolate.spawn(
|
|
isolateEntryPoint, ['hi', port.sendPort],
|
|
paused: true, debugName: debugName);
|
|
|
|
expect(isolate.debugName, debugName);
|
|
|
|
isolate.resume(isolate.pauseCapability);
|
|
});
|
|
}
|