summaryrefslogtreecommitdiff
path: root/buildscripts/tests/task_generation/test_suite_split.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/tests/task_generation/test_suite_split.py')
-rw-r--r--buildscripts/tests/task_generation/test_suite_split.py70
1 files changed, 23 insertions, 47 deletions
diff --git a/buildscripts/tests/task_generation/test_suite_split.py b/buildscripts/tests/task_generation/test_suite_split.py
index 7c54ed489aa..4f6bddcacb4 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
+from buildscripts.util.teststats import TestRuntime, HistoricalTestInformation
# pylint: disable=missing-docstring,invalid-name,unused-argument,no-self-use,protected-access
@@ -19,10 +19,9 @@ def mock_evg_error(mock_evg_api, error_code=requests.codes.SERVICE_UNAVAILABLE):
return mock_evg_api
-def build_mock_service(evg_api=None, split_config=None, resmoke_proxy=None):
+def build_mock_service(split_config=None, resmoke_proxy=None):
return under_test.SuiteSplitService(
- evg_api=evg_api if evg_api else MagicMock(),
resmoke_proxy=resmoke_proxy if resmoke_proxy else MagicMock(),
config=split_config if split_config else MagicMock(),
split_strategy=greedy_division,
@@ -31,7 +30,12 @@ def build_mock_service(evg_api=None, split_config=None, resmoke_proxy=None):
def tst_stat_mock(file, duration, pass_count):
- return MagicMock(test_file=file, avg_duration_pass=duration, num_pass=pass_count)
+ return HistoricalTestInformation(
+ test_name=file,
+ num_pass=pass_count,
+ num_fail=0,
+ avg_duration_pass=duration,
+ )
def build_mock_split_config(target_resmoke_time=None, max_sub_suites=None):
@@ -115,15 +119,16 @@ class TestGeneratedSuite(unittest.TestCase):
class TestSplitSuite(unittest.TestCase):
- def test_calculate_suites(self):
+ @patch("buildscripts.util.teststats.HistoricTaskData.get_stats_from_s3")
+ def test_calculate_suites(self, get_stats_from_s3_mock):
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)
- suite_split_service.evg_api.test_stats_by_project.return_value = mock_test_stats
+ get_stats_from_s3_mock.return_value = mock_test_stats
suite_split_service.resmoke_proxy.list_tests.return_value = [
- stat.test_file for stat in mock_test_stats
+ stat.test_name for stat in mock_test_stats
]
suite_split_service.resmoke_proxy.read_suite_config.return_value = {}
@@ -137,32 +142,15 @@ class TestSplitSuite(unittest.TestCase):
for sub_suite in suite.sub_suites:
self.assertEqual(10, len(sub_suite.test_list))
- 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):
+ @patch("buildscripts.util.teststats.HistoricTaskData.get_stats_from_s3")
+ def test_calculate_suites_uses_fallback_on_no_results(self, get_stats_from_s3_mock):
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)
- suite_split_service.evg_api.test_stats_by_project.return_value = []
+ get_stats_from_s3_mock.return_value = []
suite_split_service.resmoke_proxy.list_tests.return_value = [
f"test_{i}.js" for i in range(n_tests)
]
@@ -173,7 +161,9 @@ class TestSplitSuite(unittest.TestCase):
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_if_only_results_are_filtered(self):
+ @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):
n_tests = 100
max_sub_suites = 10
mock_test_stats = [tst_stat_mock(f"test{i}.js", 60, 1) for i in range(100)]
@@ -182,7 +172,7 @@ class TestSplitSuite(unittest.TestCase):
split_params = build_mock_split_params()
suite_split_service = build_mock_service(split_config=split_config)
- suite_split_service.evg_api.test_stats_by_project.return_value = mock_test_stats
+ get_stats_from_s3_mock.return_value = mock_test_stats
suite_split_service.resmoke_proxy.list_tests.return_value = [
f"test_{i}.js" for i in range(n_tests)
]
@@ -198,31 +188,17 @@ class TestSplitSuite(unittest.TestCase):
for sub_suite in suite.sub_suites:
self.assertEqual(n_tests / max_sub_suites, len(sub_suite.test_list))
- 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):
+ @patch("buildscripts.util.teststats.HistoricTaskData.get_stats_from_s3")
+ def test_calculate_suites_will_filter_specified_tests(self, get_stats_from_s3_mock):
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)
- suite_split_service.evg_api.test_stats_by_project.return_value = mock_test_stats
+ get_stats_from_s3_mock.return_value = mock_test_stats
suite_split_service.resmoke_proxy.list_tests.return_value = [
- stat.test_file for stat in mock_test_stats
+ stat.test_name for stat in mock_test_stats
]
suite_split_service.resmoke_proxy.read_suite_config.return_value = {}