diff options
author | 2021-12-07 19:37:36 +0000 | |
---|---|---|
committer | 2021-12-07 19:37:36 +0000 | |
commit | 10aa7f851d2256c5b158f8b4c5d3e2756890f7b7 (patch) | |
tree | 4f6de2f0a42ba5c43e1b3092426f90e3cab05e8f /components/pm-subscription-handler/tests | |
parent | b478d8b78325942550058381d3218db8c63624a6 (diff) | |
parent | 24454771f523f65fce5e3dce91cfe8cd15fc8be7 (diff) |
Merge "[DCAEGEN2] PMSH Response Event Handler Integration"
Diffstat (limited to 'components/pm-subscription-handler/tests')
3 files changed, 140 insertions, 57 deletions
diff --git a/components/pm-subscription-handler/tests/services/test_measurement_group_service.py b/components/pm-subscription-handler/tests/services/test_measurement_group_service.py index 46c4bac7..97353afe 100644 --- a/components/pm-subscription-handler/tests/services/test_measurement_group_service.py +++ b/components/pm-subscription-handler/tests/services/test_measurement_group_service.py @@ -23,9 +23,9 @@ from mod.network_function import NetworkFunction from mod.pmsh_config import AppConfig from mod import db from tests.base_setup import BaseClassSetup -from mod.api.services import measurement_group_service -from mod.api.db_models import MeasurementGroupModel, NfMeasureGroupRelationalModel,\ - SubscriptionModel +from mod.api.services import measurement_group_service, nf_service +from mod.api.db_models import MeasurementGroupModel, NfMeasureGroupRelationalModel, \ + SubscriptionModel, NetworkFunctionModel from mod.subscription import SubNfState @@ -99,17 +99,94 @@ class MeasurementGroupServiceTestCase(BaseClassSetup): MeasurementGroupModel.subscription_name == 'ExtraPM-All-gNB-R2B').one_or_none()) self.assertIsNotNone(measurement_grp) - def test_apply_nf_to_measgroup(self): - measurement_group_service.apply_nf_to_measgroup("pnf_test", "measure_grp_name") + def test_apply_nf_to_measurement_group_status(self): + measurement_group_service.apply_nf_status_to_measurement_group( + "pnf_test", "measure_grp_name", SubNfState.PENDING_CREATE.value) db.session.commit() measurement_grp_rel = (NfMeasureGroupRelationalModel.query.filter( NfMeasureGroupRelationalModel.measurement_grp_name == 'measure_grp_name', NfMeasureGroupRelationalModel.nf_name == 'pnf_test').one_or_none()) - db.session.commit() self.assertIsNotNone(measurement_grp_rel) self.assertEqual(measurement_grp_rel.nf_measure_grp_status, SubNfState.PENDING_CREATE.value) + def test_update_measurement_group_nf_status(self): + measurement_group_service.apply_nf_status_to_measurement_group( + "pnf_test", "measure_grp_name", SubNfState.PENDING_CREATE.value) + measurement_group_service.update_measurement_group_nf_status( + "measure_grp_name", SubNfState.CREATED.value, "pnf_test") + db.session.commit() + measurement_grp_rel = (NfMeasureGroupRelationalModel.query.filter( + NfMeasureGroupRelationalModel.measurement_grp_name == 'measure_grp_name', + NfMeasureGroupRelationalModel.nf_name == 'pnf_test').one_or_none()) + self.assertIsNotNone(measurement_grp_rel) + self.assertEqual(measurement_grp_rel.nf_measure_grp_status, + SubNfState.CREATED.value) + + def test_delete_nf_to_measurement_group_without_nf_delete(self): + nf = NetworkFunction(nf_name='pnf_test1') + nf_service.save_nf(nf) + db.session.commit() + measurement_group_service.apply_nf_status_to_measurement_group( + "pnf_test1", "measure_grp_name1", SubNfState.PENDING_CREATE.value) + measurement_group_service.apply_nf_status_to_measurement_group( + "pnf_test1", "measure_grp_name2", SubNfState.PENDING_CREATE.value) + measurement_group_service.delete_nf_to_measurement_group( + "pnf_test1", "measure_grp_name1", SubNfState.DELETED.value) + measurement_grp_rel = (NfMeasureGroupRelationalModel.query.filter( + NfMeasureGroupRelationalModel.measurement_grp_name == 'measure_grp_name1', + NfMeasureGroupRelationalModel.nf_name == 'pnf_test1').one_or_none()) + self.assertIsNone(measurement_grp_rel) + network_function = (NetworkFunctionModel.query.filter( + NetworkFunctionModel.nf_name == 'pnf_test1').one_or_none()) + self.assertIsNotNone(network_function) + + def test_delete_nf_to_measurement_group_with_nf_delete(self): + nf = NetworkFunction(nf_name='pnf_test2') + nf_service.save_nf(nf) + db.session.commit() + measurement_group_service.apply_nf_status_to_measurement_group( + "pnf_test2", "measure_grp_name2", SubNfState.PENDING_CREATE.value) + measurement_group_service.delete_nf_to_measurement_group( + "pnf_test2", "measure_grp_name2", SubNfState.DELETED.value) + measurement_grp_rel = (NfMeasureGroupRelationalModel.query.filter( + NfMeasureGroupRelationalModel.measurement_grp_name == 'measure_grp_name2', + NfMeasureGroupRelationalModel.nf_name == 'pnf_test2').one_or_none()) + self.assertIsNone(measurement_grp_rel) + network_function = (NetworkFunctionModel.query.filter( + NetworkFunctionModel.nf_name == 'pnf_test2').one_or_none()) + self.assertIsNone(network_function) + + @patch.object(NetworkFunction, 'delete') + @patch('mod.logger.error') + def test_delete_nf_to_measurement_group_failure(self, mock_logger, nf_delete_func): + nf = NetworkFunction(nf_name='pnf_test2') + nf_service.save_nf(nf) + db.session.commit() + measurement_group_service.apply_nf_status_to_measurement_group( + "pnf_test2", "measure_grp_name2", SubNfState.PENDING_CREATE.value) + nf_delete_func.side_effect = Exception('delete failed') + measurement_group_service.delete_nf_to_measurement_group( + "pnf_test2", "measure_grp_name2", SubNfState.DELETED.value) + measurement_grp_rel = (NfMeasureGroupRelationalModel.query.filter( + NfMeasureGroupRelationalModel.measurement_grp_name == 'measure_grp_name2', + NfMeasureGroupRelationalModel.nf_name == 'pnf_test2').one_or_none()) + self.assertIsNone(measurement_grp_rel) + network_function = (NetworkFunctionModel.query.filter( + NetworkFunctionModel.nf_name == 'pnf_test2').one_or_none()) + self.assertIsNotNone(network_function) + mock_logger.assert_called_with('Failed to delete nf: pnf_test2 for ' + 'measurement group: measure_grp_name2 due to: delete failed') + + @patch.object(db.session, 'commit') + @patch('mod.logger.error') + def test_update_nf_to_measurement_group_failure(self, mock_logger, db_commit_call): + db_commit_call.side_effect = Exception('update failed') + measurement_group_service.update_measurement_group_nf_status( + "measure_grp_name2", SubNfState.CREATE_FAILED.value, "pnf_test2") + mock_logger.assert_called_with('Failed to update nf: pnf_test2 for ' + 'measurement group: measure_grp_name2 due to: update failed') + def create_test_subs(self, new_sub_name, new_msrmt_grp_name): subscription = self.subscription_request.replace('ExtraPM-All-gNB-R2B', new_sub_name) subscription = subscription.replace('msrmt_grp_name', new_msrmt_grp_name) diff --git a/components/pm-subscription-handler/tests/services/test_subscription_service.py b/components/pm-subscription-handler/tests/services/test_subscription_service.py index 86bf2639..8f3f0f4f 100644 --- a/components/pm-subscription-handler/tests/services/test_subscription_service.py +++ b/components/pm-subscription-handler/tests/services/test_subscription_service.py @@ -171,7 +171,7 @@ class SubscriptionServiceTestCase(BaseClassSetup): @patch.object(aai_client, '_get_all_aai_nf_data') @patch.object(aai_client, 'get_aai_model_data') - @patch.object(measurement_group_service, 'apply_nf_to_measgroup') + @patch.object(measurement_group_service, 'apply_nf_status_to_measurement_group') @patch.object(NetworkFunctionFilter, 'get_network_function_filter') def test_apply_measurement_grp_to_nfs(self, mock_filter_call, mock_apply_nf, mock_model_aai, mock_aai): diff --git a/components/pm-subscription-handler/tests/test_policy_response_handler.py b/components/pm-subscription-handler/tests/test_policy_response_handler.py index 9bf15939..3e6abf94 100644 --- a/components/pm-subscription-handler/tests/test_policy_response_handler.py +++ b/components/pm-subscription-handler/tests/test_policy_response_handler.py @@ -15,30 +15,26 @@ # # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END===================================================== -from unittest.mock import patch +from unittest.mock import patch, MagicMock -from mod.api.db_models import SubscriptionModel +from mod import db from mod.network_function import NetworkFunction from mod.policy_response_handler import PolicyResponseHandler, policy_response_handle_functions from mod.subscription import AdministrativeState, SubNfState -from tests.base_setup import BaseClassSetup +from tests.base_setup import BaseClassSetup, create_subscription_data class PolicyResponseHandlerTest(BaseClassSetup): - @classmethod def setUpClass(cls): super().setUpClass() @patch('mod.create_app') - @patch('mod.pmsh_utils._MrSub') - def setUp(self, mock_mr_sub, mock_app): + def setUp(self, mock_app): super().setUp() - self.mock_policy_mr_sub = mock_mr_sub + super().setUpAppConf() self.nf = NetworkFunction(nf_name='nf1') - self.policy_response_handler = PolicyResponseHandler(self.mock_policy_mr_sub, - self.app_conf, - mock_app) + self.policy_response_handler = PolicyResponseHandler(mock_app) def tearDown(self): super().tearDown() @@ -52,46 +48,67 @@ class PolicyResponseHandlerTest(BaseClassSetup): with patch.dict(policy_response_handle_functions, {AdministrativeState.LOCKED.value: {'success': mock_delete}}): self.policy_response_handler._handle_response( - self.app_conf.subscription.subscriptionName, + 'msr_grp_name', AdministrativeState.LOCKED.value, self.nf.nf_name, 'success') - mock_delete.assert_called() - @patch('mod.subscription.Subscription.update_sub_nf_status') + @patch('mod.api.services.measurement_group_service.update_measurement_group_nf_status') def test_handle_response_locked_failed(self, mock_update_sub_nf): with patch.dict(policy_response_handle_functions, {AdministrativeState.LOCKED.value: {'failed': mock_update_sub_nf}}): self.policy_response_handler._handle_response( - self.app_conf.subscription.subscriptionName, + 'msr_grp_name', AdministrativeState.LOCKED.value, self.nf.nf_name, 'failed') mock_update_sub_nf.assert_called_with( - subscription_name=self.app_conf.subscription.subscriptionName, + measurement_group_name='msr_grp_name', + status=SubNfState.DELETE_FAILED.value, nf_name=self.nf.nf_name) + + @patch('mod.network_function.NetworkFunction.delete') + def test_handle_response_locking_success(self, mock_delete): + with patch.dict(policy_response_handle_functions, + {AdministrativeState.LOCKING.value: {'success': mock_delete}}): + self.policy_response_handler._handle_response( + 'msr_grp_name', + AdministrativeState.LOCKING.value, + self.nf.nf_name, 'success') + mock_delete.assert_called() + + @patch('mod.api.services.measurement_group_service.update_measurement_group_nf_status') + def test_handle_response_locking_failed(self, mock_update_sub_nf): + with patch.dict(policy_response_handle_functions, + {AdministrativeState.LOCKING.value: {'failed': mock_update_sub_nf}}): + self.policy_response_handler._handle_response( + 'msr_grp_name', + AdministrativeState.LOCKING.value, + self.nf.nf_name, 'failed') + mock_update_sub_nf.assert_called_with( + measurement_group_name='msr_grp_name', status=SubNfState.DELETE_FAILED.value, nf_name=self.nf.nf_name) - @patch('mod.subscription.Subscription.update_sub_nf_status') + @patch('mod.api.services.measurement_group_service.update_measurement_group_nf_status') def test_handle_response_unlocked_success(self, mock_update_sub_nf): with patch.dict(policy_response_handle_functions, {AdministrativeState.UNLOCKED.value: {'success': mock_update_sub_nf}}): self.policy_response_handler._handle_response( - self.app_conf.subscription.subscriptionName, + 'msr_grp_name', AdministrativeState.UNLOCKED.value, self.nf.nf_name, 'success') mock_update_sub_nf.assert_called_with( - subscription_name=self.app_conf.subscription.subscriptionName, + measurement_group_name='msr_grp_name', status=SubNfState.CREATED.value, nf_name=self.nf.nf_name) - @patch('mod.subscription.Subscription.update_sub_nf_status') + @patch('mod.api.services.measurement_group_service.update_measurement_group_nf_status') def test_handle_response_unlocked_failed(self, mock_update_sub_nf): with patch.dict(policy_response_handle_functions, {AdministrativeState.UNLOCKED.value: {'failed': mock_update_sub_nf}}): self.policy_response_handler._handle_response( - self.app_conf.subscription.subscriptionName, + 'msr_grp_name', AdministrativeState.UNLOCKED.value, self.nf.nf_name, 'failed') mock_update_sub_nf.assert_called_with( - subscription_name=self.app_conf.subscription.subscriptionName, + measurement_group_name='msr_grp_name', status=SubNfState.CREATE_FAILED.value, nf_name=self.nf.nf_name) def test_handle_response_exception(self): @@ -99,45 +116,34 @@ class PolicyResponseHandlerTest(BaseClassSetup): 'wrong_state', 'nf1', 'wrong_message') @patch('mod.policy_response_handler.PolicyResponseHandler._handle_response') - @patch('mod.subscription.Subscription.get') - def test_poll_policy_topic_calls_methods_correct_sub(self, mock_get_sub, mock_handle_response): + @patch('mod.pmsh_config.AppConfig.get_from_topic') + def test_poll_policy_topic_calls_methods_correct_mg(self, mock_policy_mr_sub, + mock_handle_response): response_data = ['{"name": "ResponseEvent","status": { "subscriptionName": ' - '"ExtraPM-All-gNB-R2B", "nfName": "pnf300", "message": "success" } }'] - self.mock_policy_mr_sub.get_from_topic.return_value = response_data - mock_get_sub.return_value = SubscriptionModel(subscription_name='ExtraPM-All-gNB-R2B', - operational_policy_name='policy-name', - control_loop_name='control-loop-name', - status=AdministrativeState.UNLOCKED.value) + '"ExtraPM-All-gNB-R2B2", "nfName": "pnf300", "message": "success", ' + '"measurementGroupName":"MG1"} }'] + mock_policy_mr_sub.return_value = response_data + sub_model = create_subscription_data('ExtraPM-All-gNB-R2B2') + db.session.add(sub_model) + db.session.commit() self.policy_response_handler.poll_policy_topic() - self.mock_policy_mr_sub.get_from_topic.assert_called() - mock_handle_response.assert_called_with(self.app_conf.subscription.subscriptionName, + mock_handle_response.assert_called_with("MG1", AdministrativeState.UNLOCKED.value, 'pnf300', 'success') @patch('mod.policy_response_handler.PolicyResponseHandler._handle_response') - @patch('mod.subscription.Subscription.get') - def test_poll_policy_topic_no_method_calls_incorrect_sub(self, mock_get_sub, - mock_handle_response): + @patch('mod.pmsh_config.AppConfig.get_from_topic') + def test_poll_policy_topic_no_method_calls_unavailable_mg(self, mock_policy_mr_sub, + mock_handle_response): response_data = ['{"name": "ResponseEvent","status": { "subscriptionName": ' - '"Different_Subscription", "nfName": "pnf300", "message": "success" } }'] - self.mock_policy_mr_sub.get_from_topic.return_value = response_data - mock_get_sub.return_value = SubscriptionModel(subscription_name='ExtraPM-All-gNB-R2B', - operational_policy_name='policy-name', - control_loop_name='control-loop-name', - status=AdministrativeState.UNLOCKED.value) + '"Different_Subscription", "nfName": "pnf300", "message": "success",' + '"measurementGroupName":"msr_grp_name" } }'] + mock_policy_mr_sub.return_value = response_data self.policy_response_handler.poll_policy_topic() - - self.mock_policy_mr_sub.get_from_topic.assert_called() - mock_handle_response.assert_not_called() + @patch('mod.pmsh_config.AppConfig.get_from_topic', MagicMock(return_value='wrong_return')) @patch('mod.logger.error') - @patch('mod.subscription.Subscription.get') - def test_poll_policy_topic_exception(self, mock_get_sub, mock_logger): - self.mock_policy_mr_sub.get_from_topic.return_value = 'wrong_return' - mock_get_sub.return_value = SubscriptionModel(subscription_name='ExtraPM-All-gNB-R2B', - operational_policy_name='policy-name', - control_loop_name='control-loop-name', - status=AdministrativeState.UNLOCKED.value) + def test_poll_policy_topic_exception(self, mock_logger): self.policy_response_handler.poll_policy_topic() mock_logger.assert_called() |