From 19e56613cf8bb6898aada2d8a6685a7824ccd4e8 Mon Sep 17 00:00:00 2001 From: Vyacheslav Egorov Date: Wed, 3 May 2023 13:24:39 +0000 Subject: [PATCH] [infra] Prevent VM AOT tests from poluting SDK source. Extend test_runner VMOptions support with an ability to specify paths relative to temporary compilation directory. // VMOptions=--foo=$TEST_COMPILATION_DIR/foo.file The same directory will also be passed as an environment variable to execution command. Migrate most of the tests which used to write stuff into the SDK root to use this feature. I am leaving vm/dart/causal/* tests unmigrated because migrating requires time consuming manual update of expectations (which encode raw line numbers). I have a follow up CL which changes how these tests are written which will make migration trivial. Change-Id: Id53008be66de8ff18623efac27ff15750f407749 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/300600 Reviewed-by: William Hesse Commit-Queue: Slava Egorov --- .gitignore | 5 ----- pkg/test_runner/lib/src/test_suite.dart | 22 ++++++++++++------- ..._stack_trace_invisible_functions_test.dart | 6 +++-- .../dwarf_stack_trace_obfuscate_test.dart | 5 +++-- tests/standalone/dwarf_stack_trace_test.dart | 5 +++-- .../socket_connect_dwarf_stacktrace_test.dart | 7 ++++-- ..._stack_trace_invisible_functions_test.dart | 2 +- .../dwarf_stack_trace_obfuscate_test.dart | 5 +++-- .../standalone_2/dwarf_stack_trace_test.dart | 5 +++-- .../socket_connect_dwarf_stacktrace_test.dart | 6 +++-- 10 files changed, 40 insertions(+), 28 deletions(-) diff --git a/.gitignore b/.gitignore index 3c7338f1ac8..5868805e7be 100644 --- a/.gitignore +++ b/.gitignore @@ -104,8 +104,3 @@ tools/xcodebuild /pkg/front_end/testcases/old_dills/ logs/logs.json logs/results.json -/async_lazy_debug.so -/dwarf.so -/dwarf_obfuscate.so -/il_tmp.txt - diff --git a/pkg/test_runner/lib/src/test_suite.dart b/pkg/test_runner/lib/src/test_suite.dart index e15ad6f792b..69c8f6d8873 100644 --- a/pkg/test_runner/lib/src/test_suite.dart +++ b/pkg/test_runner/lib/src/test_suite.dart @@ -812,12 +812,11 @@ class StandardTestSuite extends TestSuite { var commands = []; var compilerConfiguration = configuration.compilerConfiguration; + var environment = {...environmentOverrides, ...testFile.environment}; var compileTimeArguments = []; String tempDir; CommandArtifact? compilationArtifact; if (compilerConfiguration.hasCompiler) { - compileTimeArguments = compilerConfiguration.computeCompilerArguments( - testFile, vmOptions, args); // Avoid doing this for analyzer. var path = testFile.path; if (vmOptionsVariant != 0) { @@ -826,6 +825,15 @@ class StandardTestSuite extends TestSuite { } tempDir = createCompilationOutputDirectory(path); + vmOptions = [ + for (var opt in vmOptions) + opt.replaceAll(r'$TEST_COMPILATION_DIR', tempDir) + ]; + environment['TEST_COMPILATION_DIR'] = tempDir; + + compileTimeArguments = compilerConfiguration.computeCompilerArguments( + testFile, vmOptions, args); + for (var name in testFile.otherResources) { var namePath = Path(name); var fromPath = testFile.path.directoryPath.join(namePath); @@ -845,10 +853,10 @@ class StandardTestSuite extends TestSuite { return commands; } - vmOptions = vmOptions - .map((s) => - s.replaceAll("__RANDOM__", "${Random().nextInt(0x7fffffff)}")) - .toList(); + vmOptions = [ + for (var opt in vmOptions) + opt.replaceAll("__RANDOM__", "${Random().nextInt(0x7fffffff)}") + ]; var runtimeArguments = compilerConfiguration.computeRuntimeArguments( configuration.runtimeConfiguration, @@ -857,8 +865,6 @@ class StandardTestSuite extends TestSuite { args, compilationArtifact); - var environment = {...environmentOverrides, ...testFile.environment}; - return commands ..addAll(configuration.runtimeConfiguration.computeRuntimeCommands( compilationArtifact, diff --git a/tests/standalone/dwarf_stack_trace_invisible_functions_test.dart b/tests/standalone/dwarf_stack_trace_invisible_functions_test.dart index a9fe0f3bb8c..4c0f58902b4 100644 --- a/tests/standalone/dwarf_stack_trace_invisible_functions_test.dart +++ b/tests/standalone/dwarf_stack_trace_invisible_functions_test.dart @@ -2,7 +2,7 @@ // 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. -/// VMOptions=--dwarf-stack-traces --save-debugging-info=dwarf_invisible_functions.so +/// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/dwarf_invisible_functions.so import 'dart:io'; @@ -67,7 +67,9 @@ Future main() async { return; // Generated dwarf.so not available on the test device. } - final dwarf = Dwarf.fromFile("dwarf_invisible_functions.so")!; + final dwarf = Dwarf.fromFile(path.join( + Platform.environment["TEST_COMPILATION_DIR"]!, + "dwarf_invisible_functions.so"))!; await dwarf_stack_trace_test.checkStackTrace( rawStack, dwarf, expectedCallsInfo); diff --git a/tests/standalone/dwarf_stack_trace_obfuscate_test.dart b/tests/standalone/dwarf_stack_trace_obfuscate_test.dart index 23eb3f99a80..d109984ad94 100644 --- a/tests/standalone/dwarf_stack_trace_obfuscate_test.dart +++ b/tests/standalone/dwarf_stack_trace_obfuscate_test.dart @@ -2,7 +2,7 @@ // 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. -/// VMOptions=--dwarf-stack-traces --save-debugging-info=dwarf_obfuscate.so --obfuscate +/// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/dwarf_obfuscate.so --obfuscate import 'dart:io'; @@ -40,7 +40,8 @@ Future main() async { return; // Generated dwarf.so not available on the test device. } - final dwarf = Dwarf.fromFile("dwarf_obfuscate.so")!; + final dwarf = Dwarf.fromFile(path.join( + Platform.environment['TEST_COMPILATION_DIR']!, "dwarf_obfuscate.so"))!; await base.checkStackTrace(rawStack, dwarf, expectedCallsInfo); } diff --git a/tests/standalone/dwarf_stack_trace_test.dart b/tests/standalone/dwarf_stack_trace_test.dart index 257218c968f..34964fde434 100644 --- a/tests/standalone/dwarf_stack_trace_test.dart +++ b/tests/standalone/dwarf_stack_trace_test.dart @@ -2,7 +2,7 @@ // 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. -/// VMOptions=--dwarf-stack-traces --save-debugging-info=dwarf.so +/// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/dwarf.so import 'dart:convert'; import 'dart:io'; @@ -40,7 +40,8 @@ Future main() async { return; // Generated dwarf.so not available on the test device. } - final dwarf = Dwarf.fromFile("dwarf.so")!; + final dwarf = Dwarf.fromFile( + path.join(Platform.environment["TEST_COMPILATION_DIR"]!, "dwarf.so"))!; await checkStackTrace(rawStack, dwarf, expectedCallsInfo); } diff --git a/tests/standalone/io/socket_connect_dwarf_stacktrace_test.dart b/tests/standalone/io/socket_connect_dwarf_stacktrace_test.dart index 09da91dae3c..b61b3b9397c 100644 --- a/tests/standalone/io/socket_connect_dwarf_stacktrace_test.dart +++ b/tests/standalone/io/socket_connect_dwarf_stacktrace_test.dart @@ -2,7 +2,7 @@ // 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. // -// VMOptions=--dwarf-stack-traces --save-debugging-info=socket_connect_debug.so +// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/socket_connect_debug.so // // Tests stack trace on socket exceptions. // @@ -14,6 +14,7 @@ import "dart:io"; import "package:async_helper/async_helper.dart"; import "package:expect/expect.dart"; import "package:native_stack_traces/native_stack_traces.dart"; +import "package:path/path.dart" as path; Future> findFrames( Dwarf dwarf, RegExp re, StackTrace stackTrace) async { @@ -28,7 +29,9 @@ Future> findFrames( Future main() async { asyncStart(); - final dwarf = Dwarf.fromFile('socket_connect_debug.so')!; + final dwarf = Dwarf.fromFile(path.join( + Platform.environment['TEST_COMPILATION_DIR']!, + 'socket_connect_debug.so'))!; // Test stacktrace when lookup fails try { await WebSocket.connect('ws://localhost.tld:0/ws'); diff --git a/tests/standalone_2/dwarf_stack_trace_invisible_functions_test.dart b/tests/standalone_2/dwarf_stack_trace_invisible_functions_test.dart index 411ebd94364..509f5f91f30 100644 --- a/tests/standalone_2/dwarf_stack_trace_invisible_functions_test.dart +++ b/tests/standalone_2/dwarf_stack_trace_invisible_functions_test.dart @@ -4,7 +4,7 @@ // @dart = 2.9 -// VMOptions=--dwarf-stack-traces --save-debugging-info=dwarf_invisible_functions.so +// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/dwarf_invisible_functions.so import 'dart:io'; diff --git a/tests/standalone_2/dwarf_stack_trace_obfuscate_test.dart b/tests/standalone_2/dwarf_stack_trace_obfuscate_test.dart index f21fff13b62..c901b8a4fe6 100644 --- a/tests/standalone_2/dwarf_stack_trace_obfuscate_test.dart +++ b/tests/standalone_2/dwarf_stack_trace_obfuscate_test.dart @@ -4,7 +4,7 @@ // @dart = 2.9 -/// VMOptions=--dwarf-stack-traces --save-debugging-info=dwarf_obfuscate.so --obfuscate +/// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/dwarf_obfuscate.so --obfuscate import 'dart:io'; @@ -42,7 +42,8 @@ Future main() async { return; // Generated dwarf.so not available on the test device. } - final dwarf = Dwarf.fromFile("dwarf_obfuscate.so"); + final dwarf = Dwarf.fromFile(path.join( + Platform.environment['TEST_COMPILATION_DIR'], "dwarf_obfuscate.so")); await base.checkStackTrace(rawStack, dwarf, expectedCallsInfo); } diff --git a/tests/standalone_2/dwarf_stack_trace_test.dart b/tests/standalone_2/dwarf_stack_trace_test.dart index 5a96765294c..da4c9c22c2f 100644 --- a/tests/standalone_2/dwarf_stack_trace_test.dart +++ b/tests/standalone_2/dwarf_stack_trace_test.dart @@ -4,7 +4,7 @@ // @dart = 2.9 -/// VMOptions=--dwarf-stack-traces --save-debugging-info=dwarf.so +/// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/dwarf.so import 'dart:convert'; import 'dart:io'; @@ -42,7 +42,8 @@ Future main() async { return; // Generated dwarf.so not available on the test device. } - final dwarf = Dwarf.fromFile("dwarf.so"); + final dwarf = Dwarf.fromFile( + path.join(Platform.environment['TEST_COMPILATION_DIR'], "dwarf.so")); await checkStackTrace(rawStack, dwarf, expectedCallsInfo); } diff --git a/tests/standalone_2/io/socket_connect_dwarf_stacktrace_test.dart b/tests/standalone_2/io/socket_connect_dwarf_stacktrace_test.dart index d2f56b74dcc..7ff3a331247 100644 --- a/tests/standalone_2/io/socket_connect_dwarf_stacktrace_test.dart +++ b/tests/standalone_2/io/socket_connect_dwarf_stacktrace_test.dart @@ -2,7 +2,7 @@ // 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. // -// VMOptions=--dwarf-stack-traces --save-debugging-info=socket_connect_debug.so +// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/socket_connect_debug.so // // Tests stack trace on socket exceptions. // @@ -14,6 +14,7 @@ import "dart:io"; import "package:async_helper/async_helper.dart"; import "package:expect/expect.dart"; import "package:native_stack_traces/native_stack_traces.dart"; +import "package:path/path.dart"; Future> findFrames( Dwarf dwarf, RegExp re, StackTrace stackTrace) async { @@ -28,7 +29,8 @@ Future> findFrames( Future main() async { asyncStart(); - final dwarfFromFile = Dwarf.fromFile('socket_connect_debug.so'); + final dwarfFromFile = Dwarf.fromFile(path.join( + Platform.environment['TEST_COMPILATION_DIR'], 'socket_connect_debug.so')); if (dwarfFromFile == null) { Expect.fail('Debug binary is missing'); return;