Commit 983a7c84 authored by Javi Moreno's avatar Javi Moreno
Browse files

Added GetKpiDescriptor Unit Test
parent fc11eda5
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -47,6 +47,11 @@ class MonitoringClient:
        LOGGER.info('GetInstantKpi result: {}'.format(response))
        return monitoring_pb2.Kpi()

    def GetKpiDescriptor(self, request):
        LOGGER.info('GetKpiDescriptor: {}'.format(request))
        response = self.server.GetKpiDescriptor(request)
        LOGGER.info('GetKpiDescriptor result: {}'.format(response))
        return monitoring_pb2.KpiDescriptor()

if __name__ == '__main__':
    # get port
+0 −1
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@ from concurrent import futures

import grpc

from monitoring.proto import monitoring_pb2_grpc
from monitoring.service.MonitoringServiceServicerImpl import MonitoringServiceServicerImpl
from monitoring.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD

+58 −15
Original line number Diff line number Diff line
import os
import grpc
import os,grpc,threading

from common.rpc_method_wrapper.ServiceExceptions import ServiceException
from common.logger import getJSONLogger

from context.client.ContextClient import ContextClient
from monitoring.proto.context_pb2 import Empty

from device.Config import GRPC_SERVICE_PORT
from device.client.DeviceClient import DeviceClient
from device.proto import device_pb2

from monitoring.proto import context_pb2
from monitoring.service import sqlite_tools, influx_tools

from monitoring.proto import monitoring_pb2
from monitoring.proto import monitoring_pb2_grpc

from common.logger import getJSONLogger
from queue import Queue

LOGGER = getJSONLogger('monitoringservice-server')
LOGGER.setLevel('DEBUG')

@@ -100,7 +105,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
            # Creates the request to send to the device service
            monitor_device_request = device_pb2.MonitoringSettings()

            kpiDescriptor = self.get_KpiDescriptor(request.kpi_id)
            kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context)

            monitor_device_request.kpi_id.kpi_id.uuid                               = request.kpi_id.kpi_id.uuid
            monitor_device_request.kpi_descriptor.kpi_description                   = kpiDescriptor.kpi_description
@@ -130,7 +135,7 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
        LOGGER.info('IncludeKpi')

        try:
            kpiDescriptor = self.get_KpiDescriptor(request.kpi_id)
            kpiDescriptor = self.GetKpiDescriptor(request.kpi_id, grpc_context)

            kpiSampleType   = kpiDescriptor.kpi_sample_type
            kpiId           = request.kpi_id.kpi_id.uuid
@@ -165,10 +170,13 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
        LOGGER.info('GetInstantKpi')
        return monitoring_pb2.Kpi()

    def get_KpiDescriptor(self, kpiId):

    def GetKpiDescriptor(self, request : monitoring_pb2.KpiId, grpc_context : grpc.ServicerContext) -> monitoring_pb2.KpiDescriptor:
        LOGGER.info('getting Kpi by KpiID')

        kpi_db = self.sql_db.get_KPI(int(kpiId.kpi_id.uuid))
        try:
            kpi_db = self.sql_db.get_KPI(int(request.kpi_id.uuid))
            print(kpi_db)

            kpiDescriptor = monitoring_pb2.KpiDescriptor()

@@ -179,3 +187,38 @@ class MonitoringServiceServicerImpl(monitoring_pb2_grpc.MonitoringServiceService
            kpiDescriptor.service_id.service_uuid.uuid      = str(kpi_db[5])

            return kpiDescriptor
        except ServiceException as e:
            LOGGER.exception('GetKpiDescriptor exception')
            grpc_context.abort(e.code, e.details)

        except Exception as e:  # pragma: no cover
            LOGGER.exception('GetKpiDescriptor exception')


class EventsCollector:
    def __init__(self, context_client_grpc : ContextClient) -> None: # pylint: disable=redefined-outer-name
        self._events_queue = Queue()

        self._device_stream   = context_client_grpc.GetDeviceEvents(Empty())

        self._device_thread   = threading.Thread(target=self._collect, args=(self._device_stream  ,), daemon=False)

    def _collect(self, events_stream) -> None:
        try:
            for event in events_stream:
                self._events_queue.put_nowait(event)
        except grpc.RpcError as e:
            if e.code() != grpc.StatusCode.CANCELLED: # pylint: disable=no-member
                raise # pragma: no cover

    def start(self):
        self._device_thread.start()

    def get_event(self, block : bool = True, timeout : float = 0.1):
        return self._events_queue.get(block=block, timeout=timeout)

    def stop(self):

        self._device_stream.cancel()

        self._device_thread.join()
+8 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ def kpi_id():

    # form request
    kpi_id = monitoring_pb2.KpiId()
    kpi_id.kpi_id.uuid = 'KPIID0000'
    kpi_id.kpi_id.uuid = str(1)

    return kpi_id

@@ -144,3 +144,10 @@ def test_getinstant_kpi(monitoring_client,kpi_id):
    response = monitoring_client.GetInstantKpi(kpi_id)
    LOGGER.debug(str(response))
    assert isinstance(response, monitoring_pb2.Kpi)

# Test case that makes use of client fixture to test server's GetInstantKpi method
def test_getkpidescritor_kpi(monitoring_client,kpi_id):
    LOGGER.warning('test_getkpidescritor_kpi begin')
    response = monitoring_client.GetKpiDescriptor(kpi_id)
    LOGGER.debug(str(response))
    assert isinstance(response, monitoring_pb2.KpiDescriptor)
 No newline at end of file