diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java index 057906d6528a165bdd9c958e8339ac8f5d59cc25..5967ab7a7ad4c820cdb7b3e6bbcc42c3ffb560bd 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java @@ -17,8 +17,25 @@ package eu.teraflow.policy; import static org.assertj.core.api.Assertions.assertThat; - +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +import eu.teraflow.policy.context.ContextService; +import eu.teraflow.policy.context.model.ConfigActionEnum; +import eu.teraflow.policy.context.model.ConfigRule; +import eu.teraflow.policy.context.model.ConfigRuleCustom; +import eu.teraflow.policy.context.model.ConfigRuleTypeCustom; +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.EndPoint.EndPointBuilder; +import eu.teraflow.policy.context.model.EndPointId; +import eu.teraflow.policy.context.model.Location; +import eu.teraflow.policy.context.model.LocationTypeRegion; import eu.teraflow.policy.context.model.ServiceId; +import eu.teraflow.policy.context.model.TopologyId; +import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType; import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; import eu.teraflow.policy.model.PolicyRuleAction; @@ -32,13 +49,103 @@ import eu.teraflow.policy.model.PolicyRuleStateEnum; import eu.teraflow.policy.monitoring.model.IntegerKpiValue; import eu.teraflow.policy.monitoring.model.KpiValue; import io.quarkus.test.junit.QuarkusTest; +import io.smallrye.mutiny.Uni; import java.util.Collections; import java.util.List; import java.util.UUID; +import javax.inject.Inject; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; @QuarkusTest class PolicyRuleServiceValidationTest { + @Inject Serializer serializer; + + private MutinyContextServiceWrapper mutinyContextServiceStub; + private ContextService contextService; + private PolicyRuleConditionValidator policyRuleConditionValidator; + + @BeforeEach + void setUp() { + contextService = Mockito.mock(ContextService.class); + policyRuleConditionValidator = new PolicyRuleConditionValidator(contextService); + mutinyContextServiceStub = Mockito.mock(MutinyContextServiceWrapper.class); + } + + @Test + void testIsDeviceIdValid_grpc() { + String deviceId = "deviceIdGrpc"; + final Device device = createDevice(deviceId); + final var serializedDevice = serializer.serialize(device); + final var serializedDeviceId = serializedDevice.getDeviceId(); + + when(mutinyContextServiceStub.getDevice(serializedDeviceId)) + .thenReturn(Uni.createFrom().item(serializedDevice)); + + Boolean result = policyRuleConditionValidator.isDeviceIdValid(deviceId).await().indefinitely(); + + assertThat(result).isEqualTo(true); + } + + @Test + void testIsDeviceIdValidReturnsTrue() { + String deviceId = "deviceId"; + Device device = createDevice(deviceId); + + when(contextService.getDevice(anyString())).thenReturn(Uni.createFrom().item(device)); + + Boolean result = policyRuleConditionValidator.isDeviceIdValid(deviceId).await().indefinitely(); + + assertThat(result).isEqualTo(true); + } + + @Test + void testIsDeviceIdValidReturnsFalse() { + String deviceId = "deviceId"; + + when(contextService.getDevice(anyString())) + .thenReturn(Uni.createFrom().failure(new RuntimeException("Failure"))); + + Boolean result = policyRuleConditionValidator.isDeviceIdValid(deviceId).await().indefinitely(); + + assertThat(result).isEqualTo(false); + } + + Device createDevice(String deviceId) { + + final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); + final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA); + final var deviceConfig = + new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA))); + + final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4); + + final var expectedTopologyIdB = new TopologyId("contextIdB", "idB"); + final var expectedDeviceIdB = "expectedDeviceIdB"; + final var expectedIdB = "expectedIdB"; + final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB); + + final var endPointTypeB = "endPointTypeB"; + final var kpiSampleTypesB = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + final var locationTypeRegionB = new LocationTypeRegion("ATH"); + final var locationB = new Location(locationTypeRegionB); + final var endPointB = + new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB) + .location(locationB) + .build(); + + final var endPoints = List.of(endPointB); + + return new Device( + deviceId, + "deviceType", + deviceConfig, + DeviceOperationalStatus.ENABLED, + deviceDrivers, + endPoints); + } private List<PolicyRuleCondition> createPolicyRuleConditions( String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {