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 1/5] 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


From b173c4679c2b3cc864595c6de70336b395f18675 Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Thu, 27 Oct 2022 11:58:34 +0200
Subject: [PATCH 2/5] Fixing some imports and branching a fixture file for each
 test case so that they can have particularities.

---
 src/tests/{ => ecoc22/tests}/Fixtures.py      |  0
 .../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 +-
 src/tests/ofc22/tests/Fixtures.py             | 35 +++++++++++++++++++
 .../ofc22/tests/test_functional_bootstrap.py  |  2 +-
 .../ofc22/tests/test_functional_cleanup.py    |  2 +-
 .../tests/test_functional_create_service.py   |  4 +--
 .../tests/test_functional_delete_service.py   |  2 +-
 10 files changed, 44 insertions(+), 9 deletions(-)
 rename src/tests/{ => ecoc22/tests}/Fixtures.py (100%)
 create mode 100644 src/tests/ofc22/tests/Fixtures.py

diff --git a/src/tests/Fixtures.py b/src/tests/ecoc22/tests/Fixtures.py
similarity index 100%
rename from src/tests/Fixtures.py
rename to src/tests/ecoc22/tests/Fixtures.py
diff --git a/src/tests/ecoc22/tests/test_functional_bootstrap.py b/src/tests/ecoc22/tests/test_functional_bootstrap.py
index 75f2bddf2..14ee21658 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 tests.Fixtures import context_client, device_client
+from .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 017cc991d..2fc61e818 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 tests.Fixtures import context_client, device_client
+from .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 c3cacea63..2f576db83 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 tests.Fixtures import context_client, osm_wim
+from .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 b72ae75e0..89d7a621f 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 tests.Fixtures import context_client, osm_wim
+from .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/ofc22/tests/Fixtures.py b/src/tests/ofc22/tests/Fixtures.py
new file mode 100644
index 000000000..3ca503918
--- /dev/null
+++ b/src/tests/ofc22/tests/Fixtures.py
@@ -0,0 +1,35 @@
+import pytest
+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 import WIM_MAPPING, WIM_PASSWORD, WIM_USERNAME
+
+
+@pytest.fixture(scope='session')
+def context_client():
+    _client = ContextClient()
+    yield _client
+    _client.close()
+
+
+@pytest.fixture(scope='session')
+def device_client():
+    _client = DeviceClient()
+    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(
+        get_setting('COMPUTESERVICE_SERVICE_HOST'), str(get_setting('COMPUTESERVICE_SERVICE_PORT_HTTP')))
+    return MockOSM(wim_url, WIM_MAPPING, WIM_USERNAME, WIM_PASSWORD)
diff --git a/src/tests/ofc22/tests/test_functional_bootstrap.py b/src/tests/ofc22/tests/test_functional_bootstrap.py
index 76c52810b..6b8c3f1fc 100644
--- a/src/tests/ofc22/tests/test_functional_bootstrap.py
+++ b/src/tests/ofc22/tests/test_functional_bootstrap.py
@@ -26,7 +26,7 @@ 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
+from .Fixtures import context_client, device_client, monitoring_client
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
diff --git a/src/tests/ofc22/tests/test_functional_cleanup.py b/src/tests/ofc22/tests/test_functional_cleanup.py
index b0dfe5490..4fdeb1916 100644
--- a/src/tests/ofc22/tests/test_functional_cleanup.py
+++ b/src/tests/ofc22/tests/test_functional_cleanup.py
@@ -23,7 +23,7 @@ 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 .Fixtures import context_client, device_client
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
 LOGGER = logging.getLogger(__name__)
diff --git a/src/tests/ofc22/tests/test_functional_create_service.py b/src/tests/ofc22/tests/test_functional_create_service.py
index 571da956c..ea7decfc0 100644
--- a/src/tests/ofc22/tests/test_functional_create_service.py
+++ b/src/tests/ofc22/tests/test_functional_create_service.py
@@ -25,10 +25,10 @@ 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 .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)
+    WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE)
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
diff --git a/src/tests/ofc22/tests/test_functional_delete_service.py b/src/tests/ofc22/tests/test_functional_delete_service.py
index c10060a5f..391df9916 100644
--- a/src/tests/ofc22/tests/test_functional_delete_service.py
+++ b/src/tests/ofc22/tests/test_functional_delete_service.py
@@ -24,7 +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 .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)
-- 
GitLab


From 32e2e6df702c67494f87e3282a1ae747cb5702c8 Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Thu, 27 Oct 2022 14:29:55 +0200
Subject: [PATCH 3/5] Consolidating commong fixtures in a single file at the
 root of the tests folder. Updating ECOC'22 and OFC'22 tests to use it.

---
 src/tests/Fixtures.py                         | 24 +++++++++++++++++++
 src/tests/ecoc22/tests/Fixtures.py            | 21 ----------------
 .../ecoc22/tests/test_functional_bootstrap.py |  2 +-
 .../ecoc22/tests/test_functional_cleanup.py   |  2 +-
 .../tests/test_functional_create_service.py   |  3 ++-
 .../tests/test_functional_delete_service.py   |  3 ++-
 .../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 ++++++++++-
 src/tests/ofc22/tests/Fixtures.py             | 24 -------------------
 .../ofc22/tests/test_functional_bootstrap.py  |  2 +-
 .../ofc22/tests/test_functional_cleanup.py    |  2 +-
 .../tests/test_functional_create_service.py   |  3 ++-
 .../tests/test_functional_delete_service.py   |  3 ++-
 15 files changed, 86 insertions(+), 57 deletions(-)
 create mode 100644 src/tests/Fixtures.py

diff --git a/src/tests/Fixtures.py b/src/tests/Fixtures.py
new file mode 100644
index 000000000..8bf00b063
--- /dev/null
+++ b/src/tests/Fixtures.py
@@ -0,0 +1,24 @@
+import pytest
+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
+
+@pytest.fixture(scope='session')
+def context_client():
+    _client = ContextClient()
+    yield _client
+    _client.close()
+
+@pytest.fixture(scope='session')
+def device_client():
+    _client = DeviceClient()
+    yield _client
+    _client.close()
+
+@pytest.fixture(scope='session')
+def monitoring_client():
+    _client = MonitoringClient()
+    yield _client
+    _client.close()
diff --git a/src/tests/ecoc22/tests/Fixtures.py b/src/tests/ecoc22/tests/Fixtures.py
index 6e19e624d..4fdc59b4f 100644
--- a/src/tests/ecoc22/tests/Fixtures.py
+++ b/src/tests/ecoc22/tests/Fixtures.py
@@ -1,31 +1,10 @@
 import pytest
 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
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient()
-    yield _client
-    _client.close()
-
-@pytest.fixture(scope='session')
-def device_client():
-    _client = DeviceClient()
-    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..8c9ca36a9 100644
--- a/src/tests/ecoc22/tests/test_functional_create_service.py
+++ b/src/tests/ecoc22/tests/test_functional_create_service.py
@@ -17,7 +17,8 @@ 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
+from .Fixtures import 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..de152ebb7 100644
--- a/src/tests/ecoc22/tests/test_functional_delete_service.py
+++ b/src/tests/ecoc22/tests/test_functional_delete_service.py
@@ -23,7 +23,8 @@ 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
+from .Fixtures import 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 ccd31b1a7..0254ffd26 100644
--- a/src/tests/netx22-p4/tests/test_functional_bootstrap.py
+++ b/src/tests/netx22-p4/tests/test_functional_bootstrap.py
@@ -23,12 +23,23 @@ 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 9ea2c1f2b..32f716f1c 100644
--- a/src/tests/netx22-p4/tests/test_functional_cleanup.py
+++ b/src/tests/netx22-p4/tests/test_functional_cleanup.py
@@ -23,13 +23,25 @@ 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 50a5cf98c..501536bdb 100644
--- a/src/tests/netx22-p4/tests/test_functional_create_service.py
+++ b/src/tests/netx22-p4/tests/test_functional_create_service.py
@@ -23,7 +23,6 @@ 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
@@ -31,6 +30,18 @@ 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 cce136129..1be7e3240 100644
--- a/src/tests/netx22-p4/tests/test_functional_delete_service.py
+++ b/src/tests/netx22-p4/tests/test_functional_delete_service.py
@@ -23,13 +23,25 @@ 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/Fixtures.py b/src/tests/ofc22/tests/Fixtures.py
index 3ca503918..752c20ed8 100644
--- a/src/tests/ofc22/tests/Fixtures.py
+++ b/src/tests/ofc22/tests/Fixtures.py
@@ -1,33 +1,9 @@
 import pytest
 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 import WIM_MAPPING, WIM_PASSWORD, WIM_USERNAME
 
 
-@pytest.fixture(scope='session')
-def context_client():
-    _client = ContextClient()
-    yield _client
-    _client.close()
-
-
-@pytest.fixture(scope='session')
-def device_client():
-    _client = DeviceClient()
-    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/ofc22/tests/test_functional_bootstrap.py b/src/tests/ofc22/tests/test_functional_bootstrap.py
index 6b8c3f1fc..76c52810b 100644
--- a/src/tests/ofc22/tests/test_functional_bootstrap.py
+++ b/src/tests/ofc22/tests/test_functional_bootstrap.py
@@ -26,7 +26,7 @@ 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 .Fixtures import context_client, device_client, monitoring_client
+from tests.Fixtures import context_client, device_client, monitoring_client
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
diff --git a/src/tests/ofc22/tests/test_functional_cleanup.py b/src/tests/ofc22/tests/test_functional_cleanup.py
index 4fdeb1916..b0dfe5490 100644
--- a/src/tests/ofc22/tests/test_functional_cleanup.py
+++ b/src/tests/ofc22/tests/test_functional_cleanup.py
@@ -23,7 +23,7 @@ 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 .Fixtures import context_client, device_client
+from tests.Fixtures import context_client, device_client
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
 LOGGER = logging.getLogger(__name__)
diff --git a/src/tests/ofc22/tests/test_functional_create_service.py b/src/tests/ofc22/tests/test_functional_create_service.py
index ea7decfc0..5615f119b 100644
--- a/src/tests/ofc22/tests/test_functional_create_service.py
+++ b/src/tests/ofc22/tests/test_functional_create_service.py
@@ -25,7 +25,8 @@ 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 .Fixtures import context_client, monitoring_client, osm_wim
+from tests.Fixtures import context_client, monitoring_client
+from .Fixtures import osm_wim
 from .Objects import (
     CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, DEVICES, LINKS, TOPOLOGIES,
     WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE)
diff --git a/src/tests/ofc22/tests/test_functional_delete_service.py b/src/tests/ofc22/tests/test_functional_delete_service.py
index 391df9916..5d9568cd8 100644
--- a/src/tests/ofc22/tests/test_functional_delete_service.py
+++ b/src/tests/ofc22/tests/test_functional_delete_service.py
@@ -24,7 +24,8 @@ 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 .Fixtures import context_client, osm_wim
+from tests.Fixtures import context_client
+from .Fixtures import 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)
-- 
GitLab


From fe69721eee0c3273d6c061ed1ca84503b2c39b00 Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Thu, 27 Oct 2022 14:44:23 +0200
Subject: [PATCH 4/5] Including missing header to the Fixtures.py file.

---
 src/tests/Fixtures.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/tests/Fixtures.py b/src/tests/Fixtures.py
index 8bf00b063..aeead8448 100644
--- a/src/tests/Fixtures.py
+++ b/src/tests/Fixtures.py
@@ -1,3 +1,17 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import pytest
 from common.Settings import get_setting
 from compute.tests.mock_osm.MockOSM import MockOSM
-- 
GitLab


From a2d1ac3c4838b7ff8b9b1c3a8038f07b28a361eb Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Thu, 27 Oct 2022 14:51:53 +0200
Subject: [PATCH 5/5] Including more missing headers to files.

---
 src/tests/ecoc22/tests/Fixtures.py | 14 ++++++++++++++
 src/tests/ofc22/tests/Fixtures.py  | 14 ++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/src/tests/ecoc22/tests/Fixtures.py b/src/tests/ecoc22/tests/Fixtures.py
index 4fdc59b4f..0e5c7fbe3 100644
--- a/src/tests/ecoc22/tests/Fixtures.py
+++ b/src/tests/ecoc22/tests/Fixtures.py
@@ -1,3 +1,17 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import pytest
 from common.Settings import get_setting
 from compute.tests.mock_osm.MockOSM import MockOSM
diff --git a/src/tests/ofc22/tests/Fixtures.py b/src/tests/ofc22/tests/Fixtures.py
index 752c20ed8..370731e5d 100644
--- a/src/tests/ofc22/tests/Fixtures.py
+++ b/src/tests/ofc22/tests/Fixtures.py
@@ -1,3 +1,17 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import pytest
 from common.Settings import get_setting
 from compute.tests.mock_osm.MockOSM import MockOSM
-- 
GitLab