Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: tools/testing/dart/test_runner.dart

Issue 2524733004: Avoid random stacktraces being printed from tools/test.py during test runs (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * Classes and methods for executing tests. 6 * Classes and methods for executing tests.
7 * 7 *
8 * This module includes: 8 * This module includes:
9 * - Managing parallel execution of tests, including timeout checks. 9 * - Managing parallel execution of tests, including timeout checks.
10 * - Evaluating the output of each test as pass/fail/crash/timeout. 10 * - Evaluating the output of each test as pass/fail/crash/timeout.
(...skipping 1836 matching lines...) Expand 10 before | Expand all | Expand 10 after
1847 */ 1847 */
1848 class RunningProcess { 1848 class RunningProcess {
1849 ProcessCommand command; 1849 ProcessCommand command;
1850 int timeout; 1850 int timeout;
1851 bool timedOut = false; 1851 bool timedOut = false;
1852 DateTime startTime; 1852 DateTime startTime;
1853 Timer timeoutTimer; 1853 Timer timeoutTimer;
1854 int pid; 1854 int pid;
1855 OutputLog stdout = new OutputLog(); 1855 OutputLog stdout = new OutputLog();
1856 OutputLog stderr = new OutputLog(); 1856 OutputLog stderr = new OutputLog();
1857 List<String> diagnostics = <String>[];
1857 bool compilationSkipped = false; 1858 bool compilationSkipped = false;
1858 Completer<CommandOutput> completer; 1859 Completer<CommandOutput> completer;
1859 1860
1860 RunningProcess(this.command, this.timeout); 1861 RunningProcess(this.command, this.timeout);
1861 1862
1862 Future<CommandOutput> run() { 1863 Future<CommandOutput> run() {
1863 completer = new Completer<CommandOutput>(); 1864 completer = new Completer<CommandOutput>();
1864 startTime = new DateTime.now(); 1865 startTime = new DateTime.now();
1865 _runCommand(); 1866 _runCommand();
1866 return completer.future; 1867 return completer.future;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 stderrDone = true; 1911 stderrDone = true;
1911 1912
1912 if (stdoutDone && watchdogTimer != null) { 1913 if (stdoutDone && watchdogTimer != null) {
1913 watchdogTimer.cancel(); 1914 watchdogTimer.cancel();
1914 } 1915 }
1915 } 1916 }
1916 } 1917 }
1917 1918
1918 // Close stdin so that tests that try to block on input will fail. 1919 // Close stdin so that tests that try to block on input will fail.
1919 process.stdin.close(); 1920 process.stdin.close();
1920 void timeoutHandler() { 1921 timeoutHandler() async {
1921 timedOut = true; 1922 timedOut = true;
1922 if (process != null) { 1923 if (process != null) {
1924 var executable, arguments;
1923 if (io.Platform.isLinux) { 1925 if (io.Platform.isLinux) {
1924 // Try to print stack traces of the timed out process. 1926 executable = 'eu-stack';
1925 io.Process.run('eu-stack', ['-p ${process.pid}']) 1927 arguments = ['-p ${process.pid}'];
1926 .then((result) {
1927 io.stdout.write(result.stdout);
1928 io.stderr.write(result.stderr);
1929 })
1930 .catchError(
1931 (error) => print("Error when printing stack trace: $error"))
1932 .whenComplete(() {
1933 if (!process.kill()) {
1934 DebugLogger.error("Unable to kill ${process.pid}");
1935 }
1936 });
1937 } else if (io.Platform.isMacOS) { 1928 } else if (io.Platform.isMacOS) {
1938 // Try to print stack traces of the timed out process. 1929 // Try to print stack traces of the timed out process.
1939 // `sample` is a sampling profiler but we ask it sample for 1 1930 // `sample` is a sampling profiler but we ask it sample for 1
1940 // second with a 4 second delay between samples so that we only 1931 // second with a 4 second delay between samples so that we only
1941 // sample the threads once. 1932 // sample the threads once.
1942 io.Process.run('/usr/bin/sample', 1933 executable = '/usr/bin/sample';
1943 ['${process.pid}', '1', '4000', '-mayDie']) 1934 arguments = ['${process.pid}', '1', '4000', '-mayDie'];
1944 .then((result) { 1935 }
1945 io.stdout.write(result.stdout); 1936
1946 io.stderr.write(result.stderr); 1937 if (executable != null) {
1947 }) 1938 try {
1948 .catchError( 1939 var result = await io.Process.run(executable, arguments);
1949 (error) => print("Error when printing stack trace: $error")) 1940 diagnostics.addAll(result.stdout.split('\n'));
1950 .whenComplete(() { 1941 diagnostics.addAll(result.stderr.split('\n'));
1951 if (!process.kill()) { 1942 } catch (error) {
1952 DebugLogger.error("Unable to kill ${process.pid}"); 1943 diagnostics.add("Unable to capture stack traces: $error");
1953 }
1954 });
1955 } else {
1956 if (!process.kill()) {
1957 DebugLogger.error("Unable to kill ${process.pid}");
1958 } 1944 }
1959 } 1945 }
1946
1947 if (!process.kill()) {
1948 diagnostics.add("Unable to kill ${process.pid}");
1949 }
1960 } 1950 }
1961 } 1951 }
1962 1952
1963 stdoutSubscription.asFuture().then(closeStdout); 1953 stdoutSubscription.asFuture().then(closeStdout);
1964 stderrSubscription.asFuture().then(closeStderr); 1954 stderrSubscription.asFuture().then(closeStderr);
1965 1955
1966 process.exitCode.then((exitCode) { 1956 process.exitCode.then((exitCode) {
1967 if (!stdoutDone || !stderrDone) { 1957 if (!stdoutDone || !stderrDone) {
1968 watchdogTimer = new Timer(MAX_STDIO_DELAY, () { 1958 watchdogTimer = new Timer(MAX_STDIO_DELAY, () {
1969 DebugLogger.warning( 1959 DebugLogger.warning(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2007 CommandOutput _createCommandOutput(ProcessCommand command, int exitCode) { 1997 CommandOutput _createCommandOutput(ProcessCommand command, int exitCode) {
2008 var commandOutput = createCommandOutput( 1998 var commandOutput = createCommandOutput(
2009 command, 1999 command,
2010 exitCode, 2000 exitCode,
2011 timedOut, 2001 timedOut,
2012 stdout.toList(), 2002 stdout.toList(),
2013 stderr.toList(), 2003 stderr.toList(),
2014 new DateTime.now().difference(startTime), 2004 new DateTime.now().difference(startTime),
2015 compilationSkipped, 2005 compilationSkipped,
2016 pid); 2006 pid);
2007 commandOutput.diagnostics.addAll(diagnostics);
2017 return commandOutput; 2008 return commandOutput;
2018 } 2009 }
2019 2010
2020 StreamSubscription _drainStream( 2011 StreamSubscription _drainStream(
2021 Stream<List<int>> source, OutputLog destination) { 2012 Stream<List<int>> source, OutputLog destination) {
2022 return source.listen(destination.add); 2013 return source.listen(destination.add);
2023 } 2014 }
2024 2015
2025 Map<String, String> _createProcessEnvironment() { 2016 Map<String, String> _createProcessEnvironment() {
2026 var environment = new Map.from(io.Platform.environment); 2017 var environment = new Map.from(io.Platform.environment);
(...skipping 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after
3149 } 3140 }
3150 } 3141 }
3151 3142
3152 void eventAllTestsDone() { 3143 void eventAllTestsDone() {
3153 for (var listener in _eventListener) { 3144 for (var listener in _eventListener) {
3154 listener.allDone(); 3145 listener.allDone();
3155 } 3146 }
3156 _allDone(); 3147 _allDone();
3157 } 3148 }
3158 } 3149 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698