diff --git a/scripts/run_tests_locally-kpi_manager.sh b/scripts/run_tests_locally-kpi_manager.sh
index 8ed855a8e34261173a3d788fa06777f0e66825a3..e56716dea8f5baf69fc82443559f4e01a6cb54c9 100755
--- a/scripts/run_tests_locally-kpi_manager.sh
+++ b/scripts/run_tests_locally-kpi_manager.sh
@@ -24,5 +24,5 @@ cd $PROJECTDIR/src
 # python3 kpi_manager/tests/test_unitary.py
 
 RCFILE=$PROJECTDIR/coverage/.coveragerc
-python3 -m pytest --log-level=INFO --verbose \
+python3 -m pytest --log-level=INFO --log-cli-level=INFO --verbose \
     kpi_manager/tests/test_unitary.py
\ No newline at end of file
diff --git a/src/kpi_manager/service/KpiManagerServiceServicerImpl.py b/src/kpi_manager/service/KpiManagerServiceServicerImpl.py
index f1d370f30b20e871d2dd3e636afa4cad6ba0110c..c37bf373fecbd45f41792c269f01883a66d833ea 100644
--- a/src/kpi_manager/service/KpiManagerServiceServicerImpl.py
+++ b/src/kpi_manager/service/KpiManagerServiceServicerImpl.py
@@ -19,8 +19,12 @@ from common.proto.context_pb2 import Empty
 from common.proto.kpi_manager_pb2_grpc import KpiManagerServiceServicer
 from common.proto.kpi_manager_pb2 import KpiId, KpiDescriptor, KpiDescriptorFilter, KpiDescriptorList
 from monitoring.service.NameMapping import NameMapping
-from monitoring.service import ManagementDBTools
+# from monitoring.service import ManagementDBTools
+from telemetry.database.managementDB import managementDB
 
+from telemetry.database.TelemetryModel import Kpi as KpiModel
+from common.proto.context_pb2 import DeviceId, LinkId, ServiceId, SliceId,\
+                             ConnectionId, EndPointId
 
 LOGGER = logging.getLogger(__name__)
 
@@ -29,77 +33,139 @@ METRICS_POOL = MetricsPool('Monitoring', 'KpiManager')
 class KpiManagerServiceServicerImpl(KpiManagerServiceServicer):
     def __init__(self, name_mapping : NameMapping):
         LOGGER.info('Init KpiManagerService')
-
-        # Init sqlite monitoring db
-        self.management_db = ManagementDBTools.ManagementDB('monitoring.db') # why monitoring.db here???
-        LOGGER.info('MetricsDB initialized --- KPI Manager Service')
+        self.managementDBobj = managementDB()
   
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
-    def SetKpiDescriptor(
-            self, request: KpiDescriptor, grpc_context: grpc.ServicerContext # type: ignore
-        ) -> KpiId: # type: ignore
+    def SetKpiDescriptor(self, request: KpiDescriptor, grpc_context: grpc.ServicerContext # type: ignore
+                        ) -> KpiId: # type: ignore
         response = KpiId()
-        kpi_description = request.kpi_description
-        kpi_sample_type = request.kpi_sample_type
-        kpi_device_id = request.device_id.device_uuid.uuid
-        kpi_endpoint_id = request.endpoint_id.endpoint_uuid.uuid
-        kpi_service_id = request.service_id.service_uuid.uuid
-        kpi_slice_id = request.slice_id.slice_uuid.uuid
-        kpi_connection_id = request.connection_id.connection_uuid.uuid
-        kpi_link_id = request.link_id.link_uuid.uuid
-        if request.kpi_id.kpi_id.uuid != "":
+
+        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.service_id.service_uuid.uuid 
+            kpi_to_insert.endpoint_id     = request.device_id.device_uuid.uuid 
+            kpi_to_insert.service_id      = request.slice_id.slice_uuid.uuid 
+            kpi_to_insert.slice_id        = request.endpoint_id.endpoint_uuid.uuid
+            kpi_to_insert.connection_id   = request.connection_id.connection_uuid.uuid
+            # kpi_to_insert.link_id         = request.link_id.link_id.uuid
+            self.managementDBobj.add_row_to_db(kpi_to_insert)
             response.kpi_id.uuid = request.kpi_id.kpi_id.uuid
-            # Here the code to modify an existing kpi
-        else:
-            data = self.management_db.insert_KPI(
-                kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, 
-                kpi_service_id, kpi_slice_id, kpi_connection_id, kpi_link_id)
-            response.kpi_id.uuid = str(data)
-        return response
+            LOGGER.info("Added Row: {:}".format(response))
+            return response
+        except Exception as e:
+            LOGGER.info("Unable to create KpiModel class object. {:}".format(e))
+    
+    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)        
+    def GetKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore
+                         ) -> KpiDescriptor: # type: ignore
+        response = KpiDescriptor()
 
-    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
-    def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext) -> Empty: # type: ignore
-        kpi_id = int(request.kpi_id.uuid)
-        kpi = self.management_db.get_KPI(kpi_id)
-        if kpi:
-            self.management_db.delete_KPI(kpi_id)
-        else:
-            LOGGER.info('DeleteKpi error: KpiID({:s}): not found in database'.format(str(kpi_id)))
-        return Empty()
+        try: 
+            kpi_id_to_search = request.kpi_id.uuid
+            row = self.managementDBobj.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
+            return response
+        except Exception as e:
+            LOGGER.info('Unable to search kpi id. {:}'.format(e))
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
-    def GetKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext) -> KpiDescriptor: # type: ignore
-        kpi_id = request.kpi_id.uuid
-        kpi_db = self.management_db.get_KPI(int(kpi_id))
-        kpiDescriptor = KpiDescriptor()
-        if kpi_db is None:
-            LOGGER.info('GetKpiDescriptor error: KpiID({:s}): not found in database'.format(str(kpi_id)))
-        else:
-            kpiDescriptor.kpi_description                       = kpi_db[1]
-            kpiDescriptor.kpi_sample_type                       = kpi_db[2]
-            kpiDescriptor.device_id.device_uuid.uuid            = str(kpi_db[3])
-            kpiDescriptor.endpoint_id.endpoint_uuid.uuid        = str(kpi_db[4])
-            kpiDescriptor.service_id.service_uuid.uuid          = str(kpi_db[5])
-            kpiDescriptor.slice_id.slice_uuid.uuid              = str(kpi_db[6])
-            kpiDescriptor.connection_id.connection_uuid.uuid    = str(kpi_db[7])
-            kpiDescriptor.link_id.link_uuid.uuid                = str(kpi_db[8])
-        return kpiDescriptor
+    def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext
+                            ) -> Empty: # type: ignore
+        try:
+            kpi_id_to_search = request.kpi_id.uuid
+            self.managementDBobj.delete_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search)
+        except Exception as e:
+            LOGGER.info('Unable to search kpi id. {:}'.format(e))
+        finally:
+            return Empty()
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
-    def SelectKpiDescriptor(self, request: KpiDescriptorFilter, grpc_context: grpc.ServicerContext) -> KpiDescriptorList: # type: ignore
-        kpi_descriptor_list = KpiDescriptorList()
-        data = self.management_db.get_KPIS()
-        LOGGER.debug(f"data: {data}")
-        for item in data:
-            kpi_descriptor = KpiDescriptor()
-            kpi_descriptor.kpi_id.kpi_id.uuid                   = str(item[0])
-            kpi_descriptor.kpi_description                      = item[1]
-            kpi_descriptor.kpi_sample_type                      = item[2]
-            kpi_descriptor.device_id.device_uuid.uuid           = str(item[3])
-            kpi_descriptor.endpoint_id.endpoint_uuid.uuid       = str(item[4])
-            kpi_descriptor.service_id.service_uuid.uuid         = str(item[5])
-            kpi_descriptor.slice_id.slice_uuid.uuid             = str(item[6])
-            kpi_descriptor.connection_id.connection_uuid.uuid   = str(item[7])
-            kpi_descriptor.link_id.link_uuid.uuid               = str(item[8])
-            kpi_descriptor_list.kpi_descriptor_list.append(kpi_descriptor)
-        return kpi_descriptor_list
\ No newline at end of file
+    def SelectKpiDescriptor(self, request: KpiDescriptorFilter, grpc_context: grpc.ServicerContext # type: ignore
+                            ) -> KpiDescriptorList: # type: ignore
+        response = KpiDescriptorList()
+        # LOGGER.info("Recevied requested Object: {:}".format(request))
+        # re-structre the filter. create dynamic filter
+        filter_to_apply = dict()
+        filter_to_apply['device_id']       = request.device_id[0].device_uuid.uuid
+        filter_to_apply['kpi_sample_type'] = request.kpi_sample_type[0]
+        try:
+            rows = self.managementDBobj.select_with_filter(KpiModel, **filter_to_apply)
+        except Exception as e:
+            LOGGER.info('Unable to apply filter on kpi descriptor. {:}'.format(e))
+        try:
+            if len(rows) != 0:
+                kpi_id_obj    = KpiId()
+                device_id_obj = DeviceId()
+                endpoint_id_obj = EndPointId()
+                service_id_obj = ServiceId()
+                slice_id_obj = SliceId()
+                link_id_obj = LinkId()
+
+                for row in rows:
+                    kpiDescriptor_obj = KpiDescriptor()
+                    kpiDescriptor_obj.kpi_id.kpi_id.uuid = row.kpi_id
+                    # kpiDescriptor_obj.kpi_description    = row.kpi_description
+
+                    response.kpi_descriptor_list.append(kpiDescriptor_obj)
+            return response
+        except Exception as e:
+            LOGGER.info('Unable to process response {:}'.format(e))
+             
+
+    # @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
+    # def DeleteKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext) -> Empty: # type: ignore
+    #     kpi_id = int(request.kpi_id.uuid)
+    #     kpi = self.management_db.get_KPI(kpi_id)
+    #     if kpi:
+    #         self.management_db.delete_KPI(kpi_id)
+    #     else:
+    #         LOGGER.info('DeleteKpi error: KpiID({:s}): not found in database'.format(str(kpi_id)))
+    #     return Empty()
+
+    # @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
+    # def GetKpiDescriptor(self, request: KpiId, grpc_context: grpc.ServicerContext) -> KpiDescriptor: # type: ignore
+    #     kpi_id = request.kpi_id.uuid
+    #     kpi_db = self.management_db.get_KPI(int(kpi_id))
+    #     kpiDescriptor = KpiDescriptor()
+    #     if kpi_db is None:
+    #         LOGGER.info('GetKpiDescriptor error: KpiID({:s}): not found in database'.format(str(kpi_id)))
+    #     else:
+    #         kpiDescriptor.kpi_description                       = kpi_db[1]
+    #         kpiDescriptor.kpi_sample_type                       = kpi_db[2]
+    #         kpiDescriptor.device_id.device_uuid.uuid            = str(kpi_db[3])
+    #         kpiDescriptor.endpoint_id.endpoint_uuid.uuid        = str(kpi_db[4])
+    #         kpiDescriptor.service_id.service_uuid.uuid          = str(kpi_db[5])
+    #         kpiDescriptor.slice_id.slice_uuid.uuid              = str(kpi_db[6])
+    #         kpiDescriptor.connection_id.connection_uuid.uuid    = str(kpi_db[7])
+    #         kpiDescriptor.link_id.link_uuid.uuid                = str(kpi_db[8])
+    #     return kpiDescriptor
+
+    # @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
+    # def SelectKpiDescriptor(self, request: KpiDescriptorFilter, grpc_context: grpc.ServicerContext) -> KpiDescriptorList: # type: ignore
+    #     kpi_descriptor_list = KpiDescriptorList()
+    #     data = self.management_db.get_KPIS()
+    #     LOGGER.debug(f"data: {data}")
+    #     for item in data:
+    #         kpi_descriptor = KpiDescriptor()
+    #         kpi_descriptor.kpi_id.kpi_id.uuid                   = str(item[0])
+    #         kpi_descriptor.kpi_description                      = item[1]
+    #         kpi_descriptor.kpi_sample_type                      = item[2]
+    #         kpi_descriptor.device_id.device_uuid.uuid           = str(item[3])
+    #         kpi_descriptor.endpoint_id.endpoint_uuid.uuid       = str(item[4])
+    #         kpi_descriptor.service_id.service_uuid.uuid         = str(item[5])
+    #         kpi_descriptor.slice_id.slice_uuid.uuid             = str(item[6])
+    #         kpi_descriptor.connection_id.connection_uuid.uuid   = str(item[7])
+    #         kpi_descriptor.link_id.link_uuid.uuid               = str(item[8])
+    #         kpi_descriptor_list.kpi_descriptor_list.append(kpi_descriptor)
+    #     return kpi_descriptor_list
\ No newline at end of file
diff --git a/src/kpi_manager/tests/test_messages.py b/src/kpi_manager/tests/test_messages.py
index 72ff74c1686c2d5fa35ee5a118aeca4dca0f4438..db6160be5fe35b1b2b8d55b73d2ff0400d189978 100755
--- a/src/kpi_manager/tests/test_messages.py
+++ b/src/kpi_manager/tests/test_messages.py
@@ -12,14 +12,53 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import uuid
 from common.proto import kpi_manager_pb2
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
+from common.proto.context_pb2 import DeviceId, LinkId, ServiceId, SliceId,\
+                             ConnectionId, EndPointId
 
-def kpi_id():
+#  ---------------------- New Test Messages ---------------------------------
+def create_kpi_id_request():
     _kpi_id             = kpi_manager_pb2.KpiId()
-    _kpi_id.kpi_id.uuid = str(1)            # pylint: disable=maybe-no-member
+    _kpi_id.kpi_id.uuid = "34f73604-eca6-424f-9995-18b519ad0978"
     return _kpi_id
 
+def create_kpi_descriptor_request():
+    _create_kpi_request                                    = kpi_manager_pb2.KpiDescriptor()
+    _create_kpi_request.kpi_id.kpi_id.uuid                 = str(uuid.uuid4())
+    _create_kpi_request.kpi_description                    = 'KPI Description Test'
+    _create_kpi_request.kpi_sample_type                    = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED
+    _create_kpi_request.device_id.device_uuid.uuid         = 'DEV4'     # pylint: disable=maybe-no-member
+    _create_kpi_request.service_id.service_uuid.uuid       = 'SERV3'    # pylint: disable=maybe-no-member
+    _create_kpi_request.slice_id.slice_uuid.uuid           = 'SLC3'  # pylint: disable=maybe-no-member
+    _create_kpi_request.endpoint_id.endpoint_uuid.uuid     = 'END2'     # pylint: disable=maybe-no-member
+    _create_kpi_request.connection_id.connection_uuid.uuid = 'CON2'  # pylint: disable=maybe-no-member
+    return _create_kpi_request
+
+def create_kpi_filter_request_a():
+    _create_kpi_filter_request             = kpi_manager_pb2.KpiDescriptorFilter()
+    _create_kpi_filter_request.kpi_sample_type.append(102)
+
+    device_id_obj = DeviceId()
+    device_id_obj.device_uuid.uuid = "SERV3"
+    _create_kpi_filter_request.device_id.append(device_id_obj)
+    
+    # new_device_id                          = _create_kpi_filter_request.device_id.add()
+    # new_device_id.device_uuid.uuid         = 'DEV3'
+    # new_service_id                         = _create_kpi_filter_request.service_id.add()
+    # new_service_id.service_uuid.uuid       = 'SERV1'
+    # new_slice_id                           = _create_kpi_filter_request.slice_id.add()
+    # new_slice_id.slice_uuid.uuid           = 'SLC1'
+    # new_endpoint_id                        = _create_kpi_filter_request.endpoint_id.add()
+    # new_endpoint_id.endpoint_uuid.uuid     = 'END1'
+    # new_connection_id                      = _create_kpi_filter_request.connection_id.add()
+    # new_connection_id.connection_uuid.uuid = 'CON1'
+
+    return _create_kpi_filter_request
+
+# -------------------- Initial Test messages -------------------------------------
+
 def create_kpi_request(kpi_id_str):
     _create_kpi_request                                     = kpi_manager_pb2.KpiDescriptor()
     _create_kpi_request.kpi_description                     = 'KPI Description Test'
@@ -33,6 +72,7 @@ def create_kpi_request(kpi_id_str):
 
 def create_kpi_request_b():
     _create_kpi_request                                    = kpi_manager_pb2.KpiDescriptor()
+    _create_kpi_request                                    = str(uuid.uuid4())
     _create_kpi_request.kpi_description                    = 'KPI Description Test'
     _create_kpi_request.kpi_sample_type                    = KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED
     _create_kpi_request.device_id.device_uuid.uuid         = 'DEV2'     # pylint: disable=maybe-no-member
diff --git a/src/kpi_manager/tests/test_unitary.py b/src/kpi_manager/tests/test_unitary.py
index 75987a5f4320bc36ef0a298641e807c9c7dfb8fb..e60d2104e08cf57d63013369c7020ffda009f4a7 100755
--- a/src/kpi_manager/tests/test_unitary.py
+++ b/src/kpi_manager/tests/test_unitary.py
@@ -43,7 +43,9 @@ from device.service.driver_api.DriverInstanceCache import DriverInstanceCache
 from device.service.DeviceService import DeviceService
 from device.client.DeviceClient import DeviceClient
 
-from kpi_manager.tests.test_messages import create_kpi_request, create_kpi_request_b, create_kpi_request_c, create_kpi_request_d, create_kpi_filter_request
+from kpi_manager.tests.test_messages import create_kpi_request, create_kpi_request_b, \
+                create_kpi_request_c, create_kpi_request_d, create_kpi_filter_request, \
+                create_kpi_descriptor_request, create_kpi_id_request, create_kpi_filter_request_a
 # from monitoring.service.MonitoringService import MonitoringService
 from kpi_manager.service.KpiManagerService import KpiManagerService
 # from monitoring.client.MonitoringClient import MonitoringClient
@@ -63,7 +65,7 @@ from device.service.drivers import DRIVERS
 LOCAL_HOST = '127.0.0.1'
 MOCKSERVICE_PORT = 10000
 
-KPIMANAGER_SERVICE_PORT = MOCKSERVICE_PORT + get_service_port_grpc(ServiceNameEnum.KPIMANAGER) # avoid privileged ports
+KPIMANAGER_SERVICE_PORT = MOCKSERVICE_PORT + get_service_port_grpc(ServiceNameEnum.KPIMANAGER)  # type: ignore
 os.environ[get_env_var_name(ServiceNameEnum.KPIMANAGER, ENVVAR_SUFIX_SERVICE_HOST     )] = str(LOCAL_HOST)
 os.environ[get_env_var_name(ServiceNameEnum.KPIMANAGER, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(KPIMANAGER_SERVICE_PORT)
 
@@ -127,18 +129,18 @@ def device_service(context_service : MockContextService): # pylint: disable=rede
 
     LOGGER.info('Terminated DeviceService...')
 
-@pytest.fixture(scope='session')
-def device_client(device_service : DeviceService): # pylint: disable=redefined-outer-name,unused-argument
-    LOGGER.info('Initializing DeviceClient...')
-    _client = DeviceClient()
+# @pytest.fixture(scope='session')
+# def device_client(device_service : DeviceService): # pylint: disable=redefined-outer-name,unused-argument
+#     LOGGER.info('Initializing DeviceClient...')
+#     _client = DeviceClient()
 
-    LOGGER.info('Yielding DeviceClient...')
-    yield _client
+#     LOGGER.info('Yielding DeviceClient...')
+#     yield _client
 
-    LOGGER.info('Closing DeviceClient...')
-    _client.close()
+#     LOGGER.info('Closing DeviceClient...')
+#     _client.close()
 
-    LOGGER.info('Closed DeviceClient...')
+#     LOGGER.info('Closed DeviceClient...')
 
 @pytest.fixture(scope='session')
 def device_client(device_service : DeviceService): # pylint: disable=redefined-outer-name,unused-argument
@@ -195,39 +197,64 @@ def kpi_manager_client(kpi_manager_service : KpiManagerService): # pylint: disab
 # Prepare Environment, should be the first test
 ##################################################
 
-# ERROR on this test --- 
-def test_prepare_environment(
-    context_client : ContextClient,                 # pylint: disable=redefined-outer-name,unused-argument
-):
-    context_id = json_context_id(DEFAULT_CONTEXT_NAME)
-    context_client.SetContext(Context(**json_context(DEFAULT_CONTEXT_NAME)))
-    context_client.SetTopology(Topology(**json_topology(DEFAULT_TOPOLOGY_NAME, context_id=context_id)))
+# # ERROR on this test --- 
+# def test_prepare_environment(
+#     context_client : ContextClient,                 # pylint: disable=redefined-outer-name,unused-argument
+# ):
+#     context_id = json_context_id(DEFAULT_CONTEXT_NAME)
+#     context_client.SetContext(Context(**json_context(DEFAULT_CONTEXT_NAME)))
+#     context_client.SetTopology(Topology(**json_topology(DEFAULT_TOPOLOGY_NAME, context_id=context_id)))
 
 ###########################
 # Tests Implementation of Kpi Manager
 ###########################
 
-# Test case that makes use of client fixture to test server's CreateKpi method
-def test_set_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
-    # make call to server
-    LOGGER.warning('test_create_kpi requesting')
-    for i in range(3):
-        response = kpi_manager_client.SetKpiDescriptor(create_kpi_request(str(i+1)))
-        LOGGER.debug(str(response))
-        assert isinstance(response, KpiId)
-
-# Test case that makes use of client fixture to test server's DeleteKpi method
-def test_delete_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
-    # make call to server
-    LOGGER.warning('delete_kpi requesting')
-    response = kpi_manager_client.SetKpiDescriptor(create_kpi_request('4'))
-    response = kpi_manager_client.DeleteKpiDescriptor(response)
-    LOGGER.debug(str(response))
-    assert isinstance(response, Empty)
-
-# Test case that makes use of client fixture to test server's GetKpiDescriptor method
-def test_select_kpi_descriptor(kpi_manager_client): # pylint: disable=redefined-outer-name
-    LOGGER.warning('test_selectkpidescritor begin')
-    response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request())
-    LOGGER.debug(str(response))
+# ---------- 2nd Iteration Tests -----------------
+def test_SetKpiDescriptor(kpi_manager_client):
+    LOGGER.info(" >>> test_SetKpiDescriptor: START <<< ")
+    response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
+    assert isinstance(response, KpiId)
+
+def test_GetKpiDescriptor(kpi_manager_client):
+    LOGGER.info(" >>> test_GetKpiDescriptor: START <<< ")
+    response = kpi_manager_client.GetKpiDescriptor(create_kpi_id_request())
+    assert isinstance(response, KpiDescriptor)
+
+def test_DeleteKpiDescriptor(kpi_manager_client):
+    LOGGER.info(" >>> test_DeleteKpiDescriptor: START <<< ")
+    response = kpi_manager_client.SetKpiDescriptor(create_kpi_descriptor_request())
+    kpi_manager_client.DeleteKpiDescriptor(response)
+    kpi_manager_client.GetKpiDescriptor(response)
+    assert isinstance(response, KpiId)
+
+def test_SelectKpiDescriptor(kpi_manager_client):
+    LOGGER.info(" >>> test_SelectKpiDescriptor: START <<< ")
+    response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request_a())
+    # LOGGER.info(" >>> test_SelectKpiDescriptor: END <<< {:}".format(response))
     assert isinstance(response, KpiDescriptorList)
+
+# ------------- INITIAL TESTs ----------------
+# Test case that makes use of client fixture to test server's CreateKpi method
+# def test_set_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
+#     # make call to server
+#     LOGGER.warning('test_create_kpi requesting')
+#     for i in range(3):
+#         response = kpi_manager_client.SetKpiDescriptor(create_kpi_request(str(i+1)))
+#         LOGGER.debug(str(response))
+#         assert isinstance(response, KpiId)
+
+# # Test case that makes use of client fixture to test server's DeleteKpi method
+# def test_delete_kpi(kpi_manager_client): # pylint: disable=redefined-outer-name
+#     # make call to server
+#     LOGGER.warning('delete_kpi requesting')
+#     response = kpi_manager_client.SetKpiDescriptor(create_kpi_request('4'))
+#     response = kpi_manager_client.DeleteKpiDescriptor(response)
+#     LOGGER.debug(str(response))
+#     assert isinstance(response, Empty)
+
+# # Test case that makes use of client fixture to test server's GetKpiDescriptor method
+# def test_select_kpi_descriptor(kpi_manager_client): # pylint: disable=redefined-outer-name
+#     LOGGER.warning('test_selectkpidescritor begin')
+#     response = kpi_manager_client.SelectKpiDescriptor(create_kpi_filter_request())
+#     LOGGER.debug(str(response))
+#     assert isinstance(response, KpiDescriptorList)
diff --git a/src/telemetry/database/TelemetryDBmanager.py b/src/telemetry/database/TelemetryDBmanager.py
index 6dc2868a1d213150c439c4e1736cf170fc9409f3..e2b1f63a2deab0f162bbc16ac2d42c93cca46840 100644
--- a/src/telemetry/database/TelemetryDBmanager.py
+++ b/src/telemetry/database/TelemetryDBmanager.py
@@ -89,7 +89,7 @@ class TelemetryDBmanager:
     def inser_kpi(self, request: KpiDescriptor):
         session = self.Session()
         try:
-            # Create a new Collector instance
+            # Create a new Kpi instance
             kpi_to_insert                 = KpiModel()
             kpi_to_insert.kpi_id          = request.kpi_id.kpi_id.uuid
             kpi_to_insert.kpi_description = request.kpi_description
diff --git a/src/telemetry/database/TelemetryEngine.py b/src/telemetry/database/TelemetryEngine.py
index ebeaf378705260b6d230e0fe4f70b718d003ef4a..2b47e4ec86c70e5944212f7f9259cac834673a58 100644
--- a/src/telemetry/database/TelemetryEngine.py
+++ b/src/telemetry/database/TelemetryEngine.py
@@ -21,7 +21,6 @@ APP_NAME = 'tfs'
 ECHO = False                # False: No dump SQL commands and transactions executed
 CRDB_URI_TEMPLATE = 'cockroachdb://{:s}:{:s}@127.0.0.1:{:s}/{:s}?sslmode={:s}'
 # CRDB_URI_TEMPLATE = 'cockroachdb://{:s}:{:s}@cockroachdb-public.{:s}.svc.cluster.local:{:s}/{:s}?sslmode={:s}'
-# CRDB_URI_TEMPLATE = 'cockroachdb://{:s}:{:s}@cockroachdb-public.{:s}.svc.cluster.local:{:s}/{:s}?sslmode={:s}'
 
 class TelemetryEngine:
     # def __init__(self):
@@ -51,6 +50,7 @@ class TelemetryEngine:
     @staticmethod
     def create_database(engine : sqlalchemy.engine.Engine) -> None:
         if not sqlalchemy_utils.database_exists(engine.url):
+            LOGGER.info("Database created. {:}".format(engine.url))
             sqlalchemy_utils.create_database(engine.url)
 
     @staticmethod
diff --git a/src/telemetry/database/managementDB.py b/src/telemetry/database/managementDB.py
index f8d0ef9cbf647b17c2e74864be78ce5e729cd690..7061334772e46acdf8f530a62125efa23066755e 100644
--- a/src/telemetry/database/managementDB.py
+++ b/src/telemetry/database/managementDB.py
@@ -64,9 +64,60 @@ class managementDB:
         try:
             session.add(row)
             session.commit()
-            LOGGER.info(f"Row inserted into {row.__class__.__name__} table. {row.__class__.__name__} Id: : {row.collector_id}")
+            LOGGER.info(f"Row inserted into {row.__class__.__name__} table.")
         except Exception as e:
             session.rollback()
             LOGGER.error(f"Failed to insert new row into {row.__class__.__name__} table. {str(e)}")
+        finally:
+            session.close()
+    
+    def search_db_row_by_id(self, model, col_name, id_to_search):
+        session = self.Session()
+        try:
+            entity = session.query(model).filter_by(**{col_name: id_to_search}).first()
+            if entity:
+                LOGGER.info(f"{model.__name__} ID found: {str(entity)}")
+                return entity
+            else:
+                LOGGER.warning(f"{model.__name__} ID not found: {str(id_to_search)}")
+                return None
+        except Exception as e:
+            session.rollback()
+            LOGGER.info(f"Failed to retrieve {model.__name__} ID. {str(e)}")
+            raise
+        finally:
+            session.close()
+    
+    def delete_db_row_by_id(self, model, col_name, id_to_search):
+        session = self.Session()
+        try:
+            record = session.query(model).filter_by(**{col_name: id_to_search}).first()
+            if record:
+                session.delete(record)
+                session.commit()
+                LOGGER.info("Deleted %s with %s: %s", model.__name__, col_name, id_to_search)
+            else:
+                LOGGER.warning("%s with %s %s not found", model.__name__, col_name, id_to_search)
+        except Exception as e:
+            session.rollback()
+            LOGGER.error("Error deleting %s with %s %s: %s", model.__name__, col_name, id_to_search, e)
+        finally:
+            session.close()
+
+    def select_with_filter(self, model, **filters):
+        session = self.Session()
+        try:
+            query = session.query(model)
+            for column, value in filters.items():
+                query = query.filter(getattr(model, column) == value) # type: ignore   
+            result = query.all()
+            if result:
+                LOGGER.info(f"Fetched filtered rows from {model.__name__} table with filters: {filters}- Results: {result}") #  
+            else:
+                LOGGER.warning(f"No matching row found in {model.__name__} table with filters: {filters}")
+            return result
+        except Exception as e:
+            LOGGER.error(f"Error fetching filtered rows from {model.__name__} table with filters {filters} ::: {e}")
+            return []
         finally:
             session.close()
\ No newline at end of file
diff --git a/src/telemetry/database/tests/telemetryDBtests.py b/src/telemetry/database/tests/telemetryDBtests.py
index 14def9ef24e12360c793014e396b8c596f95a74f..9cb856a3da147d6438ac2119b70ff0daad1a1073 100644
--- a/src/telemetry/database/tests/telemetryDBtests.py
+++ b/src/telemetry/database/tests/telemetryDBtests.py
@@ -35,51 +35,52 @@ def test_telemetry_object_creation():
 
     LOGGER.info('>>> Creating TelemetryDBmanager Object <<< ')
     TelemetryDBmanagerObj = TelemetryDBmanager()
+    TelemetryEngine.create_database(TelemetryDBmanagerObj.db_engine)
 
-    # LOGGER.info('>>> Creating database <<< ')
-    # TelemetryDBmanagerObj.create_database()
+    LOGGER.info('>>> Creating database <<< ')
+    TelemetryDBmanagerObj.create_database()
 
-    # LOGGER.info('>>> verifing database <<< ')
-    # TelemetryDBmanagerObj.list_databases()
+    LOGGER.info('>>> verifing database <<< ')
+    TelemetryDBmanagerObj.list_databases()
 
     # # LOGGER.info('>>> Droping Tables: ')
     # # TelemetryDBmanagerObj.drop_table("table_naem_here")
 
-    # LOGGER.info('>>> Creating Tables <<< ')
-    # TelemetryDBmanagerObj.create_tables()
+    LOGGER.info('>>> Creating Tables <<< ')
+    TelemetryDBmanagerObj.create_tables()
 
     LOGGER.info('>>> Verifing Table creation <<< ')
     TelemetryDBmanagerObj.verify_tables()
 
-    LOGGER.info('>>> TESTING: Row Insertion Operation: kpi Table <<<')
-    kpi_obj = create_kpi_request()
-    TelemetryDBmanagerObj.inser_kpi(kpi_obj)
+    # LOGGER.info('>>> TESTING: Row Insertion Operation: kpi Table <<<')
+    # kpi_obj = create_kpi_request()
+    # TelemetryDBmanagerObj.inser_kpi(kpi_obj)
 
-    LOGGER.info('>>> TESTING: Row Insertion Operation: collector Table <<<')
-    collector_obj = create_collector_request()
-    TelemetryDBmanagerObj.insert_collector(collector_obj)
+    # LOGGER.info('>>> TESTING: Row Insertion Operation: collector Table <<<')
+    # collector_obj = create_collector_request()
+    # TelemetryDBmanagerObj.insert_collector(collector_obj)
 
-    LOGGER.info('>>> TESTING: Get KpiDescriptor  <<<')
-    kpi_id_obj = create_kpi_id_request()
-    TelemetryDBmanagerObj.get_kpi_descriptor(kpi_id_obj)
+    # LOGGER.info('>>> TESTING: Get KpiDescriptor  <<<')
+    # kpi_id_obj = create_kpi_id_request()
+    # TelemetryDBmanagerObj.get_kpi_descriptor(kpi_id_obj)
 
-    LOGGER.info('>>> TESTING: Select Collector  <<<')
-    collector_id_obj = create_collector_id_request()
-    TelemetryDBmanagerObj.get_collector(collector_id_obj)
+    # LOGGER.info('>>> TESTING: Select Collector  <<<')
+    # collector_id_obj = create_collector_id_request()
+    # TelemetryDBmanagerObj.get_collector(collector_id_obj)
 
-    LOGGER.info('>>> TESTING: Applying kpi filter  <<< ')
-    kpi_filter : dict[str, Any] = create_kpi_filter_request()
-    TelemetryDBmanagerObj.select_kpi_descriptor(**kpi_filter)
+    # LOGGER.info('>>> TESTING: Applying kpi filter  <<< ')
+    # kpi_filter : dict[str, Any] = create_kpi_filter_request()
+    # TelemetryDBmanagerObj.select_kpi_descriptor(**kpi_filter)
 
-    LOGGER.info('>>> TESTING: Applying collector filter   <<<')
-    collector_filter : dict[str, Any] = create_collector_filter_request()
-    TelemetryDBmanagerObj.select_collector(**collector_filter)
+    # LOGGER.info('>>> TESTING: Applying collector filter   <<<')
+    # collector_filter : dict[str, Any] = create_collector_filter_request()
+    # TelemetryDBmanagerObj.select_collector(**collector_filter)
     
-    LOGGER.info('>>> TESTING: Delete KpiDescriptor ')
-    kpi_id_obj = create_kpi_id_request()
-    TelemetryDBmanagerObj.delete_kpi_descriptor(kpi_id_obj)
+    # LOGGER.info('>>> TESTING: Delete KpiDescriptor ')
+    # kpi_id_obj = create_kpi_id_request()
+    # TelemetryDBmanagerObj.delete_kpi_descriptor(kpi_id_obj)
 
-    LOGGER.info('>>> TESTING: Delete Collector ')
-    collector_id_obj = create_collector_id_request()
-    TelemetryDBmanagerObj.delete_collector(collector_id_obj)
+    # LOGGER.info('>>> TESTING: Delete Collector ')
+    # collector_id_obj = create_collector_id_request()
+    # TelemetryDBmanagerObj.delete_collector(collector_id_obj)
     
\ No newline at end of file