diff --git a/src/kpi_manager/service/KpiManagerServiceServicerImpl.py b/src/kpi_manager/service/KpiManagerServiceServicerImpl.py
index 7e30c688cea229fd4761aaade0705c427a749b7e..287478f13da49986bc93a7406117f043abc62e54 100644
--- a/src/kpi_manager/service/KpiManagerServiceServicerImpl.py
+++ b/src/kpi_manager/service/KpiManagerServiceServicerImpl.py
@@ -27,6 +27,9 @@ from kpi_manager.database.KpiModel import Kpi as KpiModel
 LOGGER = logging.getLogger(__name__)
 METRICS_POOL = MetricsPool('KpiManager', 'NBIgRPC')
 
+class IDNotFoundError(Exception):
+    ...
+
 class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
     def __init__(self, name_mapping : NameMapping):
         LOGGER.debug('Init KpiManagerService')
@@ -57,11 +60,24 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
             row = self.kpi_db_obj.search_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search)
             if row is not None:
                 response = KpiModel.convert_row_to_KpiDescriptor(row)
-            return response
+                return response
+            if row is None:
+                print ('No matching row found for kpi id: {:}'.format(kpi_id_to_search))
+                LOGGER.debug('No matching row found kpi id: {:}'.format(kpi_id_to_search))
+                return Empty()
         except Exception as e:
             print ('Unable to search kpi id. {:}'.format(e))
             LOGGER.debug('Unable to search kpi id. {:}'.format(e))
-
+            raise e
+        # kpi_id_to_search = request.kpi_id.uuid
+        # row = self.kpi_db_obj.search_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search)
+        # if row is None:
+        #     print ('Unable to search kpi id. {:}'.format(kpi_id_to_search))
+        #     LOGGER.debug('Unable to search kpi id. {:}'.format(kpi_id_to_search))
+        #     raise IDNotFoundError
+        # response = KpiModel.convert_row_to_KpiDescriptor(row)
+        # return response
+    
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
     def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore
                             ) -> Empty: # type: ignore
diff --git a/src/kpi_manager/tests/test_kpi_manager.py b/src/kpi_manager/tests/test_kpi_manager.py
index f29265cdddf610d31ef21e9dcc25d37c68bd59f9..e5bf17a5faf61514a70a19b45efea34fff7d21e3 100755
--- a/src/kpi_manager/tests/test_kpi_manager.py
+++ b/src/kpi_manager/tests/test_kpi_manager.py
@@ -36,6 +36,9 @@ from context.client.ContextClient import ContextClient
 from kpi_manager.tests.test_messages import create_kpi_descriptor_request, create_kpi_filter_request, create_kpi_descriptor_request_a
 from kpi_manager.service.KpiManagerService import KpiManagerService
 from kpi_manager.client.KpiManagerClient import KpiManagerClient
+from kpi_manager.tests.test_messages import create_kpi_descriptor_request
+from kpi_value_writer.tests.test_messages import create_kpi_id_request
+
 
 from monitoring.service.NameMapping import NameMapping
 
@@ -214,6 +217,11 @@ def test_GetKpiDescriptor(kpi_manager_client):
     # get KPI
     response = kpi_manager_client.GetKpiDescriptor(response_id)
     LOGGER.info("Response gRPC message object: {:}".format(response))
+
+    LOGGER.info(" >>> calling GetKpiDescriptor with random ID")
+    rand_response = kpi_manager_client.GetKpiDescriptor(create_kpi_id_request())
+    LOGGER.info("Response gRPC message object: {:}".format(rand_response))
+
     assert isinstance(response, KpiDescriptor)
 
 # def test_SelectKpiDescriptor(kpi_manager_client):
diff --git a/src/kpi_value_writer/tests/test_kpi_value_writer.py b/src/kpi_value_writer/tests/test_kpi_value_writer.py
index 19a7d39159ebe81ba1fdbfae8292df3587cfc34f..4ac7b21c82234fcf863dc9e2ac5ebaf0f4b763a2 100755
--- a/src/kpi_value_writer/tests/test_kpi_value_writer.py
+++ b/src/kpi_value_writer/tests/test_kpi_value_writer.py
@@ -15,10 +15,30 @@
 import logging
 from kpi_value_writer.service.KpiValueWriter import KpiValueWriter
 from common.tools.kafka.Variables import KafkaTopic
-
+from kpi_manager.client.KpiManagerClient import KpiManagerClient
+from kpi_manager.tests.test_messages import create_kpi_descriptor_request
+from common.proto.kpi_manager_pb2 import KpiDescriptor
+from kpi_value_writer.tests.test_messages import create_kpi_id_request
 
 LOGGER = logging.getLogger(__name__)
 
+def test_GetKpiDescriptor():
+    LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ")
+    kpi_manager_client = KpiManagerClient()
+    # adding KPI
+    LOGGER.info(" >>> calling SetKpiDescriptor ")
+    response_id = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
+    # get KPI
+    LOGGER.info(" >>> calling GetKpiDescriptor with response ID")
+    response = kpi_manager_client.GetKpiDescriptor(response_id)
+    LOGGER.info("Response gRPC message object: {:}".format(response))
+    
+    LOGGER.info(" >>> calling GetKpiDescriptor with random ID")
+    rand_response = kpi_manager_client.GetKpiDescriptor(create_kpi_id_request())
+    LOGGER.info("Response gRPC message object: {:}".format(rand_response))
+
+    LOGGER.info("\n------------------ TEST FINISHED ---------------------\n")
+    assert isinstance(response, KpiDescriptor)
 
 # -------- Initial Test ----------------
 # def test_validate_kafka_topics():
@@ -26,9 +46,7 @@ LOGGER = logging.getLogger(__name__)
 #     response = KafkaTopic.create_all_topics()
 #     assert isinstance(response, bool)
 
-def test_KafkaConsumer():
-    LOGGER.debug(" --->>> test_kafka_consumer: START <<<--- ")
-    KpiValueWriter.RunKafkaConsumer()
+# def test_KafkaConsumer():
+#     LOGGER.debug(" --->>> test_kafka_consumer: START <<<--- ")
+#     KpiValueWriter.RunKafkaConsumer()
 
-# def test_metric_composer_and_writer():
-#     LOGGER.debug(" --->>> test_metric_composer_and_writer: START <<<--- ")
diff --git a/src/kpi_value_writer/tests/test_messages.py b/src/kpi_value_writer/tests/test_messages.py
index d9f4cf80a2d7043da0d49debdf01be6deba78ee2..d4b263c8089e5ce8b65d66d8a6e00c5976b9e997 100755
--- a/src/kpi_value_writer/tests/test_messages.py
+++ b/src/kpi_value_writer/tests/test_messages.py
@@ -18,6 +18,11 @@ from common.proto import kpi_manager_pb2
 from common.proto.kpi_value_api_pb2 import KpiValue
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
 
+def create_kpi_id_request():
+    _create_kpi_id = kpi_manager_pb2.KpiId()
+    _create_kpi_id.kpi_id.uuid = str(uuid.uuid4())
+    return _create_kpi_id
+
 
 def create_kpi_descriptor_request(description: str = "Test Description"):
     _create_kpi_request                                    = kpi_manager_pb2.KpiDescriptor()
@@ -33,8 +38,8 @@ def create_kpi_descriptor_request(description: str = "Test Description"):
     return _create_kpi_request
 
 def create_kpi_value_request():
-    _create_kpi_value_request                     = KpiValue()
-    _create_kpi_value_request.kpi_id.kpi_id.uuid  = str(uuid.uuid4())
-    _create_kpi_value_request.timestamp.timestamp = time.time()
+    _create_kpi_value_request                         = KpiValue()
+    _create_kpi_value_request.kpi_id.kpi_id.uuid      = str(uuid.uuid4())
+    _create_kpi_value_request.timestamp.timestamp     = time.time()
     _create_kpi_value_request.kpi_value_type.floatVal = random.randint(10, 10000)
     return _create_kpi_value_request
\ No newline at end of file