summaryrefslogtreecommitdiff
path: root/buildscripts/tests/task_generation/test_suite_split.py
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
commit4cb8841196d0625dfa3825aa326f071cd27c7b8b (patch)
tree1682a647d4463397c119183369ae6f750d5fdcff /buildscripts/tests/task_generation/test_suite_split.py
parentaa03c6362cbaa767638e6eed9b031d86dd2643d1 (diff)
parent8f0827553e09872941945a093b647a4211a9db7f (diff)
Update upstream source from tag 'upstream/6.0.0'master
Update to upstream version '6.0.0' with Debian dir 5604a80ec1c96ca76f25f40d78e6ef855abec322
Diffstat (limited to 'buildscripts/tests/task_generation/test_suite_split.py')
-rw-r--r--buildscripts/tests/task_generation/test_suite_split.py67
1 files changed, 45 insertions, 22 deletions
diff --git a/buildscripts/tests/task_generation/test_suite_split.py b/buildscripts/tests/task_generation/test_suite_split.py
index b2b197ed7c5..7c54ed489aa 100644
--- a/buildscripts/tests/task_generation/test_suite_split.py
+++ b/buildscripts/tests/task_generation/test_suite_split.py
@@ -8,7 +8,7 @@ import requests
import buildscripts.task_generation.suite_split as under_test
from buildscripts.task_generation.suite_split_strategies import greedy_division, \
round_robin_fallback
-from buildscripts.util.teststats import TestRuntime, HistoricalTestInformation
+from buildscripts.util.teststats import TestRuntime
# pylint: disable=missing-docstring,invalid-name,unused-argument,no-self-use,protected-access
@@ -31,12 +31,7 @@ def build_mock_service(evg_api=None, split_config=None, resmoke_proxy=None):
def tst_stat_mock(file, duration, pass_count):
- return HistoricalTestInformation(
- test_name=file,
- num_pass=pass_count,
- num_fail=0,
- avg_duration_pass=duration,
- )
+ return MagicMock(test_file=file, avg_duration_pass=duration, num_pass=pass_count)
def build_mock_split_config(target_resmoke_time=None, max_sub_suites=None):
@@ -120,16 +115,15 @@ class TestGeneratedSuite(unittest.TestCase):
class TestSplitSuite(unittest.TestCase):
- @patch("buildscripts.util.teststats.HistoricTaskData.get_stats_from_s3")
- def test_calculate_suites(self, get_stats_from_s3_mock):
+ def test_calculate_suites(self):
mock_test_stats = [tst_stat_mock(f"test{i}.js", 60, 1) for i in range(100)]
split_config = build_mock_split_config(target_resmoke_time=10)
split_params = build_mock_split_params()
suite_split_service = build_mock_service(split_config=split_config)
- get_stats_from_s3_mock.return_value = mock_test_stats
+ suite_split_service.evg_api.test_stats_by_project.return_value = mock_test_stats
suite_split_service.resmoke_proxy.list_tests.return_value = [
- stat.test_name for stat in mock_test_stats
+ stat.test_file for stat in mock_test_stats
]
suite_split_service.resmoke_proxy.read_suite_config.return_value = {}
@@ -143,15 +137,32 @@ class TestSplitSuite(unittest.TestCase):
for sub_suite in suite.sub_suites:
self.assertEqual(10, len(sub_suite.test_list))
- @patch("buildscripts.util.teststats.HistoricTaskData.get_stats_from_s3")
- def test_calculate_suites_uses_fallback_on_no_results(self, get_stats_from_s3_mock):
+ def test_calculate_suites_fallback_on_error(self):
+ n_tests = 100
+ max_sub_suites = 4
+ split_config = build_mock_split_config(max_sub_suites=max_sub_suites)
+ split_params = build_mock_split_params()
+
+ suite_split_service = build_mock_service(split_config=split_config)
+ mock_evg_error(suite_split_service.evg_api)
+ suite_split_service.resmoke_proxy.list_tests.return_value = [
+ f"test_{i}.js" for i in range(n_tests)
+ ]
+
+ suite = suite_split_service.split_suite(split_params)
+
+ self.assertEqual(max_sub_suites, len(suite))
+ for sub_suite in suite.sub_suites:
+ self.assertEqual(n_tests / max_sub_suites, len(sub_suite.test_list))
+
+ def test_calculate_suites_uses_fallback_on_no_results(self):
n_tests = 100
max_sub_suites = 5
split_config = build_mock_split_config(max_sub_suites=max_sub_suites)
split_params = build_mock_split_params()
suite_split_service = build_mock_service(split_config=split_config)
- get_stats_from_s3_mock.return_value = []
+ suite_split_service.evg_api.test_stats_by_project.return_value = []
suite_split_service.resmoke_proxy.list_tests.return_value = [
f"test_{i}.js" for i in range(n_tests)
]
@@ -162,9 +173,7 @@ class TestSplitSuite(unittest.TestCase):
for sub_suite in suite.sub_suites:
self.assertEqual(n_tests / max_sub_suites, len(sub_suite.test_list))
- @patch("buildscripts.util.teststats.HistoricTaskData.get_stats_from_s3")
- def test_calculate_suites_uses_fallback_if_only_results_are_filtered(
- self, get_stats_from_s3_mock):
+ def test_calculate_suites_uses_fallback_if_only_results_are_filtered(self):
n_tests = 100
max_sub_suites = 10
mock_test_stats = [tst_stat_mock(f"test{i}.js", 60, 1) for i in range(100)]
@@ -173,7 +182,7 @@ class TestSplitSuite(unittest.TestCase):
split_params = build_mock_split_params()
suite_split_service = build_mock_service(split_config=split_config)
- get_stats_from_s3_mock.return_value = mock_test_stats
+ suite_split_service.evg_api.test_stats_by_project.return_value = mock_test_stats
suite_split_service.resmoke_proxy.list_tests.return_value = [
f"test_{i}.js" for i in range(n_tests)
]
@@ -189,17 +198,31 @@ class TestSplitSuite(unittest.TestCase):
for sub_suite in suite.sub_suites:
self.assertEqual(n_tests / max_sub_suites, len(sub_suite.test_list))
- @patch("buildscripts.util.teststats.HistoricTaskData.get_stats_from_s3")
- def test_calculate_suites_will_filter_specified_tests(self, get_stats_from_s3_mock):
+ def test_calculate_suites_fail_on_unexpected_error(self):
+ n_tests = 100
+ max_sub_suites = 4
+ split_config = build_mock_split_config(max_sub_suites=max_sub_suites)
+ split_params = build_mock_split_params()
+
+ suite_split_service = build_mock_service(split_config=split_config)
+ mock_evg_error(suite_split_service.evg_api, error_code=requests.codes.INTERNAL_SERVER_ERROR)
+ suite_split_service.resmoke_proxy.list_tests.return_value = [
+ f"test_{i}.js" for i in range(n_tests)
+ ]
+
+ with self.assertRaises(requests.HTTPError):
+ suite_split_service.split_suite(split_params)
+
+ def test_calculate_suites_will_filter_specified_tests(self):
mock_test_stats = [tst_stat_mock(f"test_{i}.js", 60, 1) for i in range(100)]
split_config = build_mock_split_config(target_resmoke_time=10)
split_params = build_mock_split_params(
test_filter=lambda t: t in {"test_1.js", "test_2.js"})
suite_split_service = build_mock_service(split_config=split_config)
- get_stats_from_s3_mock.return_value = mock_test_stats
+ suite_split_service.evg_api.test_stats_by_project.return_value = mock_test_stats
suite_split_service.resmoke_proxy.list_tests.return_value = [
- stat.test_name for stat in mock_test_stats
+ stat.test_file for stat in mock_test_stats
]
suite_split_service.resmoke_proxy.read_suite_config.return_value = {}