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')
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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')
Exemplo n.º 4
0
 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')
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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')
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
 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')
Exemplo n.º 10
0
 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')
Exemplo n.º 11
0
 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)