From 428099d027b03d5d7730f68c2c2bb66e9d34f7bc Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Mon, 5 Jul 2021 17:23:36 +0200 Subject: [PATCH] TMSS-745: removed initial test for triggers. This endpoint does not exist anymore. Added SubmitTriggerTestCase. Added test_create_draft_from_all_strategy_templates. --- .../test/t_tmssapp_specification_REST_API.py | 134 ++++++++---------- 1 file changed, 57 insertions(+), 77 deletions(-) diff --git a/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py b/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py index d3ab27ad2fd..c490d5f9376 100755 --- a/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py +++ b/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py @@ -30,7 +30,7 @@ from datetime import datetime import unittest import logging -logger = logging.getLogger(__name__) +logger = logging.getLogger('lofar.'+__name__) logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO) from lofar.common.test_utils import exit_with_skipped_code_if_skip_integration_tests @@ -1535,81 +1535,6 @@ class SchedulingUnitDraftTestCase(unittest.TestCase): self.assertEqual(response_3['count'], 0) -class SchedulingUnitDraftTriggerTestCase(unittest.TestCase): - @classmethod - def setUpClass(cls) -> None: - cls.scheduling_set_url = test_data_creator.post_data_and_get_url(test_data_creator.SchedulingSet(), '/scheduling_set/') - cls.template_url = test_data_creator.post_data_and_get_url(test_data_creator.SchedulingUnitTemplate(), '/scheduling_unit_template/') - - def test_scheduling_unit_draft_trigger_list_apiformat(self): - r = requests.get(BASE_URL + '/scheduling_unit_draft_trigger/?format=api', auth=AUTH) - self.assertEqual(r.status_code, 200) - self.assertTrue("Scheduling Unit Draft Trigger List" in r.content.decode('utf8')) - - def test_scheduling_unit_draft_trigger_POST(self): - from lofar.common.json_utils import get_default_json_object_for_schema - constraints_template = models.SchedulingConstraintsTemplate.objects.get(name="constraints") # Note: we cannot use the default one because we are missing a checker for that. - constraints_template_url = BASE_URL + "/scheduling_constraints_template/%s" % constraints_template.pk - constraints_doc = get_default_json_object_for_schema(constraints_template.schema) - schedulingunitdraft_test_data = test_data_creator.SchedulingUnitDraft(scheduling_set_url=self.scheduling_set_url, template_url=self.template_url, scheduling_constraints_template_url=constraints_template_url, scheduling_constraints_doc=constraints_doc) - - # POST test trigger, verify and assert that no blueprint is created - r_dict = POST_and_assert_expected_response(self, BASE_URL + '/scheduling_unit_draft_trigger/', schedulingunitdraft_test_data, 201, schedulingunitdraft_test_data) - url = r_dict['url'] - GET_OK_and_assert_equal_expected_response(self, url, schedulingunitdraft_test_data) - self.assertEqual(r_dict['scheduling_unit_blueprints'], []) - - # POST actual trigger and assert it is blocked without can_trigger flag on the project... - r_dict = POST_and_assert_expected_response(self, BASE_URL + '/scheduling_unit_draft_trigger/?test=false', schedulingunitdraft_test_data, 403, {}) - - # ...but successful when the can_trigger flag is set - set_id = GET_and_assert_equal_expected_code(self, self.scheduling_set_url, 200)['id'] - project = models.Project.objects.get(scheduling_sets__id=set_id) - project.can_trigger = True - project.save() - to_assert = schedulingunitdraft_test_data.copy() - to_assert.pop('scheduling_unit_blueprints') # test data has empty list, exclude from assertion - r_dict = POST_and_assert_expected_response(self, BASE_URL + '/scheduling_unit_draft_trigger/?test=false', schedulingunitdraft_test_data, 201, to_assert) - url = r_dict['url'] - GET_OK_and_assert_equal_expected_response(self, url, to_assert) - - # ...and has blueprints associated - self.assertNotEqual(r_dict['scheduling_unit_blueprints'], []) - - def test_scheduling_unit_draft_trigger_PUT_raises_error(self): - schedulingunitdraft_test_data = test_data_creator.SchedulingUnitDraft(scheduling_set_url=self.scheduling_set_url, template_url=self.template_url) - - # POST new item, verify - r_dict = POST_and_assert_expected_response(self, BASE_URL + '/scheduling_unit_draft_trigger/', schedulingunitdraft_test_data, 201, schedulingunitdraft_test_data) - url = r_dict['id'] - - # assert we cannot PUT a new item in its place - PUT_and_assert_expected_response(self, BASE_URL + '/scheduling_unit_draft_trigger/%s' % id, schedulingunitdraft_test_data, 403, {}) - - def test_scheduling_unit_draft_trigger_PATCH_raises_error(self): - schedulingunitdraft_test_data = test_data_creator.SchedulingUnitDraft(scheduling_set_url=self.scheduling_set_url, template_url=self.template_url) - - # POST new item - r_dict = POST_and_assert_expected_response(self, BASE_URL + '/scheduling_unit_draft_trigger/', schedulingunitdraft_test_data, 201, schedulingunitdraft_test_data) - id = r_dict['id'] - - test_patch = {"description": "This is a new and improved description", - "requirements_doc": {"foo": "barbar"}} - - # PATCH item and verify - PATCH_and_assert_expected_response(self, BASE_URL + '/scheduling_unit_draft_trigger/%s' % id, test_patch, 403, {}) - - def test_scheduling_unit_draft_trigger_DELETE(self): - schedulingunitdraft_test_data = test_data_creator.SchedulingUnitDraft(scheduling_set_url=self.scheduling_set_url, template_url=self.template_url) - - # POST new item, verify - r_dict = POST_and_assert_expected_response(self, BASE_URL + '/scheduling_unit_draft_trigger/', schedulingunitdraft_test_data, 201, schedulingunitdraft_test_data) - id = r_dict['id'] - - # DELETE and check it's gone - with self.assertRaises(AssertionError) as context: - DELETE_and_assert_gone(self, BASE_URL + '/scheduling_unit_draft_trigger/%s' % id) - self.assertIn('403', str(context.exception)) class TaskDraftTestCase(unittest.TestCase): @@ -3178,6 +3103,34 @@ class CyclePermissionTestCase(unittest.TestCase): class SchedulingUnitObservingStrategyTemplateTestCase(unittest.TestCase): + def test_create_draft_from_all_strategy_templates(self): + '''Try to create a scheduling_unit_draft for each known strategy template. + Check that it is created properly.''' + scheduling_set = models.SchedulingSet.objects.create(**SchedulingSet_test_data("scheduling set")) + + for strategy_template in models.SchedulingUnitObservingStrategyTemplate.objects.all(): + logger.info("test_create_draft_from_all_strategy_templates: checking template '%s'", strategy_template.name) + with tmss_test_env.create_tmss_client() as client: + # check normal creation with all defaults + scheduling_unit_draft = client.create_scheduling_unit_draft_from_strategy_template(strategy_template.id, scheduling_set.id) + self.assertIsNotNone(scheduling_unit_draft) + self.assertEqual(scheduling_set.id, scheduling_unit_draft['scheduling_set_id']) + self.assertEqual(strategy_template.id, scheduling_unit_draft['observation_strategy_template_id']) + + # check creation with overrides on top of all defaults + overrides = client.get_scheduling_unit_observing_strategy_template_specification_with_just_the_parameters(strategy_template.name, strategy_template.version) + + scheduling_unit_draft = client.create_scheduling_unit_draft_from_strategy_template(strategy_template.id, scheduling_set.id, requirements_doc_overrides=overrides) + self.assertIsNotNone(scheduling_unit_draft) + self.assertEqual(scheduling_set.id, scheduling_unit_draft['scheduling_set_id']) + self.assertEqual(strategy_template.id, scheduling_unit_draft['observation_strategy_template_id']) + + # check that other overrides are forbidden + with self.assertRaises(Exception): + overrides = {'foo': 'bar'} + client.create_scheduling_unit_draft_from_strategy_template(strategy_template.id, scheduling_set.id, requirements_doc_overrides=overrides) + + def test_nested_SchedulingUnitObservingStrategyTemplate_are_filtered_according_to_SchedulingSet(self): @@ -3191,6 +3144,34 @@ class SchedulingUnitObservingStrategyTemplateTestCase(unittest.TestCase): GET_and_assert_in_expected_response_result_list(self, BASE_URL + '/scheduling_set/%s/scheduling_unit_observing_strategy_template/' % scheduling_set.id, template_test_data, 1) + +class SubmitTriggerTestCase(unittest.TestCase): + def test_submit_trigger_for_all_strategy_templates(self): + '''Try to create a scheduling_unit_draft/blueprint for each known strategy template via a trigger submission.''' + project = models.Project.objects.create(**Project_test_data(can_trigger=True)) + scheduling_set = models.SchedulingSet.objects.create(**SchedulingSet_test_data("scheduling set", project=project)) + + for strategy_template in models.SchedulingUnitObservingStrategyTemplate.objects.filter(name="UC1 CTC+pipelines").all(): + with tmss_test_env.create_tmss_client() as client: + logger.info("test_submit_trigger_for_all_strategy_templates: checking template '%s'", strategy_template.name) + trigger_doc = client.get_trigger_specification_doc_for_scheduling_unit_observing_strategy_template(strategy_template.name, strategy_template.version) + trigger_doc['scheduling_set_id'] = scheduling_set.id + + trigger_doc['mode'] = 'test' + result = client.submit_trigger(trigger_doc) + self.assertIsNotNone(result) + self.assertTrue('scheduling_unit_draft' in result['url']) # it's a draft (because the more is "test") + self.assertEqual(scheduling_set.id, result['scheduling_set_id']) + self.assertEqual(strategy_template.id, result['observation_strategy_template_id']) + + # TODO: fix merging of overrides into spec, and enable check below. + # trigger_doc['mode'] = 'run' + # result = client.submit_trigger(trigger_doc) + # self.assertIsNotNone(result) + # self.assertTrue('scheduling_unit_blueprint' in result['url']) # it's a blueprint (because the more is "run") + # self.assertEqual('schedulable', result['status']) + + # todo: move to t_permissions (I tried, but it broke) class SystemRolePermissionTestCase(unittest.TestCase): @@ -3381,6 +3362,5 @@ class SystemRolePermissionTestCase(unittest.TestCase): if __name__ == "__main__": - logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO) unittest.main() -- GitLab