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

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

Issue 2946783002: Simplify CommandOutput and friends. (Closed)
Patch Set: Merge branch 'master' into simplify-command-output Created 3 years, 6 months 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 | « tools/testing/dart/command_output.dart ('k') | 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 11 matching lines...) Expand all
22 import 'command.dart'; 22 import 'command.dart';
23 import 'command_output.dart'; 23 import 'command_output.dart';
24 import 'configuration.dart'; 24 import 'configuration.dart';
25 import 'dependency_graph.dart' as dgraph; 25 import 'dependency_graph.dart' as dgraph;
26 import 'expectation.dart'; 26 import 'expectation.dart';
27 import 'runtime_configuration.dart'; 27 import 'runtime_configuration.dart';
28 import 'test_progress.dart'; 28 import 'test_progress.dart';
29 import 'test_suite.dart'; 29 import 'test_suite.dart';
30 import 'utils.dart'; 30 import 'utils.dart';
31 31
32 const int CRASHING_BROWSER_EXITCODE = -10; 32 const int browserCrashExitCode = -10;
33 const int SLOW_TIMEOUT_MULTIPLIER = 4; 33 const int slowTimeoutMultiplier = 4;
34 const int NON_UTF_FAKE_EXITCODE = 0xFFFD; 34 const int nonUtfFakeExitCode = 0xFFFD;
35 35
36 const MESSAGE_CANNOT_OPEN_DISPLAY = 'Gtk-WARNING **: cannot open display'; 36 const cannotOpenDisplayMessage = 'Gtk-WARNING **: cannot open display';
37 const MESSAGE_FAILED_TO_RUN_COMMAND = 'Failed to run command. return code=1'; 37 const failedToRunCommandMessage = 'Failed to run command. return code=1';
38 38
39 typedef void TestCaseEvent(TestCase testCase); 39 typedef void TestCaseEvent(TestCase testCase);
40 typedef void ExitCodeEvent(int exitCode); 40 typedef void ExitCodeEvent(int exitCode);
41 typedef void EnqueueMoreWork(ProcessQueue queue); 41 typedef void EnqueueMoreWork(ProcessQueue queue);
42 typedef void Action(); 42 typedef void Action();
43 typedef Future<AdbCommandResult> StepFunction(); 43 typedef Future<AdbCommandResult> StepFunction();
44 44
45 // Some IO tests use these variables and get confused if the host environment 45 /// Some IO tests use these variables and get confused if the host environment
46 // variables are inherited so they are excluded. 46 /// variables are inherited so they are excluded.
47 const EXCLUDED_ENVIRONMENT_VARIABLES = const [ 47 const _excludedEnvironmentVariables = const [
48 'http_proxy', 48 'http_proxy',
49 'https_proxy', 49 'https_proxy',
50 'no_proxy', 50 'no_proxy',
51 'HTTP_PROXY', 51 'HTTP_PROXY',
52 'HTTPS_PROXY', 52 'HTTPS_PROXY',
53 'NO_PROXY' 53 'NO_PROXY'
54 ]; 54 ];
55 55
56 /** 56 /**
57 * TestCase contains all the information needed to run a test and evaluate 57 * TestCase contains all the information needed to run a test and evaluate
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 throw new Exception("CommandOutputs is empty, maybe no command was run? (" 159 throw new Exception("CommandOutputs is empty, maybe no command was run? ("
160 "displayName: '$displayName', " 160 "displayName: '$displayName', "
161 "configurationString: '$configurationString')"); 161 "configurationString: '$configurationString')");
162 } 162 }
163 return commands[commandOutputs.length - 1]; 163 return commands[commandOutputs.length - 1];
164 } 164 }
165 165
166 int get timeout { 166 int get timeout {
167 var result = configuration.timeout; 167 var result = configuration.timeout;
168 if (expectedOutcomes.contains(Expectation.slow)) { 168 if (expectedOutcomes.contains(Expectation.slow)) {
169 result *= SLOW_TIMEOUT_MULTIPLIER; 169 result *= slowTimeoutMultiplier;
170 } 170 }
171 return result; 171 return result;
172 } 172 }
173 173
174 String get configurationString { 174 String get configurationString {
175 var compiler = configuration.compiler.name; 175 var compiler = configuration.compiler.name;
176 var runtime = configuration.runtime.name; 176 var runtime = configuration.runtime.name;
177 var mode = configuration.mode.name; 177 var mode = configuration.mode.name;
178 var arch = configuration.architecture.name; 178 var arch = configuration.architecture.name;
179 var checked = configuration.isChecked ? '-checked' : ''; 179 var checked = configuration.isChecked ? '-checked' : '';
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 completer.complete(commandOutput); 536 completer.complete(commandOutput);
537 } 537 }
538 538
539 CommandOutput _createCommandOutput(ProcessCommand command, int exitCode) { 539 CommandOutput _createCommandOutput(ProcessCommand command, int exitCode) {
540 List<int> stdoutData = stdout.toList(); 540 List<int> stdoutData = stdout.toList();
541 List<int> stderrData = stderr.toList(); 541 List<int> stderrData = stderr.toList();
542 if (stdout.hasNonUtf8 || stderr.hasNonUtf8) { 542 if (stdout.hasNonUtf8 || stderr.hasNonUtf8) {
543 // If the output contained non-utf8 formatted data, then make the exit 543 // If the output contained non-utf8 formatted data, then make the exit
544 // code non-zero if it isn't already. 544 // code non-zero if it isn't already.
545 if (exitCode == 0) { 545 if (exitCode == 0) {
546 exitCode = NON_UTF_FAKE_EXITCODE; 546 exitCode = nonUtfFakeExitCode;
547 } 547 }
548 } 548 }
549 var commandOutput = createCommandOutput( 549 var commandOutput = createCommandOutput(
550 command, 550 command,
551 exitCode, 551 exitCode,
552 timedOut, 552 timedOut,
553 stdoutData, 553 stdoutData,
554 stderrData, 554 stderrData,
555 new DateTime.now().difference(startTime), 555 new DateTime.now().difference(startTime),
556 compilationSkipped, 556 compilationSkipped,
557 pid); 557 pid);
558 commandOutput.diagnostics.addAll(diagnostics); 558 commandOutput.diagnostics.addAll(diagnostics);
559 return commandOutput; 559 return commandOutput;
560 } 560 }
561 561
562 StreamSubscription _drainStream( 562 StreamSubscription _drainStream(
563 Stream<List<int>> source, OutputLog destination) { 563 Stream<List<int>> source, OutputLog destination) {
564 return source.listen(destination.add); 564 return source.listen(destination.add);
565 } 565 }
566 566
567 Map<String, String> _createProcessEnvironment() { 567 Map<String, String> _createProcessEnvironment() {
568 var environment = new Map<String, String>.from(io.Platform.environment); 568 var environment = new Map<String, String>.from(io.Platform.environment);
569 569
570 if (command.environmentOverrides != null) { 570 if (command.environmentOverrides != null) {
571 for (var key in command.environmentOverrides.keys) { 571 for (var key in command.environmentOverrides.keys) {
572 environment[key] = command.environmentOverrides[key]; 572 environment[key] = command.environmentOverrides[key];
573 } 573 }
574 } 574 }
575 for (var excludedEnvironmentVariable in EXCLUDED_ENVIRONMENT_VARIABLES) { 575 for (var excludedEnvironmentVariable in _excludedEnvironmentVariables) {
576 environment.remove(excludedEnvironmentVariable); 576 environment.remove(excludedEnvironmentVariable);
577 } 577 }
578 578
579 // TODO(terry): Needed for roll 50? 579 // TODO(terry): Needed for roll 50?
580 environment["GLIBCPP_FORCE_NEW"] = "1"; 580 environment["GLIBCPP_FORCE_NEW"] = "1";
581 environment["GLIBCXX_FORCE_NEW"] = "1"; 581 environment["GLIBCXX_FORCE_NEW"] = "1";
582 582
583 return environment; 583 return environment;
584 } 584 }
585 } 585 }
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 String _createArgumentsLine(List<String> arguments, int timeout) { 673 String _createArgumentsLine(List<String> arguments, int timeout) {
674 return arguments.join(' ') + '\n'; 674 return arguments.join(' ') + '\n';
675 } 675 }
676 676
677 void _reportResult() { 677 void _reportResult() {
678 if (!_currentlyRunning) return; 678 if (!_currentlyRunning) return;
679 // _status == '>>> TEST {PASS, FAIL, OK, CRASH, FAIL, TIMEOUT}' 679 // _status == '>>> TEST {PASS, FAIL, OK, CRASH, FAIL, TIMEOUT}'
680 680
681 var outcome = _status.split(" ")[2]; 681 var outcome = _status.split(" ")[2];
682 var exitCode = 0; 682 var exitCode = 0;
683 if (outcome == "CRASH") exitCode = CRASHING_BROWSER_EXITCODE; 683 if (outcome == "CRASH") exitCode = browserCrashExitCode;
684 if (outcome == "FAIL" || outcome == "TIMEOUT") exitCode = 1; 684 if (outcome == "FAIL" || outcome == "TIMEOUT") exitCode = 1;
685 var output = createCommandOutput( 685 var output = createCommandOutput(
686 _command, 686 _command,
687 exitCode, 687 exitCode,
688 (outcome == "TIMEOUT"), 688 (outcome == "TIMEOUT"),
689 _testStdout.toList(), 689 _testStdout.toList(),
690 _testStderr.toList(), 690 _testStderr.toList(),
691 new DateTime.now().difference(_startTime), 691 new DateTime.now().difference(_startTime),
692 false); 692 false);
693 assert(_completer != null); 693 assert(_completer != null);
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 if (!runner._currentlyRunning) return runner; 1291 if (!runner._currentlyRunning) return runner;
1292 } 1292 }
1293 throw new Exception('Unable to find inactive batch runner.'); 1293 throw new Exception('Unable to find inactive batch runner.');
1294 } 1294 }
1295 1295
1296 Future<CommandOutput> _startBrowserControllerTest( 1296 Future<CommandOutput> _startBrowserControllerTest(
1297 BrowserTestCommand browserCommand, int timeout) { 1297 BrowserTestCommand browserCommand, int timeout) {
1298 var completer = new Completer<CommandOutput>(); 1298 var completer = new Completer<CommandOutput>();
1299 1299
1300 var callback = (BrowserTestOutput output) { 1300 var callback = (BrowserTestOutput output) {
1301 completer.complete(new BrowserCommandOutputImpl(browserCommand, output)); 1301 completer.complete(new BrowserCommandOutput(browserCommand, output));
1302 }; 1302 };
1303 1303
1304 BrowserTest browserTest; 1304 BrowserTest browserTest;
1305 if (browserCommand is BrowserHtmlTestCommand) { 1305 if (browserCommand is BrowserHtmlTestCommand) {
1306 browserTest = new HtmlTest(browserCommand.url, callback, timeout, 1306 browserTest = new HtmlTest(browserCommand.url, callback, timeout,
1307 browserCommand.expectedMessages); 1307 browserCommand.expectedMessages);
1308 } else { 1308 } else {
1309 browserTest = new BrowserTest(browserCommand.url, callback, timeout); 1309 browserTest = new BrowserTest(browserCommand.url, callback, timeout);
1310 } 1310 }
1311 _getBrowserTestRunner(browserCommand.configuration).then((testRunner) { 1311 _getBrowserTestRunner(browserCommand.configuration).then((testRunner) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 // See http://dartbug.com/29655 . 1372 // See http://dartbug.com/29655 .
1373 if (command is ContentShellCommand) { 1373 if (command is ContentShellCommand) {
1374 return true; 1374 return true;
1375 } 1375 }
1376 1376
1377 if (io.Platform.operatingSystem == 'linux') { 1377 if (io.Platform.operatingSystem == 'linux') {
1378 decodeOutput(); 1378 decodeOutput();
1379 // No matter which command we ran: If we get failures due to the 1379 // No matter which command we ran: If we get failures due to the
1380 // "xvfb-run" issue 7564, try re-running the test. 1380 // "xvfb-run" issue 7564, try re-running the test.
1381 bool containsFailureMsg(String line) { 1381 bool containsFailureMsg(String line) {
1382 return line.contains(MESSAGE_CANNOT_OPEN_DISPLAY) || 1382 return line.contains(cannotOpenDisplayMessage) ||
1383 line.contains(MESSAGE_FAILED_TO_RUN_COMMAND); 1383 line.contains(failedToRunCommandMessage);
1384 } 1384 }
1385 1385
1386 if (stdout.any(containsFailureMsg) || stderr.any(containsFailureMsg)) { 1386 if (stdout.any(containsFailureMsg) || stderr.any(containsFailureMsg)) {
1387 return true; 1387 return true;
1388 } 1388 }
1389 } 1389 }
1390 } 1390 }
1391 return false; 1391 return false;
1392 } 1392 }
1393 1393
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1663 } 1663 }
1664 } 1664 }
1665 1665
1666 void eventAllTestsDone() { 1666 void eventAllTestsDone() {
1667 for (var listener in _eventListener) { 1667 for (var listener in _eventListener) {
1668 listener.allDone(); 1668 listener.allDone();
1669 } 1669 }
1670 _allDone(); 1670 _allDone();
1671 } 1671 }
1672 } 1672 }
OLDNEW
« no previous file with comments | « tools/testing/dart/command_output.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698