Commit dd371d2d authored by Waleed Akbar's avatar Waleed Akbar
Browse files

KPI gRPC NBI Completely working with Tests

parent 38b1e333
Loading
Loading
Loading
Loading
+40 −21
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ from sqlalchemy import Column, Integer, String, Float, Text, ForeignKey
# from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import registry
from sqlalchemy.orm import sessionmaker, relationship

from common.proto.kpi_management_pb2 import KpiDescriptor

logging.basicConfig(level=logging.INFO)
LOGGER = logging.getLogger(__name__)
@@ -49,7 +49,7 @@ class Kpi(Base):
                f"link_id='{self.link_id}')>")

    @classmethod
    def create_row_from_kpiDescriptor(cls, request):
    def convert_KpiDescriptor_to_row(cls, request):
        """
        Create an instance of Kpi from a request object.
        Args:    request: The request object containing the data.
@@ -66,3 +66,22 @@ class Kpi(Base):
            connection_id   = request.connection_id.connection_uuid.uuid,
            link_id         = request.link_id.link_uuid.uuid
        )
    
    @classmethod
    def convert_row_to_KpiDescriptor(cls, row):
        """
        Create and return a dictionary representation of a Kpi instance.       
        Args:   row: The Kpi instance (row) containing the data.
        Returns: KpiDescriptor object
        """
        response = KpiDescriptor()
        response.kpi_id.kpi_id.uuid                 = row.kpi_id
        response.kpi_description                    = row.kpi_description
        response.kpi_sample_type                    = row.kpi_sample_type
        response.service_id.service_uuid.uuid       = row.service_id
        response.device_id.device_uuid.uuid         = row.device_id
        response.slice_id.slice_uuid.uuid           = row.slice_id
        response.endpoint_id.endpoint_uuid.uuid     = row.endpoint_id
        response.connection_id.connection_uuid.uuid = row.connection_id
        response.link_id.link_uuid.uuid             = row.link_id
        return response
 No newline at end of file
+3 −30
Original line number Diff line number Diff line
@@ -37,24 +37,13 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
        LOGGER.info('Init KpiManagerService')
        self.Kpi_DBobj = Kpi_DB()
    

    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def SetKpiDescriptor(self, request: KpiDescriptor, grpc_context: grpc.ServicerContext # type: ignore
                        ) -> KpiId: # type: ignore
        response = KpiId()
        LOGGER.info("Received gRPC message object: {:}".format(request))
        try:
            # kpi_to_insert                 = KpiModel()
            # kpi_to_insert.kpi_id          = request.kpi_id.kpi_id.uuid
            # kpi_to_insert.kpi_description = request.kpi_description
            # kpi_to_insert.kpi_sample_type = request.kpi_sample_type
            # kpi_to_insert.device_id       = request.device_id.device_uuid.uuid
            # kpi_to_insert.endpoint_id     = request.endpoint_id.endpoint_uuid.uuid 
            # kpi_to_insert.service_id      = request.service_id.service_uuid.uuid 
            # kpi_to_insert.slice_id        = request.slice_id.slice_uuid.uuid 
            # kpi_to_insert.connection_id   = request.connection_id.connection_uuid.uuid
            # kpi_to_insert.link_id         = request.link_id.link_uuid.uuid
            kpi_to_insert = KpiModel.create_row_from_kpiDescriptor(request)
            kpi_to_insert = KpiModel.convert_KpiDescriptor_to_row(request)
            if(self.Kpi_DBobj.add_row_to_db(kpi_to_insert)):
                response.kpi_id.uuid = request.kpi_id.kpi_id.uuid
                # LOGGER.info("Added Row: {:}".format(response))
@@ -71,15 +60,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
            kpi_id_to_search = request.kpi_id.uuid
            row = self.Kpi_DBobj.search_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search)
            if row is not None:
                response.kpi_id.kpi_id.uuid                 = row.kpi_id
                response.kpi_description                    = row.kpi_description
                response.kpi_sample_type                    = row.kpi_sample_type
                response.service_id.service_uuid.uuid       = row.service_id
                response.device_id.device_uuid.uuid         = row.device_id
                response.slice_id.slice_uuid.uuid           = row.slice_id
                response.endpoint_id.endpoint_uuid.uuid     = row.endpoint_id
                response.connection_id.connection_uuid.uuid = row.connection_id
                response.link_id.link_uuid.uuid             = row.link_id
                response = KpiModel.convert_row_to_KpiDescriptor(row)
            return response
        except Exception as e:
            LOGGER.info('Unable to search kpi id. {:}'.format(e))
@@ -118,15 +99,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
        try:
            if len(rows) != 0:
                for row in rows:
                    kpiDescriptor_obj = KpiDescriptor()
                    kpiDescriptor_obj.kpi_id.kpi_id.uuid                 = row.kpi_id
                    kpiDescriptor_obj.kpi_description                    = row.kpi_description
                    kpiDescriptor_obj.kpi_sample_type                    = row.kpi_sample_type
                    kpiDescriptor_obj.service_id.service_uuid.uuid       = row.service_id
                    kpiDescriptor_obj.device_id.device_uuid.uuid         = row.device_id
                    kpiDescriptor_obj.slice_id.slice_uuid.uuid           = row.slice_id
                    kpiDescriptor_obj.endpoint_id.endpoint_uuid.uuid     = row.endpoint_id
                    kpiDescriptor_obj.connection_id.connection_uuid.uuid = row.connection_id
                    kpiDescriptor_obj = KpiModel.convert_row_to_KpiDescriptor(row)
                    response.kpi_descriptor_list.append(kpiDescriptor_obj)
            return response
        except Exception as e:
+23 −5
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ from device.service.driver_api.DriverInstanceCache import DriverInstanceCache
from device.service.DeviceService import DeviceService
from device.client.DeviceClient import DeviceClient

from kpi_management.kpi_manager.tests.test_messages import create_kpi_descriptor_request
from kpi_management.kpi_manager.tests.test_messages import create_kpi_descriptor_request, create_kpi_filter_request
# from monitoring.service.MonitoringService import MonitoringService
from kpi_management.kpi_manager.service.KpiManagerService import KpiManagerService
# from monitoring.client.MonitoringClient import MonitoringClient
@@ -219,14 +219,32 @@ def test_SetKpiDescriptor(kpi_manager_client):
def test_DeleteKpiDescriptor(kpi_manager_client):
    LOGGER.info(" >>> test_DeleteKpiDescriptor: START <<< ")
    # adding KPI
    response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
    response_id = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
    # deleting KPI
    del_response = kpi_manager_client.DeleteKpiDescriptor(response)
    # verifing KPI
    kpi_manager_client.GetKpiDescriptor(response)
    del_response = kpi_manager_client.DeleteKpiDescriptor(response_id)
    # select KPI
    kpi_manager_client.GetKpiDescriptor(response_id)
    LOGGER.info("Response of delete method gRPC message object: {:}".format(del_response))
    assert isinstance(del_response, Empty)

def test_GetKpiDescriptor(kpi_manager_client):
    LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ")
    # adding KPI
    response_id = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
    # get KPI
    response = kpi_manager_client.GetKpiDescriptor(response_id)
    LOGGER.info("Response gRPC message object: {:}".format(response))
    assert isinstance(response, KpiDescriptor)

def test_SelectKpiDescriptor(kpi_manager_client):
    LOGGER.info(" >>> test_SelectKpiDescriptor: START <<< ")
    # adding KPI
    kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
    # select KPI(s)    
    response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request())
    LOGGER.info("Response gRPC message object: {:}".format(response))
    assert isinstance(response, KpiDescriptorList)


# ---------- 2nd Iteration Tests -----------------
# def test_SetKpiDescriptor(kpi_manager_client):
+32 −3
Original line number Diff line number Diff line
@@ -15,16 +15,45 @@
import uuid
from common.proto import kpi_management_pb2
from common.proto.kpi_sample_types_pb2 import KpiSampleType
from common.proto.context_pb2 import DeviceId, LinkId, ServiceId, SliceId,\
                             ConnectionId, EndPointId

def create_kpi_descriptor_request(descriptor_name: str = "Test_name"):
    _create_kpi_request                                    = kpi_management_pb2.KpiDescriptor()
    _create_kpi_request.kpi_id.kpi_id.uuid                 = str(uuid.uuid4())
    _create_kpi_request.kpi_description                    = descriptor_name
    _create_kpi_request.kpi_sample_type                    = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED
    _create_kpi_request.device_id.device_uuid.uuid         = 'DEV1'     # pylint: disable=maybe-no-member
    _create_kpi_request.service_id.service_uuid.uuid       = 'SERV1'    # pylint: disable=maybe-no-member
    _create_kpi_request.device_id.device_uuid.uuid         = 'DEV2'     # pylint: disable=maybe-no-member
    _create_kpi_request.service_id.service_uuid.uuid       = 'SERV2'    # pylint: disable=maybe-no-member
    _create_kpi_request.slice_id.slice_uuid.uuid           = 'SLC1'     # pylint: disable=maybe-no-member
    _create_kpi_request.endpoint_id.endpoint_uuid.uuid     = 'END1'     # pylint: disable=maybe-no-member
    _create_kpi_request.connection_id.connection_uuid.uuid = 'CON1'     # pylint: disable=maybe-no-member
    _create_kpi_request.link_id.link_uuid.uuid             = 'LNK1'     # pylint: disable=maybe-no-member
    return _create_kpi_request

def create_kpi_filter_request():
    _create_kpi_filter_request = kpi_management_pb2.KpiDescriptorFilter()
    _create_kpi_filter_request.kpi_sample_type.append(KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED)

    device_id_obj     = DeviceId()
    service_id_obj    = ServiceId()
    slice_id_obj      = SliceId()
    endpoint_id_obj   = EndPointId()
    connection_id_obj = ConnectionId()
    link_id_obj       = LinkId()

    device_id_obj.device_uuid.uuid         = "DEV2"
    service_id_obj.service_uuid.uuid       = "SERV2"
    slice_id_obj.slice_uuid.uuid           = "SLC1"
    endpoint_id_obj.endpoint_uuid.uuid     = "END1"
    connection_id_obj.connection_uuid.uuid = "CON1"
    link_id_obj.link_uuid.uuid             = "LNK1"

    _create_kpi_filter_request.device_id.append(device_id_obj)
    _create_kpi_filter_request.service_id.append(service_id_obj)
    _create_kpi_filter_request.slice_id.append(slice_id_obj)
    _create_kpi_filter_request.endpoint_id.append(endpoint_id_obj)
    _create_kpi_filter_request.connection_id.append(connection_id_obj)
    _create_kpi_filter_request.link_id.append(link_id_obj)

    return _create_kpi_filter_request
 No newline at end of file