Files
mongo/buildscripts/tests/resmokelib/testing/test_suite.py
Steve McClure 51235eb7a1 SERVER-104261: Add option to select which strategies to run (#35342)
GitOrigin-RevId: 816492466d3f123d3a0cb4a9953c811f14398afc
2025-04-24 16:38:12 +00:00

116 lines
5.2 KiB
Python

"""Unit tests for the resmokelib.testing.suite module."""
import unittest
from mock import MagicMock
from buildscripts.resmokelib.testing import suite as under_test
from buildscripts.resmokelib.testing.testcases.interface import TestCase
class TestNumTimesToRepeatTests(unittest.TestCase):
def setUp(self):
self.default_repeat_tests = under_test._config.REPEAT_TESTS
self.suite = under_test.Suite("suite_name", {"test_kind": "js_test"})
def tearDown(self):
under_test._config.REPEAT_TESTS = self.default_repeat_tests
def test_without_num_repeat_tests(self):
expected_num_repeat_tests = 1
num_repeat_tests = self.suite.get_num_times_to_repeat_tests()
self.assertEqual(num_repeat_tests, expected_num_repeat_tests)
def test_with_num_repeat_tests(self):
expected_num_repeat_tests = 5
under_test._config.REPEAT_TESTS = expected_num_repeat_tests
num_repeat_tests = self.suite.get_num_times_to_repeat_tests()
self.assertEqual(num_repeat_tests, expected_num_repeat_tests)
class TestNumJobsToStart(unittest.TestCase):
def setUp(self):
self.default_repeat_tests = under_test._config.REPEAT_TESTS
self.default_num_jobs = under_test._config.JOBS
self.suite = under_test.Suite("suite_name", {"test_kind": "js_test"})
self.suite._tests = []
self.num_tests = 5
for _ in range(self.num_tests):
self.suite._tests.append(MagicMock(TestCase))
def tearDown(self):
under_test._config.REPEAT_TESTS = self.default_repeat_tests
under_test._config.JOBS = self.default_num_jobs
def test_num_tests_gte_num_jobs(self):
num_repeat = 2
under_test._config.JOBS = 100
under_test._config.REPEAT_TESTS = num_repeat
self.assertEqual(self.num_tests * num_repeat, self.suite.get_num_jobs_to_start())
class TestGetTestsForKind(unittest.TestCase):
def setUp(self):
self.suite = under_test.Suite("suite_name", {"test_kind": "js_test"})
self.suite._tests = ["t/test1.js", "t/test2.js", "t/test3.js"]
self.suite._suite_config = {
"selector": {"roots": ["testroot/**"]},
"include_files": ["testroot/test1.js, testroot/test2.js", "testroot/test3.js"],
}
self.default_evergreen_task_id = under_test._config.EVERGREEN_TASK_ID
self.default_enable_evergreen_api_test_selection = (
under_test._config.ENABLE_EVERGREEN_API_TEST_SELECTION
)
self.default_evergreen_test_selection_strategy = (
under_test._config.EVERGREEN_TEST_SELECTION_STRATEGY
)
self.default_evergreen_project_name = under_test._config.EVERGREEN_PROJECT_NAME
self.default_evergreen_variant_name = under_test._config.EVERGREEN_VARIANT_NAME
self.default_evergreen_requester = under_test._config.EVERGREEN_REQUESTER
self.default_evergreen_task_id = under_test._config.EVERGREEN_TASK_ID
self.default_evergreen_task_name = under_test._config.EVERGREEN_TASK_NAME
def tearDown(self):
under_test._config.ENABLE_EVERGREEN_API_TEST_SELECTION = (
self.default_enable_evergreen_api_test_selection
)
under_test._config.EVERGREEN_PROJECT_NAME = self.default_evergreen_project_name
under_test._config.EVERGREEN_VARIANT_NAME = self.default_evergreen_variant_name
under_test._config.EVERGREEN_REQUESTER = self.default_evergreen_requester
under_test._config.EVERGREEN_TASK_ID = self.default_evergreen_task_id
under_test._config.EVERGREEN_TASK_NAME = self.default_evergreen_task_name
under_test._config.EVERGREEN_TEST_SELECTION_STRATEGY = (
self.default_evergreen_test_selection_strategy
)
def test_simple(self):
self.assertFalse(under_test._config.ENABLE_EVERGREEN_API_TEST_SELECTION)
tests, excluded = self.suite._get_tests_for_kind("js_test")
self.assertEqual(tests, ["testroot"])
self.assertEqual(excluded, [])
def test_with_test_selection_strategy(self):
under_test._config.ENABLE_EVERGREEN_API_TEST_SELECTION = True
under_test._config.EVERGREEN_PROJECT_NAME = "project_name"
under_test._config.EVERGREEN_VARIANT_NAME = "variant_name"
under_test._config.EVERGREEN_REQUESTER = "requester"
under_test._config.EVERGREEN_TASK_ID = "task_id"
under_test._config.EVERGREEN_TASK_NAME = "task_name"
under_test._config.EVERGREEN_TEST_SELECTION_STRATEGY = "strategy"
# Currently raises an exception because the Evergreen endpoint is still under development
with self.assertRaises(RuntimeError) as context:
self.suite._get_tests_for_kind("js_test")
self.assertEqual(
str(context.exception),
"Failure using the select tests evergreen endpoint with the following request:\n"
+ "{'project_id': 'project_name', 'build_variant': 'variant_name', 'requester': 'requester', 'task_id': 'task_id', 'task_name': 'task_name', 'tests': ['testroot'], 'strategies': 'strategy'}",
)
self.assertEqual(
str(context.exception.__cause__),
"400 Client Error: Bad Request for url: https://evergreen.mongodb.com/rest/v2/select/tests",
)