From 2a21c78886d13c4266da639252d8fb899b7d34a5 Mon Sep 17 00:00:00 2001 From: SagarS Date: Thu, 27 Jan 2022 15:05:50 +0000 Subject: [DCAEGEN2] Update Administrative status for measurement group Issue-ID: DCAEGEN2-2820 Change-Id: I290693edc5061c21bab6e0706eda02acb52e38e1 Signed-off-by: SagarS --- .../tests/test_controller.py | 75 +++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) (limited to 'components/pm-subscription-handler/tests/test_controller.py') diff --git a/components/pm-subscription-handler/tests/test_controller.py b/components/pm-subscription-handler/tests/test_controller.py index 1de7c175..94bfbfd6 100755 --- a/components/pm-subscription-handler/tests/test_controller.py +++ b/components/pm-subscription-handler/tests/test_controller.py @@ -22,8 +22,9 @@ from http import HTTPStatus from mod import aai_client, db from mod.api.controller import status, post_subscription, get_subscription_by_name, \ - get_subscriptions, get_meas_group_with_nfs, delete_subscription_by_name + get_subscriptions, get_meas_group_with_nfs, delete_subscription_by_name, update_admin_state from tests.base_setup import BaseClassSetup +from mod.api.custom_exception import InvalidDataException, DataConflictException from mod.api.db_models import SubscriptionModel, NfMeasureGroupRelationalModel from mod.subscription import SubNfState from mod.network_function import NetworkFunctionFilter @@ -252,3 +253,75 @@ class ControllerTestCase(BaseClassSetup): def test_delete_sub_exception(self): error, status_code = delete_subscription_by_name('None') self.assertEqual(status_code, HTTPStatus.INTERNAL_SERVER_ERROR.value) + + @patch('mod.pmsh_config.AppConfig.publish_to_topic', MagicMock(return_value=None)) + def test_update_admin_state_api_for_locked_update(self): + sub = create_subscription_data('sub1') + nf_list = create_multiple_network_function_data(['pnf_101', 'pnf_102']) + db.session.add(sub) + for nf in nf_list: + nf_service.save_nf(nf) + measurement_group_service. \ + apply_nf_status_to_measurement_group(nf.nf_name, sub.measurement_groups[0]. + measurement_group_name, + SubNfState.CREATED.value) + db.session.commit() + response = update_admin_state('sub1', 'MG1', {'administrativeState': 'LOCKED'}) + self.assertEqual(response[1], HTTPStatus.OK.value) + self.assertEqual(response[0], 'Successfully updated admin state') + mg_with_nfs, status_code = get_meas_group_with_nfs('sub1', 'MG1') + self.assertEqual(mg_with_nfs['subscriptionName'], 'sub1') + self.assertEqual(mg_with_nfs['measurementGroupName'], 'MG1') + self.assertEqual(mg_with_nfs['administrativeState'], 'LOCKING') + for nf in mg_with_nfs['networkFunctions']: + self.assertEqual(nf['nfMgStatus'], SubNfState.PENDING_DELETE.value) + + @patch('mod.pmsh_config.AppConfig.publish_to_topic', MagicMock(return_value=None)) + @patch.object(aai_client, '_get_all_aai_nf_data') + @patch.object(aai_client, 'get_aai_model_data') + @patch.object(NetworkFunctionFilter, 'get_network_function_filter') + def test_update_admin_state_api_for_unlocked_update(self, mock_filter_call, + mock_model_aai, mock_aai): + mock_aai.return_value = json.loads(self.aai_response_data) + mock_model_aai.return_value = json.loads(self.good_model_info) + sub = create_subscription_data('sub1') + db.session.add(sub) + nf_list = create_multiple_network_function_data(['pnf_101', 'pnf_102']) + for network_function in nf_list: + db.session.add(network_function) + db.session.commit() + mock_filter_call.return_value = NetworkFunctionFilter.get_network_function_filter('sub') + response = update_admin_state('sub1', 'MG2', {'administrativeState': 'UNLOCKED'}) + self.assertEqual(response[1], HTTPStatus.OK.value) + self.assertEqual(response[0], 'Successfully updated admin state') + mg_with_nfs, status_code = get_meas_group_with_nfs('sub1', 'MG2') + self.assertEqual(mg_with_nfs['subscriptionName'], 'sub1') + self.assertEqual(mg_with_nfs['measurementGroupName'], 'MG2') + self.assertEqual(mg_with_nfs['administrativeState'], 'UNLOCKED') + for nf in mg_with_nfs['networkFunctions']: + self.assertEqual(nf['nfMgStatus'], SubNfState.PENDING_CREATE.value) + + @patch('mod.api.services.measurement_group_service.update_admin_status', + MagicMock(side_effect=InvalidDataException('Bad request'))) + def test_update_admin_state_api_invalid_data_exception(self): + error, status_code = update_admin_state('sub4', 'MG2', + {'administrativeState': 'UNLOCKED'}) + self.assertEqual(status_code, HTTPStatus.BAD_REQUEST.value) + self.assertEqual(error, 'Bad request') + + @patch('mod.api.services.measurement_group_service.update_admin_status', + MagicMock(side_effect=DataConflictException('Data conflict'))) + def test_update_admin_state_api_data_conflict_exception(self): + error, status_code = update_admin_state('sub4', 'MG2', + {'administrativeState': 'UNLOCKED'}) + self.assertEqual(status_code, HTTPStatus.CONFLICT.value) + self.assertEqual(error, 'Data conflict') + + @patch('mod.api.services.measurement_group_service.update_admin_status', + MagicMock(side_effect=Exception('Server Error'))) + def test_update_admin_state_api_exception(self): + error, status_code = update_admin_state('sub4', 'MG2', + {'administrativeState': 'UNLOCKED'}) + self.assertEqual(status_code, HTTPStatus.INTERNAL_SERVER_ERROR.value) + self.assertEqual(error, 'Update admin status request was not processed for sub name: sub4 ' + 'and meas group name: MG2 due to Exception : Server Error') -- cgit 1.2.3-korg