Loading src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java +5 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package eu.teraflow.policy.model; import static com.google.common.base.Preconditions.checkNotNull; import eu.teraflow.policy.common.Util; import eu.teraflow.policy.context.model.ServiceId; import java.util.List; Loading @@ -28,8 +30,11 @@ public class PolicyRuleService { public PolicyRuleService( PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List<String> deviceIds) { checkNotNull(policyRuleBasic, "PolicyRuleBasic must not be null."); this.policyRuleBasic = policyRuleBasic; checkNotNull(serviceId, "Service Id must not be null."); this.serviceId = serviceId; checkNotNull(deviceIds, "Device Ids must not be null."); this.deviceIds = deviceIds; } Loading src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ class PolicyRuleBasicValidationTest { } @Test void shouldThrowIllegalArgumentExceptionGivenNullPolicyRuleId() { void shouldThrowNullPointerExceptionGivenNullPolicyRuleId() { final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), Loading src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java 0 → 100644 +222 −0 Original line number Diff line number Diff line /* * 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; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import eu.teraflow.policy.context.model.ServiceId; import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; import eu.teraflow.policy.model.PolicyRuleAction; import eu.teraflow.policy.model.PolicyRuleActionEnum; import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; import eu.teraflow.policy.model.PolicyRuleService; import eu.teraflow.policy.model.PolicyRuleState; import eu.teraflow.policy.model.RuleState; import eu.teraflow.policy.monitoring.model.IntegerKpiValue; import eu.teraflow.policy.monitoring.model.KpiValue; import io.quarkus.test.junit.QuarkusTest; import java.util.Collections; import java.util.List; import java.util.UUID; import org.junit.jupiter.api.Test; @QuarkusTest class PolicyRuleServiceValidationTest { private List<PolicyRuleCondition> createPolicyRuleConditions( String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) { final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); return List.of(policyRuleCondition); } private List<PolicyRuleAction> createPolicyRuleActions( PolicyRuleActionEnum policyRuleActionEnum, List<String> parameters) { final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); return List.of(policyRuleAction); } private PolicyRuleBasic createPolicyRuleBasic( String policyRuleId, int priority, PolicyRuleState policyRuleState, BooleanOperator booleanOperator, List<PolicyRuleCondition> policyRuleConditions, List<PolicyRuleAction> policyRuleActions) { return new PolicyRuleBasic( policyRuleId, policyRuleState, priority, policyRuleConditions, booleanOperator, policyRuleActions); } private ServiceId createServiceId(String contextId, String id) { return new ServiceId(contextId, id); } private List<String> createDeviceIds() { return List.of("deviceIdA", "deviceIdB"); } private PolicyRuleService createPolicyRuleService( PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List<String> deviceIds) { return new PolicyRuleService(policyRuleBasic, serviceId, deviceIds); } @Test void shouldThrowNullPointerExceptionGivenNullPolicyRuleBasic() { final var serviceId = createServiceId("CONTEXT_ID", "id"); final var deviceIds = createDeviceIds(); assertThatExceptionOfType(NullPointerException.class) .isThrownBy(() -> createPolicyRuleService(null, serviceId, deviceIds)); } @Test void shouldThrowNullPointerExceptionGivenNullServiceId() { final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL, new IntegerKpiValue(3)); final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); final var deviceIds = createDeviceIds(); final var policyRuleBasic = createPolicyRuleBasic( "policyRuleId1", 3, policyRuleState, BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, policyRuleConditions, policyRuleActions); assertThatExceptionOfType(NullPointerException.class) .isThrownBy(() -> createPolicyRuleService(policyRuleBasic, null, deviceIds)); } @Test void shouldThrowNullPointerExceptionGivenNullDeviceIds() { final var serviceId = createServiceId("contextId", "ID"); final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, new IntegerKpiValue(3)); final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( "policyRuleId2", 2, policyRuleState, BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, policyRuleConditions, policyRuleActions); assertThatExceptionOfType(NullPointerException.class) .isThrownBy(() -> createPolicyRuleService(policyRuleBasic, serviceId, null)); } @Test void shouldCreatePolicyRuleServiceObjectGivenEmptyDeviceIds() { final var serviceId = createServiceId("contextId", "id"); final var deviceIds = Collections.<String>emptyList(); final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, new IntegerKpiValue(3)); final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( "policyRuleId", 777, policyRuleState, BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, policyRuleConditions, policyRuleActions); final var expectedPolicyRuleService = new PolicyRuleService(policyRuleBasic, serviceId, deviceIds); final var policyRuleService = createPolicyRuleService(policyRuleBasic, serviceId, deviceIds); assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService); } @Test void shouldCreatePolicyRuleServiceObject() { final var serviceId = createServiceId("contextId", "id"); final var deviceIds = List.of("deviceIdA", "deviceIdB"); final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, new IntegerKpiValue(3)); final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( "policyRuleId", 3, policyRuleState, BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, policyRuleConditions, policyRuleActions); final var expectedPolicyRuleService = new PolicyRuleService(policyRuleBasic, serviceId, deviceIds); final var policyRuleService = createPolicyRuleService(policyRuleBasic, serviceId, deviceIds); assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService); } } src/policy/target/kubernetes/kubernetes.yml +14 −14 Original line number Diff line number Diff line Loading @@ -3,20 +3,20 @@ apiVersion: v1 kind: Service metadata: annotations: app.quarkus.io/commit-id: 8d012ef481feb17b0f599b8cd2367799150706d9 app.quarkus.io/build-timestamp: 2022-08-04 - 13:19:34 +0000 app.quarkus.io/commit-id: a5550cfa37e56aef1054126dd063b112df66b531 app.quarkus.io/build-timestamp: 2022-08-04 - 21:21:19 +0000 labels: app.kubernetes.io/name: policyservice app: policyservice name: policyservice spec: ports: - name: http port: 8080 targetPort: 8080 - name: grpc port: 6060 targetPort: 6060 - name: http port: 8080 targetPort: 8080 selector: app.kubernetes.io/name: policyservice type: ClusterIP Loading @@ -25,8 +25,8 @@ apiVersion: apps/v1 kind: Deployment metadata: annotations: app.quarkus.io/commit-id: 8d012ef481feb17b0f599b8cd2367799150706d9 app.quarkus.io/build-timestamp: 2022-08-04 - 13:19:34 +0000 app.quarkus.io/commit-id: a5550cfa37e56aef1054126dd063b112df66b531 app.quarkus.io/build-timestamp: 2022-08-04 - 21:21:19 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice Loading @@ -39,8 +39,8 @@ spec: template: metadata: annotations: app.quarkus.io/commit-id: 8d012ef481feb17b0f599b8cd2367799150706d9 app.quarkus.io/build-timestamp: 2022-08-04 - 13:19:34 +0000 app.quarkus.io/commit-id: a5550cfa37e56aef1054126dd063b112df66b531 app.quarkus.io/build-timestamp: 2022-08-04 - 21:21:19 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice Loading @@ -51,12 +51,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - name: MONITORING_SERVICE_HOST value: monitoringservice - name: SERVICE_SERVICE_HOST value: serviceservice - name: CONTEXT_SERVICE_HOST value: contextservice - name: MONITORING_SERVICE_HOST value: monitoringservice image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0 imagePullPolicy: Always livenessProbe: Loading @@ -71,12 +71,12 @@ spec: timeoutSeconds: 10 name: policyservice ports: - containerPort: 8080 name: http protocol: TCP - containerPort: 6060 name: grpc protocol: TCP - containerPort: 8080 name: http protocol: TCP readinessProbe: failureThreshold: 3 httpGet: Loading Loading
src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java +5 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package eu.teraflow.policy.model; import static com.google.common.base.Preconditions.checkNotNull; import eu.teraflow.policy.common.Util; import eu.teraflow.policy.context.model.ServiceId; import java.util.List; Loading @@ -28,8 +30,11 @@ public class PolicyRuleService { public PolicyRuleService( PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List<String> deviceIds) { checkNotNull(policyRuleBasic, "PolicyRuleBasic must not be null."); this.policyRuleBasic = policyRuleBasic; checkNotNull(serviceId, "Service Id must not be null."); this.serviceId = serviceId; checkNotNull(deviceIds, "Device Ids must not be null."); this.deviceIds = deviceIds; } Loading
src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ class PolicyRuleBasicValidationTest { } @Test void shouldThrowIllegalArgumentExceptionGivenNullPolicyRuleId() { void shouldThrowNullPointerExceptionGivenNullPolicyRuleId() { final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), Loading
src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java 0 → 100644 +222 −0 Original line number Diff line number Diff line /* * 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; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import eu.teraflow.policy.context.model.ServiceId; import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; import eu.teraflow.policy.model.PolicyRuleAction; import eu.teraflow.policy.model.PolicyRuleActionEnum; import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; import eu.teraflow.policy.model.PolicyRuleService; import eu.teraflow.policy.model.PolicyRuleState; import eu.teraflow.policy.model.RuleState; import eu.teraflow.policy.monitoring.model.IntegerKpiValue; import eu.teraflow.policy.monitoring.model.KpiValue; import io.quarkus.test.junit.QuarkusTest; import java.util.Collections; import java.util.List; import java.util.UUID; import org.junit.jupiter.api.Test; @QuarkusTest class PolicyRuleServiceValidationTest { private List<PolicyRuleCondition> createPolicyRuleConditions( String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) { final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); return List.of(policyRuleCondition); } private List<PolicyRuleAction> createPolicyRuleActions( PolicyRuleActionEnum policyRuleActionEnum, List<String> parameters) { final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); return List.of(policyRuleAction); } private PolicyRuleBasic createPolicyRuleBasic( String policyRuleId, int priority, PolicyRuleState policyRuleState, BooleanOperator booleanOperator, List<PolicyRuleCondition> policyRuleConditions, List<PolicyRuleAction> policyRuleActions) { return new PolicyRuleBasic( policyRuleId, policyRuleState, priority, policyRuleConditions, booleanOperator, policyRuleActions); } private ServiceId createServiceId(String contextId, String id) { return new ServiceId(contextId, id); } private List<String> createDeviceIds() { return List.of("deviceIdA", "deviceIdB"); } private PolicyRuleService createPolicyRuleService( PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List<String> deviceIds) { return new PolicyRuleService(policyRuleBasic, serviceId, deviceIds); } @Test void shouldThrowNullPointerExceptionGivenNullPolicyRuleBasic() { final var serviceId = createServiceId("CONTEXT_ID", "id"); final var deviceIds = createDeviceIds(); assertThatExceptionOfType(NullPointerException.class) .isThrownBy(() -> createPolicyRuleService(null, serviceId, deviceIds)); } @Test void shouldThrowNullPointerExceptionGivenNullServiceId() { final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL, new IntegerKpiValue(3)); final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); final var deviceIds = createDeviceIds(); final var policyRuleBasic = createPolicyRuleBasic( "policyRuleId1", 3, policyRuleState, BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, policyRuleConditions, policyRuleActions); assertThatExceptionOfType(NullPointerException.class) .isThrownBy(() -> createPolicyRuleService(policyRuleBasic, null, deviceIds)); } @Test void shouldThrowNullPointerExceptionGivenNullDeviceIds() { final var serviceId = createServiceId("contextId", "ID"); final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, new IntegerKpiValue(3)); final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( "policyRuleId2", 2, policyRuleState, BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, policyRuleConditions, policyRuleActions); assertThatExceptionOfType(NullPointerException.class) .isThrownBy(() -> createPolicyRuleService(policyRuleBasic, serviceId, null)); } @Test void shouldCreatePolicyRuleServiceObjectGivenEmptyDeviceIds() { final var serviceId = createServiceId("contextId", "id"); final var deviceIds = Collections.<String>emptyList(); final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, new IntegerKpiValue(3)); final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( "policyRuleId", 777, policyRuleState, BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, policyRuleConditions, policyRuleActions); final var expectedPolicyRuleService = new PolicyRuleService(policyRuleBasic, serviceId, deviceIds); final var policyRuleService = createPolicyRuleService(policyRuleBasic, serviceId, deviceIds); assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService); } @Test void shouldCreatePolicyRuleServiceObject() { final var serviceId = createServiceId("contextId", "id"); final var deviceIds = List.of("deviceIdA", "deviceIdB"); final var policyRuleConditions = createPolicyRuleConditions( UUID.randomUUID().toString(), NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, new IntegerKpiValue(3)); final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( "policyRuleId", 3, policyRuleState, BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, policyRuleConditions, policyRuleActions); final var expectedPolicyRuleService = new PolicyRuleService(policyRuleBasic, serviceId, deviceIds); final var policyRuleService = createPolicyRuleService(policyRuleBasic, serviceId, deviceIds); assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService); } }
src/policy/target/kubernetes/kubernetes.yml +14 −14 Original line number Diff line number Diff line Loading @@ -3,20 +3,20 @@ apiVersion: v1 kind: Service metadata: annotations: app.quarkus.io/commit-id: 8d012ef481feb17b0f599b8cd2367799150706d9 app.quarkus.io/build-timestamp: 2022-08-04 - 13:19:34 +0000 app.quarkus.io/commit-id: a5550cfa37e56aef1054126dd063b112df66b531 app.quarkus.io/build-timestamp: 2022-08-04 - 21:21:19 +0000 labels: app.kubernetes.io/name: policyservice app: policyservice name: policyservice spec: ports: - name: http port: 8080 targetPort: 8080 - name: grpc port: 6060 targetPort: 6060 - name: http port: 8080 targetPort: 8080 selector: app.kubernetes.io/name: policyservice type: ClusterIP Loading @@ -25,8 +25,8 @@ apiVersion: apps/v1 kind: Deployment metadata: annotations: app.quarkus.io/commit-id: 8d012ef481feb17b0f599b8cd2367799150706d9 app.quarkus.io/build-timestamp: 2022-08-04 - 13:19:34 +0000 app.quarkus.io/commit-id: a5550cfa37e56aef1054126dd063b112df66b531 app.quarkus.io/build-timestamp: 2022-08-04 - 21:21:19 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice Loading @@ -39,8 +39,8 @@ spec: template: metadata: annotations: app.quarkus.io/commit-id: 8d012ef481feb17b0f599b8cd2367799150706d9 app.quarkus.io/build-timestamp: 2022-08-04 - 13:19:34 +0000 app.quarkus.io/commit-id: a5550cfa37e56aef1054126dd063b112df66b531 app.quarkus.io/build-timestamp: 2022-08-04 - 21:21:19 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice Loading @@ -51,12 +51,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - name: MONITORING_SERVICE_HOST value: monitoringservice - name: SERVICE_SERVICE_HOST value: serviceservice - name: CONTEXT_SERVICE_HOST value: contextservice - name: MONITORING_SERVICE_HOST value: monitoringservice image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0 imagePullPolicy: Always livenessProbe: Loading @@ -71,12 +71,12 @@ spec: timeoutSeconds: 10 name: policyservice ports: - containerPort: 8080 name: http protocol: TCP - containerPort: 6060 name: grpc protocol: TCP - containerPort: 8080 name: http protocol: TCP readinessProbe: failureThreshold: 3 httpGet: Loading