68 lines
2.3 KiB
Dart
68 lines
2.3 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter_devicelab/framework/runner.dart';
|
|
import 'package:vm_service/vm_service.dart';
|
|
|
|
import 'common.dart';
|
|
|
|
void main() {
|
|
final isolateParams = <String, String>{'runFlutterConfig': 'false', 'timeoutInMinutes': '1'};
|
|
late List<String> printLog;
|
|
void print(String s) => printLog.add(s);
|
|
|
|
group('run.dart script', () {
|
|
test('Reruns - Test passes the first time.', () async {
|
|
printLog = <String>[];
|
|
await runTasks(
|
|
<String>['smoke_test_success'],
|
|
isolateParams: isolateParams,
|
|
print: print,
|
|
logs: printLog,
|
|
);
|
|
expect(printLog.length, 2);
|
|
expect(printLog[0], 'Test passed on first attempt.');
|
|
expect(printLog[1], 'flaky: false');
|
|
});
|
|
|
|
test('Reruns - Test fails all reruns.', () async {
|
|
printLog = <String>[];
|
|
await runTasks(
|
|
<String>['smoke_test_failure'],
|
|
isolateParams: isolateParams,
|
|
print: print,
|
|
logs: printLog,
|
|
);
|
|
expect(printLog.length, 2);
|
|
expect(printLog[0], 'Consistently failed across all 3 executions.');
|
|
expect(printLog[1], 'flaky: false');
|
|
});
|
|
|
|
test(
|
|
'Ensures task results are received before task process shuts down.',
|
|
() async {
|
|
// Regression test for https://github.com/flutter/flutter/issues/155475
|
|
//
|
|
// Runs multiple concurrent instances of a short-lived task in an effort to
|
|
// trigger the race between the VM service processing the response from
|
|
// ext.cocoonRunTask and the VM shutting down, which will throw a RPCError
|
|
// with a "Service connection disposed" message.
|
|
//
|
|
// Obviously this isn't foolproof, but this test becoming flaky or failing
|
|
// consistently should signal that we're encountering a shutdown race
|
|
// somewhere.
|
|
const runs = 30;
|
|
try {
|
|
await Future.wait(<Future<void>>[
|
|
for (int i = 0; i < runs; ++i)
|
|
runTasks(<String>['smoke_test_success'], isolateParams: isolateParams),
|
|
], eagerError: true);
|
|
} on RPCError catch (e) {
|
|
fail('Unexpected RPCError: $e');
|
|
}
|
|
},
|
|
timeout: const Timeout.factor(2),
|
|
);
|
|
});
|
|
}
|