mongo_task_generator/utils/
task_name.rs

1//! Utilities for working with task names.
2
3use crate::evergreen_names::ENTERPRISE_MODULE;
4const GEN_SUFFIX: &str = "_gen";
5
6/// Generate a name for a generated task.
7///
8/// # Arguments
9///
10/// * `display_name` - Name of parent task being generated.
11/// * `sub_task_index` - Index of sub-task being named.
12/// * `total_tasks` - Total number of sub-tasks generated for this parent task.
13/// * `is_enterprise` - Whether the task is for an enterprise build variant.
14/// * `platform` - Platform that task will run on.
15pub fn name_generated_task(
16    display_name: &str,
17    sub_task_index: usize,
18    total_tasks: usize,
19    is_enterprise: bool,
20    platform: Option<&str>,
21) -> String {
22    let mut suffix = if is_enterprise {
23        format!("-{}", ENTERPRISE_MODULE)
24    } else {
25        "".to_string()
26    };
27
28    if let Some(platform) = platform {
29        suffix = format!("-{}{}", platform, suffix)
30    }
31
32    let alignment = (total_tasks as f64).log10().ceil() as usize;
33    format!(
34        "{}_{:0fill$}{}",
35        display_name,
36        sub_task_index,
37        suffix,
38        fill = alignment
39    )
40}
41
42/// Remove the '_gen' from end of the given task name if it exists.
43///
44/// # Arguments
45///
46/// * `task_name` - Name of task.
47///
48/// # Returns
49///
50/// Name of task with `_gen` stripped off.
51pub fn remove_gen_suffix(task_name: &str) -> &str {
52    if task_name.ends_with(GEN_SUFFIX) {
53        let end = task_name.len() - GEN_SUFFIX.len();
54        &task_name[..end]
55    } else {
56        task_name
57    }
58}
59
60#[cfg(test)]
61mod tests {
62    use super::*;
63    use rstest::*;
64
65    #[rstest]
66    #[case("task", 0, 10, false, None, "task_0")]
67    #[case("task", 0, 10, false, Some("linux"), "task_0-linux")]
68    #[case("task", 42, 1001, false, None, "task_0042")]
69    #[case("task", 42, 1001, false, Some("linux"), "task_0042-linux")]
70    #[case("task", 0, 10, true, None, "task_0-enterprise")]
71    #[case("task", 0, 10, true, Some("linux"), "task_0-linux-enterprise")]
72    #[case("task", 42, 1001, true, None, "task_0042-enterprise")]
73    #[case("task", 42, 1001, true, Some("linux"), "task_0042-linux-enterprise")]
74    fn test_name_generated_task_should_not_include_suffix(
75        #[case] name: &str,
76        #[case] index: usize,
77        #[case] total: usize,
78        #[case] is_enterprise: bool,
79        #[case] platform: Option<&str>,
80        #[case] expected: &str,
81    ) {
82        let task_name = name_generated_task(name, index, total, is_enterprise, platform);
83
84        assert_eq!(task_name, expected);
85    }
86
87    #[rstest]
88    #[case("task_name", "task_name")]
89    #[case("task_name_gen", "task_name")]
90    #[case("task_name_", "task_name_")]
91    fn test_remove_gen_suffix(#[case] original_task: &str, #[case] expected_task: &str) {
92        assert_eq!(remove_gen_suffix(original_task), expected_task);
93    }
94}