Commit 5e294b17 authored by Al Muthanna Athamina's avatar Al Muthanna Athamina Committed by V8 LUCI CQ

Add clusterfuzz trials config file with presubmit checks

We can now specify the trials for clusterfuzz using the file
clusterfuzz_trials_config.json. There is also a presubmit check
to make sure that it is formatted correctly.

Change-Id: Iafb7063b63b1daeb7653830542d13b419cf187d6
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3416191Reviewed-by: 's avatarMichael Achenbach <machenbach@chromium.org>
Commit-Queue: Almothana Athamneh <almuthanna@chromium.org>
Cr-Commit-Position: refs/heads/main@{#78848}
parent d96934c7
......@@ -5891,6 +5891,7 @@ group("v8_clusterfuzz") {
deps = [
":d8",
":v8_simple_inspector_fuzzer",
"tools/clusterfuzz:v8_clusterfuzz_resources",
]
if (v8_multi_arch_build) {
......
......@@ -23,3 +23,8 @@ if (v8_correctness_fuzzer) {
outputs = [ "$root_out_dir/{{source_file_part}}" ]
}
}
copy("v8_clusterfuzz_resources") {
sources = [ "clusterfuzz_trials_config.json" ]
outputs = [ "$root_out_dir/{{source_file_part}}" ]
}
......@@ -2,7 +2,62 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
try:
basestring # Python 2
except NameError: # Python 3
basestring = str
def _CheckTrialsConfig(input_api, output_api):
def FilterFile(affected_file):
return input_api.FilterSourceFile(
affected_file,
files_to_check=(r'.+clusterfuzz_trials_config\.json',))
results = []
for f in input_api.AffectedFiles(
file_filter=FilterFile, include_deletes=False):
with open(f.AbsoluteLocalPath()) as j:
try:
trials = json.load(j)
for trial in trials:
if not all (k in trial for k in ('app_args', 'app_name', 'probability')):
results.append('trial %s is not configured correctly' % trial)
if trial['app_name'] != 'd8':
results.append('trial %s has an incorrect app_name' % trial)
if not isinstance(trial['probability'], float):
results.append('trial %s probability is not a float' % trial)
if not (0 <= trial['probability'] <= 1):
results.append('trial %s has invalid probability value' % trial)
if not isinstance(trial['app_args'], basestring) or not trial['app_args']:
results.append('trial %s should have a non-empty string for app_args' % trial)
except Exception as e:
results.append(
'JSON validation failed for %s. Error:\n%s' % (f.LocalPath(), e))
return [output_api.PresubmitError(r) for r in results]
def _RunTests(input_api, output_api):
return input_api.RunTests(input_api.canned_checks.GetUnitTestsInDirectory(
input_api, output_api, '.', files_to_check=['v8_foozzie_test.py$']))
def _CommonChecks(input_api, output_api):
"""Checks common to both upload and commit."""
checks = [
_CheckTrialsConfig,
_RunTests,
]
return sum([check(input_api, output_api) for check in checks], [])
def CheckChangeOnCommit(input_api, output_api):
tests = input_api.canned_checks.GetUnitTestsInDirectory(
input_api, output_api, '.', files_to_check=['v8_foozzie_test.py$'])
return input_api.RunTests(tests)
results = []
results.extend(_CommonChecks(input_api, output_api))
return results
def CheckChangeOnUpload(input_api, output_api):
results = []
results.extend(_CommonChecks(input_api, output_api))
return results
[
{"app_args": "--assert-types", "app_name": "d8", "probability": 0.25},
{"app_args": "--budget_for_feedback_vector_allocation=0", "app_name": "d8", "probability": 0.05},
{"app_args": "--force-slow-path", "app_name": "d8", "probability": 0.05},
{"app_args": "--future", "app_name": "d8", "probability": 0.25},
{"app_args": "--interrupt-budget=1000", "app_name": "d8", "probability": 0.25},
{"app_args": "--jitless", "app_name": "d8", "probability": 0.1},
{"app_args": "--random-gc-interval=2000", "app_name": "d8", "probability": 0.05},
{"app_args": "--noanalyze-environment-liveness", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-avx", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-bmi1", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-bmi2", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-fma3", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-lzcnt", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-popcnt", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-sahf", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-sse3", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-sse4_1", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-sse4_2", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-enable-ssse3", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-lazy-feedback-allocation", "app_name": "d8", "probability": 0.35},
{"app_args": "--no-regexp-tier-up", "app_name": "d8", "probability": 0.2},
{"app_args": "--no-untrusted-code-mitigations", "app_name": "d8", "probability": 0.1},
{"app_args": "--no-use-ic", "app_name": "d8", "probability": 0.25},
{"app_args": "--no-wasm-generic-wrapper", "app_name": "d8", "probability": 0.1},
{"app_args": "--regexp-interpret-all", "app_name": "d8", "probability": 0.1},
{"app_args": "--simulate-errors", "app_name": "d8", "probability": 0.001},
{"app_args": "--stress-compaction-random", "app_name": "d8", "probability": 0.05},
{"app_args": "--stress-concurrent-inlining", "app_name": "d8", "probability": 0.25},
{"app_args": "--stress-concurrent-inlining-attach-code", "app_name": "d8", "probability": 0.25},
{"app_args": "--stress-flush-code", "app_name": "d8", "probability": 0.25},
{"app_args": "--stress-marking=100", "app_name": "d8", "probability": 0.05},
{"app_args": "--stress-scavenge=100", "app_name": "d8", "probability": 0.05},
{"app_args": "--turbo-instruction-scheduling", "app_name": "d8", "probability": 0.1},
{"app_args": "--turbo-stress-instruction-scheduling", "app_name": "d8", "probability": 0.1},
{"app_args": "--wasm-code-gc --stress-wasm-code-gc", "app_name": "d8", "probability": 0.1}
]
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment