def test_update_filter_with_new_del_nfs(self, mock_filter_call, mock_model_aai, mock_aai, mock_update_filter): mock_aai.return_value = json.loads(self.aai_response_data) mock_model_aai.return_value = json.loads(self.good_model_info) mock_update_filter.return_value = None subscription = self.create_test_subs('sub_01', 'msg_01') subscription = json.loads(subscription)['subscription'] nf_filter = subscription['nfFilter'] mock_filter_call.return_value = NetworkFunctionFilter(**nf_filter) subscription_service.create_subscription(subscription) # Check existing network functions meas_group_nfs = db.session.query(NfMeasureGroupRelationalModel).filter( NfMeasureGroupRelationalModel.measurement_grp_name == 'msg_01') \ .all() self.assertEqual(len(meas_group_nfs), 2) self.assertEqual(meas_group_nfs[0].nf_name, 'pnf201') self.assertEqual(meas_group_nfs[0].nf_measure_grp_status, MgNfState.PENDING_CREATE.value) self.assertEqual(meas_group_nfs[1].nf_name, 'pnf_33_ericsson') self.assertEqual(meas_group_nfs[1].nf_measure_grp_status, MgNfState.PENDING_CREATE.value) meas_grp = measurement_group_service.query_meas_group_by_name( 'sub_01', 'msg_01') self.assertEqual(meas_grp.administrative_state, 'UNLOCKED') # Creating test data for update filter function aai_response = self.aai_response_data.replace('pnf201', 'xnf111') mock_aai.return_value = json.loads(aai_response) nf_filter['nfNames'] = ["^vnf.*", "^xnf.*"] mock_filter_call.return_value = NetworkFunctionFilter(**nf_filter) subscription_service.update_filter('sub_01', nf_filter) self.assertTrue(mock_update_filter.called) # Check updated network functions after filter change meas_group_nfs = db.session.query(NfMeasureGroupRelationalModel).filter( NfMeasureGroupRelationalModel.measurement_grp_name == 'msg_01') \ .all() self.assertEqual(meas_group_nfs[0].nf_name, 'pnf201') self.assertEqual(meas_group_nfs[0].nf_measure_grp_status, MgNfState.PENDING_DELETE.value) self.assertEqual(meas_group_nfs[1].nf_name, 'pnf_33_ericsson') self.assertEqual(meas_group_nfs[1].nf_measure_grp_status, MgNfState.PENDING_DELETE.value) self.assertEqual(meas_group_nfs[2].nf_name, 'xnf111') self.assertEqual(meas_group_nfs[2].nf_measure_grp_status, MgNfState.PENDING_CREATE.value) meas_grp = measurement_group_service.query_meas_group_by_name( 'sub_01', 'msg_01') self.assertEqual(meas_grp.administrative_state, 'FILTERING')
def test_update_admin_status_to_locking(self): super().setUp() sub = create_subscription_data('sub') 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, MgNfState.CREATED.value) db.session.commit() measurement_group_service.update_admin_status( sub.measurement_groups[0], 'LOCKED') meas_grp = measurement_group_service.query_meas_group_by_name( 'sub', 'MG1') self.assertEqual(meas_grp.subscription_name, 'sub') self.assertEqual(meas_grp.measurement_group_name, 'MG1') self.assertEqual(meas_grp.administrative_state, 'LOCKING') meas_group_nfs = db.session.query(NfMeasureGroupRelationalModel).filter( NfMeasureGroupRelationalModel.measurement_grp_name == meas_grp.measurement_group_name)\ .all() for nf in meas_group_nfs: self.assertEqual(nf.nf_measure_grp_status, MgNfState.PENDING_DELETE.value)
def test_delete_mg_when_state_unlocked(self): subscription_unlocked_data = create_subscription_data('MG_unlocked') db.session.add(subscription_unlocked_data) db.session.commit() db.session.remove() message, status_code = delete_meas_group_by_name('MG_unlocked', 'MG1') self.assertEqual(status_code, HTTPStatus.CONFLICT.value) self.assertEqual( query_meas_group_by_name('MG_unlocked', 'MG1').measurement_group_name, 'MG1')
def test_update_admin_status_to_locked(self): super().setUp() sub = create_subscription_data('sub') db.session.add(sub) measurement_group_service.update_admin_status( sub.measurement_groups[0], 'LOCKED') meas_grp = measurement_group_service.query_meas_group_by_name( 'sub', 'MG1') self.assertEqual(meas_grp.subscription_name, 'sub') self.assertEqual(meas_grp.measurement_group_name, 'MG1') self.assertEqual(meas_grp.administrative_state, 'LOCKED')
def test_delete_mg_when_state_locked(self): subscription_locked_data = create_subscription_data('MG_locked') subscription_locked_data.measurement_groups[ 0].administrative_state = 'LOCKED' db.session.add(subscription_locked_data) db.session.add(subscription_locked_data.measurement_groups[0]) db.session.commit() db.session.remove() non_type, status_code = delete_meas_group_by_name('MG_locked', 'MG1') self.assertEqual(non_type, None) self.assertEqual(status_code, HTTPStatus.NO_CONTENT.value) self.assertEqual(query_meas_group_by_name('MG_locked', 'MG1'), None)
def test_delete_mg_when_state_locking(self): subscription_locking_data = create_subscription_data('MG_locking') subscription_locking_data.measurement_groups[ 0].administrative_state = 'LOCKING' db.session.add(subscription_locking_data) db.session.add(subscription_locking_data.measurement_groups[0]) db.session.commit() db.session.remove() message, status_code = delete_meas_group_by_name('MG_locking', 'MG1') self.assertEqual(status_code, HTTPStatus.CONFLICT.value) self.assertEqual( query_meas_group_by_name('MG_locking', 'MG1').measurement_group_name, 'MG1')
def update_admin_state(subscription_name, measurement_group_name, body): """ Performs administrative state update for the respective subscription and measurement group name Args: subscription_name (String): Name of the subscription. measurement_group_name (String): Name of the measurement group body (dict): Request body with admin state to update. Returns: string, HTTPStatus: Successfully updated admin state, 200 string, HTTPStatus: Invalid request details, 400 string, HTTPStatus: Cannot update as Locked request is in progress, 409 string, HTTPStatus: Exception details of server failure, 500 """ logger.info( 'Performing administration status update for measurement group ' f'with sub name: {subscription_name} and measurement ' f'group name: {measurement_group_name} to {body["administrativeState"]} status' ) response = 'Successfully updated admin state', HTTPStatus.OK.value try: meas_group = measurement_group_service.query_meas_group_by_name( subscription_name, measurement_group_name) measurement_group_service.update_admin_status( meas_group, body["administrativeState"]) except InvalidDataException as exception: logger.error(exception.args[0]) response = exception.args[0], HTTPStatus.BAD_REQUEST.value except DataConflictException as exception: logger.error(exception.args[0]) response = exception.args[0], HTTPStatus.CONFLICT.value except Exception as exception: logger.error( 'Update admin status request was not processed for sub name: ' f'{subscription_name} and meas group name: ' f'{measurement_group_name} due to Exception : {exception}') response = 'Update admin status request was not processed for sub name: '\ f'{subscription_name} and meas group name: {measurement_group_name}'\ f' due to Exception : {exception}', HTTPStatus.INTERNAL_SERVER_ERROR return response
def get_meas_group_with_nfs(subscription_name, measurement_group_name): """ Retrieves the measurement group and it's associated network functions Args: subscription_name (String): Name of the subscription. measurement_group_name (String): Name of the measurement group Returns: dict, HTTPStatus: measurement group info with associated nfs, 200 dict, HTTPStatus: measurement group was not defined, 404 dict, HTTPStatus: Exception details of failure, 500 """ logger.info( 'API call received to query measurement group and associated network' f' functions by using sub name: {subscription_name} and measurement ' f'group name: {measurement_group_name}') try: meas_group = measurement_group_service.query_meas_group_by_name( subscription_name, measurement_group_name) if meas_group is not None: return meas_group.meas_group_with_nfs(), HTTPStatus.OK.value else: logger.error( 'measurement group was not defined with the sub name: ' f'{subscription_name} and meas group name: ' f'{measurement_group_name}') return { 'error': 'measurement group was not defined with the sub name: ' f'{subscription_name} and meas group name: ' f'{measurement_group_name}' }, HTTPStatus.NOT_FOUND.value except Exception as exception: logger.error( 'The following exception occurred while fetching measurement group: ' f'{exception}') return { 'error': 'Request was not processed due to Exception : ' f'{exception}' }, HTTPStatus.INTERNAL_SERVER_ERROR.value
def test_filter_nf_to_meas_grp_for_delete(self): sub = create_subscription_data('sub') db.session.add(sub) nf = NetworkFunction(nf_name='pnf_test2') nf_service.save_nf(nf) measurement_group_service.apply_nf_status_to_measurement_group( "pnf_test2", "MG2", MgNfState.PENDING_DELETE.value) db.session.commit() measurement_group_service.filter_nf_to_meas_grp( "pnf_test2", "MG2", MgNfState.DELETED.value) measurement_group_service.filter_nf_to_meas_grp( "pnf_test2", "MG2", MgNfState.DELETED.value) measurement_grp_rel = (NfMeasureGroupRelationalModel.query.filter( NfMeasureGroupRelationalModel.measurement_grp_name == 'MG2', NfMeasureGroupRelationalModel.nf_name == 'pnf_test2').one_or_none()) self.assertIsNone(measurement_grp_rel) meas_grp = measurement_group_service.query_meas_group_by_name( 'sub', 'MG2') self.assertEqual(meas_grp.subscription_name, 'sub') self.assertEqual(meas_grp.measurement_group_name, 'MG2') self.assertEqual(meas_grp.administrative_state, 'UNLOCKED')
def test_lock_nf_to_meas_grp_for_locking_with_LOCKED_update(self): sub = create_subscription_data('sub') sub.measurement_groups[1].administrative_state = 'LOCKING' nf_list = create_multiple_network_function_data(['pnf_101']) 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[1]. measurement_group_name, MgNfState.PENDING_DELETE.value) db.session.commit() measurement_group_service.lock_nf_to_meas_grp("pnf_101", "MG2", MgNfState.DELETED.value) measurement_grp_rel = (NfMeasureGroupRelationalModel.query.filter( NfMeasureGroupRelationalModel.measurement_grp_name == 'MG2', NfMeasureGroupRelationalModel.nf_name == 'pnf_101').one_or_none()) self.assertIsNone(measurement_grp_rel) meas_grp = measurement_group_service.query_meas_group_by_name( 'sub', 'MG2') self.assertEqual(meas_grp.subscription_name, 'sub') self.assertEqual(meas_grp.measurement_group_name, 'MG2') self.assertEqual(meas_grp.administrative_state, 'LOCKED')
def test_update_admin_status_to_unlocking(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) super().setUp() sub = create_subscription_data('sub') db.session.add(sub) db.session.commit() mock_filter_call.return_value = NetworkFunctionFilter.get_network_function_filter( 'sub') measurement_group_service.update_admin_status( sub.measurement_groups[1], 'UNLOCKED') meas_grp = measurement_group_service.query_meas_group_by_name( 'sub', 'MG2') self.assertEqual(meas_grp.subscription_name, 'sub') self.assertEqual(meas_grp.measurement_group_name, 'MG2') self.assertEqual(meas_grp.administrative_state, 'UNLOCKED') meas_group_nfs = db.session.query(NfMeasureGroupRelationalModel).filter( NfMeasureGroupRelationalModel.measurement_grp_name == meas_grp.measurement_group_name)\ .all() for nf in meas_group_nfs: self.assertEqual(nf.nf_measure_grp_status, MgNfState.PENDING_CREATE.value)