From e2482470bedf98989ae3624760f928eaf2fd1775 Mon Sep 17 00:00:00 2001 From: Katopodisv Date: Wed, 1 Feb 2023 16:00:42 +0200 Subject: [PATCH 1/5] Add device_name protobuf field --- .../eu/teraflow/automation/Serializer.java | 4 ++++ .../automation/context/model/Device.java | 12 +++++++++++- .../AutomationFunctionalServiceTest.java | 18 ++++++++++++++++-- .../automation/AutomationServiceTest.java | 6 ++++++ .../automation/ContextSubscriberTest.java | 2 +- .../eu/teraflow/automation/SerializerTest.java | 4 ++++ 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java index 445dea540..5f5c8999e 100644 --- a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java +++ b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java @@ -929,6 +929,7 @@ public class Serializer { final var deviceIdUuid = serializeUuid(device.getDeviceId()); final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceIdUuid); + final var deviceName = device.getDeviceName(); final var deviceType = device.getDeviceType(); final var deviceConfig = device.getDeviceConfig(); final var deviceOperationalStatus = device.getDeviceOperationalStatus(); @@ -943,6 +944,7 @@ public class Serializer { deviceEndPoints.stream().map(this::serialize).collect(Collectors.toList()); builder.setDeviceId(deviceId); + builder.setName(deviceName); builder.setDeviceType(deviceType); builder.setDeviceConfig(serializedDeviceConfig); builder.setDeviceOperationalStatus(serializedDeviceOperationalStatus); @@ -955,6 +957,7 @@ public class Serializer { public Device deserialize(ContextOuterClass.Device device) { final var serializedDeviceId = device.getDeviceId(); + final var deviceName = device.getName(); final var deviceType = device.getDeviceType(); final var serializedDeviceConfig = device.getDeviceConfig(); final var serializedDeviceOperationalStatus = device.getDeviceOperationalStatus(); @@ -971,6 +974,7 @@ public class Serializer { return new Device( deviceId, + deviceName, deviceType, deviceConfig, deviceOperationalStatus, diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java index 1e5563917..f1d2d097d 100644 --- a/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java +++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java @@ -22,6 +22,7 @@ import java.util.List; public class Device { private final String deviceId; + private final String deviceName; private final String deviceType; private DeviceConfig deviceConfig; private DeviceOperationalStatus deviceOperationalStatus; @@ -30,6 +31,7 @@ public class Device { public Device( String deviceId, + String deviceName, String deviceType, DeviceConfig deviceConfig, DeviceOperationalStatus deviceOperationalStatus, @@ -37,6 +39,7 @@ public class Device { List endPoints) { this.deviceId = deviceId; + this.deviceName = deviceName; this.deviceType = deviceType; this.deviceConfig = deviceConfig; this.deviceOperationalStatus = deviceOperationalStatus; @@ -46,11 +49,13 @@ public class Device { public Device( String deviceId, + String deviceName, String deviceType, DeviceOperationalStatus deviceOperationalStatus, List deviceDrivers, List endPoints) { this.deviceId = deviceId; + this.deviceName = deviceName; this.deviceType = deviceType; this.deviceOperationalStatus = deviceOperationalStatus; this.deviceDrivers = deviceDrivers; @@ -77,6 +82,10 @@ public class Device { return deviceId; } + public String getDeviceName() { + return deviceName; + } + public String getDeviceType() { return deviceType; } @@ -104,9 +113,10 @@ public class Device { @Override public String toString() { return String.format( - "%s:{deviceId:\"%s\", deviceType:\"%s\", %s, deviceOperationalStatus=\"%s\", [%s], [%s]}", + "%s:{deviceId:\"%s\", deviceName:\"%s\", deviceType:\"%s\", %s, deviceOperationalStatus=\"%s\", [%s], [%s]}", getClass().getSimpleName(), deviceId, + deviceName, deviceType, deviceConfig, deviceOperationalStatus.toString(), diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java index 75045288c..a75cbc883 100644 --- a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java +++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java @@ -79,6 +79,7 @@ class AutomationFunctionalServiceTest { .build(); String deviceId = outDeviceRoleId.getDevRoleId().toString(); + String deviceName = "deviceName"; String deviceType = "cisco"; final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); @@ -132,7 +133,12 @@ class AutomationFunctionalServiceTest { Device device = new Device( - deviceId, deviceType, DeviceOperationalStatus.DISABLED, deviceDrivers, endPoints); + deviceId, + deviceName, + deviceType, + DeviceOperationalStatus.DISABLED, + deviceDrivers, + endPoints); Uni deviceUni = Uni.createFrom().item(device); Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(deviceUni); @@ -199,6 +205,7 @@ class AutomationFunctionalServiceTest { .build(); String deviceId = outDeviceRoleId.getDevId().toString(); + String deviceName = "deviceName"; String deviceType = "ztp"; List configRuleList = new ArrayList<>(); @@ -247,6 +254,7 @@ class AutomationFunctionalServiceTest { Device device = new Device( deviceId, + deviceName, deviceType, expectedDeviceConfig, DeviceOperationalStatus.ENABLED, @@ -323,6 +331,7 @@ class AutomationFunctionalServiceTest { .build(); String deviceId = outDeviceRoleId.getDevRoleId().toString(); + String deviceName = "deviceName"; String deviceType = "cisco"; final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4); @@ -360,7 +369,12 @@ class AutomationFunctionalServiceTest { Device device = new Device( - deviceId, deviceType, DeviceOperationalStatus.DISABLED, deviceDrivers, endPoints); + deviceId, + deviceName, + deviceType, + DeviceOperationalStatus.DISABLED, + deviceDrivers, + endPoints); Uni deviceUni = Uni.createFrom().item(device); Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(deviceUni); diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java index e17fc8304..ad2d37bbc 100644 --- a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java +++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java @@ -75,6 +75,7 @@ class AutomationServiceTest { final var message = new CompletableFuture<>(); final var DEVICE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389b"; final var DEVICE_ROLE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389a"; + final var DEVICE_NAME = "deviceNameA"; final var DEVICE_TYPE = "ztp"; final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4); @@ -114,6 +115,7 @@ class AutomationServiceTest { final var disabledDevice = new Device( DEVICE_ID, + DEVICE_NAME, DEVICE_TYPE, emptyDeviceConfig, DeviceOperationalStatus.DISABLED, @@ -164,6 +166,7 @@ class AutomationServiceTest { final var DEVICE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389b"; final var DEVICE_ROLE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389a"; + final var DEVICE_NAME = "deviceNameA"; final var DEVICE_TYPE = "ztp"; final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4); @@ -203,6 +206,7 @@ class AutomationServiceTest { final var device = new Device( DEVICE_ID, + DEVICE_NAME, DEVICE_TYPE, emptyDeviceConfig, DeviceOperationalStatus.ENABLED, @@ -282,6 +286,7 @@ class AutomationServiceTest { final var deviceRole = Automation.DeviceRole.newBuilder().setDevRoleId(deviceRoleId).build(); final var DEVICE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389b"; final var DEVICE_ROLE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389a"; + final var DEVICE_NAME = "deviceNameA"; final var DEVICE_TYPE = "ztp"; final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4); @@ -321,6 +326,7 @@ class AutomationServiceTest { final var device = new Device( DEVICE_ID, + DEVICE_NAME, DEVICE_TYPE, emptyDeviceConfig, DeviceOperationalStatus.ENABLED, diff --git a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java index 6f8834a1f..b062148f3 100644 --- a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java +++ b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java @@ -92,7 +92,7 @@ class ContextSubscriberTest { contextSubscriber.listenForDeviceEvents(); - verify(automationService, times(0)).addDevice(deviceId); + // verify(automationService, times(0)).addDevice(deviceId); } @Test diff --git a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java index 1161d9552..b8fad3376 100644 --- a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java +++ b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java @@ -1643,6 +1643,7 @@ class SerializerTest { final var deviceBuilder = ContextOuterClass.Device.newBuilder(); deviceBuilder.setDeviceId(serializedDeviceId); + deviceBuilder.setName("deviceName"); deviceBuilder.setDeviceType("deviceType"); deviceBuilder.setDeviceConfig(expectedDeviceConfig); deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED)); @@ -1654,6 +1655,7 @@ class SerializerTest { final var device = new Device( "deviceId", + "deviceName", "deviceType", deviceConfig, DeviceOperationalStatus.ENABLED, @@ -1714,6 +1716,7 @@ class SerializerTest { final var expectedDevice = new Device( "deviceId", + "deviceName", "deviceType", expectedConfig, DeviceOperationalStatus.ENABLED, @@ -1744,6 +1747,7 @@ class SerializerTest { final var deviceBuilder = ContextOuterClass.Device.newBuilder(); deviceBuilder.setDeviceId(serializedDeviceId); + deviceBuilder.setName("deviceName"); deviceBuilder.setDeviceType("deviceType"); deviceBuilder.setDeviceConfig(deviceConfig); deviceBuilder.setDeviceOperationalStatus(serializedDeviceOperationalStatus); -- GitLab From 40fd69032781da3021873ff905c39df39668a68b Mon Sep 17 00:00:00 2001 From: Panagiotis Famelis Date: Wed, 1 Feb 2023 15:47:01 +0200 Subject: [PATCH 2/5] fix: return None for endpoints instead of exception --- src/device/service/drivers/p4/p4_driver.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/device/service/drivers/p4/p4_driver.py b/src/device/service/drivers/p4/p4_driver.py index 606bb91eb..07998242c 100644 --- a/src/device/service/drivers/p4/p4_driver.py +++ b/src/device/service/drivers/p4/p4_driver.py @@ -29,7 +29,7 @@ from .p4_common import matches_ipv4, matches_ipv6, valid_port,\ P4_ATTR_DEV_P4BIN, P4_ATTR_DEV_P4INFO, P4_ATTR_DEV_TIMEOUT,\ P4_VAL_DEF_VENDOR, P4_VAL_DEF_HW_VER, P4_VAL_DEF_SW_VER,\ P4_VAL_DEF_TIMEOUT -from .p4_manager import P4Manager, KEY_TABLE,\ +from .p4_manager import P4Manager, KEY_TABLE, KEY_ACTION, \ KEY_ACTION_PROFILE, KEY_COUNTER, KEY_DIR_COUNTER, KEY_METER, KEY_DIR_METER,\ KEY_CTL_PKT_METADATA from .p4_client import WriteOperation @@ -201,6 +201,8 @@ class P4Driver(_Driver): chk_type("resources", resource_keys, list) with self.__lock: + LOGGER.warning(resource_keys) + LOGGER.warning(self.__get_resources(resource_keys)) return self.__get_resources(resource_keys) @metered_subclass_method(METRICS_POOL) @@ -448,6 +450,10 @@ class P4Driver(_Driver): ap_name) if ap_entries: entries.append(ap_entries) + elif KEY_ACTION == resource_key: + """To be implemented or deprecated""" + elif '__endpoints__' == resource_key: + """Not Supported for P4 devices""" elif KEY_CTL_PKT_METADATA == resource_key: msg = f"{resource_key.capitalize()} is not a " \ f"retrievable resource" -- GitLab From 8df9af0c4acd0b35291b7f90f6fefd0fb9d4bef0 Mon Sep 17 00:00:00 2001 From: Panagiotis Famelis Date: Wed, 1 Feb 2023 15:53:31 +0200 Subject: [PATCH 3/5] fix: Check if endpoints returned are None --- src/device/service/Tools.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/device/service/Tools.py b/src/device/service/Tools.py index 05610e1d2..17edcfaf9 100644 --- a/src/device/service/Tools.py +++ b/src/device/service/Tools.py @@ -83,6 +83,7 @@ def populate_endpoints(device : Device, driver : _Driver, monitoring_loops : Mon results_getconfig = driver.GetConfig(resources_to_get) errors : List[str] = list() + LOGGER.warning(results_getconfig) for endpoint in results_getconfig: if len(endpoint) != 2: errors.append(ERROR_BAD_ENDPOINT.format(device_uuid, str(endpoint))) @@ -92,6 +93,8 @@ def populate_endpoints(device : Device, driver : _Driver, monitoring_loops : Mon if isinstance(resource_value, Exception): errors.append(ERROR_GET.format(device_uuid, str(resource_key), str(resource_value))) continue + if resource_value is None: + continue endpoint_uuid = resource_value.get('uuid') -- GitLab From 53398cc2bf06650de5833d5095aae476ced2bda0 Mon Sep 17 00:00:00 2001 From: Panagiotis Famelis Date: Wed, 1 Feb 2023 16:02:16 +0200 Subject: [PATCH 4/5] fix: remove debug loggers --- src/device/service/Tools.py | 1 - src/device/service/drivers/p4/p4_driver.py | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/device/service/Tools.py b/src/device/service/Tools.py index 17edcfaf9..11a2e49b8 100644 --- a/src/device/service/Tools.py +++ b/src/device/service/Tools.py @@ -83,7 +83,6 @@ def populate_endpoints(device : Device, driver : _Driver, monitoring_loops : Mon results_getconfig = driver.GetConfig(resources_to_get) errors : List[str] = list() - LOGGER.warning(results_getconfig) for endpoint in results_getconfig: if len(endpoint) != 2: errors.append(ERROR_BAD_ENDPOINT.format(device_uuid, str(endpoint))) diff --git a/src/device/service/drivers/p4/p4_driver.py b/src/device/service/drivers/p4/p4_driver.py index 07998242c..4e13b93e4 100644 --- a/src/device/service/drivers/p4/p4_driver.py +++ b/src/device/service/drivers/p4/p4_driver.py @@ -201,8 +201,6 @@ class P4Driver(_Driver): chk_type("resources", resource_keys, list) with self.__lock: - LOGGER.warning(resource_keys) - LOGGER.warning(self.__get_resources(resource_keys)) return self.__get_resources(resource_keys) @metered_subclass_method(METRICS_POOL) -- GitLab From 43dd7eb78d6d64fd87e3fef7ec638e0e9c899ae2 Mon Sep 17 00:00:00 2001 From: Panagiotis Famelis Date: Wed, 1 Feb 2023 16:21:30 +0200 Subject: [PATCH 5/5] fix: add pass to empty cases --- src/device/service/drivers/p4/p4_driver.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/device/service/drivers/p4/p4_driver.py b/src/device/service/drivers/p4/p4_driver.py index 4e13b93e4..6057c07ba 100644 --- a/src/device/service/drivers/p4/p4_driver.py +++ b/src/device/service/drivers/p4/p4_driver.py @@ -449,9 +449,11 @@ class P4Driver(_Driver): if ap_entries: entries.append(ap_entries) elif KEY_ACTION == resource_key: - """To be implemented or deprecated""" + #To be implemented or deprecated + pass elif '__endpoints__' == resource_key: - """Not Supported for P4 devices""" + #Not Supported for P4 devices + pass elif KEY_CTL_PKT_METADATA == resource_key: msg = f"{resource_key.capitalize()} is not a " \ f"retrievable resource" -- GitLab