diff options
author | trahman1318 <tausif.rahman@mongodb.com> | 2021-10-29 18:35:02 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-10-29 19:18:11 +0000 |
commit | 7a2b65f1eb6910694f0f17e5c8fc2f20df0f1d25 (patch) | |
tree | 0d8eb653258ebf975ccf7e0c97fe9709465932f1 | |
parent | 6df5ff6a933e11275ccece75d1708c17d726ddb1 (diff) | |
download | mongo-7a2b65f1eb6910694f0f17e5c8fc2f20df0f1d25.tar.gz |
SERVER-59450 Add a resmoke.py subcommand to invoke minimizer runner [evergreen task updates]
-rw-r--r-- | buildscripts/task_generation/task_types/fuzzer_tasks.py | 9 | ||||
-rw-r--r-- | buildscripts/tests/task_generation/task_types/test_fuzzer_tasks.py | 19 | ||||
-rw-r--r-- | etc/evergreen.yml | 33 | ||||
-rw-r--r-- | evergreen/jstestfuzz_minimize.sh | 13 |
4 files changed, 70 insertions, 4 deletions
diff --git a/buildscripts/task_generation/task_types/fuzzer_tasks.py b/buildscripts/task_generation/task_types/fuzzer_tasks.py index 1e62f668d4c..9292108f040 100644 --- a/buildscripts/task_generation/task_types/fuzzer_tasks.py +++ b/buildscripts/task_generation/task_types/fuzzer_tasks.py @@ -9,6 +9,8 @@ from buildscripts.task_generation.constants import ARCHIVE_DIST_TEST_DEBUG_TASK, from buildscripts.task_generation.task_types.multiversion_decorator import MultiversionGenTaskDecorator from buildscripts.util import taskname +_MINIMIZABLE_FUZZERS = ["agg-fuzzer", "query-fuzzer"] + class FuzzerTask(NamedTuple): """ @@ -59,6 +61,11 @@ class FuzzerGenTaskParams(NamedTuple): large_distro_name: Optional[str] config_location: str + @property + def is_minimizable(self) -> bool: + """Return whether this fuzzer in minimizable.""" + return self.npm_command in _MINIMIZABLE_FUZZERS + def jstestfuzz_params(self) -> Dict[str, str]: """Build a dictionary of parameters to pass to jstestfuzz.""" return { @@ -129,5 +136,7 @@ class FuzzerGenTaskService: FunctionCall("run jstestfuzz", params.jstestfuzz_params()), FunctionCall(RUN_GENERATED_TESTS, run_tests_vars) ] + if params.is_minimizable: + commands.append(FunctionCall("minimize jstestfuzz", params.jstestfuzz_params())) return Task(sub_task_name, commands, {TaskDependency(ARCHIVE_DIST_TEST_DEBUG_TASK)}) diff --git a/buildscripts/tests/task_generation/task_types/test_fuzzer_tasks.py b/buildscripts/tests/task_generation/task_types/test_fuzzer_tasks.py index 155d5d59edc..89f5a8a3330 100644 --- a/buildscripts/tests/task_generation/task_types/test_fuzzer_tasks.py +++ b/buildscripts/tests/task_generation/task_types/test_fuzzer_tasks.py @@ -7,7 +7,7 @@ import buildscripts.task_generation.task_types.fuzzer_tasks as under_test # pylint: disable=missing-docstring,invalid-name,unused-argument,no-self-use,protected-access -def build_mock_fuzzer_params(jstestfuzz_vars="vars for jstestfuzz"): +def build_mock_fuzzer_params(jstestfuzz_vars="vars for jstestfuzz", npm_command="jstestfuzz"): return under_test.FuzzerGenTaskParams( task_name="task name", variant="build variant", @@ -15,7 +15,7 @@ def build_mock_fuzzer_params(jstestfuzz_vars="vars for jstestfuzz"): num_files=10, num_tasks=5, resmoke_args="args for resmoke", - npm_command="jstestfuzz", + npm_command=npm_command, jstestfuzz_vars=jstestfuzz_vars, continue_on_failure=True, resmoke_jobs_max=5, @@ -66,14 +66,25 @@ class TestGenerateTasks(unittest.TestCase): class TestBuildFuzzerSubTask(unittest.TestCase): - def test_sub_task_should_be_built_correct(self): - mock_params = build_mock_fuzzer_params() + def test_sub_task_should_be_built_correct_no_minimize_command(self): + mock_params = build_mock_fuzzer_params(npm_command="jstestfuzz") fuzzer_service = under_test.FuzzerGenTaskService() sub_task = fuzzer_service.build_fuzzer_sub_task(3, mock_params) self.assertEqual(sub_task.name, f"{mock_params.task_name}_3_{mock_params.variant}") self.assertEqual(len(sub_task.commands), 6) + self.assertNotEqual(sub_task.commands[-1].as_dict()["func"], "minimize jstestfuzz") + + def test_sub_task_should_be_built_correct_with_minimize_command(self): + mock_params = build_mock_fuzzer_params(npm_command="agg-fuzzer") + fuzzer_service = under_test.FuzzerGenTaskService() + + sub_task = fuzzer_service.build_fuzzer_sub_task(3, mock_params) + + self.assertEqual(sub_task.name, f"{mock_params.task_name}_3_{mock_params.variant}") + self.assertEqual(len(sub_task.commands), 7) + self.assertEqual(sub_task.commands[-1].as_dict()["func"], "minimize jstestfuzz") def test_sub_task_should_include_timeout_info(self): mock_params = build_mock_fuzzer_params() diff --git a/etc/evergreen.yml b/etc/evergreen.yml index 80b28fabfca..8ca8b9d36ac 100644 --- a/etc/evergreen.yml +++ b/etc/evergreen.yml @@ -1400,6 +1400,39 @@ functions: content_type: application/gzip display_name: Generated Tests - Execution ${execution} + "minimize jstestfuzz": + - *f_expansions_write + - command: subprocess.exec + type: test + params: + binary: bash + args: + - "./src/evergreen/jstestfuzz_minimize.sh" + - command: s3.put + params: + optional: true + aws_key: ${aws_key} + aws_secret: ${aws_secret} + local_file: src/minimizer-outputs.json + remote_file: ${project}/${build_variant}/${revision}/artifacts/minimizer-outputs-${build_id}.json + bucket: mciuploads + permissions: private + visibility: signed + content_type: application/json + display_name: Minimizer Outputs - Execution ${execution} + - command: s3.put + params: + optional: true + aws_key: ${aws_key} + aws_secret: ${aws_secret} + local_file: src/jstestfuzz/out/minimizer-outputs-minimizedtest.js + remote_file: ${project}/${build_variant}/${revision}/artifacts/minimizer-outputs-minimizedtest-${build_id}.json + bucket: mciuploads + permissions: private + visibility: signed + content_type: text/javascript + display_name: Minimized jstestfuzz Test - Execution ${execution} + "run idl tests": - *f_expansions_write - command: subprocess.exec diff --git a/evergreen/jstestfuzz_minimize.sh b/evergreen/jstestfuzz_minimize.sh new file mode 100644 index 00000000000..13ddbaf5709 --- /dev/null +++ b/evergreen/jstestfuzz_minimize.sh @@ -0,0 +1,13 @@ +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null 2>&1 && pwd)" +. "$DIR/prelude.sh" + +cd src/jstestfuzz + +set -o errexit +set -o verbose + +add_nodejs_to_path + +if [ -f "../minimizer-outputs.json" ]; then + eval npm run ${npm_command} -- -j "../minimizer-outputs.json" +fi |