From 9840d8814c656181e3bae6b73758a17131e7cc89 Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Thu, 27 Oct 2022 11:41:25 +0200
Subject: [PATCH] Including the validation of creation of KPIs and their values
 to the OFC'22 test set. Also consolidating the fixtures into a single file in
 the root of the 'src/tests' folder so that all tests can import from it.

---
 src/tests/{ecoc22/tests => }/Fixtures.py      |  7 +++
 .../ecoc22/tests/test_functional_bootstrap.py |  2 +-
 .../ecoc22/tests/test_functional_cleanup.py   |  2 +-
 .../tests/test_functional_create_service.py   |  2 +-
 .../tests/test_functional_delete_service.py   |  2 +-
 .../tests/test_functional_bootstrap.py        | 13 +----
 .../tests/test_functional_cleanup.py          | 14 +----
 .../tests/test_functional_create_service.py   | 13 +----
 .../tests/test_functional_delete_service.py   | 14 +----
 .../ofc22/tests/test_functional_bootstrap.py  | 30 +++++-----
 .../ofc22/tests/test_functional_cleanup.py    | 15 +----
 .../tests/test_functional_create_service.py   | 57 ++++++++++---------
 .../tests/test_functional_delete_service.py   | 15 +----
 13 files changed, 62 insertions(+), 124 deletions(-)
 rename src/tests/{ecoc22/tests => }/Fixtures.py (82%)

diff --git a/src/tests/ecoc22/tests/Fixtures.py b/src/tests/Fixtures.py
similarity index 82%
rename from src/tests/ecoc22/tests/Fixtures.py
rename to src/tests/Fixtures.py
index 70b41bdcb..6e19e624d 100644
--- a/src/tests/ecoc22/tests/Fixtures.py
+++ b/src/tests/Fixtures.py
@@ -3,6 +3,7 @@ from common.Settings import get_setting
 from compute.tests.mock_osm.MockOSM import MockOSM
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
+from monitoring.client.MonitoringClient import MonitoringClient
 #from .Objects_BigNet import WIM_MAPPING, WIM_PASSWORD, WIM_USERNAME
 from .Objects_DC_CSGW_TN import WIM_MAPPING, WIM_PASSWORD, WIM_USERNAME
 #from .Objects_DC_CSGW_TN_OLS import WIM_MAPPING, WIM_PASSWORD, WIM_USERNAME
@@ -19,6 +20,12 @@ def device_client():
     yield _client
     _client.close()
 
+@pytest.fixture(scope='session')
+def monitoring_client():
+    _client = MonitoringClient()
+    yield _client
+    _client.close()
+
 @pytest.fixture(scope='session')
 def osm_wim():
     wim_url = 'http://{:s}:{:s}'.format(
diff --git a/src/tests/ecoc22/tests/test_functional_bootstrap.py b/src/tests/ecoc22/tests/test_functional_bootstrap.py
index 14ee21658..75f2bddf2 100644
--- a/src/tests/ecoc22/tests/test_functional_bootstrap.py
+++ b/src/tests/ecoc22/tests/test_functional_bootstrap.py
@@ -16,7 +16,7 @@ import logging
 from common.proto.context_pb2 import Context, ContextId, Device, DeviceId, Empty, Link, LinkId, Topology, TopologyId
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
-from .Fixtures import context_client, device_client
+from tests.Fixtures import context_client, device_client
 #from .Objects_BigNet import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 #from .Objects_DC_CSGW_TN import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES, OBJECTS_PER_TOPOLOGY
 #from .Objects_DC_CSGW_TN_OLS import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES, OBJECTS_PER_TOPOLOGY
diff --git a/src/tests/ecoc22/tests/test_functional_cleanup.py b/src/tests/ecoc22/tests/test_functional_cleanup.py
index 2fc61e818..017cc991d 100644
--- a/src/tests/ecoc22/tests/test_functional_cleanup.py
+++ b/src/tests/ecoc22/tests/test_functional_cleanup.py
@@ -17,7 +17,7 @@ from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, Topolog
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
-from .Fixtures import context_client, device_client
+from tests.Fixtures import context_client, device_client
 #from .Objects_BigNet import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 #from .Objects_DC_CSGW_TN import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 #from .Objects_DC_CSGW_TN_OLS import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
diff --git a/src/tests/ecoc22/tests/test_functional_create_service.py b/src/tests/ecoc22/tests/test_functional_create_service.py
index 2f576db83..c3cacea63 100644
--- a/src/tests/ecoc22/tests/test_functional_create_service.py
+++ b/src/tests/ecoc22/tests/test_functional_create_service.py
@@ -17,7 +17,7 @@ from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from compute.tests.mock_osm.MockOSM import MockOSM
 from context.client.ContextClient import ContextClient
-from .Fixtures import context_client, osm_wim
+from tests.Fixtures import context_client, osm_wim
 #from .Objects_BigNet import (
 #    CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES, WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE)
 #from .Objects_DC_CSGW_TN import (
diff --git a/src/tests/ecoc22/tests/test_functional_delete_service.py b/src/tests/ecoc22/tests/test_functional_delete_service.py
index 89d7a621f..b72ae75e0 100644
--- a/src/tests/ecoc22/tests/test_functional_delete_service.py
+++ b/src/tests/ecoc22/tests/test_functional_delete_service.py
@@ -23,7 +23,7 @@ from common.tools.object_factory.Service import json_service_id
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from compute.tests.mock_osm.MockOSM import MockOSM
 from context.client.ContextClient import ContextClient
-from .Fixtures import context_client, osm_wim
+from tests.Fixtures import context_client, osm_wim
 #from .Objects_BigNet import (
 #    CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES, WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE)
 #from .Objects_DC_CSGW_TN import (
diff --git a/src/tests/netx22-p4/tests/test_functional_bootstrap.py b/src/tests/netx22-p4/tests/test_functional_bootstrap.py
index 0254ffd26..ccd31b1a7 100644
--- a/src/tests/netx22-p4/tests/test_functional_bootstrap.py
+++ b/src/tests/netx22-p4/tests/test_functional_bootstrap.py
@@ -23,23 +23,12 @@ from context.client.ContextClient import ContextClient
 from context.client.EventsCollector import EventsCollector
 from common.proto.context_pb2 import ConfigActionEnum, Context, ContextId, Device, Empty, Link, Topology, DeviceOperationalStatusEnum
 from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def device_client():
-    _client = DeviceClient(get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
 
 def test_prepare_scenario(context_client : ContextClient):  # pylint: disable=redefined-outer-name
 
diff --git a/src/tests/netx22-p4/tests/test_functional_cleanup.py b/src/tests/netx22-p4/tests/test_functional_cleanup.py
index 32f716f1c..9ea2c1f2b 100644
--- a/src/tests/netx22-p4/tests/test_functional_cleanup.py
+++ b/src/tests/netx22-p4/tests/test_functional_cleanup.py
@@ -23,25 +23,13 @@ from context.client.ContextClient import ContextClient
 from context.client.EventsCollector import EventsCollector
 from common.proto.context_pb2 import ConfigActionEnum, ContextId, Device, DeviceId, Empty, LinkId, TopologyId, DeviceOperationalStatusEnum
 from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def device_client():
-    _client = DeviceClient(get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
 def test_scenario_cleanup(
     context_client : ContextClient, device_client : DeviceClient):  # pylint: disable=redefined-outer-name
 
diff --git a/src/tests/netx22-p4/tests/test_functional_create_service.py b/src/tests/netx22-p4/tests/test_functional_create_service.py
index 501536bdb..50a5cf98c 100644
--- a/src/tests/netx22-p4/tests/test_functional_create_service.py
+++ b/src/tests/netx22-p4/tests/test_functional_create_service.py
@@ -23,6 +23,7 @@ from context.client.ContextClient import ContextClient
 from context.client.EventsCollector import EventsCollector
 from common.proto.context_pb2 import Context, ContextId, Device, Empty, Link, Topology
 from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 from common.proto.context_pb2 import ConfigActionEnum, Device, DeviceId,\
     DeviceOperationalStatusEnum
@@ -30,18 +31,6 @@ from common.proto.context_pb2 import ConfigActionEnum, Device, DeviceId,\
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def device_client():
-    _client = DeviceClient(get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
 
 def test_rules_entry(
     context_client : ContextClient, device_client : DeviceClient):  # pylint: disable=redefined-outer-name
diff --git a/src/tests/netx22-p4/tests/test_functional_delete_service.py b/src/tests/netx22-p4/tests/test_functional_delete_service.py
index 1be7e3240..cce136129 100644
--- a/src/tests/netx22-p4/tests/test_functional_delete_service.py
+++ b/src/tests/netx22-p4/tests/test_functional_delete_service.py
@@ -23,25 +23,13 @@ from context.client.ContextClient import ContextClient
 from context.client.EventsCollector import EventsCollector
 from common.proto.context_pb2 import ConfigActionEnum, ContextId, Device, DeviceId, Empty, LinkId, TopologyId, DeviceOperationalStatusEnum
 from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def device_client():
-    _client = DeviceClient(get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
 def test_rules_delete(
     context_client : ContextClient, device_client : DeviceClient):  # pylint: disable=redefined-outer-name
 
diff --git a/src/tests/ofc22/tests/test_functional_bootstrap.py b/src/tests/ofc22/tests/test_functional_bootstrap.py
index 3ea9393c5..76c52810b 100644
--- a/src/tests/ofc22/tests/test_functional_bootstrap.py
+++ b/src/tests/ofc22/tests/test_functional_bootstrap.py
@@ -14,36 +14,24 @@
 
 import copy, logging, pytest
 from common.Settings import get_setting
+from common.proto.monitoring_pb2 import KpiDescriptorList
 from common.tests.EventTools import EVENT_CREATE, EVENT_UPDATE, check_events
 from common.tools.object_factory.Context import json_context_id
 from common.tools.object_factory.Device import json_device_id
 from common.tools.object_factory.Link import json_link_id
 from common.tools.object_factory.Topology import json_topology_id
 from context.client.ContextClient import ContextClient
+from monitoring.client.MonitoringClient import MonitoringClient
 from context.client.EventsCollector import EventsCollector
 from common.proto.context_pb2 import Context, ContextId, Device, Empty, Link, Topology
 from device.client.DeviceClient import DeviceClient
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
-
+from tests.Fixtures import context_client, device_client, monitoring_client
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def device_client():
-    _client = DeviceClient(get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
 def test_scenario_empty(context_client : ContextClient):  # pylint: disable=redefined-outer-name
     # ----- List entities - Ensure database is empty -------------------------------------------------------------------
     response = context_client.ListContexts(Empty())
@@ -202,3 +190,15 @@ def test_links_created(context_client : ContextClient):  # pylint: disable=redef
 
     response = context_client.ListServices(ContextId(**CONTEXT_ID))
     assert len(response.services) == 0
+
+
+def test_scenario_kpis_created(monitoring_client: MonitoringClient):
+    """
+    This test validates that KPIs related to the service/device/endpoint were created
+    during the service creation process.
+    """
+    response: KpiDescriptorList = monitoring_client.GetKpiDescriptorList(Empty())
+    LOGGER.info("Number of KPIs created: {}".format(len(response.kpi_descriptor_list)))
+    # TODO: replace the magic number `16` below for a formula that adapts to the number
+    # of links and devices
+    assert len(response.kpi_descriptor_list) == 16
diff --git a/src/tests/ofc22/tests/test_functional_cleanup.py b/src/tests/ofc22/tests/test_functional_cleanup.py
index 60bb86b50..b0dfe5490 100644
--- a/src/tests/ofc22/tests/test_functional_cleanup.py
+++ b/src/tests/ofc22/tests/test_functional_cleanup.py
@@ -23,26 +23,13 @@ from context.client.ContextClient import ContextClient
 from context.client.EventsCollector import EventsCollector
 from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
 from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def device_client():
-    _client = DeviceClient(get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
 def test_services_removed(context_client : ContextClient):  # pylint: disable=redefined-outer-name
     # ----- List entities - Ensure service is removed ------------------------------------------------------------------
     response = context_client.ListContexts(Empty())
diff --git a/src/tests/ofc22/tests/test_functional_create_service.py b/src/tests/ofc22/tests/test_functional_create_service.py
index 1f5b80cbf..571da956c 100644
--- a/src/tests/ofc22/tests/test_functional_create_service.py
+++ b/src/tests/ofc22/tests/test_functional_create_service.py
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging, pytest
+import logging, pytest, random, time
 from common.DeviceTypes import DeviceTypeEnum
 from common.Settings import get_setting
 from common.tests.EventTools import EVENT_CREATE, EVENT_UPDATE, check_events
@@ -22,8 +22,10 @@ from common.tools.object_factory.Service import json_service_id
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from compute.tests.mock_osm.MockOSM import MockOSM
 from context.client.ContextClient import ContextClient
+from monitoring.client.MonitoringClient import MonitoringClient
 from context.client.EventsCollector import EventsCollector
 from common.proto.context_pb2 import ContextId, Empty
+from tests.Fixtures import context_client, monitoring_client, osm_wim
 from .Objects import (
     CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, DEVICES, LINKS, TOPOLOGIES,
     WIM_MAPPING, WIM_PASSWORD, WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE, WIM_USERNAME)
@@ -35,20 +37,6 @@ DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
 DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
 
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def osm_wim():
-    wim_url = 'http://{:s}:{:s}'.format(
-        get_setting('COMPUTESERVICE_SERVICE_HOST'), str(get_setting('COMPUTESERVICE_SERVICE_PORT_HTTP')))
-    return MockOSM(wim_url, WIM_MAPPING, WIM_USERNAME, WIM_PASSWORD)
-
-
 def test_scenario_is_correct(context_client : ContextClient):  # pylint: disable=redefined-outer-name
     # ----- List entities - Ensure links are created -------------------------------------------------------------------
     response = context_client.ListContexts(Empty())
@@ -69,8 +57,9 @@ def test_scenario_is_correct(context_client : ContextClient):  # pylint: disable
 
 def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
     # ----- Start the EventsCollector ----------------------------------------------------------------------------------
-    #events_collector = EventsCollector(context_client, log_events_received=True)
-    #events_collector.start()
+    # TODO: restablish the tests of the events
+    # events_collector = EventsCollector(context_client, log_events_received=True)
+    # events_collector.start()
 
     # ----- Create Service ---------------------------------------------------------------------------------------------
     service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
@@ -78,30 +67,30 @@ def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): #
 
     # ----- Validate collected events ----------------------------------------------------------------------------------
 
-    #packet_connection_uuid = '{:s}:{:s}'.format(service_uuid, DEVTYPE_EMU_PR)
-    #optical_connection_uuid = '{:s}:optical:{:s}'.format(service_uuid, DEVTYPE_EMU_OLS)
-    #optical_service_uuid = '{:s}:optical'.format(service_uuid)
+    # packet_connection_uuid = '{:s}:{:s}'.format(service_uuid, DEVTYPE_EMU_PR)
+    # optical_connection_uuid = '{:s}:optical:{:s}'.format(service_uuid, DEVTYPE_EMU_OLS)
+    # optical_service_uuid = '{:s}:optical'.format(service_uuid)
 
-    #expected_events = [
+    # expected_events = [
     #    # Create packet service and add first endpoint
     #    ('ServiceEvent',    EVENT_CREATE, json_service_id(service_uuid, context_id=CONTEXT_ID)),
     #    ('ServiceEvent',    EVENT_UPDATE, json_service_id(service_uuid, context_id=CONTEXT_ID)),
-    #
+    
     #    # Configure OLS controller, create optical service, create optical connection
     #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_O1_UUID)),
     #    ('ServiceEvent',    EVENT_CREATE, json_service_id(optical_service_uuid, context_id=CONTEXT_ID)),
     #    ('ConnectionEvent', EVENT_CREATE, json_connection_id(optical_connection_uuid)),
-    #
+    
     #    # Configure endpoint packet devices, add second endpoint to service, create connection
     #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_R1_UUID)),
     #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_R3_UUID)),
     #    ('ServiceEvent',    EVENT_UPDATE, json_service_id(service_uuid, context_id=CONTEXT_ID)),
     #    ('ConnectionEvent', EVENT_CREATE, json_connection_id(packet_connection_uuid)),
-    #]
-    #check_events(events_collector, expected_events)
+    # ]
+    # check_events(events_collector, expected_events)
 
-    # ----- Stop the EventsCollector -----------------------------------------------------------------------------------
-    #events_collector.stop()
+    # # ----- Stop the EventsCollector -----------------------------------------------------------------------------------
+    # events_collector.stop()
 
 
 def test_scenario_service_created(context_client : ContextClient):  # pylint: disable=redefined-outer-name
@@ -127,3 +116,17 @@ def test_scenario_service_created(context_client : ContextClient):  # pylint: di
         LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
             grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
         assert len(response.connections) == 1 # one connection per service
+
+
+def test_scenario_kpi_values_created(monitoring_client: MonitoringClient):
+    """
+    This test validates that KPI values have been inserted into the monitoring database.
+    We short k KPI descriptors to test.
+    """
+    response = monitoring_client.GetKpiDescriptorList(Empty())
+    kpi_descriptors = random.choices(response.kpi_descriptor_list, k=2)
+
+    for kpi_descriptor in kpi_descriptors:
+        response = monitoring_client.GetInstantKpi(kpi_descriptor.kpi_id)
+        assert response.kpi_id.kpi_id.uuid == kpi_descriptor.kpi_id.kpi_id.uuid
+        assert response.timestamp.timestamp > 0
diff --git a/src/tests/ofc22/tests/test_functional_delete_service.py b/src/tests/ofc22/tests/test_functional_delete_service.py
index f0cc916cf..c10060a5f 100644
--- a/src/tests/ofc22/tests/test_functional_delete_service.py
+++ b/src/tests/ofc22/tests/test_functional_delete_service.py
@@ -24,6 +24,7 @@ from compute.tests.mock_osm.MockOSM import MockOSM
 from context.client.ContextClient import ContextClient
 from context.client.EventsCollector import EventsCollector
 from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from tests.Fixtures import context_client, osm_wim
 from .Objects import (
     CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, DEVICES, LINKS, TOPOLOGIES, WIM_MAPPING,
     WIM_PASSWORD, WIM_USERNAME)
@@ -36,20 +37,6 @@ DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
 DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
 
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def osm_wim():
-    wim_url = 'http://{:s}:{:s}'.format(
-        get_setting('COMPUTESERVICE_SERVICE_HOST'), str(get_setting('COMPUTESERVICE_SERVICE_PORT_HTTP')))
-    return MockOSM(wim_url, WIM_MAPPING, WIM_USERNAME, WIM_PASSWORD)
-
-
 def test_scenario_is_correct(context_client : ContextClient):  # pylint: disable=redefined-outer-name
     # ----- List entities - Ensure service is created ------------------------------------------------------------------
     response = context_client.ListContexts(Empty())
-- 
GitLab