Skip to content

Commit c76b54f

Browse files
authored
DEVPROD-18316 Allow fuzzer tasks to use the no_multiversion_generate_tasks tag (#105)
1 parent 6a69fc5 commit c76b54f

File tree

6 files changed

+94
-24
lines changed

6 files changed

+94
-24
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# Changelog
2+
## 3.4.0 - 2025-06-12
3+
* Allow fuzzer tasks to use the `no_multiversion_generate_tasks` tag
4+
25
## 3.3.0 - 2025-06-10
36
* Generate tasks for suites that run via bazel
47

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "mongo-task-generator"
33
description = "Dynamically split evergreen tasks into subtasks for testing the 10gen/mongo project."
44
license = "Apache-2.0"
5-
version = "3.3.0"
5+
version = "3.4.0"
66
repository = "https://github.com/mongodb/mongo-task-generator"
77
authors = ["DevProd Correctness Team <[email protected]>"]
88
edition = "2018"

src/services/config_extraction.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ impl ConfigExtractionService for ConfigExtractionServiceImpl {
183183
.evg_config_utils
184184
.lookup_build_variant_expansion(UNIQUE_GEN_SUFFIX_EXPANSION, build_variant);
185185

186+
let task_tags = self.evg_config_utils.get_task_tags(task_def);
187+
let require_multiversion_setup = task_tags.contains(MULTIVERSION);
188+
let no_multiversion_generate_tasks = task_tags.contains(NO_MULTIVERSION_GENERATE_TASKS);
186189
let suite = evg_config_utils.find_suite_name(task_def).to_string();
187190

188191
let bazel_target = self
@@ -213,9 +216,9 @@ impl ConfigExtractionService for ConfigExtractionServiceImpl {
213216
should_shuffle: evg_config_utils
214217
.lookup_required_param_bool(task_def, SHOULD_SHUFFLE_TESTS)?,
215218
timeout_secs: evg_config_utils.lookup_required_param_u64(task_def, IDLE_TIMEOUT)?,
216-
require_multiversion_setup: evg_config_utils
217-
.get_task_tags(task_def)
218-
.contains(MULTIVERSION),
219+
require_multiversion_setup,
220+
require_multiversion_generate_tasks: require_multiversion_setup
221+
&& !no_multiversion_generate_tasks,
219222
multiversion_generate_tasks: self
220223
.multiversion_service
221224
.filter_multiversion_generate_tasks(

src/task_types/fuzzer_tasks.rs

Lines changed: 70 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ pub struct FuzzerGenTaskParams {
6060
pub timeout_secs: u64,
6161
/// Requires downloading multiversion binaries.
6262
pub require_multiversion_setup: bool,
63+
/// Should multiversion generate tasks exist for this.
64+
pub require_multiversion_generate_tasks: bool,
6365
/// Location of generated task configuration.
6466
pub config_location: String,
6567
/// List of tasks generated sub-tasks should depend on.
@@ -224,7 +226,7 @@ impl GenFuzzerService for GenFuzzerServiceImpl {
224226
) -> Result<Box<dyn GeneratedSuite>> {
225227
let task_name = &params.task_name;
226228
let mut sub_tasks: Vec<EvgTask> = vec![];
227-
if params.is_multiversion() {
229+
if params.require_multiversion_generate_tasks {
228230
event!(
229231
Level::INFO,
230232
task_name = task_name.as_str(),
@@ -519,33 +521,82 @@ mod tests {
519521
}
520522

521523
#[test]
522-
fn test_build_multiversion_fuzzer_sub_task() {
523-
let display_name = "my_task";
524-
let sub_task_index = 42;
524+
fn test_build_multiversion_fuzzer_sub_tasks() {
525+
let num_tasks = 10;
526+
let multiversion_generate_tasks = Some(vec![
527+
MultiversionGenerateTaskConfig {
528+
suite_name: "suite1_last_lts".to_string(),
529+
old_version: "last-lts".to_string(),
530+
bazel_target: None,
531+
},
532+
MultiversionGenerateTaskConfig {
533+
suite_name: "suite1_last_continuous".to_string(),
534+
old_version: "last-continuous".to_string(),
535+
bazel_target: None,
536+
},
537+
]);
525538
let params = FuzzerGenTaskParams {
526-
task_name: "some task".to_string(),
539+
task_name: "some_task".to_string(),
527540
require_multiversion_setup: true,
528541
dependencies: vec!["archive_dist_test_debug".to_string()],
542+
multiversion_generate_tasks,
543+
require_multiversion_generate_tasks: true,
544+
num_tasks,
529545
..Default::default()
530546
};
531547

532-
let sub_task = build_fuzzer_sub_task(display_name, sub_task_index, &params, None, None);
548+
let gen_fuzzer_service = GenFuzzerServiceImpl::new();
549+
let suite = gen_fuzzer_service.generate_fuzzer_task(&params).unwrap();
533550

534-
assert_eq!(sub_task.name, "my_task_42");
535-
assert!(sub_task.commands.is_some());
536-
let commands = sub_task.commands.unwrap();
551+
assert_eq!(suite.display_name(), "some_task".to_string());
537552
assert_eq!(
538-
get_evg_fn_name(&commands[0]),
539-
Some("git get project no modules")
553+
suite.sub_tasks().len(),
554+
20 // 2 multiversion configs * 10 sub-tasks each
540555
);
541-
assert_eq!(get_evg_fn_name(&commands[2]), Some("do setup"));
542-
assert_eq!(get_evg_fn_name(&commands[4]), Some("do multiversion setup"));
543-
assert_eq!(get_evg_fn_name(&commands[6]), Some("run jstestfuzz"));
544-
assert_eq!(get_evg_fn_name(&commands[7]), Some("run generated tests"));
545-
assert_eq!(
546-
sub_task.depends_on.unwrap()[0].name,
547-
"archive_dist_test_debug"
548-
)
556+
for sub_task in suite.sub_tasks() {
557+
assert!(sub_task.evg_task.commands.is_some());
558+
let commands = sub_task.evg_task.commands.unwrap();
559+
assert_eq!(
560+
get_evg_fn_name(&commands[0]),
561+
Some("git get project no modules")
562+
);
563+
assert_eq!(get_evg_fn_name(&commands[2]), Some("do setup"));
564+
assert_eq!(get_evg_fn_name(&commands[4]), Some("do multiversion setup"));
565+
assert_eq!(get_evg_fn_name(&commands[6]), Some("run jstestfuzz"));
566+
assert_eq!(get_evg_fn_name(&commands[7]), Some("run generated tests"));
567+
}
568+
}
569+
570+
#[test]
571+
fn test_build_multiversion_no_generate_fuzzer_sub_task() {
572+
let num_tasks = 10;
573+
574+
let params = FuzzerGenTaskParams {
575+
task_name: "some_task".to_string(),
576+
require_multiversion_setup: true,
577+
dependencies: vec!["archive_dist_test_debug".to_string()],
578+
require_multiversion_generate_tasks: false,
579+
num_tasks,
580+
..Default::default()
581+
};
582+
583+
let gen_fuzzer_service = GenFuzzerServiceImpl::new();
584+
let suite = gen_fuzzer_service.generate_fuzzer_task(&params).unwrap();
585+
586+
assert_eq!(suite.display_name(), "some_task".to_string());
587+
assert_eq!(suite.sub_tasks().len(), num_tasks as usize);
588+
for sub_task in suite.sub_tasks() {
589+
assert!(sub_task.evg_task.commands.is_some());
590+
let commands = sub_task.evg_task.commands.unwrap();
591+
assert_eq!(
592+
get_evg_fn_name(&commands[0]),
593+
Some("git get project no modules")
594+
);
595+
assert_eq!(get_evg_fn_name(&commands[2]), Some("do setup"));
596+
assert_eq!(get_evg_fn_name(&commands[4]), Some("do multiversion setup"));
597+
assert_eq!(get_evg_fn_name(&commands[6]), Some("run jstestfuzz"));
598+
assert_eq!(get_evg_fn_name(&commands[7]), Some("run generated tests"));
599+
}
549600
}
550601

551602
#[test]

tests/data/evergreen.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4056,6 +4056,19 @@ tasks:
40564056
//buildscripts/resmokeconfig:multiversion_sanity_check_last_lts_new_old_new: last_lts
40574057
//buildscripts/resmokeconfig:multiversion_sanity_check_last_lts_old_new_new: last_lts
40584058

4059+
- <<: *jstestfuzz_template
4060+
name: multiversion_fuzzer_no_generate_gen
4061+
tags: ["aggfuzzer", "multiversion", "no_multiversion_generate_tasks", "require_npm", "random_name"]
4062+
commands:
4063+
- func: "generate resmoke tasks"
4064+
vars:
4065+
<<: *jstestfuzz_config_vars
4066+
num_files: 5
4067+
num_tasks: 5
4068+
suite: generational_fuzzer
4069+
resmoke_args: "--mongodSetParameters='{logComponentVerbosity: {command: 2}}'"
4070+
npm_command: agg-expr-fuzzer
4071+
40594072
- <<: *gen_task_template
40604073
name: replica_sets_jscore_multiversion_gen
40614074
tags: ["multiversion", "multiversion_passthrough"]

0 commit comments

Comments
 (0)