mongo/buildscripts/tests/task_generation/test_gen_task_service.py

128 lines
4.8 KiB
Python

"""Unit tests for gen_task_service.py."""
import unittest
from unittest.mock import MagicMock
from shrub.v2 import BuildVariant
import buildscripts.task_generation.gen_task_service as under_test
from buildscripts.task_generation.task_types.fuzzer_tasks import FuzzerGenTaskService
# pylint: disable=missing-docstring,invalid-name,unused-argument,no-self-use,protected-access
def build_mock_fuzzer_params(multi_version=None, use_large_distro=None, add_to_display=True,
large_distro_name=None):
return under_test.FuzzerGenTaskParams(
task_name="task name",
variant="build variant",
suite="resmoke suite",
num_files=10,
num_tasks=5,
resmoke_args="args for resmoke",
npm_command="jstestfuzz",
jstestfuzz_vars="vars for jstestfuzz",
continue_on_failure=True,
resmoke_jobs_max=5,
should_shuffle=True,
timeout_secs=100,
require_multiversion=multi_version,
use_large_distro=use_large_distro,
add_to_display_task=add_to_display,
large_distro_name=large_distro_name,
config_location="config location",
)
def build_mocked_service():
return under_test.GenTaskService(
evg_api=MagicMock(),
gen_task_options=MagicMock(),
gen_config=MagicMock(),
resmoke_gen_task_service=MagicMock(),
multiversion_gen_task_service=MagicMock(),
fuzzer_gen_task_service=FuzzerGenTaskService(),
)
class TestGenerateFuzzerTask(unittest.TestCase):
def test_fuzzer_tasks_should_be_generated(self):
mock_params = build_mock_fuzzer_params()
build_variant = BuildVariant("mock build variant")
service = build_mocked_service()
fuzzer_task = service.generate_fuzzer_task(mock_params, build_variant)
self.assertEqual(fuzzer_task.task_name, mock_params.task_name)
self.assertEqual(len(fuzzer_task.sub_tasks), mock_params.num_tasks)
self.assertEqual(len(build_variant.tasks), mock_params.num_tasks)
display_tasks = list(build_variant.display_tasks)
self.assertEqual(len(display_tasks), 1)
self.assertEqual(display_tasks[0].display_name, mock_params.task_name)
self.assertEqual(len(display_tasks[0].execution_tasks), mock_params.num_tasks)
def test_fuzzer_for_large_distro_tasks_should_be_generated_on_large(self):
mock_distro = "my large distro"
mock_params = build_mock_fuzzer_params(use_large_distro=True, large_distro_name=mock_distro)
build_variant = BuildVariant("mock build variant")
service = build_mocked_service()
service.gen_task_options.large_distro_name = mock_distro
service.generate_fuzzer_task(mock_params, build_variant)
fuzzer_config = build_variant.as_dict()
self.assertTrue(all(mock_distro in task["distros"] for task in fuzzer_config["tasks"]))
def test_fuzzer_tasks_should_not_be_added_to_display_group_when_specified(self):
mock_params = build_mock_fuzzer_params(add_to_display=False)
build_variant = BuildVariant("mock build variant")
service = build_mocked_service()
fuzzer_task = service.generate_fuzzer_task(mock_params, build_variant)
self.assertEqual(fuzzer_task.task_name, mock_params.task_name)
self.assertEqual(len(fuzzer_task.sub_tasks), mock_params.num_tasks)
self.assertEqual(len(build_variant.tasks), mock_params.num_tasks)
display_tasks = list(build_variant.display_tasks)
self.assertEqual(len(display_tasks), 0)
class TestGetDistro(unittest.TestCase):
def test_default_distro_should_be_used_if_use_large_distro_not_set(self):
service = build_mocked_service()
distros = service._get_distro("build variant", use_large_distro=False,
large_distro_name=None)
self.assertIsNone(distros)
def test_large_distro_should_be_used_if_use_large_distro_is_set(self):
mock_distro = "my large distro"
service = build_mocked_service()
distros = service._get_distro("build variant", use_large_distro=True,
large_distro_name=mock_distro)
self.assertEqual(distros, [mock_distro])
def test_a_missing_large_distro_should_throw_error(self):
service = build_mocked_service()
with self.assertRaises(ValueError):
service._get_distro("build variant", use_large_distro=True, large_distro_name=None)
def test_a_missing_large_distro_can_be_ignored(self):
build_variant = "my build variant"
service = build_mocked_service()
service.gen_config.build_variant_large_distro_exceptions = {
"some other build", build_variant, "build 3"
}
distros = service._get_distro(build_variant, use_large_distro=True, large_distro_name=None)
self.assertIsNone(distros)