summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrahman1318 <tausif.rahman@mongodb.com>2021-10-29 18:35:02 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-10-29 19:18:11 +0000
commit7a2b65f1eb6910694f0f17e5c8fc2f20df0f1d25 (patch)
tree0d8eb653258ebf975ccf7e0c97fe9709465932f1
parent6df5ff6a933e11275ccece75d1708c17d726ddb1 (diff)
downloadmongo-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.py9
-rw-r--r--buildscripts/tests/task_generation/task_types/test_fuzzer_tasks.py19
-rw-r--r--etc/evergreen.yml33
-rw-r--r--evergreen/jstestfuzz_minimize.sh13
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