From 08077e4d703ad72257163add689561914b7ebe63 Mon Sep 17 00:00:00 2001 From: David Bradford Date: Tue, 21 Jun 2022 14:33:43 -0400 Subject: SERVER-67405: Fix is_patch lookup for build_variant_gen (cherry picked from commit 1260ae9d6480d37019c4c8bed7921e1d2cd40dd5) --- buildscripts/evergreen_gen_build_variant.py | 17 +++++-- .../tests/test_evergreen_gen_build_variant.py | 58 +++++++++++++++++++++- 2 files changed, 70 insertions(+), 5 deletions(-) diff --git a/buildscripts/evergreen_gen_build_variant.py b/buildscripts/evergreen_gen_build_variant.py index bac61f8156b..4311585bcef 100644 --- a/buildscripts/evergreen_gen_build_variant.py +++ b/buildscripts/evergreen_gen_build_variant.py @@ -59,7 +59,7 @@ class EvgExpansions(BaseModel): build_id: str build_variant: str exec_timeout_secs: Optional[int] = None - is_patch: Optional[bool] + is_patch: Optional[str] project: str max_tests_per_suite: Optional[int] = 100 max_sub_suites: Optional[int] = 5 @@ -83,10 +83,21 @@ class EvgExpansions(BaseModel): def get_max_sub_suites(self) -> int: """Get the max_sub_suites to use.""" - if not self.is_patch: + if not self.determine_is_patch(): return self.mainline_max_sub_suites return self.max_sub_suites + def determine_is_patch(self) -> bool: + """ + Determine if expansions indicate whether the script is being run in a patch build. + + In a patch build, the `is_patch` expansion will be the string value of "true". In a + non-patch setting, it will not exist, or be an empty string. + + :return: True if task is being run in a patch build. + """ + return self.is_patch is not None and self.is_patch.lower() == "true" + def build_suite_split_config(self, start_date: datetime, end_date: datetime) -> SuiteSplitConfig: """ @@ -113,7 +124,7 @@ class EvgExpansions(BaseModel): """ return GenTaskOptions( create_misc_suite=True, - is_patch=self.is_patch, + is_patch=self.determine_is_patch(), generated_config_dir=GENERATED_CONFIG_DIR, use_default_timeouts=False, timeout_secs=self.timeout_secs, diff --git a/buildscripts/tests/test_evergreen_gen_build_variant.py b/buildscripts/tests/test_evergreen_gen_build_variant.py index b5575707371..ea4a309d50e 100644 --- a/buildscripts/tests/test_evergreen_gen_build_variant.py +++ b/buildscripts/tests/test_evergreen_gen_build_variant.py @@ -87,7 +87,7 @@ def build_mock_orchestrator(build_expansions=None, task_def_list=None, build_tas class TestEvgExpansions(unittest.TestCase): def test_get_max_sub_suites_should_use_patch_value_in_patches(self): evg_expansions = under_test.EvgExpansions( - is_patch=True, + is_patch="true", max_sub_suites=5, mainline_max_sub_suites=1, build_id="build_id", @@ -102,7 +102,7 @@ class TestEvgExpansions(unittest.TestCase): def test_get_max_sub_suites_should_use_mainline_value_in_non_patches(self): evg_expansions = under_test.EvgExpansions( - is_patch=False, + is_patch="false", max_sub_suites=5, mainline_max_sub_suites=1, build_id="build_id", @@ -133,6 +133,60 @@ class TestEvgExpansions(unittest.TestCase): evg_expansions.mainline_max_sub_suites) +class TestDetermineIsPatch(unittest.TestCase): + def test_is_patch_is_none_should_return_false(self): + evg_expansions = under_test.EvgExpansions( + is_patch=None, + build_id="build_id", + build_variant="build variant", + project="project", + revision="abc123", + task_name="task name", + task_id="task_314", + ) + + self.assertFalse(evg_expansions.determine_is_patch()) + + def test_is_patch_is_false_should_return_false(self): + evg_expansions = under_test.EvgExpansions( + is_patch="false", + build_id="build_id", + build_variant="build variant", + project="project", + revision="abc123", + task_name="task name", + task_id="task_314", + ) + + self.assertFalse(evg_expansions.determine_is_patch()) + + def test_is_patch_is_empty_string_should_return_false(self): + evg_expansions = under_test.EvgExpansions( + is_patch="", + build_id="build_id", + build_variant="build variant", + project="project", + revision="abc123", + task_name="task name", + task_id="task_314", + ) + + self.assertFalse(evg_expansions.determine_is_patch()) + + def test_is_patch_is_true_should_return_true(self): + evg_expansions = under_test.EvgExpansions( + is_patch="true", + build_id="build_id", + build_variant="build variant", + project="project", + revision="abc123", + task_name="task name", + task_id="task_314", + ) + + self.assertTrue(evg_expansions.determine_is_patch()) + + class TestTranslateRunVar(unittest.TestCase): def test_normal_value_should_be_returned(self): run_var = "some value" -- cgit v1.2.1