| // Copyright (c) 2021, 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:path/path.dart' as path; |
| import 'package:expect/expect.dart'; |
| |
| import '../snapshot_test_helper.dart'; |
| import '../../../concurrency/generate_stress_test.dart' |
| show testFiles, generateStressTest; |
| |
| // The only purpose of the test is to ensure we can generate a isolate stress |
| // test out of many normal dart tests (that are expected to be short-lived and |
| // passing). |
| // |
| // The actual isolate stress test is run on it's own builder (similar to our |
| // fuzzing test). |
| main() async { |
| if (!Platform.isLinux) return; |
| if (!Platform.executable.endsWith("ReleaseX64/dart")) return; |
| |
| final dartExecutable = Platform.executable; |
| await withTempDir((String tempDir) async { |
| final stressTest = path.join(tempDir, 'stress_test.dart'); |
| final stressTestDill = path.join(tempDir, 'stress_test.dill'); |
| |
| // Generate stress test. |
| File(stressTest).writeAsStringSync(await generateStressTest(testFiles)); |
| |
| final packageConfig = |
| path.join(path.absolute('.'), '.dart_tool/package_config.json'); |
| |
| // Compile stress test to kernel. |
| final args = [ |
| '--packages=$packageConfig', |
| '--snapshot-kind=kernel', |
| '--no-sound-null-safety', |
| '--snapshot=$stressTestDill', |
| stressTest |
| ]; |
| print('Running $dartExecutable ${args.join(' ')}'); |
| final process = await Process.start(dartExecutable, args); |
| process.stdout |
| .transform(utf8.decoder) |
| .transform(const LineSplitter()) |
| .listen((String line) { |
| stdout.writeln(line); |
| }); |
| process.stderr |
| .transform(utf8.decoder) |
| .transform(const LineSplitter()) |
| .listen((String line) { |
| stderr.writeln(line); |
| }); |
| final int exitCode = await process.exitCode; |
| if (exitCode != 0) { |
| final stressTestFile = 'runtime/tests/concurrency/stress_test_list.json'; |
| print('We fail to compile the isolate stress test.'); |
| print('=> It might be that $stressTestFile needs to be updated (possibly ' |
| 'by removing a test there).'); |
| Expect.equals(0, exitCode); |
| } |
| }); |
| } |