Commit 98fc013f authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Added testunit example:

- monitoring/test_monitoring.py: provides a basic testing skeleton
- monitoring/requirements.in/.txt: updated with pytest
- monitoring/genproto.py: added instructions to import generated Python modules using "from . import ..." instead of "import ..."; otherwise, pytest and other possible modules doing imports might complain.
- monitoring/monitoring_server.py: packed start_server and stop_server functionaity to simplify test definition, minor formattings, bug resolutions and improvements in package import.
- monitoring/monitoring_client.py: minor formattings, bug resolutions, and improvements in package import.
parent cca67ade
Loading
Loading
Loading
Loading
+257 −125

File changed.

Preview size limit exceeded, changes collapsed.

+51 −31
Original line number Diff line number Diff line
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
"""Client and server classes corresponding to protobuf-defined services."""
import grpc

import context_pb2 as context__pb2
from . import context_pb2 as context__pb2


class ContextServiceStub(object):
  # missing associated documentation comment in .proto file
  pass
    """Missing associated documentation comment in .proto file."""

    def __init__(self, channel):
        """Constructor.
@@ -22,12 +22,10 @@ class ContextServiceStub(object):


class ContextServiceServicer(object):
  # missing associated documentation comment in .proto file
  pass
    """Missing associated documentation comment in .proto file."""

    def GetTopology(self, request, context):
    # missing associated documentation comment in .proto file
    pass
        """Missing associated documentation comment in .proto file."""
        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
        context.set_details('Method not implemented!')
        raise NotImplementedError('Method not implemented!')
@@ -44,3 +42,25 @@ def add_ContextServiceServicer_to_server(servicer, server):
    generic_handler = grpc.method_handlers_generic_handler(
            'context.ContextService', rpc_method_handlers)
    server.add_generic_rpc_handlers((generic_handler,))


 # This class is part of an EXPERIMENTAL API.
class ContextService(object):
    """Missing associated documentation comment in .proto file."""

    @staticmethod
    def GetTopology(request,
            target,
            options=(),
            channel_credentials=None,
            call_credentials=None,
            insecure=False,
            compression=None,
            wait_for_ready=None,
            timeout=None,
            metadata=None):
        return grpc.experimental.unary_unary(request, target, '/context.ContextService/GetTopology',
            context__pb2.Empty.SerializeToString,
            context__pb2.Topology.FromString,
            options, channel_credentials,
            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+5 −0
Original line number Diff line number Diff line
@@ -18,3 +18,8 @@

python -m grpc_tools.protoc -I../../proto --python_out=. --grpc_python_out=. ../../proto/monitoring.proto
python -m grpc_tools.protoc -I../../proto --python_out=. --grpc_python_out=. ../../proto/context.proto

sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' monitoring_pb2.py
sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' monitoring_pb2_grpc.py
sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' context_pb2.py
sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' context_pb2_grpc.py
+26 −28
Original line number Diff line number Diff line
import sys
import grpc

import monitoring_pb2 as monitoring
import monitoring_pb2_grpc
import context_pb2
from . import monitoring_pb2
from . import monitoring_pb2_grpc
from . import context_pb2

import json
#import json

from logger import getJSONLogger
logger = getJSONLogger('monitoring-client')
logger.setLevel('DEBUG')
from .logger import getJSONLogger
LOGGER = getJSONLogger('monitoring-client')
LOGGER.setLevel('DEBUG')

class MonitoringClient:

    def __init__(self, server="monitoring", port="7070"):
        logger.info("init monitoringClient port " + port)
        self.channel=grpc.insecure_channel(server+':'+port)
    def __init__(self, server='monitoring', port='7070'):
        endpoint = '{}:{}'.format(server, port)
        LOGGER.info('init monitoringClient {}'.format(endpoint))
        self.channel = grpc.insecure_channel(endpoint)
        self.server = monitoring_pb2_grpc.MonitoringServiceStub(self.channel)

    def IncludeKpi(self, request):
        logger.info("IncludeKpi: {}".format(request))
        LOGGER.info('IncludeKpi: {}'.format(request))
        response = self.server.IncludeKpi(request)
        logger.info("IncludeKpi result: {}".format(response))
        LOGGER.info('IncludeKpi result: {}'.format(response))
        return context_pb2.Empty()

    def MonitorKpi(self, request):
        logger.info("MonitorKpi: {}".format(request))
        LOGGER.info('MonitorKpi: {}'.format(request))
        response = self.server.IncludeKpi(request)
        logger.info("MonitorKpi result: {}".format(response))
        LOGGER.info('MonitorKpi result: {}'.format(response))
        return context_pb2.Empty()
        
    def GetStream_kpi(self, request):
        logger.info("GetStream_kpi: {}".format(request))
        LOGGER.info('GetStream_kpi: {}'.format(request))
        response = self.server.GetStream_kpi(request)
        logger.info("GetStream_kpi result: {}".format(response))
        LOGGER.info('GetStream_kpi result: {}'.format(response))
        yield response

    def GetInstantKpi(self, request):
        logger.info("GetInstantKpi: {}".format(request))
        LOGGER.info('GetInstantKpi: {}'.format(request))
        response = self.server.IncludeKpi(request)
        logger.info("GetInstantKpi result: {}".format(response))
        LOGGER.info('GetInstantKpi result: {}'.format(response))
        return response
        

if __name__ == "__main__":
if __name__ == '__main__':
    # get port
    if len(sys.argv) > 1:
        port = sys.argv[1]
    else:
        port = "7070"
    port = sys.argv[1] if len(sys.argv) > 1 else '7070'

    # form request
    kpi = monitoring.Kpi()
    kpi.kpi_id.kpi_id = "KPIID0000"
    kpi.kpiDescription = "KPI Desc"
    kpi = monitoring_pb2.Kpi()
    kpi.kpi_id.kpi_id = 'KPIID0000'
    kpi.kpiDescription = 'KPI Desc'

    # make call to server
    client = MonitoringClient(port)
    client = MonitoringClient(port=port)
    response=client.IncludeKpi(kpi)
+52 −40
Original line number Diff line number Diff line
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: monitoring.proto

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
@@ -12,7 +11,7 @@ from google.protobuf import symbol_database as _symbol_database
_sym_db = _symbol_database.Default()


import context_pb2 as context__pb2
from . import context_pb2 as context__pb2


DESCRIPTOR = _descriptor.FileDescriptor(
@@ -20,7 +19,8 @@ DESCRIPTOR = _descriptor.FileDescriptor(
  package='monitoring',
  syntax='proto3',
  serialized_options=None,
  serialized_pb=_b('\n\x10monitoring.proto\x12\nmonitoring\x1a\rcontext.proto\"|\n\x03Kpi\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x16\n\x0ekpiDescription\x18\x03 \x01(\t\x12\'\n\tkpi_value\x18\x04 \x01(\x0b\x32\x14.monitoring.KpiValue\"&\n\x05KpiId\x12\x1d\n\x06kpi_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"T\n\tKpiDevice\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"+\n\x07KpiList\x12 \n\x07kpiList\x18\x01 \x03(\x0b\x32\x0f.monitoring.Kpi\"M\n\x08KpiValue\x12\x10\n\x06intVal\x18\x01 \x01(\rH\x00\x12\x13\n\tstringVal\x18\x02 \x01(\tH\x00\x12\x11\n\x07\x62oolVal\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value2\xeb\x01\n\x11MonitoringService\x12/\n\nIncludeKpi\x12\x0f.monitoring.Kpi\x1a\x0e.context.Empty\"\x00\x12\x35\n\nMonitorKpi\x12\x15.monitoring.KpiDevice\x1a\x0e.context.Empty\"\x00\x12\x37\n\rGetStream_kpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x30\x01\x12\x35\n\rGetInstantKpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x62\x06proto3')
  create_key=_descriptor._internal_create_key,
  serialized_pb=b'\n\x10monitoring.proto\x12\nmonitoring\x1a\rcontext.proto\"|\n\x03Kpi\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x16\n\x0ekpiDescription\x18\x03 \x01(\t\x12\'\n\tkpi_value\x18\x04 \x01(\x0b\x32\x14.monitoring.KpiValue\"&\n\x05KpiId\x12\x1d\n\x06kpi_id\x18\x01 \x01(\x0b\x32\r.context.Uuid\"T\n\tKpiDevice\x12!\n\x06kpi_id\x18\x01 \x01(\x0b\x32\x11.monitoring.KpiId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"+\n\x07KpiList\x12 \n\x07kpiList\x18\x01 \x03(\x0b\x32\x0f.monitoring.Kpi\"M\n\x08KpiValue\x12\x10\n\x06intVal\x18\x01 \x01(\rH\x00\x12\x13\n\tstringVal\x18\x02 \x01(\tH\x00\x12\x11\n\x07\x62oolVal\x18\x03 \x01(\x08H\x00\x42\x07\n\x05value2\xeb\x01\n\x11MonitoringService\x12/\n\nIncludeKpi\x12\x0f.monitoring.Kpi\x1a\x0e.context.Empty\"\x00\x12\x35\n\nMonitorKpi\x12\x15.monitoring.KpiDevice\x1a\x0e.context.Empty\"\x00\x12\x37\n\rGetStream_kpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x30\x01\x12\x35\n\rGetInstantKpi\x12\x11.monitoring.KpiId\x1a\x0f.monitoring.Kpi\"\x00\x62\x06proto3'
  ,
  dependencies=[context__pb2.DESCRIPTOR,])

@@ -33,6 +33,7 @@ _KPI = _descriptor.Descriptor(
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='kpi_id', full_name='monitoring.Kpi.kpi_id', index=0,
@@ -40,28 +41,28 @@ _KPI = _descriptor.Descriptor(
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='timestamp', full_name='monitoring.Kpi.timestamp', index=1,
      number=2, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      has_default_value=False, default_value=b"".decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='kpiDescription', full_name='monitoring.Kpi.kpiDescription', index=2,
      number=3, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      has_default_value=False, default_value=b"".decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='kpi_value', full_name='monitoring.Kpi.kpi_value', index=3,
      number=4, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
@@ -85,6 +86,7 @@ _KPIID = _descriptor.Descriptor(
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='kpi_id', full_name='monitoring.KpiId.kpi_id', index=0,
@@ -92,7 +94,7 @@ _KPIID = _descriptor.Descriptor(
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
@@ -116,6 +118,7 @@ _KPIDEVICE = _descriptor.Descriptor(
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='kpi_id', full_name='monitoring.KpiDevice.kpi_id', index=0,
@@ -123,14 +126,14 @@ _KPIDEVICE = _descriptor.Descriptor(
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='device_id', full_name='monitoring.KpiDevice.device_id', index=1,
      number=2, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
@@ -154,6 +157,7 @@ _KPILIST = _descriptor.Descriptor(
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='kpiList', full_name='monitoring.KpiList.kpiList', index=0,
@@ -161,7 +165,7 @@ _KPILIST = _descriptor.Descriptor(
      has_default_value=False, default_value=[],
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
@@ -185,6 +189,7 @@ _KPIVALUE = _descriptor.Descriptor(
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='intVal', full_name='monitoring.KpiValue.intVal', index=0,
@@ -192,21 +197,21 @@ _KPIVALUE = _descriptor.Descriptor(
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='stringVal', full_name='monitoring.KpiValue.stringVal', index=1,
      number=2, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      has_default_value=False, default_value=b"".decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='boolVal', full_name='monitoring.KpiValue.boolVal', index=2,
      number=3, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
@@ -220,7 +225,9 @@ _KPIVALUE = _descriptor.Descriptor(
  oneofs=[
    _descriptor.OneofDescriptor(
      name='value', full_name='monitoring.KpiValue.value',
      index=0, containing_type=None, fields=[]),
      index=0, containing_type=None,
      create_key=_descriptor._internal_create_key,
    fields=[]),
  ],
  serialized_start=344,
  serialized_end=421,
@@ -248,39 +255,39 @@ DESCRIPTOR.message_types_by_name['KpiList'] = _KPILIST
DESCRIPTOR.message_types_by_name['KpiValue'] = _KPIVALUE
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

Kpi = _reflection.GeneratedProtocolMessageType('Kpi', (_message.Message,), dict(
  DESCRIPTOR = _KPI,
  __module__ = 'monitoring_pb2'
Kpi = _reflection.GeneratedProtocolMessageType('Kpi', (_message.Message,), {
  'DESCRIPTOR' : _KPI,
  '__module__' : 'monitoring_pb2'
  # @@protoc_insertion_point(class_scope:monitoring.Kpi)
  ))
  })
_sym_db.RegisterMessage(Kpi)

KpiId = _reflection.GeneratedProtocolMessageType('KpiId', (_message.Message,), dict(
  DESCRIPTOR = _KPIID,
  __module__ = 'monitoring_pb2'
KpiId = _reflection.GeneratedProtocolMessageType('KpiId', (_message.Message,), {
  'DESCRIPTOR' : _KPIID,
  '__module__' : 'monitoring_pb2'
  # @@protoc_insertion_point(class_scope:monitoring.KpiId)
  ))
  })
_sym_db.RegisterMessage(KpiId)

KpiDevice = _reflection.GeneratedProtocolMessageType('KpiDevice', (_message.Message,), dict(
  DESCRIPTOR = _KPIDEVICE,
  __module__ = 'monitoring_pb2'
KpiDevice = _reflection.GeneratedProtocolMessageType('KpiDevice', (_message.Message,), {
  'DESCRIPTOR' : _KPIDEVICE,
  '__module__' : 'monitoring_pb2'
  # @@protoc_insertion_point(class_scope:monitoring.KpiDevice)
  ))
  })
_sym_db.RegisterMessage(KpiDevice)

KpiList = _reflection.GeneratedProtocolMessageType('KpiList', (_message.Message,), dict(
  DESCRIPTOR = _KPILIST,
  __module__ = 'monitoring_pb2'
KpiList = _reflection.GeneratedProtocolMessageType('KpiList', (_message.Message,), {
  'DESCRIPTOR' : _KPILIST,
  '__module__' : 'monitoring_pb2'
  # @@protoc_insertion_point(class_scope:monitoring.KpiList)
  ))
  })
_sym_db.RegisterMessage(KpiList)

KpiValue = _reflection.GeneratedProtocolMessageType('KpiValue', (_message.Message,), dict(
  DESCRIPTOR = _KPIVALUE,
  __module__ = 'monitoring_pb2'
KpiValue = _reflection.GeneratedProtocolMessageType('KpiValue', (_message.Message,), {
  'DESCRIPTOR' : _KPIVALUE,
  '__module__' : 'monitoring_pb2'
  # @@protoc_insertion_point(class_scope:monitoring.KpiValue)
  ))
  })
_sym_db.RegisterMessage(KpiValue)


@@ -291,6 +298,7 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
  file=DESCRIPTOR,
  index=0,
  serialized_options=None,
  create_key=_descriptor._internal_create_key,
  serialized_start=424,
  serialized_end=659,
  methods=[
@@ -302,6 +310,7 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
    input_type=_KPI,
    output_type=context__pb2._EMPTY,
    serialized_options=None,
    create_key=_descriptor._internal_create_key,
  ),
  _descriptor.MethodDescriptor(
    name='MonitorKpi',
@@ -311,6 +320,7 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
    input_type=_KPIDEVICE,
    output_type=context__pb2._EMPTY,
    serialized_options=None,
    create_key=_descriptor._internal_create_key,
  ),
  _descriptor.MethodDescriptor(
    name='GetStream_kpi',
@@ -320,6 +330,7 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
    input_type=_KPIID,
    output_type=_KPI,
    serialized_options=None,
    create_key=_descriptor._internal_create_key,
  ),
  _descriptor.MethodDescriptor(
    name='GetInstantKpi',
@@ -329,6 +340,7 @@ _MONITORINGSERVICE = _descriptor.ServiceDescriptor(
    input_type=_KPIID,
    output_type=_KPI,
    serialized_options=None,
    create_key=_descriptor._internal_create_key,
  ),
])
_sym_db.RegisterServiceDescriptor(_MONITORINGSERVICE)
Loading