diff --git a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java index 9970852124fb0a5334087ef703a6b0fb5b3ef9a8..9e536450873fe9d6e31f66dd71088ae401fce64e 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java +++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java @@ -56,6 +56,7 @@ import eu.teraflow.policy.context.model.Device; import eu.teraflow.policy.context.model.DeviceConfig; import eu.teraflow.policy.context.model.DeviceDriverEnum; import eu.teraflow.policy.context.model.DeviceOperationalStatus; +import eu.teraflow.policy.context.model.Empty; import eu.teraflow.policy.context.model.EndPoint; import eu.teraflow.policy.context.model.EndPointId; import eu.teraflow.policy.context.model.Event; @@ -95,11 +96,15 @@ import eu.teraflow.policy.monitoring.model.KpiValue; import eu.teraflow.policy.monitoring.model.KpiValueRange; import eu.teraflow.policy.monitoring.model.StringKpiValue; import eu.teraflow.policy.monitoring.model.SubsDescriptor; +import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; import javax.inject.Singleton; import kpi_sample_types.KpiSampleTypes; import monitoring.Monitoring; +import monitoring.Monitoring.AlarmID; import monitoring.Monitoring.KpiId; +import monitoring.Monitoring.SubscriptionID; import policy.Policy; import policy.Policy.PolicyRuleId; import policy.PolicyAction; @@ -1538,6 +1543,21 @@ public class Serializer { return new KpiValueRange(minKpiValue, maxKpiValue); } + public AlarmID serializeAlarmId(String alarmId) { + final var builder = Monitoring.AlarmID.newBuilder(); + + final var serializedAlarmIdUuid = serializeUuid(alarmId); + builder.setAlarmId(serializedAlarmIdUuid); + + return builder.build(); + } + + public String deserialize(AlarmID serializedAlarmId) { + final var serializedAlarmIdUuid = serializedAlarmId.getAlarmId(); + + return deserialize(serializedAlarmIdUuid); + } + public Monitoring.AlarmDescriptor serialize(AlarmDescriptor alarmDescriptor) { final var builder = Monitoring.AlarmDescriptor.newBuilder(); @@ -1637,6 +1657,21 @@ public class Serializer { return new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate); } + public SubscriptionID serializeSubscriptionIdId(String subscriptionId) { + final var builder = Monitoring.SubscriptionID.newBuilder(); + + final var serializedSubscriptionIdUuid = serializeUuid(subscriptionId); + builder.setSubsId(serializedSubscriptionIdUuid); + + return builder.build(); + } + + public String deserialize(SubscriptionID serializedSubscriptionId) { + final var serializedSubscriptionIdUuid = serializedSubscriptionId.getSubsId(); + + return deserialize(serializedSubscriptionIdUuid); + } + public PolicyCondition.PolicyRuleCondition serialize(PolicyRuleCondition policyRuleCondition) { final var builder = PolicyCondition.PolicyRuleCondition.newBuilder(); @@ -1908,6 +1943,28 @@ public class Serializer { return new Kpi(kpiId, timestamp, kpiValue); } + public List<Monitoring.Kpi> serialize(List<Kpi> kpis) { + List<Monitoring.Kpi> serializedKpis = new ArrayList<>(); + + for (Kpi kpi : kpis) { + final var serializedKpi = serialize(kpi); + + serializedKpis.add(serializedKpi); + } + return serializedKpis; + } + + public List<Kpi> deserialize(List<Monitoring.Kpi> serializedKpis) { + List<Kpi> kpis = new ArrayList<>(); + + for (Monitoring.Kpi serializedKpi : serializedKpis) { + final var kpi = deserialize(serializedKpi); + + kpis.add(kpi); + } + return kpis; + } + public Monitoring.KpiDescriptor serialize(KpiDescriptor kpiDescriptor) { final var builder = Monitoring.KpiDescriptor.newBuilder(); @@ -2130,6 +2187,17 @@ public class Serializer { deviceEndPoints); } + public ContextOuterClass.Empty serializeEmpty(Empty empty) { + + final var builder = ContextOuterClass.Empty.newBuilder(); + + return builder.build(); + } + + public Empty deserializeEmpty(ContextOuterClass.Empty serializedEmpty) { + return new Empty(); + } + public Uuid serializeUuid(String uuid) { return Uuid.newBuilder().setUuid(uuid).build(); } diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java new file mode 100644 index 0000000000000000000000000000000000000000..d19dd9776e9688999007761e969e5c1b53d37176 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java @@ -0,0 +1,24 @@ +/* +* 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. +*/ + +package eu.teraflow.policy.context.model; + +public class Empty { + + public Empty() { + // Empty constructor to represent the Empty rpc message of context service + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java index e8c582013366c993992ff3fd504bb9b2c7578c17..40e8ce80bacc02cca70a730f0f5a618e761d597d 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java @@ -57,6 +57,7 @@ import eu.teraflow.policy.context.model.Device; import eu.teraflow.policy.context.model.DeviceConfig; import eu.teraflow.policy.context.model.DeviceDriverEnum; import eu.teraflow.policy.context.model.DeviceOperationalStatus; +import eu.teraflow.policy.context.model.Empty; import eu.teraflow.policy.context.model.EndPoint; import eu.teraflow.policy.context.model.EndPointId; import eu.teraflow.policy.context.model.Event; @@ -2317,6 +2318,35 @@ class SerializerTest { assertThat(numericalOperator).isEqualTo(expectedNumericalOperator); } + @Test + void shouldSerializeSubscriptionId() { + final var subscriptionId = "subscriptionId"; + + final var subscriptionIdUuid = serializer.serializeUuid(subscriptionId); + + final var expectedSubscriptionId = + Monitoring.SubscriptionID.newBuilder().setSubsId(subscriptionIdUuid).build(); + + final var serializedSubscriptionId = serializer.serializeSubscriptionIdId(subscriptionId); + + assertThat(serializedSubscriptionId) + .usingRecursiveComparison() + .isEqualTo(expectedSubscriptionId); + } + + @Test + void shouldDeserializeSubscriptionId() { + final var expectedSubscriptionId = "expectedSubscriptionId"; + + final var serializedSubscriptionIdUuid = serializer.serializeUuid(expectedSubscriptionId); + final var serializedSubscriptionId = + Monitoring.SubscriptionID.newBuilder().setSubsId(serializedSubscriptionIdUuid).build(); + + final var subscriptionId = serializer.deserialize(serializedSubscriptionId); + + assertThat(subscriptionId).isEqualTo(expectedSubscriptionId); + } + @ParameterizedTest @MethodSource("provideNumericalOperator") void shouldSerializePolicyRuleConditionGivenMultipleNumericalOperators( @@ -2367,7 +2397,7 @@ class SerializerTest { @ParameterizedTest @MethodSource("provideKpiValues") - void shouldSerializeKpiValues(KpiValue kpiValue, Monitoring.KpiValue expectedKpiValue) { + void shouldSerializeKpiValues(KpiValue<?> kpiValue, Monitoring.KpiValue expectedKpiValue) { final var serializedKpiValue = serializer.serialize(kpiValue); assertThat(serializedKpiValue).isEqualTo(expectedKpiValue); @@ -2376,7 +2406,7 @@ class SerializerTest { @ParameterizedTest @MethodSource("provideKpiValues") void shouldDeserializeKpiValues( - KpiValue expectedKpiValue, Monitoring.KpiValue serializedKpiValue) { + KpiValue<?> expectedKpiValue, Monitoring.KpiValue serializedKpiValue) { final var kpiValue = serializer.deserialize(serializedKpiValue); assertThat(kpiValue).usingRecursiveComparison().isEqualTo(expectedKpiValue); @@ -2556,6 +2586,32 @@ class SerializerTest { .isEqualTo(expectedKpiValueRange.getKpiMaxValue()); } + @Test + void shouldSerializeAlarmId() { + final var alarmId = "alarmId"; + + final var alarmIdUuid = serializer.serializeUuid(alarmId); + + final var expectedAlarmId = Monitoring.AlarmID.newBuilder().setAlarmId(alarmIdUuid).build(); + + final var serializedAlarmId = serializer.serializeAlarmId(alarmId); + + assertThat(serializedAlarmId).usingRecursiveComparison().isEqualTo(expectedAlarmId); + } + + @Test + void shouldDeserializeAlarmId() { + final var expectedAlarmId = "expectedAlarmId"; + + final var serializedAlarmIdUuid = serializer.serializeUuid(expectedAlarmId); + final var serializedAlarmId = + Monitoring.KpiId.newBuilder().setKpiId(serializedAlarmIdUuid).build(); + + final var alarmId = serializer.deserialize(serializedAlarmId); + + assertThat(alarmId).isEqualTo(expectedAlarmId); + } + @Test void shouldSerializeAlarmDescriptor() { final var alarmDescription = "alarmDescription"; @@ -3091,6 +3147,84 @@ class SerializerTest { assertThat(kpi).usingRecursiveComparison().isEqualTo(expectedKpi); } + @Test + void shouldSerializeKpisList() { + final var expectedKpiIdA = "expectedKpiIdA"; + final var expectedTimestampA = "expectedTimestampA"; + final var expectedKpiValueA = new FloatKpiValue(643.45f); + final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA); + final var serializedKpiValueA = serializer.serialize(expectedKpiValueA); + final var kpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA); + + final var expectedKpiIdB = "expectedKpiIdB"; + final var expectedTimestampB = "expectedTimestampB"; + final var expectedKpiValueB = new IntegerKpiValue(32); + final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB); + final var serializedKpiValueB = serializer.serialize(expectedKpiValueB); + final var kpiB = new Kpi(expectedKpiIdB, expectedTimestampB, expectedKpiValueB); + + final var kpis = List.of(kpiA, kpiB); + + final var expectedKpiA = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdA) + .setTimestamp(expectedTimestampA) + .setKpiValue(serializedKpiValueA) + .build(); + + final var expectedKpiB = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdB) + .setTimestamp(expectedTimestampB) + .setKpiValue(serializedKpiValueB) + .build(); + + final var expectedKpis = List.of(expectedKpiA, expectedKpiB); + + final var serializedKpis = serializer.serialize(kpis); + + assertThat(serializedKpis).usingRecursiveComparison().isEqualTo(expectedKpis); + } + + @Test + void shouldDeserializeKpisList() { + final var expectedKpiIdA = "expectedKpiIdA"; + final var expectedTimestampA = "expectedTimestampA"; + final var expectedKpiValueA = new FloatKpiValue(643.45f); + final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA); + final var serializedKpiValueA = serializer.serialize(expectedKpiValueA); + final var expectedKpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA); + + final var expectedKpiIdB = "expectedKpiIdB"; + final var expectedTimestampB = "expectedTimestampB"; + final var expectedKpiValueB = new IntegerKpiValue(32); + final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB); + final var serializedKpiValueB = serializer.serialize(expectedKpiValueB); + final var expectedKpiB = new Kpi(expectedKpiIdB, expectedTimestampB, expectedKpiValueB); + + final var expectedKpis = List.of(expectedKpiA, expectedKpiB); + + final var serializedKpiA = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdA) + .setTimestamp(expectedTimestampA) + .setKpiValue(serializedKpiValueA) + .build(); + + final var serializedKpiB = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdB) + .setTimestamp(expectedTimestampB) + .setKpiValue(serializedKpiValueB) + .build(); + + final var serializedKpis = List.of(serializedKpiA, serializedKpiB); + + final var kpis = serializer.deserialize(serializedKpis); + + assertThat(kpis).usingRecursiveComparison().isEqualTo(expectedKpis); + } + @Test void shouldSerializeKpiDescriptor() { final var expectedKpiDescription = "expectedKpiDescription"; @@ -3581,6 +3715,27 @@ class SerializerTest { assertThat(device).usingRecursiveComparison().isEqualTo(expectedDevice); } + @Test + void shouldSerializeEmpty() { + final var empty = new Empty(); + final var expectedEmpty = ContextOuterClass.Empty.newBuilder().build(); + + final var serializeEmpty = serializer.serializeEmpty(empty); + + assertThat(serializeEmpty).isEqualTo(expectedEmpty); + } + + @Test + void shouldDeserializeEmpty() { + final var expectedEmpty = new Empty(); + + final var serializedEmpty = serializer.serializeEmpty(expectedEmpty); + + final var empty = serializer.deserializeEmpty(serializedEmpty); + + assertThat(empty).usingRecursiveComparison().isEqualTo(expectedEmpty); + } + @Test void shouldSerializeUuid() { final var expectedUuid = "uuid";