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

Unified Diff: testing/test_env.py

Issue 865853009: Symbolize JSON output snippets in swarming ASan runs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: testing/test_env.py
diff --git a/testing/test_env.py b/testing/test_env.py
index 5f94326a9d198edd2cadc49e74e996931732f201..0743f340038f4639884a0b131e46c088ce2dd9d6 100755
--- a/testing/test_env.py
+++ b/testing/test_env.py
@@ -105,6 +105,42 @@ def get_asan_env(cmd, lsan):
return extra_env
+def get_sanitizer_symbolize_command(json_path=None):
+ """Construct the command to invoke offline symbolization script."""
+ script_path = '../tools/valgrind/asan/asan_symbolize.py'
+ cmd = [sys.executable, script_path]
+ if json_path is not None:
+ cmd.append('--test-summary-json-file=%s' % json_path)
+ return cmd
+
+
+def get_json_path(cmd):
+ """Extract the JSON test summary path from a command line."""
+ json_path_flag = '--test-launcher-summary-output='
+ for arg in cmd:
+ if arg.startswith(json_path_flag):
+ return arg.split(json_path_flag).pop()
+ return None
+
+
+def symbolize_snippets_in_json(cmd, env):
+ """Symbolize output snippets inside the JSON test summary."""
+ json_path = get_json_path(cmd)
+ if json_path is None:
+ return
+
+ try:
+ symbolize_command = get_sanitizer_symbolize_command(json_path=json_path)
+ p = subprocess.Popen(symbolize_command, stderr=subprocess.PIPE, env=env)
+ (_, stderr) = p.communicate()
+ except OSError as e:
+ print 'Exception while symbolizing snippets: %s' % e
+
+ if p.returncode != 0:
+ print "Error: failed to symbolize snippets in JSON:\n"
+ print stderr
+
+
def run_executable(cmd, env):
"""Runs an executable with:
- environment variable CR_SOURCE_ROOT set to the root directory.
@@ -123,6 +159,7 @@ def run_executable(cmd, env):
# Copy logic from tools/build/scripts/slave/runtest.py.
asan = '--asan=1' in cmd
lsan = '--lsan=1' in cmd
+ use_symbolization_script = asan and not lsan
if asan:
extra_env.update(get_asan_env(cmd, lsan))
@@ -146,16 +183,17 @@ def run_executable(cmd, env):
env.update(extra_env or {})
try:
# See above comment regarding offline symbolization.
- if asan and not lsan:
+ if use_symbolization_script:
# Need to pipe to the symbolizer script.
p1 = subprocess.Popen(cmd, env=env, stdout=subprocess.PIPE,
stderr=sys.stdout)
- p2 = subprocess.Popen([sys.executable,
- "../tools/valgrind/asan/asan_symbolize.py"],
+ p2 = subprocess.Popen(get_sanitizer_symbolize_command(),
env=env, stdin=p1.stdout)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
p1.wait()
p2.wait()
+ # Also feed the out-of-band JSON output to the symbolizer script.
+ symbolize_snippets_in_json(cmd, env)
return p1.returncode
else:
return subprocess.call(cmd, env=env)
« 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