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

Unified Diff: tools/foozzie/v8_foozzie.py

Issue 2634743004: [foozzie] Stop using extra metadata files. (Closed)
Patch Set: Review Created 3 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
Index: tools/foozzie/v8_foozzie.py
diff --git a/tools/foozzie/v8_foozzie.py b/tools/foozzie/v8_foozzie.py
index 8cfceb04203268b6030610a04fcea3e518521860..86194b9871ee6b477972a8a7bdf20156b60a474a 100755
--- a/tools/foozzie/v8_foozzie.py
+++ b/tools/foozzie/v8_foozzie.py
@@ -51,7 +51,7 @@ SUPPORTED_ARCHS = ['ia32', 'x64', 'arm', 'arm64']
FAILURE_HEADER_TEMPLATE = """#
# V8 correctness failure
# V8 correctness configs: %(configs)s
-# V8 correctness sources: %(sources)s
+# V8 correctness sources: %(source_key)s
# V8 correctness suppression: %(suppression)s
"""
@@ -69,6 +69,9 @@ FAILURE_TEMPLATE = FAILURE_HEADER_TEMPLATE + """#
# Difference:
%(difference)s
#
+# Source file:
+%(source)s
+#
### Start of configuration %(first_config_label)s:
%(first_config_output)s
### End of configuration %(first_config_label)s
@@ -79,6 +82,7 @@ FAILURE_TEMPLATE = FAILURE_HEADER_TEMPLATE + """#
"""
FUZZ_TEST_RE = re.compile(r'.*fuzz(-\d+\.js)')
+SOURCE_RE = re.compile(r'print\("v8-foozzie source: (.*)"\);')
def parse_args():
parser = argparse.ArgumentParser()
@@ -117,14 +121,6 @@ def parse_args():
os.path.isfile(options.testcase)), (
'Test case %s doesn\'t exist' % options.testcase)
- # Deduce metadata file name from test case. This also removes
- # the prefix the test case might get during minimization.
- suffix = FUZZ_TEST_RE.match(os.path.basename(options.testcase)).group(1)
- options.meta_data_path = os.path.join(
- os.path.dirname(options.testcase), 'meta' + suffix)
- assert os.path.exists(options.meta_data_path), (
- 'Metadata %s doesn\'t exist' % options.meta_data_path)
-
# Use first d8 as default for second d8.
options.second_d8 = options.second_d8 or options.first_d8
@@ -147,27 +143,26 @@ def parse_args():
return options
-def metadata_bailout(metadata, ignore_fun):
- """Print failure state and return if ignore_fun matches metadata."""
- bug = (ignore_fun(metadata) or '').strip()
+def get_meta_data(content):
+ """Extracts original-source-file paths from test case content."""
+ sources = []
+ for line in content.splitlines():
+ match = SOURCE_RE.match(line)
+ if match:
+ sources.append(match.group(1))
+ return {'sources': sources}
+
+
+def content_bailout(content, ignore_fun):
+ """Print failure state and return if ignore_fun matches content."""
+ bug = (ignore_fun(content) or '').strip()
if bug:
print FAILURE_HEADER_TEMPLATE % dict(
- configs='', sources='', suppression=bug)
+ configs='', source_key='', suppression=bug)
return True
return False
-def test_pattern_bailout(testcase, ignore_fun):
- """Print failure state and return if ignore_fun matches testcase."""
- with open(testcase) as f:
- bug = (ignore_fun(f.read()) or '').strip()
- if bug:
- print FAILURE_HEADER_TEMPLATE % dict(
- configs='', sources='', suppression=bug)
- return True
- return False
-
-
def pass_bailout(output, step_number):
"""Print info and return if in timeout or crash pass states."""
if output.HasTimedOut():
@@ -186,7 +181,7 @@ def fail_bailout(output, ignore_by_output_fun):
bug = (ignore_by_output_fun(output.stdout) or '').strip()
if bug:
print FAILURE_HEADER_TEMPLATE % dict(
- configs='', sources='', suppression=bug)
+ configs='', source_key='', suppression=bug)
return True
return False
@@ -200,18 +195,15 @@ def main():
options.second_arch, options.second_config,
)
- # Get metadata.
- # TODO(machenbach): We probably don't need the metadata file anymore
- # now that the metadata is printed in the test cases.
- with open(options.meta_data_path) as f:
- metadata = json.load(f)
-
- if metadata_bailout(metadata, suppress.ignore_by_metadata):
+ # Static bailout based on test case content or metadata.
+ with open(options.testcase) as f:
+ content = f.read()
+ if content_bailout(get_meta_data(content), suppress.ignore_by_metadata):
return RETURN_FAIL
-
- if test_pattern_bailout(options.testcase, suppress.ignore_by_content):
+ if content_bailout(content, suppress.ignore_by_content):
return RETURN_FAIL
+ # Set up runtime arguments.
common_flags = FLAGS + ['--random-seed', str(options.random_seed)]
first_config_flags = common_flags + CONFIGS[options.first_config]
second_config_flags = common_flags + CONFIGS[options.second_config]
@@ -243,7 +235,7 @@ def main():
if fail_bailout(second_config_output, suppress.ignore_by_output2):
return RETURN_FAIL
- difference, source_key = suppress.diff(
+ difference, source, source_key = suppress.diff(
first_config_output.stdout, second_config_output.stdout)
if difference:
# The first three entries will be parsed by clusterfuzz. Format changes
@@ -252,7 +244,7 @@ def main():
second_config_label = '%s,%s' % (options.second_arch, options.second_config)
print FAILURE_TEMPLATE % dict(
configs='%s:%s' % (first_config_label, second_config_label),
- sources=source_key,
+ source_key=source_key,
suppression='', # We can't tie bugs to differences.
first_config_label=first_config_label,
second_config_label=second_config_label,
@@ -260,6 +252,7 @@ def main():
second_config_flags=' '.join(second_config_flags),
first_config_output=first_config_output.stdout,
second_config_output=second_config_output.stdout,
+ source=source,
difference=difference,
)
return RETURN_FAIL
@@ -279,11 +272,11 @@ if __name__ == "__main__":
# Make sure clusterfuzz reports internal errors and wrong usage.
# Use one label for all internal and usage errors.
print FAILURE_HEADER_TEMPLATE % dict(
- configs='', sources='', suppression='wrong_usage')
+ configs='', source_key='', suppression='wrong_usage')
result = RETURN_FAIL
except Exception as e:
print FAILURE_HEADER_TEMPLATE % dict(
- configs='', sources='', suppression='internal_error')
+ configs='', source_key='', suppression='internal_error')
print '# Internal error: %s' % e
traceback.print_exc(file=sys.stdout)
result = RETURN_FAIL

Powered by Google App Engine
This is Rietveld 408576698