Merge "Require filter parameters for running tempest test" into main

This commit is contained in:
Zuul 2024-02-08 02:06:36 +00:00 committed by Gerrit Code Review
commit be31cb3b44
3 changed files with 37 additions and 3 deletions

View File

@ -284,7 +284,7 @@ class TempestOperatorCharm(sunbeam_charm.OSBaseOperatorCharmK8S):
def _on_validate_action(self, event: ops.charm.ActionEvent) -> None:
"""Run tempest action."""
serial: bool = event.params["serial"]
regexes: List[str] = event.params["regex"].strip().split()
regexes: List[str] = event.params["regex"].split()
exclude_regex: str = event.params["exclude-regex"].strip()
test_list: str = event.params["test-list"].strip()

View File

@ -200,6 +200,15 @@ class TempestPebbleHandler(sunbeam_chandlers.ServicePebbleHandler):
Raises a RuntimeError if something goes wrong.
"""
# validation before running anything
if not (regexes or exclude_regex or test_list):
raise RuntimeError(
"No filter parameters provided.\n"
"At least one of regex, exclude-regex, or test-list must be provided to run tests.\n\n"
"If you really intend to run all tests, pass regex='.*'.\n"
"WARNING: the full test set is very large and will take a long time."
)
for r in [*regexes, exclude_regex]:
try:
re.compile(r)

View File

@ -311,14 +311,14 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
action_event = mock.Mock()
action_event.params = {
"serial": False,
"regex": "",
"regex": "smoke",
"exclude-regex": "",
"test-list": "",
}
self.harness.charm._on_validate_action(action_event)
action_event.fail.assert_not_called()
exec_mock.assert_called_with(
["tempest-run-wrapper", "--parallel"],
["tempest-run-wrapper", "--parallel", "--regex", "smoke"],
user="tempest",
group="tempest",
working_dir=TEMPEST_HOME,
@ -380,6 +380,31 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.harness.remove_relation(identity_ops_rel_id)
self.harness.remove_relation(grafana_dashboard_rel_id)
def test_validate_action_no_params(self):
"""Test validate action with no filter params."""
test_utils.set_all_pebbles_ready(self.harness)
self.add_logging_relation(self.harness)
self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness)
exec_mock = mock.Mock()
self.harness.charm.pebble_handler().execute = exec_mock
action_event = mock.Mock()
action_event.params = {
"serial": True,
"regex": "",
"exclude-regex": "",
"test-list": "",
}
self.harness.charm._on_validate_action(action_event)
action_event.fail.assert_called_once()
self.assertIn(
"No filter parameters provided",
action_event.fail.call_args.args[0],
)
exec_mock.assert_not_called()
def test_get_list_action(self):
"""Test get-list action."""
test_utils.set_all_pebbles_ready(self.harness)