diff --git a/manifests/computeservice.yaml b/manifests/computeservice.yaml index 16507dfcbf736de83a038177c529a5885cc3585a..e9fbe72d8caa1a43557ff2bb65e3b106b31a236a 100644 --- a/manifests/computeservice.yaml +++ b/manifests/computeservice.yaml @@ -53,19 +53,3 @@ spec: protocol: TCP port: 9090 targetPort: 9090 ---- -apiVersion: v1 -kind: Service -metadata: - name: computeservice-public -spec: - type: NodePort - selector: - app: computeservice - ports: - - name: http - protocol: TCP - port: 8080 - targetPort: 8080 - nodePort: 30808 ---- diff --git a/manifests/contextservice.yaml b/manifests/contextservice.yaml index c8fcb38f7bb525b587b176d3f334b74167095c47..e93fdbb12dcf49a5eac69d450a8b1810dbd4a1c3 100644 --- a/manifests/contextservice.yaml +++ b/manifests/contextservice.yaml @@ -73,21 +73,3 @@ spec: protocol: TCP port: 8080 targetPort: 8080 ---- -apiVersion: v1 -kind: Service -metadata: - name: contextservice-public - labels: - app: contextservice -spec: - type: NodePort - selector: - app: contextservice - ports: - - name: http - protocol: TCP - port: 8080 - targetPort: 8080 - nodePort: 31808 ---- diff --git a/manifests/dbscanservingservice.yaml b/manifests/dbscanservingservice.yaml index ca8982db25f0fe94588418dc67787f63babc9826..32b22d00f794e23ebab98d0fb9c5030700ea239b 100644 --- a/manifests/dbscanservingservice.yaml +++ b/manifests/dbscanservingservice.yaml @@ -47,20 +47,3 @@ spec: - name: grpc port: 10006 targetPort: 10006 ---- -apiVersion: v1 -kind: Service -metadata: - name: dbscanservingservice-public - labels: - app: dbscanservingservice -spec: - type: NodePort - selector: - app: dbscanservingservice - ports: - - name: http - protocol: TCP - port: 10006 - targetPort: 10006 ---- diff --git a/manifests/monitoringservice.yaml b/manifests/monitoringservice.yaml index a908d7d64a4f8e478ba41acb50612dd0f40f0457..047a73a6c7e4cd8fabd3cf007ed8efc217205ca2 100644 --- a/manifests/monitoringservice.yaml +++ b/manifests/monitoringservice.yaml @@ -74,4 +74,3 @@ spec: protocol: TCP port: 8086 targetPort: 8086 ---- diff --git a/manifests/opticalattackmitigatorservice.yaml b/manifests/opticalattackmitigatorservice.yaml index 1cc03ba0575edcc66e1cf3f9b57fd161a763a696..5f676d09f18911233ea7f685d9a8cf9d6b9a20ed 100644 --- a/manifests/opticalattackmitigatorservice.yaml +++ b/manifests/opticalattackmitigatorservice.yaml @@ -47,20 +47,3 @@ spec: - name: grpc port: 10007 targetPort: 10007 ---- -apiVersion: v1 -kind: Service -metadata: - name: opticalattackmitigatorservice-public - labels: - app: opticalattackmitigatorservice -spec: - type: NodePort - selector: - app: opticalattackmitigatorservice - ports: - - name: http - protocol: TCP - port: 10007 - targetPort: 10007 ---- diff --git a/manifests/opticalcentralizedattackdetectorservice.yaml b/manifests/opticalcentralizedattackdetectorservice.yaml index d3ceb3ea49ac1421e14faf00dbb81b1fdaff5537..08e9b10c2d63f8a476c19b88e3d11695e5f64ccd 100644 --- a/manifests/opticalcentralizedattackdetectorservice.yaml +++ b/manifests/opticalcentralizedattackdetectorservice.yaml @@ -47,20 +47,3 @@ spec: - name: grpc port: 10005 targetPort: 10005 ---- -apiVersion: v1 -kind: Service -metadata: - name: opticalcentralizedattackdetectorservice-public - labels: - app: opticalcentralizedattackdetectorservice -spec: - type: NodePort - selector: - app: opticalcentralizedattackdetectorservice - ports: - - name: grpc - protocol: TCP - port: 10005 - targetPort: 10005 ---- diff --git a/manifests/webuiservice.yaml b/manifests/webuiservice.yaml index 4e71d43ef4ea6ed951a460f5cadc4cc78c42a1ea..c467a5cf22fe8c4e7ba975ce20b34d72b9fc9570 100644 --- a/manifests/webuiservice.yaml +++ b/manifests/webuiservice.yaml @@ -89,26 +89,3 @@ spec: - name: http port: 8004 targetPort: 8004 ---- -apiVersion: v1 -kind: Service -metadata: - name: webuiservice-public - labels: - app: webuiservice -spec: - type: NodePort - selector: - app: webuiservice - ports: - - name: http - protocol: TCP - port: 8004 - targetPort: 8004 - nodePort: 30800 - - name: grafana - protocol: TCP - port: 3000 - targetPort: 3000 - nodePort: 30300 ---- diff --git a/src/common/tests/EventTools.py b/src/common/tests/EventTools.py index c263be309632f33637cbfa02a8171cd0e591a886..bb300774be2f849011f0f8d47119ee8035a7a362 100644 --- a/src/common/tests/EventTools.py +++ b/src/common/tests/EventTools.py @@ -36,34 +36,52 @@ def event_to_key(event): entity_id = entity_id_selector_function(event) return (event_class_name, event.event.event_type, grpc_message_to_json_string(entity_id)) -def check_events(events_collector : EventsCollector, expected_events : List[Tuple[str, int, Dict]]): +def check_events( + events_collector : EventsCollector, expected_events : List[Tuple[str, int, Dict]], + fail_if_missing_events : bool = True, fail_if_unexpected_events : bool = False, + timeout_per_event = 1.0, max_wait_time = 30.0 +) -> None: expected_events_map = {} - num_events_expected = 0 + num_expected_events = 0 for event_classname, event_type_id, event_ids in expected_events: event_key = (event_classname, event_type_id, json.dumps(event_ids, sort_keys=True)) event_count = expected_events_map.get(event_key, 0) expected_events_map[event_key] = event_count + 1 - num_events_expected += 1 + num_expected_events += 1 - events_received = events_collector.get_events(block=True, count=num_events_expected) - for i, event_received in enumerate(events_received): + i, wait_time = 0, 0 + while num_expected_events > 0: + event_received = events_collector.get_event(block=True, timeout=timeout_per_event) + if event_received is None: + wait_time += timeout_per_event + if wait_time > max_wait_time: break + continue LOGGER.info('event_received[{:d}] = {:s}'.format(i, str(event_received))) event_key = event_to_key(event_received) event_count = expected_events_map.pop(event_key, 0) + if event_count > 0: num_expected_events -= 1 event_count -= 1 if event_count != 0: expected_events_map[event_key] = event_count - if len(expected_events_map) > 0: + if len(expected_events_map) == 0: + LOGGER.info('EventsCheck passed') + else: missing_events = {} unexpected_events = {} for event_key,event_count in expected_events_map.items(): if event_count > 0: - if (event_key[0] == 'DeviceEvent') and (event_key[1] == EVENT_UPDATE): - continue # sometimes device update events, specially with massive port updates, might be lost missing_events[event_key] = event_count if event_count < 0: unexpected_events[event_key] = -event_count - msg = ['EventCheck failed:'] - if len(missing_events) > 0: msg.append('missing_events={:s}'.format(str(missing_events))) - if len(unexpected_events) > 0: msg.append('unexpected_events={:s}'.format(str(unexpected_events))) - if len(msg) > 1: raise Exception(' '.join(msg)) + msg_except = ['EventCheck failed:'] + msg_logger = ['EventCheck:'] + if len(missing_events) > 0: + msg = 'missing_events={:s}'.format(str(missing_events)) + if fail_if_missing_events: msg_except.append(msg) + msg_logger.append(msg) + if len(unexpected_events) > 0: + msg = 'unexpected_events={:s}'.format(str(unexpected_events)) + if fail_if_unexpected_events: msg_except.append(msg) + msg_logger.append(msg) + if len(msg_logger) > 1: LOGGER.warning(' '.join(msg_logger)) + if len(msg_except) > 1: raise Exception(' '.join(msg_except)) diff --git a/src/context/client/EventsCollector.py b/src/context/client/EventsCollector.py index 3f0ce45fdd85dbf5be36f76c30126c356c3b270d..b58e8504bf74a0d82ceef774a78857acbe1a8b24 100644 --- a/src/context/client/EventsCollector.py +++ b/src/context/client/EventsCollector.py @@ -46,22 +46,23 @@ class EventsCollector: self._connection_thread.start() def get_event(self, block : bool = True, timeout : float = 0.1): - return self._events_queue.get(block=block, timeout=timeout) + try: + return self._events_queue.get(block=block, timeout=timeout) + except queue.Empty: # pylint: disable=catching-non-exception + return None def get_events(self, block : bool = True, timeout : float = 0.1, count : int = None): events = [] if count is None: while True: - try: - events.append(self.get_event(block=block, timeout=timeout)) - except queue.Empty: # pylint: disable=catching-non-exception - break + event = self.get_event(block=block, timeout=timeout) + if event is None: break + events.append(event) else: for _ in range(count): - try: - events.append(self.get_event(block=block, timeout=timeout)) - except queue.Empty: # pylint: disable=catching-non-exception - pass + event = self.get_event(block=block, timeout=timeout) + if event is None: continue + events.append(event) return sorted(events, key=lambda e: e.event.timestamp) def stop(self): diff --git a/src/opticalcentralizedattackdetector/Config.py b/src/opticalcentralizedattackdetector/Config.py index 5a6b7aa5651566fb2305f08baec7c6f33872fd36..41d802dd4005e0b862520f739e292952709e1273 100644 --- a/src/opticalcentralizedattackdetector/Config.py +++ b/src/opticalcentralizedattackdetector/Config.py @@ -11,7 +11,7 @@ GRPC_GRACE_PERIOD = 60 # service settings MONITORING_INTERVAL = 2 # monitoring interval in seconds #TODO: adjust the addresses below for the specific case -MONITORING_SERVICE_ADDRESS = 'monitoring' # address/name of the monitoring service +MONITORING_SERVICE_ADDRESS = 'monitoringservice' # address/name of the monitoring service # MONITORING_SERVICE_ADDRESS = '10.99.41.20' # address/name of the monitoring service CONTEXT_SERVICE_ADDRESS = 'contextservice' # address/name of the monitoring service # CONTEXT_SERVICE_ADDRESS = '10.107.199.65' # address/name of the monitoring service diff --git a/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py b/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py index eb1914fc301cfd759cf55910634f8023eec442ce..894f68b3e7470761ce427f8cb830f4e54f59bbdd 100644 --- a/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py +++ b/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py @@ -147,6 +147,10 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler): '/interface[{:s}]/subinterface[{:d}]'.format(endpoint_uuid, sub_interface_index), { 'name': endpoint_uuid, 'index': sub_interface_index, }), + config_rule_delete( + '/interface[{:s}]'.format(endpoint_uuid), { + 'name': endpoint_uuid, + }), config_rule_delete( '/network_instance[{:s}]'.format(network_instance_name), { 'name': network_instance_name diff --git a/src/tests/ofc22/expose_services.yaml b/src/tests/ofc22/expose_services.yaml index 4f553e2d693f105f5902834636e76233b6c37070..0bd049ef80ebab2a087765853706e2c219377203 100644 --- a/src/tests/ofc22/expose_services.yaml +++ b/src/tests/ofc22/expose_services.yaml @@ -20,6 +20,11 @@ spec: port: 6379 targetPort: 6379 nodePort: 30637 + - name: http + protocol: TCP + port: 8080 + targetPort: 8080 + nodePort: 31808 --- apiVersion: v1 kind: Service @@ -55,3 +60,39 @@ spec: targetPort: 8086 nodePort: 30886 --- +apiVersion: v1 +kind: Service +metadata: + name: computeservice-public +spec: + type: NodePort + selector: + app: computeservice + ports: + - name: http + protocol: TCP + port: 8080 + targetPort: 8080 + nodePort: 30808 +--- +apiVersion: v1 +kind: Service +metadata: + name: webuiservice-public + labels: + app: webuiservice +spec: + type: NodePort + selector: + app: webuiservice + ports: + - name: http + protocol: TCP + port: 8004 + targetPort: 8004 + nodePort: 30800 + - name: grafana + protocol: TCP + port: 3000 + targetPort: 3000 + nodePort: 30300 diff --git a/src/tests/ofc22/tests/Objects.py b/src/tests/ofc22/tests/Objects.py index 00b4f4f1f33eefc1b9fb5d61a227d34710eda498..fe20575a7b96315d6a47d8e0ef84a4c0b92ea759 100644 --- a/src/tests/ofc22/tests/Objects.py +++ b/src/tests/ofc22/tests/Objects.py @@ -47,7 +47,7 @@ except ImportError: DEVICE_O1_ADDRESS = '0.0.0.0' DEVICE_O1_PORT = 4900 -#USE_REAL_DEVICES = False # Force to use emulated devices +#USE_REAL_DEVICES = False # Uncomment to force to use emulated devices def json_endpoint_ids(device_id : Dict, endpoint_descriptors : List[Tuple[str, str, List[int]]]): return [ diff --git a/src/tests/ofc22/tests/test_functional_bootstrap.py b/src/tests/ofc22/tests/test_functional_bootstrap.py index d1ef2f6d8655e0badf8b265ad91e98569ca93579..a65b60378f4ca3eeed3d593ce19af9261d70a1d1 100644 --- a/src/tests/ofc22/tests/test_functional_bootstrap.py +++ b/src/tests/ofc22/tests/test_functional_bootstrap.py @@ -115,14 +115,14 @@ def test_devices_bootstraping( expected_events.extend([ # Device creation, update for automation to start the device ('DeviceEvent', EVENT_CREATE, json_device_id(device_uuid)), - ('DeviceEvent', EVENT_UPDATE, json_device_id(device_uuid)), + #('DeviceEvent', EVENT_UPDATE, json_device_id(device_uuid)), ]) - response = context_client.GetDevice(response) - for endpoint in response.device_endpoints: - for _ in endpoint.kpi_sample_types: - # Monitoring configures monitoring for endpoint - expected_events.append(('DeviceEvent', EVENT_UPDATE, json_device_id(device_uuid))) + #response = context_client.GetDevice(response) + #for endpoint in response.device_endpoints: + # for _ in endpoint.kpi_sample_types: + # # Monitoring configures monitoring for endpoint + # expected_events.append(('DeviceEvent', EVENT_UPDATE, json_device_id(device_uuid))) # ----- Validate Collected Events ---------------------------------------------------------------------------------- check_events(events_collector, expected_events)