[foozzie] Migrate configuration choice to V8
Before, configurations were chosen on clusterfuzz side. This migrates the choice to the V8 repo, to enable easier changing it and to allow sharing it between different fuzzers. NOTRY=true TBR=sergiyb@chromium.org Bug: chromium:813833 Change-Id: I9890a36fd6aab171d3e13172fc55b274f189e532 Reviewed-on: https://chromium-review.googlesource.com/927681 Reviewed-by: Michael Achenbach <machenbach@chromium.org> Commit-Queue: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#51410}
This commit is contained in:
parent
e282f9afed
commit
0fae93f401
@ -9,6 +9,7 @@ if (v8_correctness_fuzzer) {
|
||||
sources = [
|
||||
"v8_commands.py",
|
||||
"v8_foozzie.py",
|
||||
"v8_fuzz_config.py",
|
||||
"v8_mock.js",
|
||||
"v8_mock_archs.js",
|
||||
"v8_suppressions.js",
|
||||
|
8
tools/foozzie/PRESUBMIT.py
Normal file
8
tools/foozzie/PRESUBMIT.py
Normal file
@ -0,0 +1,8 @@
|
||||
# Copyright 2018 the V8 project authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
def CheckChangeOnCommit(input_api, output_api):
|
||||
tests = input_api.canned_checks.GetUnitTestsInDirectory(
|
||||
input_api, output_api, '.', whitelist=['v8_foozzie_test.py$'])
|
||||
return input_api.RunTests(tests)
|
36
tools/foozzie/v8_foozzie_test.py
Normal file → Executable file
36
tools/foozzie/v8_foozzie_test.py
Normal file → Executable file
@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2016 the V8 project authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
@ -8,12 +9,43 @@ import sys
|
||||
import unittest
|
||||
|
||||
import v8_foozzie
|
||||
import v8_fuzz_config
|
||||
import v8_suppressions
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
FOOZZIE = os.path.join(BASE_DIR, 'v8_foozzie.py')
|
||||
TEST_DATA = os.path.join(BASE_DIR, 'testdata')
|
||||
|
||||
|
||||
class ConfigTest(unittest.TestCase):
|
||||
def testExperiments(self):
|
||||
"""Test that probabilities add up to 100 and that all config names exist.
|
||||
"""
|
||||
EXPERIMENTS = v8_fuzz_config.FOOZZIE_EXPERIMENTS
|
||||
CONFIGS = v8_foozzie.CONFIGS
|
||||
assert sum(x[0] for x in EXPERIMENTS) == 100
|
||||
assert all(map(lambda x: x[1] in CONFIGS, EXPERIMENTS))
|
||||
assert all(map(lambda x: x[2] in CONFIGS, EXPERIMENTS))
|
||||
assert all(map(lambda x: x[3].endswith('d8'), EXPERIMENTS))
|
||||
|
||||
def testConfig(self):
|
||||
"""Smoke test how to choose experiments.
|
||||
|
||||
When experiment distribution changes this test might change, too.
|
||||
"""
|
||||
class Rng(object):
|
||||
def random(self):
|
||||
return 0.5
|
||||
self.assertEqual(
|
||||
[
|
||||
'--first-config=ignition',
|
||||
'--second-config=ignition_turbo',
|
||||
'--second-d8=d8',
|
||||
],
|
||||
v8_fuzz_config.Config('foo', Rng()).choose_foozzie_flags(),
|
||||
)
|
||||
|
||||
|
||||
class UnitTest(unittest.TestCase):
|
||||
def testDiff(self):
|
||||
# TODO(machenbach): Mock out suppression configuration.
|
||||
@ -109,3 +141,7 @@ class SystemTest(unittest.TestCase):
|
||||
e = ctx.exception
|
||||
self.assertEquals(v8_foozzie.RETURN_FAIL, e.returncode)
|
||||
self.assertEquals(expected_output, cut_verbose_output(e.output))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
45
tools/foozzie/v8_fuzz_config.py
Normal file
45
tools/foozzie/v8_fuzz_config.py
Normal file
@ -0,0 +1,45 @@
|
||||
# Copyright 2018 the V8 project authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
import random
|
||||
|
||||
# List of configuration experiments for correctness fuzzing.
|
||||
# List of <probability>, <1st config name>, <2nd config name>, <2nd d8>.
|
||||
# Probabilities must add up to 100.
|
||||
FOOZZIE_EXPERIMENTS = [
|
||||
[5, 'ignition', 'ignition_asm', 'd8'],
|
||||
[5, 'ignition', 'trusted', 'd8'],
|
||||
[5, 'ignition', 'trusted_opt', 'd8'],
|
||||
[10, 'ignition', 'slow_path', 'd8'],
|
||||
[5, 'ignition', 'slow_path_opt', 'd8'],
|
||||
[25, 'ignition', 'ignition_turbo', 'd8'],
|
||||
[20, 'ignition', 'ignition_turbo_opt', 'd8'],
|
||||
[5, 'ignition_turbo_opt', 'ignition_turbo_opt', 'clang_x86/d8'],
|
||||
[5, 'ignition_turbo', 'ignition_turbo', 'clang_x86/d8'],
|
||||
[5, 'ignition', 'ignition', 'clang_x86/d8'],
|
||||
[5, 'ignition', 'ignition', 'clang_x64_v8_arm64/d8'],
|
||||
[5, 'ignition', 'ignition', 'clang_x86_v8_arm/d8'],
|
||||
]
|
||||
|
||||
class Config(object):
|
||||
def __init__(self, name, rng=None):
|
||||
self.name = name
|
||||
self.rng = rng or random.Random()
|
||||
|
||||
def choose_foozzie_flags(self):
|
||||
"""Randomly chooses a configuration from FOOZZIE_EXPERIMENTS.
|
||||
|
||||
Returns: List of flags to pass to v8_foozzie.py fuzz harness.
|
||||
"""
|
||||
acc = 0
|
||||
threshold = self.rng.random() * 100
|
||||
for prob, first_config, second_config, second_d8 in FOOZZIE_EXPERIMENTS:
|
||||
acc += prob
|
||||
if acc > threshold:
|
||||
return [
|
||||
'--first-config=' + first_config,
|
||||
'--second-config=' + second_config,
|
||||
'--second-d8=' + second_d8,
|
||||
]
|
||||
assert False
|
Loading…
Reference in New Issue
Block a user