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

Unified Diff: tools/nocompile_driver.py

Issue 1698763002: Fix base_nocompile_tests dependency (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/nocompile.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/nocompile_driver.py
diff --git a/tools/nocompile_driver.py b/tools/nocompile_driver.py
index 9aa1e94dbd3f14a4bc638e23740eaf8e9205c20e..b144c900ad0ff43f7f52bea741d2fc263c96bdac 100755
--- a/tools/nocompile_driver.py
+++ b/tools/nocompile_driver.py
@@ -13,6 +13,7 @@ For more info, see:
http://dev.chromium.org/developers/testing/no-compile-tests
"""
+import StringIO
import ast
import locale
import os
@@ -119,7 +120,7 @@ def ParseExpectation(expectation_string):
return expectation
-def ExtractTestConfigs(sourcefile_path):
+def ExtractTestConfigs(sourcefile_path, suite_name):
"""Parses the soruce file for test configurations.
Each no-compile test in the file is separated by an ifdef macro. We scan
@@ -129,6 +130,7 @@ def ExtractTestConfigs(sourcefile_path):
Args:
sourcefile_path: The path to the source file.
+ suite_name: The name of the test suite.
Returns:
A list of test configurations. Each test configuration is a dictionary of
@@ -151,18 +153,11 @@ def ExtractTestConfigs(sourcefile_path):
"""
sourcefile = open(sourcefile_path, 'r')
- # Convert filename from underscores to CamelCase.
- words = os.path.splitext(os.path.basename(sourcefile_path))[0].split('_')
- words = [w.capitalize() for w in words]
- suite_name = 'NoCompile' + ''.join(words)
-
# Start with at least the compiler sanity test. You need to always have one
# sanity test to show that compiler flags and configuration are not just
# wrong. Otherwise, having a misconfigured compiler, or an error in the
# shared portions of the .nc file would cause all tests to erroneously pass.
- test_configs = [{'name': 'NCTEST_SANITY',
- 'suite_name': suite_name,
- 'expectations': None}]
+ test_configs = []
for line in sourcefile:
match_result = NCTEST_CONFIG_RE.match(line)
@@ -199,7 +194,7 @@ def StartTest(sourcefile_path, cflags, config):
A dictionary containing all the information about the started test. The
fields in the dictionary are as follows:
{ 'proc': A subprocess object representing the compiler run.
- 'cmdline': The exectued command line.
+ 'cmdline': The executed command line.
'name': The name of the test.
'suite_name': The suite name to use when generating the gunit test
result.
@@ -328,16 +323,7 @@ def ProcessTestResult(resultfile, test):
(test['started_at'], test['aborted_at']))
return
- if test['expectations'] is None:
- # This signals a compiler sanity check test. Fail iff compilation failed.
- if proc.poll() == 0:
- PassTest(resultfile, test)
- return
- else:
- FailTest(resultfile, test, 'Sanity compile failed. Is compiler borked?',
- stdout, stderr)
- return
- elif proc.poll() == 0:
+ if proc.poll() == 0:
# Handle failure due to successful compile.
FailTest(resultfile, test,
'Unexpected successful compilation.',
@@ -430,10 +416,15 @@ def main():
ValidateInput(parallelism, sourcefile_path, cflags, resultfile_path)
- test_configs = ExtractTestConfigs(sourcefile_path)
+ # Convert filename from underscores to CamelCase.
+ words = os.path.splitext(os.path.basename(sourcefile_path))[0].split('_')
+ words = [w.capitalize() for w in words]
+ suite_name = 'NoCompile' + ''.join(words)
+
+ test_configs = ExtractTestConfigs(sourcefile_path, suite_name)
timings['extract_done'] = time.time()
- resultfile = open(resultfile_path, 'w')
+ resultfile = StringIO.StringIO()
resultfile.write(RESULT_FILE_HEADER % sourcefile_path)
# Run the no-compile tests, but ensure we do not run more than |parallelism|
@@ -441,6 +432,16 @@ def main():
timings['header_written'] = time.time()
executing_tests = {}
finished_tests = []
+
+ test = StartTest(
+ sourcefile_path,
+ cflags + ' -MMD -MF %s.d -MT %s' % (resultfile_path, resultfile_path),
+ { 'name': 'NCTEST_SANITY',
+ 'suite_name': suite_name,
+ 'expectations': None,
+ })
+ executing_tests[test['name']] = test
+
for config in test_configs:
# CompleteAtLeastOneTest blocks until at least one test finishes. Thus, this
# acts as a semaphore. We cannot use threads + a real semaphore because
@@ -462,13 +463,23 @@ def main():
timings['compile_done'] = time.time()
for test in finished_tests:
+ if test['name'] == 'NCTEST_SANITY':
+ _, stderr = test['proc'].communicate()
+ return_code = test['proc'].poll()
+ if return_code != 0:
+ sys.stderr.write(stderr)
+ continue
ProcessTestResult(resultfile, test)
timings['results_processed'] = time.time()
- # We always know at least a sanity test was run.
- WriteStats(resultfile, finished_tests[0]['suite_name'], timings)
+ WriteStats(resultfile, suite_name, timings)
+
+ if return_code == 0:
+ with open(resultfile_path, 'w') as fd:
+ fd.write(resultfile.getvalue())
resultfile.close()
+ sys.exit(return_code)
if __name__ == '__main__':
« no previous file with comments | « build/nocompile.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698