summaryrefslogtreecommitdiffstats
path: root/components/pm-subscription-handler/tests
diff options
context:
space:
mode:
authorSagarS <sagar.shetty@est.tech>2021-11-09 17:36:43 +0000
committerSagarS <sagar.shetty@est.tech>2021-12-02 14:49:11 +0000
commit24454771f523f65fce5e3dce91cfe8cd15fc8be7 (patch)
tree4911a6b473cb0c2e2f566f243b95a6dd44719120 /components/pm-subscription-handler/tests
parent7e3042157d736e1f81618b92afc3bab501755a31 (diff)
[DCAEGEN2] PMSH Response Event Handler Integration
Issue-ID: DCAEGEN2-2915 Change-Id: I95b34a7b5b011760ae30c1485925dc19fde5e6c8 Signed-off-by: SagarS <sagar.shetty@est.tech>
Diffstat (limited to 'components/pm-subscription-handler/tests')
-rw-r--r--components/pm-subscription-handler/tests/services/test_measurement_group_service.py89
-rw-r--r--components/pm-subscription-handler/tests/services/test_subscription_service.py2
-rw-r--r--components/pm-subscription-handler/tests/test_policy_response_handler.py106
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()