From 4d9a4a45fe8810d0a807a94b53734fbdea8d1525 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Tue, 20 Sep 2022 15:53:01 +0300 Subject: [PATCH 01/34] temp commit --- .../grpc/context/ContextOuterClass.java | 49 +- .../grpc/context/ContextService.java | 4 + .../grpc/context/ContextServiceBean.java | 16 + .../grpc/context/ContextServiceClient.java | 8 + .../grpc/context/ContextServiceGrpc.java | 176 +- .../context/MutinyContextServiceGrpc.java | 76 +- .../eu/teraflow/policy/PolicyGatewayImpl.java | 13 +- .../policy/PolicyRuleConditionValidator.java | 12 +- .../eu/teraflow/policy/PolicyServiceImpl.java | 304 +- .../java/eu/teraflow/policy/Serializer.java | 6 +- .../policy/context/ContextGatewayImpl.java | 13 +- .../policy/model/PolicyRuleCondition.java | 2 +- .../policy/model/PolicyRuleState.java | 34 +- .../monitoring/model/KpiValueRange.java | 53 +- .../teraflow/policy/ConfigRuleTypeTest.java | 90 - .../teraflow/policy/ConstraintTypeTest.java | 136 - .../teraflow/policy/EndPointCreationTest.java | 124 - .../eu/teraflow/policy/LocationTypeTest.java | 49 - .../policy/PolicyRuleBasicValidationTest.java | 359 -- .../PolicyRuleConditionValidationTest.java | 139 - .../PolicyRuleDeviceValidationTest.java | 178 - .../PolicyRuleServiceValidationTest.java | 222 - .../eu/teraflow/policy/PolicyServiceTest.java | 195 +- .../eu/teraflow/policy/SerializerTest.java | 3880 ----------------- .../grpc/context/ContextOuterClass.java | 49 +- .../grpc/context/ContextService.java | 4 + .../grpc/context/ContextServiceBean.java | 16 + .../grpc/context/ContextServiceClient.java | 8 + .../grpc/context/ContextServiceGrpc.java | 176 +- .../context/MutinyContextServiceGrpc.java | 76 +- src/policy/target/kubernetes/kubernetes.yml | 89 + 31 files changed, 1054 insertions(+), 5502 deletions(-) delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java delete mode 100644 src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java create mode 100644 src/policy/target/kubernetes/kubernetes.yml diff --git a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java index 45a64fabb..89696d8ac 100644 --- a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java +++ b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java @@ -62143,7 +62143,7 @@ public final class ContextOuterClass { "TION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n" + "\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL" + "_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIO" + - "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\357\022" + + "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\331\023" + "\n\016ContextService\022:\n\016ListContextIds\022\016.con" + "text.Empty\032\026.context.ContextIdList\"\000\0226\n\014" + "ListContexts\022\016.context.Empty\032\024.context.C" + @@ -62183,28 +62183,31 @@ public final class ContextOuterClass { "t.ContextId\032\024.context.ServiceList\"\000\0224\n\nG" + "etService\022\022.context.ServiceId\032\020.context." + "Service\"\000\0224\n\nSetService\022\020.context.Servic" + - "e\032\022.context.ServiceId\"\000\0225\n\rRemoveService" + - "\022\022.context.ServiceId\032\016.context.Empty\"\000\022=" + - "\n\020GetServiceEvents\022\016.context.Empty\032\025.con" + - "text.ServiceEvent\"\0000\001\022:\n\014ListSliceIds\022\022." + - "context.ContextId\032\024.context.SliceIdList\"" + - "\000\0226\n\nListSlices\022\022.context.ContextId\032\022.co" + - "ntext.SliceList\"\000\022.\n\010GetSlice\022\020.context." + - "SliceId\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016." + - "context.Slice\032\020.context.SliceId\"\000\0221\n\013Rem" + - "oveSlice\022\020.context.SliceId\032\016.context.Emp" + - "ty\"\000\0229\n\016GetSliceEvents\022\016.context.Empty\032\023" + - ".context.SliceEvent\"\0000\001\022D\n\021ListConnectio" + - "nIds\022\022.context.ServiceId\032\031.context.Conne" + - "ctionIdList\"\000\022@\n\017ListConnections\022\022.conte" + - "xt.ServiceId\032\027.context.ConnectionList\"\000\022" + - "=\n\rGetConnection\022\025.context.ConnectionId\032" + - "\023.context.Connection\"\000\022=\n\rSetConnection\022" + - "\023.context.Connection\032\025.context.Connectio" + - "nId\"\000\022;\n\020RemoveConnection\022\025.context.Conn" + - "ectionId\032\016.context.Empty\"\000\022C\n\023GetConnect" + - "ionEvents\022\016.context.Empty\032\030.context.Conn" + - "ectionEvent\"\0000\001b\006proto3" + "e\032\022.context.ServiceId\"\000\0226\n\014UnsetService\022" + + "\020.context.Service\032\022.context.ServiceId\"\000\022" + + "5\n\rRemoveService\022\022.context.ServiceId\032\016.c" + + "ontext.Empty\"\000\022=\n\020GetServiceEvents\022\016.con" + + "text.Empty\032\025.context.ServiceEvent\"\0000\001\022:\n" + + "\014ListSliceIds\022\022.context.ContextId\032\024.cont" + + "ext.SliceIdList\"\000\0226\n\nListSlices\022\022.contex" + + "t.ContextId\032\022.context.SliceList\"\000\022.\n\010Get" + + "Slice\022\020.context.SliceId\032\016.context.Slice\"" + + "\000\022.\n\010SetSlice\022\016.context.Slice\032\020.context." + + "SliceId\"\000\0220\n\nUnsetSlice\022\016.context.Slice\032" + + "\020.context.SliceId\"\000\0221\n\013RemoveSlice\022\020.con" + + "text.SliceId\032\016.context.Empty\"\000\0229\n\016GetSli" + + "ceEvents\022\016.context.Empty\032\023.context.Slice" + + "Event\"\0000\001\022D\n\021ListConnectionIds\022\022.context" + + ".ServiceId\032\031.context.ConnectionIdList\"\000\022" + + "@\n\017ListConnections\022\022.context.ServiceId\032\027" + + ".context.ConnectionList\"\000\022=\n\rGetConnecti" + + "on\022\025.context.ConnectionId\032\023.context.Conn" + + "ection\"\000\022=\n\rSetConnection\022\023.context.Conn" + + "ection\032\025.context.ConnectionId\"\000\022;\n\020Remov" + + "eConnection\022\025.context.ConnectionId\032\016.con" + + "text.Empty\"\000\022C\n\023GetConnectionEvents\022\016.co" + + "ntext.Empty\032\030.context.ConnectionEvent\"\0000" + + "\001b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, diff --git a/src/automation/target/generated-sources/grpc/context/ContextService.java b/src/automation/target/generated-sources/grpc/context/ContextService.java index d54c56057..814ea98b6 100644 --- a/src/automation/target/generated-sources/grpc/context/ContextService.java +++ b/src/automation/target/generated-sources/grpc/context/ContextService.java @@ -56,6 +56,8 @@ public interface ContextService extends MutinyService { io.smallrye.mutiny.Uni setService(context.ContextOuterClass.Service request); + io.smallrye.mutiny.Uni unsetService(context.ContextOuterClass.Service request); + io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request); io.smallrye.mutiny.Uni listSliceIds(context.ContextOuterClass.ContextId request); @@ -66,6 +68,8 @@ public interface ContextService extends MutinyService { io.smallrye.mutiny.Uni setSlice(context.ContextOuterClass.Slice request); + io.smallrye.mutiny.Uni unsetSlice(context.ContextOuterClass.Slice request); + io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request); io.smallrye.mutiny.Uni listConnectionIds(context.ContextOuterClass.ServiceId request); diff --git a/src/automation/target/generated-sources/grpc/context/ContextServiceBean.java b/src/automation/target/generated-sources/grpc/context/ContextServiceBean.java index f552294b8..2b0099f10 100644 --- a/src/automation/target/generated-sources/grpc/context/ContextServiceBean.java +++ b/src/automation/target/generated-sources/grpc/context/ContextServiceBean.java @@ -208,6 +208,14 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI } } @Override + public io.smallrye.mutiny.Uni unsetService(context.ContextOuterClass.Service request) { + try { + return delegate.unsetService(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + @Override public io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request) { try { return delegate.removeService(request); @@ -248,6 +256,14 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI } } @Override + public io.smallrye.mutiny.Uni unsetSlice(context.ContextOuterClass.Slice request) { + try { + return delegate.unsetSlice(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + @Override public io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request) { try { return delegate.removeSlice(request); diff --git a/src/automation/target/generated-sources/grpc/context/ContextServiceClient.java b/src/automation/target/generated-sources/grpc/context/ContextServiceClient.java index c6493bd4d..c518a0b46 100644 --- a/src/automation/target/generated-sources/grpc/context/ContextServiceClient.java +++ b/src/automation/target/generated-sources/grpc/context/ContextServiceClient.java @@ -117,6 +117,10 @@ public class ContextServiceClient implements ContextService, MutinyClient unsetService(context.ContextOuterClass.Service request) { + return stub.unsetService(request); + } + @Override public io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request) { return stub.removeService(request); } @@ -137,6 +141,10 @@ public class ContextServiceClient implements ContextService, MutinyClient unsetSlice(context.ContextOuterClass.Slice request) { + return stub.unsetSlice(request); + } + @Override public io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request) { return stub.removeSlice(request); } diff --git a/src/automation/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/automation/target/generated-sources/grpc/context/ContextServiceGrpc.java index be720c127..f59378086 100644 --- a/src/automation/target/generated-sources/grpc/context/ContextServiceGrpc.java +++ b/src/automation/target/generated-sources/grpc/context/ContextServiceGrpc.java @@ -882,6 +882,37 @@ public final class ContextServiceGrpc { return getSetServiceMethod; } + private static volatile io.grpc.MethodDescriptor getUnsetServiceMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "UnsetService", + requestType = context.ContextOuterClass.Service.class, + responseType = context.ContextOuterClass.ServiceId.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getUnsetServiceMethod() { + io.grpc.MethodDescriptor getUnsetServiceMethod; + if ((getUnsetServiceMethod = ContextServiceGrpc.getUnsetServiceMethod) == null) { + synchronized (ContextServiceGrpc.class) { + if ((getUnsetServiceMethod = ContextServiceGrpc.getUnsetServiceMethod) == null) { + ContextServiceGrpc.getUnsetServiceMethod = getUnsetServiceMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "UnsetService")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.Service.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.ServiceId.getDefaultInstance())) + .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("UnsetService")) + .build(); + } + } + } + return getUnsetServiceMethod; + } + private static volatile io.grpc.MethodDescriptor getRemoveServiceMethod; @@ -1068,6 +1099,37 @@ public final class ContextServiceGrpc { return getSetSliceMethod; } + private static volatile io.grpc.MethodDescriptor getUnsetSliceMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "UnsetSlice", + requestType = context.ContextOuterClass.Slice.class, + responseType = context.ContextOuterClass.SliceId.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getUnsetSliceMethod() { + io.grpc.MethodDescriptor getUnsetSliceMethod; + if ((getUnsetSliceMethod = ContextServiceGrpc.getUnsetSliceMethod) == null) { + synchronized (ContextServiceGrpc.class) { + if ((getUnsetSliceMethod = ContextServiceGrpc.getUnsetSliceMethod) == null) { + ContextServiceGrpc.getUnsetSliceMethod = getUnsetSliceMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "UnsetSlice")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.Slice.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.SliceId.getDefaultInstance())) + .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("UnsetSlice")) + .build(); + } + } + } + return getUnsetSliceMethod; + } + private static volatile io.grpc.MethodDescriptor getRemoveSliceMethod; @@ -1560,6 +1622,13 @@ public final class ContextServiceGrpc { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetServiceMethod(), responseObserver); } + /** + */ + public void unsetService(context.ContextOuterClass.Service request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getUnsetServiceMethod(), responseObserver); + } + /** */ public void removeService(context.ContextOuterClass.ServiceId request, @@ -1602,6 +1671,13 @@ public final class ContextServiceGrpc { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetSliceMethod(), responseObserver); } + /** + */ + public void unsetSlice(context.ContextOuterClass.Slice request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getUnsetSliceMethod(), responseObserver); + } + /** */ public void removeSlice(context.ContextOuterClass.SliceId request, @@ -1856,6 +1932,13 @@ public final class ContextServiceGrpc { context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>( this, METHODID_SET_SERVICE))) + .addMethod( + getUnsetServiceMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Service, + context.ContextOuterClass.ServiceId>( + this, METHODID_UNSET_SERVICE))) .addMethod( getRemoveServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -1898,6 +1981,13 @@ public final class ContextServiceGrpc { context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>( this, METHODID_SET_SLICE))) + .addMethod( + getUnsetSliceMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Slice, + context.ContextOuterClass.SliceId>( + this, METHODID_UNSET_SLICE))) .addMethod( getRemoveSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -2196,6 +2286,14 @@ public final class ContextServiceGrpc { getChannel().newCall(getSetServiceMethod(), getCallOptions()), request, responseObserver); } + /** + */ + public void unsetService(context.ContextOuterClass.Service request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getUnsetServiceMethod(), getCallOptions()), request, responseObserver); + } + /** */ public void removeService(context.ContextOuterClass.ServiceId request, @@ -2244,6 +2342,14 @@ public final class ContextServiceGrpc { getChannel().newCall(getSetSliceMethod(), getCallOptions()), request, responseObserver); } + /** + */ + public void unsetSlice(context.ContextOuterClass.Slice request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getUnsetSliceMethod(), getCallOptions()), request, responseObserver); + } + /** */ public void removeSlice(context.ContextOuterClass.SliceId request, @@ -2523,6 +2629,13 @@ public final class ContextServiceGrpc { getChannel(), getSetServiceMethod(), getCallOptions(), request); } + /** + */ + public context.ContextOuterClass.ServiceId unsetService(context.ContextOuterClass.Service request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUnsetServiceMethod(), getCallOptions(), request); + } + /** */ public context.ContextOuterClass.Empty removeService(context.ContextOuterClass.ServiceId request) { @@ -2566,6 +2679,13 @@ public final class ContextServiceGrpc { getChannel(), getSetSliceMethod(), getCallOptions(), request); } + /** + */ + public context.ContextOuterClass.SliceId unsetSlice(context.ContextOuterClass.Slice request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUnsetSliceMethod(), getCallOptions(), request); + } + /** */ public context.ContextOuterClass.Empty removeSlice(context.ContextOuterClass.SliceId request) { @@ -2831,6 +2951,14 @@ public final class ContextServiceGrpc { getChannel().newCall(getSetServiceMethod(), getCallOptions()), request); } + /** + */ + public com.google.common.util.concurrent.ListenableFuture unsetService( + context.ContextOuterClass.Service request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUnsetServiceMethod(), getCallOptions()), request); + } + /** */ public com.google.common.util.concurrent.ListenableFuture removeService( @@ -2871,6 +2999,14 @@ public final class ContextServiceGrpc { getChannel().newCall(getSetSliceMethod(), getCallOptions()), request); } + /** + */ + public com.google.common.util.concurrent.ListenableFuture unsetSlice( + context.ContextOuterClass.Slice request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUnsetSliceMethod(), getCallOptions()), request); + } + /** */ public com.google.common.util.concurrent.ListenableFuture removeSlice( @@ -2948,20 +3084,22 @@ public final class ContextServiceGrpc { private static final int METHODID_LIST_SERVICES = 25; private static final int METHODID_GET_SERVICE = 26; private static final int METHODID_SET_SERVICE = 27; - private static final int METHODID_REMOVE_SERVICE = 28; - private static final int METHODID_GET_SERVICE_EVENTS = 29; - private static final int METHODID_LIST_SLICE_IDS = 30; - private static final int METHODID_LIST_SLICES = 31; - private static final int METHODID_GET_SLICE = 32; - private static final int METHODID_SET_SLICE = 33; - private static final int METHODID_REMOVE_SLICE = 34; - private static final int METHODID_GET_SLICE_EVENTS = 35; - private static final int METHODID_LIST_CONNECTION_IDS = 36; - private static final int METHODID_LIST_CONNECTIONS = 37; - private static final int METHODID_GET_CONNECTION = 38; - private static final int METHODID_SET_CONNECTION = 39; - private static final int METHODID_REMOVE_CONNECTION = 40; - private static final int METHODID_GET_CONNECTION_EVENTS = 41; + private static final int METHODID_UNSET_SERVICE = 28; + private static final int METHODID_REMOVE_SERVICE = 29; + private static final int METHODID_GET_SERVICE_EVENTS = 30; + private static final int METHODID_LIST_SLICE_IDS = 31; + private static final int METHODID_LIST_SLICES = 32; + private static final int METHODID_GET_SLICE = 33; + private static final int METHODID_SET_SLICE = 34; + private static final int METHODID_UNSET_SLICE = 35; + private static final int METHODID_REMOVE_SLICE = 36; + private static final int METHODID_GET_SLICE_EVENTS = 37; + private static final int METHODID_LIST_CONNECTION_IDS = 38; + private static final int METHODID_LIST_CONNECTIONS = 39; + private static final int METHODID_GET_CONNECTION = 40; + private static final int METHODID_SET_CONNECTION = 41; + private static final int METHODID_REMOVE_CONNECTION = 42; + private static final int METHODID_GET_CONNECTION_EVENTS = 43; private static final class MethodHandlers implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -3092,6 +3230,10 @@ public final class ContextServiceGrpc { serviceImpl.setService((context.ContextOuterClass.Service) request, (io.grpc.stub.StreamObserver) responseObserver); break; + case METHODID_UNSET_SERVICE: + serviceImpl.unsetService((context.ContextOuterClass.Service) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; case METHODID_REMOVE_SERVICE: serviceImpl.removeService((context.ContextOuterClass.ServiceId) request, (io.grpc.stub.StreamObserver) responseObserver); @@ -3116,6 +3258,10 @@ public final class ContextServiceGrpc { serviceImpl.setSlice((context.ContextOuterClass.Slice) request, (io.grpc.stub.StreamObserver) responseObserver); break; + case METHODID_UNSET_SLICE: + serviceImpl.unsetSlice((context.ContextOuterClass.Slice) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; case METHODID_REMOVE_SLICE: serviceImpl.removeSlice((context.ContextOuterClass.SliceId) request, (io.grpc.stub.StreamObserver) responseObserver); @@ -3237,12 +3383,14 @@ public final class ContextServiceGrpc { .addMethod(getListServicesMethod()) .addMethod(getGetServiceMethod()) .addMethod(getSetServiceMethod()) + .addMethod(getUnsetServiceMethod()) .addMethod(getRemoveServiceMethod()) .addMethod(getGetServiceEventsMethod()) .addMethod(getListSliceIdsMethod()) .addMethod(getListSlicesMethod()) .addMethod(getGetSliceMethod()) .addMethod(getSetSliceMethod()) + .addMethod(getUnsetSliceMethod()) .addMethod(getRemoveSliceMethod()) .addMethod(getGetSliceEventsMethod()) .addMethod(getListConnectionIdsMethod()) diff --git a/src/automation/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/automation/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java index 9f71b5378..f7d2cb94e 100644 --- a/src/automation/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java +++ b/src/automation/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java @@ -156,6 +156,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M } + public io.smallrye.mutiny.Uni unsetService(context.ContextOuterClass.Service request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::unsetService); + } + + public io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request) { return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeService); } @@ -181,6 +186,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M } + public io.smallrye.mutiny.Uni unsetSlice(context.ContextOuterClass.Slice request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::unsetSlice); + } + + public io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request) { return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeSlice); } @@ -383,6 +393,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M } + public io.smallrye.mutiny.Uni unsetService(context.ContextOuterClass.Service request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + public io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } @@ -408,6 +423,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M } + public io.smallrye.mutiny.Uni unsetSlice(context.ContextOuterClass.Slice request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + public io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } @@ -670,6 +690,13 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>( this, METHODID_SET_SERVICE, compression))) + .addMethod( + context.ContextServiceGrpc.getUnsetServiceMethod(), + asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Service, + context.ContextOuterClass.ServiceId>( + this, METHODID_UNSET_SERVICE, compression))) .addMethod( context.ContextServiceGrpc.getRemoveServiceMethod(), asyncUnaryCall( @@ -712,6 +739,13 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>( this, METHODID_SET_SLICE, compression))) + .addMethod( + context.ContextServiceGrpc.getUnsetSliceMethod(), + asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Slice, + context.ContextOuterClass.SliceId>( + this, METHODID_UNSET_SLICE, compression))) .addMethod( context.ContextServiceGrpc.getRemoveSliceMethod(), asyncUnaryCall( @@ -800,20 +834,22 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M private static final int METHODID_LIST_SERVICES = 25; private static final int METHODID_GET_SERVICE = 26; private static final int METHODID_SET_SERVICE = 27; - private static final int METHODID_REMOVE_SERVICE = 28; - private static final int METHODID_GET_SERVICE_EVENTS = 29; - private static final int METHODID_LIST_SLICE_IDS = 30; - private static final int METHODID_LIST_SLICES = 31; - private static final int METHODID_GET_SLICE = 32; - private static final int METHODID_SET_SLICE = 33; - private static final int METHODID_REMOVE_SLICE = 34; - private static final int METHODID_GET_SLICE_EVENTS = 35; - private static final int METHODID_LIST_CONNECTION_IDS = 36; - private static final int METHODID_LIST_CONNECTIONS = 37; - private static final int METHODID_GET_CONNECTION = 38; - private static final int METHODID_SET_CONNECTION = 39; - private static final int METHODID_REMOVE_CONNECTION = 40; - private static final int METHODID_GET_CONNECTION_EVENTS = 41; + private static final int METHODID_UNSET_SERVICE = 28; + private static final int METHODID_REMOVE_SERVICE = 29; + private static final int METHODID_GET_SERVICE_EVENTS = 30; + private static final int METHODID_LIST_SLICE_IDS = 31; + private static final int METHODID_LIST_SLICES = 32; + private static final int METHODID_GET_SLICE = 33; + private static final int METHODID_SET_SLICE = 34; + private static final int METHODID_UNSET_SLICE = 35; + private static final int METHODID_REMOVE_SLICE = 36; + private static final int METHODID_GET_SLICE_EVENTS = 37; + private static final int METHODID_LIST_CONNECTION_IDS = 38; + private static final int METHODID_LIST_CONNECTIONS = 39; + private static final int METHODID_GET_CONNECTION = 40; + private static final int METHODID_SET_CONNECTION = 41; + private static final int METHODID_REMOVE_CONNECTION = 42; + private static final int METHODID_GET_CONNECTION_EVENTS = 43; private static final class MethodHandlers implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -1002,6 +1038,12 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M compression, serviceImpl::setService); break; + case METHODID_UNSET_SERVICE: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Service) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::unsetService); + break; case METHODID_REMOVE_SERVICE: io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request, (io.grpc.stub.StreamObserver) responseObserver, @@ -1038,6 +1080,12 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M compression, serviceImpl::setSlice); break; + case METHODID_UNSET_SLICE: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Slice) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::unsetSlice); + break; case METHODID_REMOVE_SLICE: io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.SliceId) request, (io.grpc.stub.StreamObserver) responseObserver, diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java index c76f8c8c4..adbc9bab2 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java @@ -45,10 +45,15 @@ public class PolicyGatewayImpl implements PolicyGateway { public Uni policyAddService(PolicyRuleService request) { final var policyRuleService = serializer.deserialize(request); - return policyService - .addPolicyService(policyRuleService) - .onItem() - .transform(serializer::serialize); + // Uni temp = + // policyService.addPolicyService(policyRuleService); + + // Uni ttt = Uni.createFrom().item(() -> "Hello"); + + final var getPolicyService = + policyService.addPolicyService(policyRuleService).onItem().transform(serializer::serialize); + + return getPolicyService; } @Override diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java index 0ca242dbb..1b086844b 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java @@ -84,10 +84,14 @@ public class PolicyRuleConditionValidator { } private Uni isServiceIdValid(ServiceId serviceId) { - return contextService - .getService(serviceId) - .onItem() - .transform(service -> checkIfServiceIdExists(service, serviceId)); + LOGGER.errorf("===> isServiceIdValid: %s", serviceId.getId()); + + return Uni.createFrom().item(true); + + // return contextService + // .getService(serviceId) + // .onItem() + // .transform(service -> checkIfServiceIdExists(service, serviceId)); } private boolean checkIfServiceIdExists(Service service, ServiceId serviceId) { diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index 7cb393500..dcc3ca2db 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -16,20 +16,32 @@ package eu.teraflow.policy; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import org.jboss.logging.Logger; + import eu.teraflow.policy.context.ContextService; +import eu.teraflow.policy.model.BooleanOperator; +import eu.teraflow.policy.model.NumericalOperator; import eu.teraflow.policy.model.PolicyRuleBasic; +import eu.teraflow.policy.model.PolicyRuleCondition; import eu.teraflow.policy.model.PolicyRuleDevice; import eu.teraflow.policy.model.PolicyRuleService; import eu.teraflow.policy.model.PolicyRuleState; import eu.teraflow.policy.model.RuleState; import eu.teraflow.policy.monitoring.MonitoringService; +import eu.teraflow.policy.monitoring.model.AlarmDescriptor; +import eu.teraflow.policy.monitoring.model.KpiValueRange; import eu.teraflow.policy.service.ServiceService; import io.smallrye.mutiny.Uni; -import java.util.ArrayList; -import java.util.List; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import org.jboss.logging.Logger; @ApplicationScoped public class PolicyServiceImpl implements PolicyService { @@ -50,6 +62,8 @@ public class PolicyServiceImpl implements PolicyService { private final PolicyRuleConditionValidator policyRuleConditionValidator; private final PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter; + private PolicyRuleState state = new PolicyRuleState(RuleState.POLICY_UNDEFINED); + @Inject public PolicyServiceImpl( ContextService contextService, @@ -64,26 +78,15 @@ public class PolicyServiceImpl implements PolicyService { this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter; } - @Override - public Uni addPolicyService(PolicyRuleService policyRuleService) { - LOGGER.infof("Received %s", policyRuleService); + private void validateService(PolicyRuleService policyRuleService) { + LOGGER.info(" ====> validate phase <===="); final var serviceId = policyRuleService.getServiceId(); final var deviceIds = policyRuleService.getDeviceIds(); final var policyRuleBasic = policyRuleService.getPolicyRuleBasic(); - final var policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); - final var kpiIds = policyRuleConditionFieldsGetter.getKpiIds(policyRuleConditions); - final var kpiValues = policyRuleConditionFieldsGetter.getKpiValues(policyRuleConditions); - final var numericalOperators = - policyRuleConditionFieldsGetter.getNumericalOperators(policyRuleConditions); - final var isServiceIdValid = policyRuleConditionValidator.validateServiceId(serviceId); - logAndSetPolicyRuleState(INSERTED_POLICYRULE_STATE, policyRuleBasic); - contextService.setPolicyRule(policyRuleBasic); - - // VALIDATION PHASE isServiceIdValid .subscribe() .with( @@ -96,30 +99,279 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.info("All Device Ids are valid."); } - logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic); + // logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic); + policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); + contextService.setPolicyRule(policyRuleBasic); + state.setRuleState(RuleState.POLICY_FAILED); + return; } else { LOGGER.infof(VALID_MESSAGE, serviceId); final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds); if (!invalidDeviceIds.isEmpty()) { - logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic); + // logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic); + policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); + state.setRuleState(RuleState.POLICY_FAILED); + return; } else { LOGGER.infof("All deviceIds are valid"); } - logAndSetPolicyRuleState(VALIDATED_POLICYRULE_STATE, policyRuleBasic); + // logAndSetPolicyRuleState(VALIDATED_POLICYRULE_STATE, policyRuleBasic); + policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE); + contextService.setPolicyRule(policyRuleBasic); + state.setRuleState(RuleState.POLICY_VALIDATED); + return; } - - contextService.setPolicyRule(policyRuleBasic); }); - // PROVISION PHASE + // monitoringService.setKpiAlarm(alarmDescriptor); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED); + return; + } - return Uni.createFrom().item(policyRuleState); + private void parsePolicyRuleCondition(PolicyRuleService policyRuleService) { + + BooleanOperator booleanOperator = policyRuleService.getPolicyRuleBasic().getBooleanOperator(); + if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR) { + parsePolicyRuleConditionOr(policyRuleService); + } + if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND) { + + } + } + + private void parsePolicyRuleConditionOr(PolicyRuleService policyRuleService) { + PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); + List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); + + + for (PolicyRuleCondition policyRuleCondition : policyRuleConditions) { + + var kpiId = Arrays.asList( policyRuleCondition.getKpiId()); + var kpiValue = Arrays.asList( policyRuleCondition.getKpiValue()); + var kpiValueRange = convertPolicyRuleConditionToAlarmDescriptor(policyRuleCondition); + AlarmDescriptor alarmDescriptor = + new AlarmDescriptor("dummyId", "dummyDescription", "dummyAlarmName", kpiId, kpiValue, 0.0); + } + } + + private KpiValueRange convertPolicyRuleConditionToAlarmDescriptor(PolicyRuleCondition policyRuleCondition) { + + switch(policyRuleCondition.getNumericalOperator()) { + case POLICY_RULE_CONDITION_NUMERICAL_EQUAL: + return new KpiValueRange( + policyRuleCondition.getKpiValue(), + policyRuleCondition.getKpiValue(), + true, + true, + true); + case POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL: + return new KpiValueRange( + policyRuleCondition.getKpiValue(), + policyRuleCondition.getKpiValue(), + true, + false, + false); + + case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN: + return new KpiValueRange( + policyRuleCondition.getKpiValue(), + null, + false, + false, + false); + + case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL: + return new KpiValueRange( + policyRuleCondition.getKpiValue(), + null, + false, + true, + false); + + case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN: + return new KpiValueRange( + null, + policyRuleCondition.getKpiValue(), + false, + false, + false); + + case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL: + return new KpiValueRange( + null, + policyRuleCondition.getKpiValue(), + false, + false, + true); + default: + return null; + } + + } + + private void convertPolicyRuleConditionToAlarmDescriptor(PolicyRuleService policyRuleService) { + + boolean uniqueKpi = true; + List kpisList = new ArrayList(); + var booleanOperator = policyRuleService.getPolicyRuleBasic().getBooleanOperator(); + List alarmDescriptorList = new ArrayList(); + + List policyRuleConditionList = + policyRuleService.getPolicyRuleBasic().getPolicyRuleConditions(); + for (PolicyRuleCondition element : policyRuleConditionList) { + kpisList.add(element.getKpiId()); + } + Set kpisSet = new HashSet(kpisList); + + if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR) { + if (kpisSet.size() < kpisList.size()) { + var policyRuleBasic = policyRuleService.getPolicyRuleBasic(); + policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); + contextService.setPolicyRule(policyRuleBasic); + state.setRuleState(RuleState.POLICY_FAILED); + uniqueKpi = false; + return; + } + } + + if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND) { + if (uniqueKpi == false) {} + } + + HashMap temp = new HashMap<>(); + for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) { + policyRuleCondition.getKpiId(); + policyRuleCondition.getKpiValue(); + + if (temp.containsKey(policyRuleCondition.getKpiId())) { + var kpiValueRange = temp.get(policyRuleCondition.getKpiId()); + + if (kpiValueRange.getInRange() == true) { + LOGGER.errorf("Received %s", policyRuleService); + return; + } + + if ((kpiValueRange.getKpiMaxValue() != null) && (kpiValueRange.getKpiMinValue() != null)) { + LOGGER.errorf("Received %s", policyRuleService); + return; + } + + if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN + && kpiValueRange.getKpiMinValue() == null) { + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange( + policyRuleCondition.getKpiValue(), + kpiValueRange.getKpiMaxValue(), + true, + false, + kpiValueRange.getIncludeMaxValue())); + } + + if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL + && kpiValueRange.getKpiMinValue() == null) { + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange( + policyRuleCondition.getKpiValue(), + kpiValueRange.getKpiMaxValue(), + true, + true, + kpiValueRange.getIncludeMaxValue())); + } + + if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN + && kpiValueRange.getKpiMaxValue() == null) { + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange( + kpiValueRange.getKpiMinValue(), + policyRuleCondition.getKpiValue(), + true, + kpiValueRange.getIncludeMinValue(), + false)); + } + + if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL + && kpiValueRange.getKpiMaxValue() == null) { + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange( + kpiValueRange.getKpiMinValue(), + policyRuleCondition.getKpiValue(), + true, + kpiValueRange.getIncludeMinValue(), + true)); + } + } + + if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN) { + + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, false, false)); + } else if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL) { + + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, true, false)); + } else if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN) { + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, false)); + } else if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL) { + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, true)); + } else if (policyRuleCondition.getNumericalOperator() + == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL) { + temp.put( + policyRuleCondition.getKpiId(), + new KpiValueRange( + policyRuleCondition.getKpiValue(), + policyRuleCondition.getKpiValue(), + false, + false, + false)); + } + + final String alarmId = "dummyId"; + final String alarmDescription = "dummyDes"; + final String name = "dummyName"; + final double timestamp = 5.5; + final List kpiIds; + final List kpiValueRanges = new ArrayList(); + } + } + + @Override + public Uni addPolicyService(PolicyRuleService policyRuleService) { + LOGGER.infof("Received %s", policyRuleService); + + final var policyRuleBasic = policyRuleService.getPolicyRuleBasic(); + policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE); + + new Thread( + () -> { + validateService(policyRuleService); + }) + .start(); + + contextService.setPolicyRule(policyRuleBasic); + + return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState()); } @Override 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 49882be71..aba0c1801 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java +++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java @@ -1545,11 +1545,15 @@ public class Serializer { public KpiValueRange deserialize(Monitoring.KpiValueRange serializedKpiValueRange) { final var serializedMinKpiValue = serializedKpiValueRange.getKpiMinValue(); final var serializedMaxKpiValue = serializedKpiValueRange.getKpiMaxValue(); + final var serializedInRange = serializedKpiValueRange.getInRange(); + final var serializedMaxValue = serializedKpiValueRange.getIncludeMaxValue(); + final var serializedMinValue = serializedKpiValueRange.getIncludeMinValue(); final var minKpiValue = deserialize(serializedMinKpiValue); final var maxKpiValue = deserialize(serializedMaxKpiValue); - return new KpiValueRange(minKpiValue, maxKpiValue); + return new KpiValueRange( + minKpiValue, maxKpiValue, serializedInRange, serializedMaxValue, serializedMinValue); } public AlarmID serializeAlarmId(String alarmId) { diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java index 6185b4e9a..630686316 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java @@ -89,11 +89,14 @@ public class ContextGatewayImpl implements ContextGateway { @Override public Uni setPolicyRule(PolicyRuleBasic policyRuleBasic) { - final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); - return streamingDelegateContextPolicy - .setPolicyRule(serializedPolicyRuleBasic) - .onItem() - .transform(serializer::deserialize); + return Uni.createFrom().item("571eabc1-0f59-48da-b608-c45876c3fa8a"); + + // final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); + + // return streamingDelegateContextPolicy + // .setPolicyRule(serializedPolicyRuleBasic) + // .onItem() + // .transform(serializer::deserialize); } } diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java index e835a8188..a19fc0da4 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java @@ -52,7 +52,7 @@ public class PolicyRuleCondition { return numericalOperator; } - public KpiValue getKpiValue() { + public KpiValue getKpiValue() { return kpiValue; } diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java index 566c3b785..5226ffcd2 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java @@ -18,12 +18,16 @@ package eu.teraflow.policy.model; public class PolicyRuleState { - private final RuleState ruleState; + private RuleState ruleState; public PolicyRuleState(RuleState ruleState) { this.ruleState = ruleState; } + public void setRuleState(RuleState ruleState) { + this.ruleState = ruleState; + } + public RuleState getRuleState() { return ruleState; } @@ -32,4 +36,32 @@ public class PolicyRuleState { public String toString() { return String.format("%s:{ruleState:\"%s\"}", getClass().getSimpleName(), ruleState.toString()); } + + public RuleState nextState(RuleState currentState, boolean success) { + switch (currentState) { + case POLICY_UNDEFINED: + return RuleState.POLICY_INSERTED; + + case POLICY_INSERTED: + if (success == false) { + return RuleState.POLICY_FAILED; + } + return RuleState.POLICY_VALIDATED; + + case POLICY_VALIDATED: + return RuleState.POLICY_PROVISIONED; + + case POLICY_PROVISIONED: + return RuleState.POLICY_ACTIVE; + + case POLICY_ACTIVE: + if (success == false) { + return RuleState.POLICY_FAILED; + } + return RuleState.POLICY_ENFORCED; + + default: + return RuleState.POLICY_UNDEFINED; + } + } } diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java index baa7c32c4..74e92dba2 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java @@ -18,22 +18,65 @@ package eu.teraflow.policy.monitoring.model; public class KpiValueRange { - private final KpiValue kpiMinValue; - private final KpiValue kpiMaxValue; + private KpiValue kpiMinValue; + private KpiValue kpiMaxValue; + private boolean inRange; + private boolean includeMinValue; + private boolean includeMaxValue; - public KpiValueRange(KpiValue kpiMinValue, KpiValue kpiMaxValue) { + public KpiValueRange( + KpiValue kpiMinValue, + KpiValue kpiMaxValue, + boolean inRange, + boolean includeMinValue, + boolean includeMaxValue) { this.kpiMinValue = kpiMinValue; this.kpiMaxValue = kpiMaxValue; + this.inRange = inRange; + this.includeMinValue = includeMinValue; + this.includeMaxValue = includeMaxValue; } - public KpiValue getKpiMinValue() { + public KpiValue getKpiMinValue() { return kpiMinValue; } - public KpiValue getKpiMaxValue() { + public KpiValue getKpiMaxValue() { return kpiMaxValue; } + public boolean getInRange() { + return inRange; + } + + public boolean getIncludeMinValue() { + return includeMinValue; + } + + public boolean getIncludeMaxValue() { + return includeMaxValue; + } + + public void setKpiMinValue(KpiValue kpiMinValue) { + this.kpiMinValue = kpiMinValue; + } + + public void setKpiMaxValue(KpiValue kpiMaxValue) { + this.kpiMaxValue = kpiMaxValue; + } + + public void setInRange(boolean inRange) { + this.inRange = inRange; + } + + public void setIncludeMinValue(boolean includeMinValue) { + this.includeMinValue = includeMinValue; + } + + public void setIncludeMaxValue(boolean includeMaxValue) { + this.includeMaxValue = includeMaxValue; + } + @Override public String toString() { return String.format("%s:{%s, %s}", getClass().getSimpleName(), kpiMinValue, kpiMaxValue); diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java deleted file mode 100644 index faaa49c34..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -* 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 eu.teraflow.policy.acl.AclAction; -import eu.teraflow.policy.acl.AclEntry; -import eu.teraflow.policy.acl.AclForwardActionEnum; -import eu.teraflow.policy.acl.AclLogActionEnum; -import eu.teraflow.policy.acl.AclMatch; -import eu.teraflow.policy.acl.AclRuleSet; -import eu.teraflow.policy.acl.AclRuleTypeEnum; -import eu.teraflow.policy.context.model.ConfigRuleAcl; -import eu.teraflow.policy.context.model.ConfigRuleCustom; -import eu.teraflow.policy.context.model.ConfigRuleTypeAcl; -import eu.teraflow.policy.context.model.ConfigRuleTypeCustom; -import eu.teraflow.policy.context.model.EndPointId; -import eu.teraflow.policy.context.model.TopologyId; -import io.quarkus.test.junit.QuarkusTest; -import java.util.List; -import org.junit.jupiter.api.Test; - -@QuarkusTest -class ConfigRuleTypeTest { - - private AclMatch createAclMatch() { - - return new AclMatch(1, 2, "192.168.3.52", "192.168.4.192", 3224, 3845, 5, 10); - } - - private AclAction createAclAction() { - - return new AclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - } - - private AclEntry createAclEntry(AclMatch aclMatch, AclAction aclAction) { - - return new AclEntry(1, "aclEntryDescription", aclMatch, aclAction); - } - - @Test - void shouldExtractConfigRuleCustomFromConfigRuleTypeCustom() { - final var resourceKey = "resourceKey"; - final var resourceValue = "resourceValue"; - - final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue); - final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom); - - assertThat(configRuleTypeCustom.getConfigRuleType()).isEqualTo(expectedConfigRuleCustom); - } - - @Test - void shouldExtractConfigRuleAclFromConfigRuleTypeAcl() { - final var contextIdUuid = "contextId"; - final var topologyIdUuid = "topologyUuid"; - final var deviceIdUuid = "deviceIdUuid"; - final var endpointIdUuid = "endpointIdUuid"; - - final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid); - final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid); - - final var aclMatch = createAclMatch(); - final var aclAction = createAclAction(); - final var aclEntry = createAclEntry(aclMatch, aclAction); - - final var aclRuleSet = - new AclRuleSet( - "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry)); - - final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); - final var configRuleTypeAcl = new ConfigRuleTypeAcl(expectedConfigRuleAcl); - - assertThat(configRuleTypeAcl.getConfigRuleType()).isEqualTo(expectedConfigRuleAcl); - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java deleted file mode 100644 index 6389a3599..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* -* 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 eu.teraflow.policy.context.model.ConstraintCustom; -import eu.teraflow.policy.context.model.ConstraintEndPointLocation; -import eu.teraflow.policy.context.model.ConstraintSchedule; -import eu.teraflow.policy.context.model.ConstraintSlaAvailability; -import eu.teraflow.policy.context.model.ConstraintSlaCapacity; -import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel; -import eu.teraflow.policy.context.model.ConstraintSlaLatency; -import eu.teraflow.policy.context.model.ConstraintTypeCustom; -import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation; -import eu.teraflow.policy.context.model.ConstraintTypeSchedule; -import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability; -import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity; -import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel; -import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency; -import eu.teraflow.policy.context.model.EndPointId; -import eu.teraflow.policy.context.model.IsolationLevelEnum; -import eu.teraflow.policy.context.model.Location; -import eu.teraflow.policy.context.model.LocationTypeRegion; -import eu.teraflow.policy.context.model.TopologyId; -import io.quarkus.test.junit.QuarkusTest; -import java.util.List; -import org.junit.jupiter.api.Test; - -@QuarkusTest -class ConstraintTypeTest { - - @Test - void shouldExtractConstraintCustomFromConstraintTypeCustom() { - final var constraintType = "constraintType"; - final var constraintValue = "constraintValue"; - - final var expectedConstraintCustom = new ConstraintCustom(constraintType, constraintValue); - final var constraintTypeCustom = new ConstraintTypeCustom(expectedConstraintCustom); - - assertThat(constraintTypeCustom.getConstraintType()).isEqualTo(expectedConstraintCustom); - } - - @Test - void shouldExtractConstraintEndPointLocationFromConstraintTypeEndPointLocation() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var locationType = new LocationTypeRegion("ATH"); - final var location = new Location(locationType); - - final var expectedConstraintEndPointLocation = - new ConstraintEndPointLocation(endPointId, location); - final var constraintTypeEndPointLocation = - new ConstraintTypeEndPointLocation(expectedConstraintEndPointLocation); - - assertThat(constraintTypeEndPointLocation.getConstraintType()) - .isEqualTo(expectedConstraintEndPointLocation); - } - - @Test - void shouldExtractConstraintScheduleFromConstraintTypeSchedule() { - final var startTimestamp = 4.7f; - final var durationDays = 97.4f; - - final var expectedConstraintSchedule = new ConstraintSchedule(startTimestamp, durationDays); - final var constraintTypeSchedule = new ConstraintTypeSchedule(expectedConstraintSchedule); - - assertThat(constraintTypeSchedule.getConstraintType()).isEqualTo(expectedConstraintSchedule); - } - - @Test - void shouldExtractConstraintSlaAvailabilityFromConstraintTypeSlaAvailability() { - final var numDisjointPaths = 88; - final var allActive = false; - - final var expectedConstraintSlaAvailability = - new ConstraintSlaAvailability(numDisjointPaths, allActive); - final var constraintTypeSlaAvailability = - new ConstraintTypeSlaAvailability(expectedConstraintSlaAvailability); - - assertThat(constraintTypeSlaAvailability.getConstraintType()) - .isEqualTo(expectedConstraintSlaAvailability); - } - - @Test - void shouldExtractConstraintSlaCapacityFromConstraintTypeSlaCapacity() { - final var capacityGbps = 0.2f; - - final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); - final var constraintTypeSlaCapacity = - new ConstraintTypeSlaCapacity(expectedConstraintSlaCapacity); - - assertThat(constraintTypeSlaCapacity.getConstraintType()) - .isEqualTo(expectedConstraintSlaCapacity); - } - - @Test - void shouldExtractConstraintSlaIsolationLevelFromConstraintTypeSlaIsolationLevel() { - final var expectedConstraintSlaIsolationLevel = - new ConstraintSlaIsolationLevel( - List.of(IsolationLevelEnum.PHYSICAL_ISOLATION, IsolationLevelEnum.LOGICAL_ISOLATION)); - final var constraintTypeSlaIsolationLevel = - new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel); - - assertThat(constraintTypeSlaIsolationLevel.getConstraintType()) - .isEqualTo(expectedConstraintSlaIsolationLevel); - } - - @Test - void shouldExtractConstraintSlaLatencyFromConstraintTypeSlaLatency() { - final var capacityGbps = 0.2f; - - final var expectedConstraintSlaLatency = new ConstraintSlaLatency(capacityGbps); - final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(expectedConstraintSlaLatency); - - assertThat(constraintTypeSlaLatency.getConstraintType()) - .isEqualTo(expectedConstraintSlaLatency); - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java b/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java deleted file mode 100644 index 4c113dc95..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java +++ /dev/null @@ -1,124 +0,0 @@ -/* -* 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.EndPoint; -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.TopologyId; -import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType; -import io.quarkus.test.junit.QuarkusTest; -import java.util.List; -import org.junit.jupiter.api.Test; - -@QuarkusTest -class EndPointCreationTest { - - @Test - void shouldCreateEndPointObjectGivenAllAvailableFields() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - - final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - final var expectedEndPointType = "expectedEndPointType"; - final var expectedKpiSampleTypes = - List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); - - final var expectedLocationType = new LocationTypeRegion("ATH"); - final var expectedEndPointLocation = new Location(expectedLocationType); - - final var expectedEndPoint = - new EndPoint.EndPointBuilder( - expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes) - .location(expectedEndPointLocation) - .build(); - - assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId); - assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType); - assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes); - assertThat(expectedEndPoint.getEndPointLocation()).isEqualTo(expectedEndPointLocation); - } - - @Test - void shouldCreateEndPointObjectGivenAllFieldsExceptFromLocation() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - - final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - final var expectedEndPointType = "expectedEndPointType"; - final var expectedKpiSampleTypes = - List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); - - final var expectedEndPoint = - new EndPoint.EndPointBuilder( - expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes) - .build(); - - assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId); - assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType); - assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes); - } - - @Test - void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointId() { - final var expectedEndPointType = "expectedEndPointType"; - final var expectedKpiSampleTypes = - List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); - - final var endPoint = - new EndPoint.EndPointBuilder(null, expectedEndPointType, expectedKpiSampleTypes); - - assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build); - } - - @Test - void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointType() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - - final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - final var expectedKpiSampleTypes = - List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); - - final var endPoint = - new EndPoint.EndPointBuilder(expectedEndPointId, null, expectedKpiSampleTypes); - - assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build); - } - - @Test - void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingKpiSampleTypes() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - - final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - final var expectedEndPointType = "expectedEndPointType"; - - final var endPoint = - new EndPoint.EndPointBuilder(expectedEndPointId, expectedEndPointType, null); - - assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build); - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java deleted file mode 100644 index d89d62c63..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* -* 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 eu.teraflow.policy.context.model.GpsPosition; -import eu.teraflow.policy.context.model.LocationTypeGpsPosition; -import eu.teraflow.policy.context.model.LocationTypeRegion; -import io.quarkus.test.junit.QuarkusTest; -import org.junit.jupiter.api.Test; - -@QuarkusTest -class LocationTypeTest { - - @Test - void shouldExtractRegionFromLocationTypeRegion() { - final var expectedRegion = "ATH"; - - final var locationTypeRegion = new LocationTypeRegion(expectedRegion); - - assertThat(locationTypeRegion.getLocationType()).isEqualTo(expectedRegion); - } - - @Test - void shouldExtractLocationGpsPositionFromLocationTypeGpsPosition() { - final var latitude = 3.99f; - final var longitude = 77.32f; - - final var expectedLocationGpsPosition = new GpsPosition(latitude, longitude); - final var locationTypeGpsPosition = new LocationTypeGpsPosition(expectedLocationGpsPosition); - - assertThat(locationTypeGpsPosition.getLocationType()).isEqualTo(expectedLocationGpsPosition); - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java deleted file mode 100644 index 53cddf6be..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java +++ /dev/null @@ -1,359 +0,0 @@ -/* -* 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.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.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 PolicyRuleBasicValidationTest { - - private PolicyRuleBasic createPolicyRuleBasic( - String policyRuleId, - int priority, - PolicyRuleState policyRuleState, - BooleanOperator booleanOperator, - List policyRuleConditions, - List policyRuleActions) { - - return new PolicyRuleBasic( - policyRuleId, - policyRuleState, - priority, - policyRuleConditions, - booleanOperator, - policyRuleActions); - } - - private List createPolicyRuleConditions( - String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) { - final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); - - return List.of(policyRuleCondition); - } - - private List createPolicyRuleActions( - PolicyRuleActionEnum policyRuleActionEnum, List parameters) { - final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); - - return List.of(policyRuleAction); - } - - @Test - void shouldThrowNullPointerExceptionGivenNullPolicyRuleId() { - 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); - - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - null, - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions)); - } - - @Test - void shouldThrowIllegalArgumentExceptionGivenEmptyPolicyRuleId() { - 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_ADD_SERVICE_CONFIGRULE, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_ENFORCED); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - "", - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions)); - } - - @Test - void shouldThrowIllegalArgumentExceptionGivenWhiteSpacedPolicyRuleId() { - final var policyRuleConditions = - createPolicyRuleConditions( - UUID.randomUUID().toString(), - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, - new IntegerKpiValue(3)); - final var policyRuleActions = - createPolicyRuleActions( - PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_ENFORCED); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - " ", - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions)); - } - - @Test - void shouldThrowIllegalArgumentExceptionGivenNegativePriority() { - 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_SET_DEVICE_STATUS, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_INSERTED); - - final var policyRuleId = UUID.randomUUID().toString(); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - policyRuleId, - -3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions)); - } - - @Test - void shouldThrowNullPointerExceptionGivenNullPolicyRuleConditions() { - 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_ENFORCED); - - final var policyRuleId = UUID.randomUUID().toString(); - - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - policyRuleId, - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - null, - policyRuleActions)); - } - - @Test - void shouldThrowIllegalArgumentExceptionGivenEmptyPolicyRuleConditions() { - final var policyRuleConditions = Collections.emptyList(); - 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_REMOVED); - - final var policyRuleId = UUID.randomUUID().toString(); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - policyRuleId, - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions)); - } - - @Test - void shouldThrowIllegalArgumentExceptionGivenUndefinedBooleanOperator() { - 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_ADD_SERVICE_CONFIGRULE, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED); - - final var policyRuleId = UUID.randomUUID().toString(); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - policyRuleId, - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED, - policyRuleConditions, - policyRuleActions)); - } - - @Test - void shouldThrowNullPointerExceptionGivenNullPolicyRuleActions() { - final var policyRuleConditions = - createPolicyRuleConditions( - UUID.randomUUID().toString(), - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - new IntegerKpiValue(3)); - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_PROVISIONED); - - final var policyRuleId = UUID.randomUUID().toString(); - - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - policyRuleId, - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - null)); - } - - @Test - void shouldThrowIllegalArgumentExceptionGivenEmptyPolicyPolicyRuleActions() { - final var policyRuleConditions = - createPolicyRuleConditions( - UUID.randomUUID().toString(), - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - new IntegerKpiValue(3)); - final var policyRuleActions = Collections.emptyList(); - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_FAILED); - - final var policyRuleId = UUID.randomUUID().toString(); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleBasic( - policyRuleId, - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions)); - } - - @Test - void shouldCreatePolicyRuleBasicObject() { - final var expectedPolicyRuleId = "expectedPolicyRuleId"; - final var expectedPolicyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); - final var expectedPriority = 3; - - final var firstKpiValue = new IntegerKpiValue(22); - - final var firstExpectedPolicyRuleCondition = - new PolicyRuleCondition( - "firstExpectedPolicyRuleConditionVariable", - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - firstKpiValue); - - final var expectedPolicyRuleConditions = List.of(firstExpectedPolicyRuleCondition); - - final var expectedBooleanOperator = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR; - - final var firstExpectedPolicyRuleAction = - new PolicyRuleAction( - PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of("parameter1", "parameter2")); - - final var expectedPolicyRuleActions = List.of(firstExpectedPolicyRuleAction); - - final var expectedPolicyRuleBasic = - new PolicyRuleBasic( - expectedPolicyRuleId, - expectedPolicyRuleState, - expectedPriority, - expectedPolicyRuleConditions, - expectedBooleanOperator, - expectedPolicyRuleActions); - - final var policyRuleConditions = - createPolicyRuleConditions( - "firstExpectedPolicyRuleConditionVariable", - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - new IntegerKpiValue(22)); - final var policyRuleActions = - createPolicyRuleActions( - PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of("parameter1", "parameter2")); - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); - - final var policyRuleBasic = - createPolicyRuleBasic( - "expectedPolicyRuleId", - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions); - - assertThat(policyRuleBasic).usingRecursiveComparison().isEqualTo(expectedPolicyRuleBasic); - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java deleted file mode 100644 index 635876dcb..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* -* 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.model.NumericalOperator; -import eu.teraflow.policy.model.PolicyRuleCondition; -import eu.teraflow.policy.monitoring.model.BooleanKpiValue; -import eu.teraflow.policy.monitoring.model.FloatKpiValue; -import eu.teraflow.policy.monitoring.model.IntegerKpiValue; -import eu.teraflow.policy.monitoring.model.KpiValue; -import eu.teraflow.policy.monitoring.model.StringKpiValue; -import io.quarkus.test.junit.QuarkusTest; -import java.util.stream.Stream; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.mockito.Mockito; - -@QuarkusTest -class PolicyRuleConditionValidationTest { - - private PolicyRuleCondition createPolicyRuleCondition( - String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) { - - return new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); - } - - private static Stream provideKpiValues() { - return Stream.of( - Arguments.of(new StringKpiValue("stringKpiValue")), - Arguments.of(new BooleanKpiValue(true)), - Arguments.of(new IntegerKpiValue(44)), - Arguments.of(new FloatKpiValue(12.3f))); - } - - @ParameterizedTest - @MethodSource("provideKpiValues") - void shouldThrowNullPointerExceptionGivenNullKpiId(KpiValue kpiValue) { - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy( - () -> - createPolicyRuleCondition( - null, - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - kpiValue)); - } - - @ParameterizedTest - @MethodSource("provideKpiValues") - void shouldThrowIllegalArgumentExceptionGivenEmptyKpiId(KpiValue kpiValue) { - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleCondition( - "", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, kpiValue)); - } - - @ParameterizedTest - @MethodSource("provideKpiValues") - void shouldThrowIllegalArgumentExceptionGivenWhiteSpacedKpiId(KpiValue kpiValue) { - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleCondition( - " ", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, kpiValue)); - } - - @ParameterizedTest - @MethodSource("provideKpiValues") - void shouldThrowIllegalArgumentExceptionGivenUndefinedNumericalOperator(KpiValue kpiValue) { - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleCondition( - "kpiId", - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED, - kpiValue)); - } - - @Test - void shouldThrowNullPointerExceptionGivenNullKpiValue() { - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy( - () -> - createPolicyRuleCondition( - "kpiId", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, null)); - } - - @Test - void shouldThrowIllegalArgumentExceptionIfIsKpiValueIsOfInvalidType() { - final var kpiValue = Mockito.mock(KpiValue.class); - Mockito.when(kpiValue.getValue()).thenReturn(1_2L); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy( - () -> - createPolicyRuleCondition( - "kpiId", - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - kpiValue)); - } - - @ParameterizedTest - @MethodSource("provideKpiValues") - void shouldCreatePolicyRuleConditionObject(KpiValue kpiValue) { - final var expectedKpiId = "expectedKpiId"; - final var expectedNumericalOperator = - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN; - - final var expectedPolicyRuleCondition = - new PolicyRuleCondition(expectedKpiId, expectedNumericalOperator, kpiValue); - - final var policyRuleCondition = - createPolicyRuleCondition( - "expectedKpiId", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, kpiValue); - - assertThat(policyRuleCondition) - .usingRecursiveComparison() - .isEqualTo(expectedPolicyRuleCondition); - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java deleted file mode 100644 index 064cd7ee0..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java +++ /dev/null @@ -1,178 +0,0 @@ -/* -* 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.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.PolicyRuleDevice; -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 PolicyRuleDeviceValidationTest { - - private PolicyRuleBasic createPolicyRuleBasic( - String policyRuleId, - int priority, - PolicyRuleState policyRuleState, - BooleanOperator booleanOperator, - List policyRuleConditions, - List policyRuleActions) { - - return new PolicyRuleBasic( - policyRuleId, - policyRuleState, - priority, - policyRuleConditions, - booleanOperator, - policyRuleActions); - } - - private List createPolicyRuleConditions( - String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) { - final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); - - return List.of(policyRuleCondition); - } - - private List createPolicyRuleActions( - PolicyRuleActionEnum policyRuleActionEnum, List parameters) { - final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); - - return List.of(policyRuleAction); - } - - private PolicyRuleDevice createPolicyRuleDevice( - PolicyRuleBasic policyRuleBasic, List deviceIds) { - - return new PolicyRuleDevice(policyRuleBasic, deviceIds); - } - - private List createDeviceIds() { - return List.of("deviceId1", "deviceId2"); - } - - @Test - void shouldThrowNullPointerExceptionGivenNullPolicyRuleBasic() { - final var deviceIds = createDeviceIds(); - - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy(() -> createPolicyRuleDevice(null, deviceIds)); - } - - @Test - void shouldThrowNullPointerExceptionGivenNullDeviceIds() { - 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); - - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, null)); - } - - @Test - void shouldThrowIllegalArgumentExceptionGivenEmptyDeviceIds() { - 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_CONFIGRULE, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); - - final var policyRuleBasic = - createPolicyRuleBasic( - "policyRuleId1", - 213, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, - policyRuleConditions, - policyRuleActions); - - final var deviceIds = Collections.emptyList(); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, deviceIds)); - } - - @Test - void shouldCreatePolicyRuleDeviceObject() { - final var policyRuleConditions = - createPolicyRuleConditions( - UUID.randomUUID().toString(), - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, - 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", - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions); - - final var deviceIds = createDeviceIds(); - - final var expectedPolicyRuleDevice = new PolicyRuleDevice(policyRuleBasic, deviceIds); - - final var policyRuleDevice = createPolicyRuleDevice(policyRuleBasic, deviceIds); - - assertThat(policyRuleDevice).usingRecursiveComparison().isEqualTo(expectedPolicyRuleDevice); - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java deleted file mode 100644 index b565b7e75..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java +++ /dev/null @@ -1,222 +0,0 @@ -/* -* 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 createPolicyRuleConditions( - String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) { - final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); - - return List.of(policyRuleCondition); - } - - private List createPolicyRuleActions( - PolicyRuleActionEnum policyRuleActionEnum, List parameters) { - final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); - - return List.of(policyRuleAction); - } - - private PolicyRuleBasic createPolicyRuleBasic( - String policyRuleId, - int priority, - PolicyRuleState policyRuleState, - BooleanOperator booleanOperator, - List policyRuleConditions, - List policyRuleActions) { - - return new PolicyRuleBasic( - policyRuleId, - policyRuleState, - priority, - policyRuleConditions, - booleanOperator, - policyRuleActions); - } - - private ServiceId createServiceId(String contextId, String id) { - return new ServiceId(contextId, id); - } - - private List createDeviceIds() { - return List.of("deviceIdA", "deviceIdB"); - } - - private PolicyRuleService createPolicyRuleService( - PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List 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.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); - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java index 3f1232432..f99889556 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java @@ -18,14 +18,12 @@ package eu.teraflow.policy; import static org.assertj.core.api.Assertions.assertThat; -import context.ContextOuterClass; import context.ContextOuterClass.Uuid; import eu.teraflow.policy.monitoring.model.FloatKpiValue; import eu.teraflow.policy.monitoring.model.IntegerKpiValue; import io.quarkus.grpc.GrpcClient; import io.quarkus.test.junit.QuarkusTest; import java.util.List; -import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -57,6 +55,20 @@ class PolicyServiceTest { this.serializer = serializer; } + private context.ContextOuterClass.ServiceId createContextServiceId() { + final var contextIdUuid = serializer.serializeUuid("571eabc1-0f59-48da-b608-c45876c3fa8a"); + + final var serviceIdUuid = serializer.serializeUuid("123456789"); + + context.ContextOuterClass.ContextId contextId = + context.ContextOuterClass.ContextId.newBuilder().setContextUuid(contextIdUuid).build(); + + return context.ContextOuterClass.ServiceId.newBuilder() + .setContextId(contextId) + .setServiceUuid(serviceIdUuid) + .build(); + } + private PolicyRuleBasic createPolicyRuleBasic() { final var expectedPolicyRuleIdUuid = serializer.serializeUuid("571eabc1-0f59-48da-b608-c45876c3fa8a"); @@ -128,189 +140,20 @@ class PolicyServiceTest { final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState(); - final var policyRuleService = - Policy.PolicyRuleService.newBuilder().setPolicyRuleBasic(policyRuleBasic).build(); - - client - .policyAddService(policyRuleService) - .subscribe() - .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); - - assertThat(message.get(5, TimeUnit.SECONDS)) - .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); - } - - @Test - void shouldAddPolicyDevice() throws ExecutionException, InterruptedException, TimeoutException { - CompletableFuture message = new CompletableFuture<>(); - - final var expectedDeviceIdUuid1 = - serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257"); - final var expectedDeviceIdUuid2 = - serializer.serializeUuid("095974ac-d757-412d-b317-bcf355220aa9"); + final var serviceId = createContextServiceId(); - final var expectedDeviceId1 = - ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid1).build(); - final var expectedDeviceId2 = - ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid2).build(); - - final var policyRuleBasic = createPolicyRuleBasic(); - final var deviceIds = List.of(expectedDeviceId1, expectedDeviceId2); - - final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState(); - - final var policyRuleDevice = - Policy.PolicyRuleDevice.newBuilder() - .setPolicyRuleBasic(policyRuleBasic) - .addAllDeviceList(deviceIds) - .build(); - - client - .policyAddDevice(policyRuleDevice) - .subscribe() - .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); - - assertThat(message.get(5, TimeUnit.SECONDS)) - .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); - } - - @Test - void shouldUpdatePolicyService() - throws ExecutionException, InterruptedException, TimeoutException { - CompletableFuture message = new CompletableFuture<>(); - - final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_ENFORCED).build(); - - final var policyRuleBasic = - PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build(); final var policyRuleService = - Policy.PolicyRuleService.newBuilder().setPolicyRuleBasic(policyRuleBasic).build(); - - client - .policyUpdateService(policyRuleService) - .subscribe() - .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); - - assertThat(message.get(5, TimeUnit.SECONDS)) - .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); - } - - @Test - void shouldUpdatePolicyDevice() - throws ExecutionException, InterruptedException, TimeoutException { - CompletableFuture message = new CompletableFuture<>(); - - final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_ENFORCED).build(); - - final var policyRuleBasic = - PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build(); - final var policyRuleDevice = - Policy.PolicyRuleDevice.newBuilder().setPolicyRuleBasic(policyRuleBasic).build(); - - client - .policyUpdateDevice(policyRuleDevice) - .subscribe() - .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); - - assertThat(message.get(5, TimeUnit.SECONDS)) - .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); - } - - @Test - void shouldDeletePolicy() throws ExecutionException, InterruptedException, TimeoutException { - CompletableFuture message = new CompletableFuture<>(); - - final var uuid = - ContextOuterClass.Uuid.newBuilder() - .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString()) + Policy.PolicyRuleService.newBuilder() + .setPolicyRuleBasic(policyRuleBasic) + .setServiceId(serviceId) .build(); - final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build(); - - final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_REMOVED).build(); client - .policyDelete(policyRuleId) + .policyAddService(policyRuleService) .subscribe() .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); assertThat(message.get(5, TimeUnit.SECONDS)) .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); } - - @Test - void shouldGetPolicyService() throws ExecutionException, InterruptedException, TimeoutException { - CompletableFuture message = new CompletableFuture<>(); - - final var uuid = - ContextOuterClass.Uuid.newBuilder() - .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString()) - .build(); - final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build(); - - client - .getPolicyService(policyRuleId) - .subscribe() - .with( - policyRuleService -> { - LOGGER.infof( - "Getting policy with ID: %s", - policyRuleService.getPolicyRuleBasic().getPolicyRuleId().getUuid()); - message.complete( - policyRuleService.getPolicyRuleBasic().getPolicyRuleId().getUuid().getUuid()); - }); - - assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(policyRuleId.getUuid().getUuid()); - } - - @Test - void shouldGetPolicyDevice() throws ExecutionException, InterruptedException, TimeoutException { - CompletableFuture message = new CompletableFuture<>(); - - final var uuid = - ContextOuterClass.Uuid.newBuilder() - .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString()) - .build(); - final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build(); - - client - .getPolicyDevice(policyRuleId) - .subscribe() - .with( - policyRuleService -> { - LOGGER.infof( - "Getting policy with ID: %s", - policyRuleService.getPolicyRuleBasic().getPolicyRuleId().getUuid()); - message.complete( - policyRuleService.getPolicyRuleBasic().getPolicyRuleId().getUuid().getUuid()); - }); - - assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(policyRuleId.getUuid().getUuid()); - } - - @Test - void shouldGetPolicyByServiceId() - throws ExecutionException, InterruptedException, TimeoutException { - - CompletableFuture message = new CompletableFuture<>(); - - final var uuid = - ContextOuterClass.Uuid.newBuilder() - .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString()) - .build(); - final var serviceId = ContextOuterClass.ServiceId.newBuilder().setServiceUuid(uuid).build(); - - client - .getPolicyByServiceId(serviceId) - .subscribe() - .with( - policyRuleList -> { - LOGGER.infof("Getting policyRuleList with ID: %s", policyRuleList); - message.complete(policyRuleList.toString()); - }); - - assertThat(message.get(5, TimeUnit.SECONDS)).isEmpty(); - } } diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java deleted file mode 100644 index fa0495217..000000000 --- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java +++ /dev/null @@ -1,3880 +0,0 @@ -/* -* 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 -*provideKpiValueRanges -* 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 acl.Acl; -import context.ContextOuterClass; -import context.ContextOuterClass.ContextId; -import context.ContextOuterClass.DeviceId; -import context.ContextOuterClass.DeviceOperationalStatusEnum; -import context.ContextOuterClass.Uuid; -import eu.teraflow.policy.acl.AclAction; -import eu.teraflow.policy.acl.AclEntry; -import eu.teraflow.policy.acl.AclForwardActionEnum; -import eu.teraflow.policy.acl.AclLogActionEnum; -import eu.teraflow.policy.acl.AclMatch; -import eu.teraflow.policy.acl.AclRuleSet; -import eu.teraflow.policy.acl.AclRuleTypeEnum; -import eu.teraflow.policy.context.model.ConfigActionEnum; -import eu.teraflow.policy.context.model.ConfigRule; -import eu.teraflow.policy.context.model.ConfigRuleAcl; -import eu.teraflow.policy.context.model.ConfigRuleCustom; -import eu.teraflow.policy.context.model.ConfigRuleTypeAcl; -import eu.teraflow.policy.context.model.ConfigRuleTypeCustom; -import eu.teraflow.policy.context.model.Constraint; -import eu.teraflow.policy.context.model.ConstraintCustom; -import eu.teraflow.policy.context.model.ConstraintEndPointLocation; -import eu.teraflow.policy.context.model.ConstraintSchedule; -import eu.teraflow.policy.context.model.ConstraintSlaAvailability; -import eu.teraflow.policy.context.model.ConstraintSlaCapacity; -import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel; -import eu.teraflow.policy.context.model.ConstraintSlaLatency; -import eu.teraflow.policy.context.model.ConstraintTypeCustom; -import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation; -import eu.teraflow.policy.context.model.ConstraintTypeSchedule; -import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability; -import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity; -import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel; -import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency; -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.EndPointBuilder; -import eu.teraflow.policy.context.model.EndPointId; -import eu.teraflow.policy.context.model.Event; -import eu.teraflow.policy.context.model.EventTypeEnum; -import eu.teraflow.policy.context.model.GpsPosition; -import eu.teraflow.policy.context.model.IsolationLevelEnum; -import eu.teraflow.policy.context.model.Location; -import eu.teraflow.policy.context.model.LocationTypeGpsPosition; -import eu.teraflow.policy.context.model.LocationTypeRegion; -import eu.teraflow.policy.context.model.Service; -import eu.teraflow.policy.context.model.ServiceConfig; -import eu.teraflow.policy.context.model.ServiceId; -import eu.teraflow.policy.context.model.ServiceStatus; -import eu.teraflow.policy.context.model.ServiceStatusEnum; -import eu.teraflow.policy.context.model.ServiceTypeEnum; -import eu.teraflow.policy.context.model.SliceId; -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; -import eu.teraflow.policy.model.PolicyRuleActionEnum; -import eu.teraflow.policy.model.PolicyRuleBasic; -import eu.teraflow.policy.model.PolicyRuleCondition; -import eu.teraflow.policy.model.PolicyRuleDevice; -import eu.teraflow.policy.model.PolicyRuleService; -import eu.teraflow.policy.model.PolicyRuleState; -import eu.teraflow.policy.model.RuleState; -import eu.teraflow.policy.monitoring.model.AlarmDescriptor; -import eu.teraflow.policy.monitoring.model.AlarmResponse; -import eu.teraflow.policy.monitoring.model.BooleanKpiValue; -import eu.teraflow.policy.monitoring.model.FloatKpiValue; -import eu.teraflow.policy.monitoring.model.IntegerKpiValue; -import eu.teraflow.policy.monitoring.model.Kpi; -import eu.teraflow.policy.monitoring.model.KpiDescriptor; -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 io.quarkus.test.junit.QuarkusTest; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import javax.inject.Inject; -import kpi_sample_types.KpiSampleTypes; -import monitoring.Monitoring; -import monitoring.Monitoring.AlarmID; -import monitoring.Monitoring.KpiId; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import policy.Policy; -import policy.Policy.PolicyRuleId; -import policy.PolicyAction; -import policy.PolicyCondition; - -@QuarkusTest -class SerializerTest { - @Inject Serializer serializer; - - private AclMatch createAclMatch( - int dscp, - int protocol, - String srcAddress, - String dstAddress, - int srcPort, - int dstPort, - int startMplsLabel, - int endMplsLabel) { - return new AclMatch( - dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel); - } - - private AclAction createAclAction( - AclForwardActionEnum forwardActionEnum, AclLogActionEnum logActionEnum) { - - return new AclAction(forwardActionEnum, logActionEnum); - } - - private AclEntry createAclEntry( - int sequenceId, String description, AclMatch aclMatch, AclAction aclAction) { - - return new AclEntry(sequenceId, description, aclMatch, aclAction); - } - - private PolicyRuleBasic createPolicyRuleBasic() { - final var expectedPolicyRuleId = "expectedPolicyRuleId"; - final var expectedPolicyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); - final var expectedPriority = 3; - - final var firstKpiValue = new IntegerKpiValue(22); - final var secondKpiValue = new FloatKpiValue(69.1f); - - final var firstExpectedPolicyRuleCondition = - new PolicyRuleCondition( - "firstExpectedPolicyRuleConditionVariable", - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - firstKpiValue); - final var secondExpectedPolicyRuleCondition = - new PolicyRuleCondition( - "secondExpectedPolicyRuleConditionVariable", - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL, - secondKpiValue); - - final var expectedPolicyRuleConditions = - List.of(firstExpectedPolicyRuleCondition, secondExpectedPolicyRuleCondition); - - final var expectedBooleanOperator = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR; - - final var firstExpectedPolicyRuleAction = - new PolicyRuleAction( - PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of("parameter1", "parameter2")); - - final var secondExpectedPolicyRuleAction = - new PolicyRuleAction( - PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, - List.of("parameter3", "parameter4")); - - final var expectedPolicyRuleActions = - List.of(firstExpectedPolicyRuleAction, secondExpectedPolicyRuleAction); - - return new PolicyRuleBasic( - expectedPolicyRuleId, - expectedPolicyRuleState, - expectedPriority, - expectedPolicyRuleConditions, - expectedBooleanOperator, - expectedPolicyRuleActions); - } - - private ConfigRule createConfigRule() { - final var contextIdUuid = "contextId"; - final var topologyIdUuid = "topologyUuid"; - final var deviceIdUuid = "deviceIdUuid"; - final var endpointIdUuid = "endpointIdUuid"; - - final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid); - final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid); - - final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2); - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction); - - final var aclRuleSet = - new AclRuleSet( - "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry)); - - final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); - final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl); - - return new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl); - } - - @Test - void shouldSerializeDeviceId() { - final var deviceId = "deviceId"; - - final var deviceIdUuid = serializer.serializeUuid(deviceId); - final var expectedDeviceId = - ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(deviceIdUuid).build(); - - final var serializedDeviceId = serializer.serializeDeviceId(deviceId); - - assertThat(serializedDeviceId).usingRecursiveComparison().isEqualTo(expectedDeviceId); - } - - @Test - void shouldDeserializeDeviceId() { - final var expectedDeviceId = "expectedDeviceId"; - - final var serializedDeviceIdUuid = serializer.serializeUuid(expectedDeviceId); - final var serializedDeviceId = - DeviceId.newBuilder().setDeviceUuid(serializedDeviceIdUuid).build(); - - final var deviceId = serializer.deserialize(serializedDeviceId); - - assertThat(deviceId).isEqualTo(expectedDeviceId); - } - - @Test - void shouldSerializeContextId() { - final var contextId = "contextId"; - - final var contextIdUuid = serializer.serializeUuid(contextId); - - final var expectedContextId = - ContextOuterClass.ContextId.newBuilder().setContextUuid(contextIdUuid).build(); - - final var serializedContextId = serializer.serializeContextId(contextId); - - assertThat(serializedContextId).usingRecursiveComparison().isEqualTo(expectedContextId); - } - - @Test - void shouldDeserializeContextId() { - final var expectedContextId = "expectedContextId"; - - final var serializedContextIdUuid = serializer.serializeUuid(expectedContextId); - final var serializedContextId = - ContextId.newBuilder().setContextUuid(serializedContextIdUuid).build(); - - final var contextId = serializer.deserialize(serializedContextId); - - assertThat(contextId).isEqualTo(expectedContextId); - } - - @Test - void shouldSerializePolicyRuleId() { - final var policyRuleId = "policyRuleId"; - - final var policyRuleIdUuid = serializer.serializeUuid(policyRuleId); - final var expectedPolicyRuleId = - Policy.PolicyRuleId.newBuilder().setUuid(policyRuleIdUuid).build(); - - final var serializedPolicyRuleId = serializer.serializePolicyRuleId(policyRuleId); - - assertThat(serializedPolicyRuleId).usingRecursiveComparison().isEqualTo(expectedPolicyRuleId); - } - - @Test - void shouldDeserializePolicyRuleId() { - final var expectedPolicyRuleId = "expectedPolicyRuleId"; - - final var serializedPolicyRuleIdUuid = serializer.serializeUuid(expectedPolicyRuleId); - final var serializedPolicyRuleId = - PolicyRuleId.newBuilder().setUuid(serializedPolicyRuleIdUuid).build(); - - final var policyRuleId = serializer.deserialize(serializedPolicyRuleId); - - assertThat(policyRuleId).isEqualTo(expectedPolicyRuleId); - } - - @Test - void shouldSerializeTopologyId() { - final var expectedContextId = "expectedContextId"; - final var expectedId = "expectedId"; - final var topologyId = new TopologyId(expectedContextId, expectedId); - - final var serializedContextId = serializer.serializeContextId(expectedContextId); - final var serializedIdUuid = serializer.serializeUuid(expectedId); - - final var expectedTopologyId = - ContextOuterClass.TopologyId.newBuilder() - .setContextId(serializedContextId) - .setTopologyUuid(serializedIdUuid) - .build(); - - final var serializedTopologyId = serializer.serialize(topologyId); - - assertThat(serializedTopologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId); - } - - @Test - void shouldDeserializeTopologyId() { - final var expectedContextId = "expectedContextId"; - final var expectedId = "expectedId"; - - final var expectedTopologyId = new TopologyId(expectedContextId, expectedId); - - final var serializedTopologyId = serializer.serialize(expectedTopologyId); - final var topologyId = serializer.deserialize(serializedTopologyId); - - assertThat(topologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId); - } - - private static Stream provideConfigActionEnum() { - return Stream.of( - Arguments.of(ConfigActionEnum.SET, ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET), - Arguments.of( - ConfigActionEnum.DELETE, ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE), - Arguments.of( - ConfigActionEnum.UNDEFINED, ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideConfigActionEnum") - void shouldSerializeConfigActionEnum( - ConfigActionEnum configActionEnum, - ContextOuterClass.ConfigActionEnum expectedConfigActionEnum) { - final var serializedType = serializer.serialize(configActionEnum); - assertThat(serializedType.getNumber()).isEqualTo(expectedConfigActionEnum.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideConfigActionEnum") - void shouldDeserializeConfigActionEnum( - ConfigActionEnum expectedConfigActionEnum, - ContextOuterClass.ConfigActionEnum serializedConfigActionEnum) { - - final var configActionEnum = serializer.deserialize(serializedConfigActionEnum); - - assertThat(configActionEnum).isEqualTo(expectedConfigActionEnum); - } - - private static Stream provideAclRuleTypeEnum() { - return Stream.of( - Arguments.of(AclRuleTypeEnum.IPV4, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4), - Arguments.of(AclRuleTypeEnum.IPV6, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6), - Arguments.of(AclRuleTypeEnum.L2, Acl.AclRuleTypeEnum.ACLRULETYPE_L2), - Arguments.of(AclRuleTypeEnum.MPLS, Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS), - Arguments.of(AclRuleTypeEnum.MIXED, Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED), - Arguments.of(AclRuleTypeEnum.UNDEFINED, Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideAclRuleTypeEnum") - void shouldSerializeAclRuleTypeEnum( - AclRuleTypeEnum aclRuleTypeEnum, Acl.AclRuleTypeEnum expectedAclRuleTypeEnum) { - final var serializedAclRuleTypeEnum = serializer.serialize(aclRuleTypeEnum); - assertThat(serializedAclRuleTypeEnum.getNumber()) - .isEqualTo(expectedAclRuleTypeEnum.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideAclRuleTypeEnum") - void shouldDeserializeAclRuleTypeEnum( - AclRuleTypeEnum expectedAclRuleTypeEnum, Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) { - final var aclRuleTypeEnum = serializer.deserialize(serializedAclRuleTypeEnum); - assertThat(aclRuleTypeEnum).isEqualTo(expectedAclRuleTypeEnum); - } - - private static Stream provideAclForwardActionEnum() { - return Stream.of( - Arguments.of(AclForwardActionEnum.DROP, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP), - Arguments.of( - AclForwardActionEnum.ACCEPT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT), - Arguments.of( - AclForwardActionEnum.REJECT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT), - Arguments.of( - AclForwardActionEnum.UNDEFINED, - Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideAclForwardActionEnum") - void shouldSerializeAclForwardActionEnum( - AclForwardActionEnum aclForwardActionEnum, - Acl.AclForwardActionEnum expectedAclForwardActionEnum) { - final var serializedAclForwardActionEnum = serializer.serialize(aclForwardActionEnum); - assertThat(serializedAclForwardActionEnum.getNumber()) - .isEqualTo(expectedAclForwardActionEnum.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideAclForwardActionEnum") - void shouldDeserializeAclForwardActionEnum( - AclForwardActionEnum expectedAclForwardActionEnum, - Acl.AclForwardActionEnum serializedAclForwardActionEnum) { - final var aclForwardActionEnum = serializer.deserialize(serializedAclForwardActionEnum); - assertThat(aclForwardActionEnum).isEqualTo(expectedAclForwardActionEnum); - } - - private static Stream provideAclLogActionEnum() { - return Stream.of( - Arguments.of(AclLogActionEnum.NO_LOG, Acl.AclLogActionEnum.ACLLOGACTION_NOLOG), - Arguments.of(AclLogActionEnum.SYSLOG, Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG), - Arguments.of(AclLogActionEnum.UNDEFINED, Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideAclLogActionEnum") - void shouldSerializeAclLogActionEnum( - AclLogActionEnum aclLogActionEnum, Acl.AclLogActionEnum expectedAclLogActionEnum) { - final var serializedAclLogActionEnum = serializer.serialize(aclLogActionEnum); - assertThat(serializedAclLogActionEnum.getNumber()) - .isEqualTo(expectedAclLogActionEnum.getNumber()); - } - - @Test - void shouldSerializeAclAction() { - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - - final var expectedAclAction = - Acl.AclAction.newBuilder() - .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT) - .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG) - .build(); - - final var serializedAclAction = serializer.serialize(aclAction); - - assertThat(serializedAclAction).usingRecursiveComparison().isEqualTo(expectedAclAction); - } - - @Test - void shouldDeserializeAclAction() { - final var expectedAclAction = - createAclAction(AclForwardActionEnum.DROP, AclLogActionEnum.NO_LOG); - - final var serializedAclAction = serializer.serialize(expectedAclAction); - final var aclAction = serializer.deserialize(serializedAclAction); - - assertThat(aclAction).usingRecursiveComparison().isEqualTo(expectedAclAction); - } - - @Test - void shouldSerializeAclMatch() { - final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2); - - final var expectedAclMatch = - Acl.AclMatch.newBuilder() - .setDscp(1) - .setProtocol(1) - .setSrcAddress("127.0.0.1") - .setDstAddress("127.0.0.2") - .setSrcPort(5601) - .setDstPort(5602) - .setStartMplsLabel(1) - .setEndMplsLabel(2) - .build(); - - final var serializedAclMatch = serializer.serialize(aclMatch); - - assertThat(serializedAclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch); - } - - @Test - void shouldDeserializeAclMatch() { - final var expectedAclMatch = createAclMatch(7, 2, "127.0.0.5", "127.0.0.6", 32456, 3123, 5, 10); - - final var serializedAclMatch = serializer.serialize(expectedAclMatch); - final var aclMatch = serializer.deserialize(serializedAclMatch); - - assertThat(aclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch); - } - - @Test - void shouldSerializeAclEntry() { - final var sequenceId = 1; - final var description = "aclEntryDescription"; - - final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - final var aclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction); - - final var serializedAclMatch = serializer.serialize(aclMatch); - final var serializedAclAction = serializer.serialize(aclAction); - - final var expectedAclEntry = - Acl.AclEntry.newBuilder() - .setSequenceId(sequenceId) - .setDescription(description) - .setMatch(serializedAclMatch) - .setAction(serializedAclAction) - .build(); - - final var serializedAclEntry = serializer.serialize(aclEntry); - - assertThat(serializedAclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry); - } - - @Test - void shouldDeserializeAclEntry() { - final var sequenceId = 7; - final var description = "aclEntryDescriptor"; - - final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - final var expectedAclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction); - - final var serializedAclEntry = serializer.serialize(expectedAclEntry); - final var aclEntry = serializer.deserialize(serializedAclEntry); - - assertThat(aclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry); - } - - @Test - void shouldSerializeAclRuleSet() { - final var sequenceId = 1; - final var aclEntryDescription = "aclEntryDescription"; - - final var aclRuleSetName = "aclRuleSetName"; - final var aclRuleSetDescription = "aclRuleSetDescription"; - final var aclRuleSetUserId = "aclRuleSetUserId"; - - final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction); - final var aclRuleSet = - new AclRuleSet( - aclRuleSetName, - AclRuleTypeEnum.MIXED, - aclRuleSetDescription, - aclRuleSetUserId, - List.of(aclEntry)); - - final var serializedAclEntry = serializer.serialize(aclEntry); - final var serializedAclEntries = List.of(serializedAclEntry); - - final var expectedAclRuleSet = - Acl.AclRuleSet.newBuilder() - .setName(aclRuleSetName) - .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED) - .setDescription(aclRuleSetDescription) - .setUserId(aclRuleSetUserId) - .addAllEntries(serializedAclEntries) - .build(); - - final var serializedAclRuleset = serializer.serialize(aclRuleSet); - - assertThat(serializedAclRuleset).usingRecursiveComparison().isEqualTo(expectedAclRuleSet); - } - - @Test - void shouldDeserializeAclRuleSet() { - final var sequenceId = 1; - final var aclEntryDescription = "aclEntryDescription"; - - final var aclRuleSetName = "aclRuleSetName"; - final var aclRuleSetDescription = "aclRuleSetDescription"; - final var aclRuleSetUserId = "aclRuleSetUserId"; - - final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction); - final var expectedAclRuleSet = - new AclRuleSet( - aclRuleSetName, - AclRuleTypeEnum.MIXED, - aclRuleSetDescription, - aclRuleSetUserId, - List.of(aclEntry)); - - final var serializedAclRuleSet = serializer.serialize(expectedAclRuleSet); - final var aclRuleSet = serializer.deserialize(serializedAclRuleSet); - - assertThat(aclRuleSet).usingRecursiveComparison().isEqualTo(expectedAclRuleSet); - } - - @ParameterizedTest - @MethodSource("provideAclLogActionEnum") - void shouldDeserializeAclLogActionEnum( - AclLogActionEnum expectedAclLogActionEnum, Acl.AclLogActionEnum serializedAclLogActionEnum) { - final var aclLogActionEnum = serializer.deserialize(serializedAclLogActionEnum); - assertThat(aclLogActionEnum).isEqualTo(expectedAclLogActionEnum); - } - - @Test - void shouldSerializeConfigRuleAcl() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - - final var sequenceId = 1; - final var aclEntryDescription = "aclEntryDescription"; - - final var aclRuleSetName = "aclRuleSetName"; - final var aclRuleSetDescription = "aclRuleSetDescription"; - final var aclRuleSetUserId = "aclRuleSetUserId"; - - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction); - final var aclRuleSet = - new AclRuleSet( - aclRuleSetName, - AclRuleTypeEnum.MIXED, - aclRuleSetDescription, - aclRuleSetUserId, - List.of(aclEntry)); - - final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); - - final var serializedEndPointId = serializer.serialize(endPointId); - final var serializedAclRuleSet = serializer.serialize(aclRuleSet); - - final var expectedConfigRuleAcl = - ContextOuterClass.ConfigRule_ACL.newBuilder() - .setEndpointId(serializedEndPointId) - .setRuleSet(serializedAclRuleSet) - .build(); - - final var serializedConfigRuleAcl = serializer.serialize(configRuleAcl); - - assertThat(serializedConfigRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl); - } - - @Test - void shouldDeserializeConfigRuleAcl() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - - final var sequenceId = 1; - final var aclEntryDescription = "aclEntryDescription"; - - final var aclRuleSetName = "aclRuleSetName"; - final var aclRuleSetDescription = "aclRuleSetDescription"; - final var aclRuleSetUserId = "aclRuleSetUserId"; - - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction); - final var aclRuleSet = - new AclRuleSet( - aclRuleSetName, - AclRuleTypeEnum.MIXED, - aclRuleSetDescription, - aclRuleSetUserId, - List.of(aclEntry)); - - final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); - - final var serializedConfigRuleAcl = serializer.serialize(expectedConfigRuleAcl); - final var configRuleAcl = serializer.deserialize(serializedConfigRuleAcl); - - assertThat(configRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl); - } - - @Test - void shouldSerializeConfigRuleCustom() { - final var resourceKey = "resourceKey"; - final var resourceValue = "resourceValue"; - - final var configRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue); - - final var expectedConfigRuleCustom = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey(resourceKey) - .setResourceValue(resourceValue) - .build(); - - final var serializedConfigRuleCustom = serializer.serialize(configRuleCustom); - - assertThat(serializedConfigRuleCustom) - .usingRecursiveComparison() - .isEqualTo(expectedConfigRuleCustom); - } - - @Test - void shouldDeserializeConfigRuleCustom() { - final var resourceKey = "resourceKey"; - final var resourceValue = "resourceValue"; - - final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue); - - final var serializedConfigRuleCustom = serializer.serialize(expectedConfigRuleCustom); - final var configRuleCustom = serializer.deserialize(serializedConfigRuleCustom); - - assertThat(configRuleCustom).usingRecursiveComparison().isEqualTo(expectedConfigRuleCustom); - } - - @Test - void shouldSerializeConfigRuleofTypeConfigRuleAcl() { - final var contextIdUuid = "contextId"; - final var topologyIdUuid = "topologyUuid"; - final var deviceIdUuid = "deviceIdUuid"; - final var endpointIdUuid = "endpointIdUuid"; - - final var expectedSerializedContextId = serializer.serializeContextId(contextIdUuid); - final var expectedSerializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid); - final var expectedSerializedDeviceId = serializer.serializeDeviceId(deviceIdUuid); - final var expectedSerializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid); - - final var expectedSerializedTopologyId = - ContextOuterClass.TopologyId.newBuilder() - .setContextId(expectedSerializedContextId) - .setTopologyUuid(expectedSerializedTopologyIdUuid) - .build(); - - final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid); - - final var expectedSerializedEndPointId = - ContextOuterClass.EndPointId.newBuilder() - .setTopologyId(expectedSerializedTopologyId) - .setDeviceId(expectedSerializedDeviceId) - .setEndpointUuid(expectedSerializedEndPointIdUuid) - .build(); - - final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid); - - final var expectedSerializedAclMatch = - Acl.AclMatch.newBuilder() - .setDscp(1) - .setProtocol(1) - .setSrcAddress("127.0.0.1") - .setDstAddress("127.0.0.2") - .setSrcPort(5601) - .setDstPort(5602) - .setStartMplsLabel(1) - .setEndMplsLabel(2) - .build(); - - final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2); - - final var expectedSerializedAclAction = - Acl.AclAction.newBuilder() - .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT) - .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG) - .build(); - - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - - final var expectedSerializedAclEntry = - Acl.AclEntry.newBuilder() - .setSequenceId(1) - .setDescription("aclEntryDescription") - .setMatch(expectedSerializedAclMatch) - .setAction(expectedSerializedAclAction) - .build(); - - final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction); - - final var expectedSerializedAclRuleSet = - Acl.AclRuleSet.newBuilder() - .setName("aclRuleName") - .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4) - .setDescription("AclRuleDescription") - .setUserId("userId") - .addEntries(expectedSerializedAclEntry) - .build(); - - final var aclRuleSet = - new AclRuleSet( - "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry)); - - final var expectedSerializedConfigRuleAcl = - ContextOuterClass.ConfigRule_ACL.newBuilder() - .setEndpointId(expectedSerializedEndPointId) - .setRuleSet(expectedSerializedAclRuleSet) - .build(); - - final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); - - final var expectedConfigRule = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) - .setAcl(expectedSerializedConfigRuleAcl) - .build(); - - final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl); - final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl); - final var serializedConfigRule = serializer.serialize(configRule); - - assertThat(serializedConfigRule).isEqualTo(expectedConfigRule); - } - - @Test - void shouldDeserializeConfigRuleOfTypeConfigRuleAcl() { - final var contextIdUuid = "contextId"; - final var topologyIdUuid = "topologyUuid"; - final var deviceIdUuid = "deviceIdUuid"; - final var endpointIdUuid = "endpointIdUuid"; - - final var serializedContextId = serializer.serializeContextId(contextIdUuid); - final var serializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid); - final var serializedDeviceId = serializer.serializeDeviceId(deviceIdUuid); - final var serializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid); - - final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid); - final var serializedTopologyId = - ContextOuterClass.TopologyId.newBuilder() - .setContextId(serializedContextId) - .setTopologyUuid(serializedTopologyIdUuid) - .build(); - - final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid); - final var serializedEndPointId = - ContextOuterClass.EndPointId.newBuilder() - .setTopologyId(serializedTopologyId) - .setDeviceId(serializedDeviceId) - .setEndpointUuid(serializedEndPointIdUuid) - .build(); - - final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); - final var serializedAclMatch = - Acl.AclMatch.newBuilder() - .setDscp(1) - .setProtocol(2) - .setSrcAddress("127.0.0.1") - .setDstAddress("127.0.0.2") - .setSrcPort(5601) - .setDstPort(5602) - .setStartMplsLabel(5) - .setEndMplsLabel(10) - .build(); - - final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); - final var serializedAclAction = - Acl.AclAction.newBuilder() - .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT) - .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG) - .build(); - - final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction); - - final var serializedAclEntry = - Acl.AclEntry.newBuilder() - .setSequenceId(1) - .setDescription("aclEntryDescription") - .setMatch(serializedAclMatch) - .setAction(serializedAclAction) - .build(); - - final var aclRuleSet = - new AclRuleSet( - "aclRuleName", - eu.teraflow.policy.acl.AclRuleTypeEnum.IPV4, - "AclRuleDescription", - "userId", - List.of(aclEntry)); - - final var serializedAclRuleSet = - Acl.AclRuleSet.newBuilder() - .setName("aclRuleName") - .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4) - .setDescription("AclRuleDescription") - .setUserId("userId") - .addEntries(serializedAclEntry) - .build(); - - final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); - final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl); - - final var expectedConfigRule = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeAcl); - - final var serializedConfigRuleAcl = - ContextOuterClass.ConfigRule_ACL.newBuilder() - .setEndpointId(serializedEndPointId) - .setRuleSet(serializedAclRuleSet) - .build(); - - final var serializedConfigRule = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) - .setAcl(serializedConfigRuleAcl) - .build(); - - final var configRule = serializer.deserialize(serializedConfigRule); - - assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule); - } - - @Test - void shouldSerializeConfigRuleOfTypeConfigRuleCustom() { - final var expectedSerializedConfigRuleCustom = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey("resourceKey") - .setResourceValue("resourceValue") - .build(); - - final var configRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue"); - - final var expectedConfigRule = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) - .setCustom(expectedSerializedConfigRuleCustom) - .build(); - - final var configRuleTypeCustom = new ConfigRuleTypeCustom(configRuleCustom); - final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeCustom); - final var serializedConfigRule = serializer.serialize(configRule); - - assertThat(serializedConfigRule).isEqualTo(expectedConfigRule); - } - - @Test - void shouldDeserializeConfigRuleOfTypeConfigRuleCustom() { - final var serializedConfigRuleCustom = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey("resourceKey") - .setResourceValue("resourceValue") - .build(); - - final var expectedConfigRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue"); - final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom); - final var expectedConfigRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeCustom); - - final var serializedConfigRule = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) - .setCustom(serializedConfigRuleCustom) - .build(); - - final var configRule = serializer.deserialize(serializedConfigRule); - - assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule); - } - - @Test - void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConfigRule() { - final var serializedConfigRule = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) - .build(); - - assertThatExceptionOfType(IllegalStateException.class) - .isThrownBy(() -> serializer.deserialize(serializedConfigRule)); - } - - @Test - void shouldSerializeConstraintCustom() { - final var expectedConstraintType = "constraintType"; - final var expectedConstraintValue = "constraintValue"; - - final var constraintCustom = - new ConstraintCustom(expectedConstraintType, expectedConstraintValue); - - final var expectedConstraintCustom = - ContextOuterClass.Constraint_Custom.newBuilder() - .setConstraintType(expectedConstraintType) - .setConstraintValue(expectedConstraintValue) - .build(); - - final var serializedConstraintCustom = serializer.serialize(constraintCustom); - - assertThat(serializedConstraintCustom) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintCustom); - } - - @Test - void shouldDeserializeConstraintCustom() { - final var expectedConstraintType = "constraintType"; - final var expectedConstraintValue = "constraintValue"; - final var expectedConstraintCustom = - new ConstraintCustom(expectedConstraintType, expectedConstraintValue); - - final var serializedConstraintCustom = - ContextOuterClass.Constraint_Custom.newBuilder() - .setConstraintType(expectedConstraintType) - .setConstraintValue(expectedConstraintValue) - .build(); - - final var constraintCustom = serializer.deserialize(serializedConstraintCustom); - - assertThat(constraintCustom).usingRecursiveComparison().isEqualTo(expectedConstraintCustom); - } - - @Test - void shouldSerializeConstraintSchedule() { - final var expectedStartTimestamp = 10; - final var expectedDurationDays = 2.2f; - - final var constraintSchedule = - new ConstraintSchedule(expectedStartTimestamp, expectedDurationDays); - - final var expectedConstraintSchedule = - ContextOuterClass.Constraint_Schedule.newBuilder() - .setStartTimestamp(expectedStartTimestamp) - .setDurationDays(expectedDurationDays) - .build(); - - final var serializedConstraintSchedule = serializer.serialize(constraintSchedule); - - assertThat(serializedConstraintSchedule) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSchedule); - } - - @Test - void shouldDeserializeConstraintSchedule() { - final var expectedStartTimestamp = 10; - final var expectedDurationDays = 2.2f; - - final var expectedConstraintSchedule = - new ConstraintSchedule(expectedStartTimestamp, expectedDurationDays); - - final var serializedConstraintSchedule = - ContextOuterClass.Constraint_Schedule.newBuilder() - .setStartTimestamp(expectedStartTimestamp) - .setDurationDays(expectedDurationDays) - .build(); - - final var constraintSchedule = serializer.deserialize(serializedConstraintSchedule); - - assertThat(constraintSchedule).usingRecursiveComparison().isEqualTo(expectedConstraintSchedule); - } - - @Test - void shouldSerializeLocationOfTypeRegion() { - final var region = "Tokyo"; - - final var locationTypeRegion = new LocationTypeRegion(region); - final var location = new Location(locationTypeRegion); - - final var expectedLocation = ContextOuterClass.Location.newBuilder().setRegion(region).build(); - - final var serializedLocation = serializer.serialize(location); - - assertThat(serializedLocation).isEqualTo(expectedLocation); - } - - @Test - void shouldDeserializeLocationOfTypeRegion() { - final var region = "Tokyo"; - - final var locationTypeRegion = new LocationTypeRegion(region); - final var expectedLocation = new Location(locationTypeRegion); - - final var serializedLocation = - ContextOuterClass.Location.newBuilder().setRegion(region).build(); - - final var location = serializer.deserialize(serializedLocation); - - assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation); - } - - @Test - void shouldSerializeLocationOfTypeGpsPosition() { - final var latitude = 33.3f; - final var longitude = 86.4f; - - final var gpsPosition = new GpsPosition(latitude, longitude); - final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition); - final var location = new Location(locationTypeGpsPosition); - - final var serializedGpsPosition = - ContextOuterClass.GPS_Position.newBuilder() - .setLatitude(latitude) - .setLongitude(longitude) - .build(); - - final var expectedLocation = - ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build(); - - final var serializedLocation = serializer.serialize(location); - - assertThat(serializedLocation).isEqualTo(expectedLocation); - } - - @Test - void shouldDeserializeLocationOfTypeGpsPosition() { - final var latitude = 33.3f; - final var longitude = 86.4f; - - final var gpsPosition = new GpsPosition(latitude, longitude); - final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition); - final var expectedLocation = new Location(locationTypeGpsPosition); - - final var serializedGpsPosition = - ContextOuterClass.GPS_Position.newBuilder() - .setLatitude(latitude) - .setLongitude(longitude) - .build(); - - final var serializedLocation = - ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build(); - - final var location = serializer.deserialize(serializedLocation); - - assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation); - } - - @Test - void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedLocation() { - final var serializedLocation = ContextOuterClass.Location.newBuilder().build(); - - assertThatExceptionOfType(IllegalStateException.class) - .isThrownBy(() -> serializer.deserialize(serializedLocation)); - } - - private static Stream provideIsolationLevelEnum() { - return Stream.of( - Arguments.of( - IsolationLevelEnum.NO_ISOLATION, ContextOuterClass.IsolationLevelEnum.NO_ISOLATION), - Arguments.of( - IsolationLevelEnum.PHYSICAL_ISOLATION, - ContextOuterClass.IsolationLevelEnum.PHYSICAL_ISOLATION), - Arguments.of( - IsolationLevelEnum.LOGICAL_ISOLATION, - ContextOuterClass.IsolationLevelEnum.LOGICAL_ISOLATION), - Arguments.of( - IsolationLevelEnum.PROCESS_ISOLATION, - ContextOuterClass.IsolationLevelEnum.PROCESS_ISOLATION), - Arguments.of( - IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION, - ContextOuterClass.IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION), - Arguments.of( - IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION, - ContextOuterClass.IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION), - Arguments.of( - IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION, - ContextOuterClass.IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION), - Arguments.of( - IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION, - ContextOuterClass.IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION), - Arguments.of( - IsolationLevelEnum.SERVICE_ISOLATION, - ContextOuterClass.IsolationLevelEnum.SERVICE_ISOLATION)); - } - - @ParameterizedTest - @MethodSource("provideIsolationLevelEnum") - void shouldSerializeIsolationLevelEnum( - IsolationLevelEnum isolationLevelEnum, - ContextOuterClass.IsolationLevelEnum expectedIsolationLevelEnum) { - final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum); - - assertThat(serializedIsolationLevelEnum.getNumber()) - .isEqualTo(expectedIsolationLevelEnum.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideIsolationLevelEnum") - void shouldDeserializeIsolationLevelEnum( - IsolationLevelEnum expectedIsolationLevelEnum, - ContextOuterClass.IsolationLevelEnum serializedIsolationLevelEnum) { - final var isolationLevelEnum = serializer.deserialize(serializedIsolationLevelEnum); - - assertThat(isolationLevelEnum).isEqualTo(expectedIsolationLevelEnum); - } - - @Test - void shouldSerializeConstraintEndPointLocation() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var locationType = new LocationTypeRegion("ATH"); - final var location = new Location(locationType); - - final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location); - - final var serializedEndPointId = serializer.serialize(endPointId); - final var serializedLocation = serializer.serialize(location); - - final var expectedConstraintEndPointLocation = - ContextOuterClass.Constraint_EndPointLocation.newBuilder() - .setEndpointId(serializedEndPointId) - .setLocation(serializedLocation) - .build(); - - final var serializedConstraintEndPointLocation = - serializer.serialize(constraintEndPointLocation); - - assertThat(serializedConstraintEndPointLocation) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintEndPointLocation); - } - - @Test - void shouldDeserializeConstraintEndPointLocation() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var latitude = 54.6f; - final var longitude = 123.7f; - final var gpsPosition = new GpsPosition(latitude, longitude); - - final var locationType = new LocationTypeGpsPosition(gpsPosition); - final var location = new Location(locationType); - - final var expectedConstraintEndPointLocation = - new ConstraintEndPointLocation(endPointId, location); - - final var serializedEndPointId = serializer.serialize(endPointId); - final var serializedLocation = serializer.serialize(location); - - final var serializedConstraintEndPointLocation = - ContextOuterClass.Constraint_EndPointLocation.newBuilder() - .setEndpointId(serializedEndPointId) - .setLocation(serializedLocation) - .build(); - - final var constraintEndPointLocation = - serializer.deserialize(serializedConstraintEndPointLocation); - - assertThat(constraintEndPointLocation) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintEndPointLocation); - } - - @Test - void shouldSerializeConstraintSlaAvailability() { - final var numDisJointPaths = 2; - final var isAllActive = true; - - final var constraintSlaAvailability = - new ConstraintSlaAvailability(numDisJointPaths, isAllActive); - - final var expectedConstraintSlaAvailability = - ContextOuterClass.Constraint_SLA_Availability.newBuilder() - .setNumDisjointPaths(numDisJointPaths) - .setAllActive(isAllActive) - .build(); - - final var serializedConstraintSlaAvailability = serializer.serialize(constraintSlaAvailability); - - assertThat(serializedConstraintSlaAvailability) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSlaAvailability); - } - - @Test - void shouldDeserializeConstraintSlaAvailability() { - final var numDisJointPaths = 2; - final var isAllActive = true; - - final var expectedConstraintSlaAvailability = - new ConstraintSlaAvailability(numDisJointPaths, isAllActive); - - final var serializedConstraintSlaAvailability = - ContextOuterClass.Constraint_SLA_Availability.newBuilder() - .setNumDisjointPaths(numDisJointPaths) - .setAllActive(isAllActive) - .build(); - - final var constraintSlaAvailability = - serializer.deserialize(serializedConstraintSlaAvailability); - - assertThat(constraintSlaAvailability) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSlaAvailability); - } - - @Test - void shouldSerializeConstraintSlaCapacity() { - final var capacityGbps = 5; - - final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); - - final var expectedConstraintSlaCapacity = - ContextOuterClass.Constraint_SLA_Capacity.newBuilder() - .setCapacityGbps(capacityGbps) - .build(); - - final var serializedConstraintSlaCapacity = serializer.serialize(constraintSlaCapacity); - - assertThat(serializedConstraintSlaCapacity) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSlaCapacity); - } - - @Test - void shouldDeserializeConstraintSlaCapacity() { - final var capacityGbps = 5; - - final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); - - final var serializedConstraintSlaCapacity = - ContextOuterClass.Constraint_SLA_Capacity.newBuilder() - .setCapacityGbps(capacityGbps) - .build(); - - final var constraintSlaCapacity = serializer.deserialize(serializedConstraintSlaCapacity); - - assertThat(constraintSlaCapacity) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSlaCapacity); - } - - @Test - void shouldSerializeConstraintSlaIsolationLevel() { - final var isolationLevelEnums = - List.of( - IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION, - IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION); - - final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnums); - - final var serializedIsolationLevelEnums = - isolationLevelEnums.stream() - .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum)) - .collect(Collectors.toList()); - final var expectedConstraintSlaIsolationLevel = - ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder() - .addAllIsolationLevel(serializedIsolationLevelEnums) - .build(); - - final var serializedConstraintSlaIsolationLevel = - serializer.serialize(constraintSlaIsolationLevel); - - assertThat(serializedConstraintSlaIsolationLevel) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSlaIsolationLevel); - } - - @Test - void shouldDeserializeConstraintSlaIsolationLevel() { - final var isolationLevelEnums = - List.of(IsolationLevelEnum.PROCESS_ISOLATION, IsolationLevelEnum.SERVICE_ISOLATION); - - final var expectedConstraintSlaIsolationLevel = - new ConstraintSlaIsolationLevel(isolationLevelEnums); - - final var serializedIsolationLevelEnums = - isolationLevelEnums.stream() - .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum)) - .collect(Collectors.toList()); - final var serializedConstraintSlaIsolationLevel = - ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder() - .addAllIsolationLevel(serializedIsolationLevelEnums) - .build(); - - final var constraintSlaIsolationLevel = - serializer.deserialize(serializedConstraintSlaIsolationLevel); - - assertThat(constraintSlaIsolationLevel) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSlaIsolationLevel); - } - - @Test - void shouldSerializeConstraintSlaLatency() { - final var e2eLatencyMs = 5.7f; - - final var constraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs); - - final var expectedConstraintSlaLatency = - ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build(); - - final var serializedConstraintSlaLatency = serializer.serialize(constraintSlaLatency); - - assertThat(serializedConstraintSlaLatency) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSlaLatency); - } - - @Test - void shouldDeserializeConstraintSlaLatency() { - final var e2eLatencyMs = 5.7f; - - final var expectedConstraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs); - - final var serializedConstraintSlaLatency = - ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build(); - - final var constraintSlaLatency = serializer.deserialize(serializedConstraintSlaLatency); - - assertThat(constraintSlaLatency) - .usingRecursiveComparison() - .isEqualTo(expectedConstraintSlaLatency); - } - - @Test - void shouldSerializeConstraintOfTypeConstraintCustom() { - final var expectedConstraintType = "constraintType"; - final var expectedConstraintValue = "constraintValue"; - - final var constraintCustom = - new ConstraintCustom(expectedConstraintType, expectedConstraintValue); - final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom); - final var constraint = new Constraint(constraintTypeCustom); - - final var expectedConstraintCustom = - ContextOuterClass.Constraint_Custom.newBuilder() - .setConstraintType(expectedConstraintType) - .setConstraintValue(expectedConstraintValue) - .build(); - - final var expectedConstraint = - ContextOuterClass.Constraint.newBuilder().setCustom(expectedConstraintCustom).build(); - - final var serializedConstraint = serializer.serialize(constraint); - - assertThat(serializedConstraint).usingRecursiveComparison().isEqualTo(expectedConstraint); - } - - @Test - void shouldDeserializeConstraintOfTypeConstraintCustom() { - final var expectedConstraintType = "constraintType"; - final var expectedConstraintValue = "constraintValue"; - - final var constraintCustom = - new ConstraintCustom(expectedConstraintType, expectedConstraintValue); - final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom); - final var expectedConstraint = new Constraint(constraintTypeCustom); - - final var serializedConstraintCustom = - ContextOuterClass.Constraint_Custom.newBuilder() - .setConstraintType(expectedConstraintType) - .setConstraintValue(expectedConstraintValue) - .build(); - - final var serializedConstraint = - ContextOuterClass.Constraint.newBuilder().setCustom(serializedConstraintCustom).build(); - - final var constraint = serializer.deserialize(serializedConstraint); - - assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); - } - - @Test - void shouldSerializeConstraintOfTypeConstraintSchedule() { - final var startTimeSTamp = 2.2f; - final var durationDays = 5.73f; - - final var constraintSchedule = new ConstraintSchedule(startTimeSTamp, durationDays); - final var constraintTypeSchedule = new ConstraintTypeSchedule(constraintSchedule); - final var constraint = new Constraint(constraintTypeSchedule); - - final var expectedConstraintSchedule = - ContextOuterClass.Constraint_Schedule.newBuilder() - .setStartTimestamp(startTimeSTamp) - .setDurationDays(durationDays) - .build(); - - final var expectedConstraint = - ContextOuterClass.Constraint.newBuilder().setSchedule(expectedConstraintSchedule).build(); - - final var serializedConstraint = serializer.serialize(constraint); - - assertThat(serializedConstraint).isEqualTo(expectedConstraint); - } - - @Test - void shouldDeserializeConstraintOfTypeConstraintSchedule() { - final var startTimeSTamp = 2.2f; - final var durationDays = 5.73f; - - final var expectedConstraintSchedule = new ConstraintSchedule(startTimeSTamp, durationDays); - final var expectedConstraintTypeSchedule = - new ConstraintTypeSchedule(expectedConstraintSchedule); - final var expectedConstraint = new Constraint(expectedConstraintTypeSchedule); - - final var serializedConstraintSchedule = - ContextOuterClass.Constraint_Schedule.newBuilder() - .setStartTimestamp(startTimeSTamp) - .setDurationDays(durationDays) - .build(); - - final var serializedConstraint = - ContextOuterClass.Constraint.newBuilder().setSchedule(serializedConstraintSchedule).build(); - - final var constraint = serializer.deserialize(serializedConstraint); - - assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); - } - - @Test - void shouldSerializeConstraintOfTypeConstraintEndPointLocation() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var locationType = new LocationTypeRegion("ATH"); - final var location = new Location(locationType); - - final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location); - final var constraintTypeEndPointLocation = - new ConstraintTypeEndPointLocation(constraintEndPointLocation); - final var constraint = new Constraint(constraintTypeEndPointLocation); - - final var serializedEndPointId = serializer.serialize(endPointId); - final var serializedLocation = serializer.serialize(location); - - final var expectedConstraintEndPointLocation = - ContextOuterClass.Constraint_EndPointLocation.newBuilder() - .setEndpointId(serializedEndPointId) - .setLocation(serializedLocation) - .build(); - - final var expectedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setEndpointLocation(expectedConstraintEndPointLocation) - .build(); - - final var serializedConstraint = serializer.serialize(constraint); - - assertThat(serializedConstraint).isEqualTo(expectedConstraint); - } - - @Test - void shouldDeserializeConstraintOfTypeConstraintEndPointLocation() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var locationType = new LocationTypeRegion("ATH"); - final var location = new Location(locationType); - - final var expectedConstraintEndPointLocation = - new ConstraintEndPointLocation(endPointId, location); - final var expectedConstraintTypeEndPointLocation = - new ConstraintTypeEndPointLocation(expectedConstraintEndPointLocation); - final var expectedConstraint = new Constraint(expectedConstraintTypeEndPointLocation); - - final var serializedEndPointId = serializer.serialize(endPointId); - final var serializedLocation = serializer.serialize(location); - - final var serializedEndPointLocation = - ContextOuterClass.Constraint_EndPointLocation.newBuilder() - .setEndpointId(serializedEndPointId) - .setLocation(serializedLocation) - .build(); - - final var serializedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setEndpointLocation(serializedEndPointLocation) - .build(); - - final var constraint = serializer.deserialize(serializedConstraint); - - assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); - } - - @Test - void shouldSerializeConstraintOfTypeConstraintSlaAvailability() { - final var numDisjointPaths = 2; - final var isAllActive = true; - - final var constraintSlaAvailability = - new ConstraintSlaAvailability(numDisjointPaths, isAllActive); - final var constraintTypeSlaAvailability = - new ConstraintTypeSlaAvailability(constraintSlaAvailability); - final var constraint = new Constraint(constraintTypeSlaAvailability); - - final var expectedConstraintSlaAvailability = - ContextOuterClass.Constraint_SLA_Availability.newBuilder() - .setNumDisjointPaths(numDisjointPaths) - .setAllActive(isAllActive) - .build(); - - final var expectedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setSlaAvailability(expectedConstraintSlaAvailability) - .build(); - - final var serializedConstraint = serializer.serialize(constraint); - - assertThat(serializedConstraint).isEqualTo(expectedConstraint); - } - - @Test - void shouldDeserializeConstraintOfTypeConstraintSlaAvailability() { - final var numDisjointPaths = 2; - final var isAllActive = true; - - final var expectedConstraintSlaAvailability = - new ConstraintSlaAvailability(numDisjointPaths, isAllActive); - final var expectedConstraintTypeSlaAvailability = - new ConstraintTypeSlaAvailability(expectedConstraintSlaAvailability); - final var expectedConstraint = new Constraint(expectedConstraintTypeSlaAvailability); - - final var serializedConstraintSlaAvailability = - ContextOuterClass.Constraint_SLA_Availability.newBuilder() - .setNumDisjointPaths(numDisjointPaths) - .setAllActive(isAllActive) - .build(); - - final var serializedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setSlaAvailability(serializedConstraintSlaAvailability) - .build(); - - final var constraint = serializer.deserialize(serializedConstraint); - - assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); - } - - @Test - void shouldSerializeConstraintOfTypeConstraintSlaCapacity() { - final var capacityGbps = 77.3f; - - final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); - final var constraintTypeSlaCapacity = new ConstraintTypeSlaCapacity(constraintSlaCapacity); - final var constraint = new Constraint(constraintTypeSlaCapacity); - - final var expectedConstraintSlaCapacity = - ContextOuterClass.Constraint_SLA_Capacity.newBuilder() - .setCapacityGbps(capacityGbps) - .build(); - - final var expectedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setSlaCapacity(expectedConstraintSlaCapacity) - .build(); - - final var serializedConstraint = serializer.serialize(constraint); - - assertThat(serializedConstraint).isEqualTo(expectedConstraint); - } - - @Test - void shouldDeserializeConstraintOfTypeConstraintSlaCapacity() { - final var capacityGbps = 77.3f; - - final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); - final var expectedConstraintTypeSlaCapacity = - new ConstraintTypeSlaCapacity(expectedConstraintSlaCapacity); - final var expectedConstraint = new Constraint(expectedConstraintTypeSlaCapacity); - - final var serializedConstraintSlaCapacity = - ContextOuterClass.Constraint_SLA_Capacity.newBuilder() - .setCapacityGbps(capacityGbps) - .build(); - - final var serializedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setSlaCapacity(serializedConstraintSlaCapacity) - .build(); - - final var constraint = serializer.deserialize(serializedConstraint); - - assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); - } - - @Test - void shouldDeserializeConstraintOfTypeConstraintSlaIsolationLevel() { - final var isolationLevelEnums = - List.of(IsolationLevelEnum.PHYSICAL_ISOLATION, IsolationLevelEnum.NO_ISOLATION); - - final var expectedConstraintSlaIsolationLevel = - new ConstraintSlaIsolationLevel(isolationLevelEnums); - final var expectedConstraintTypeSlaIsolationLevel = - new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel); - final var expectedConstraint = new Constraint(expectedConstraintTypeSlaIsolationLevel); - - final var serializedIsolationLevelEnums = - isolationLevelEnums.stream() - .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum)) - .collect(Collectors.toList()); - - final var serializedConstraintSlaIsolationLevel = - ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder() - .addAllIsolationLevel(serializedIsolationLevelEnums) - .build(); - - final var serializedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setSlaIsolation(serializedConstraintSlaIsolationLevel) - .build(); - - final var constraint = serializer.deserialize(serializedConstraint); - - assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); - } - - @Test - void shouldSerializeConstraintOfTypeConstraintSlaIsolationLevel() { - final var isolationLevelEnums = - List.of( - IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION, - IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION); - - final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnums); - final var constraintTypeSlaIsolationLevel = - new ConstraintTypeSlaIsolationLevel(constraintSlaIsolationLevel); - final var constraint = new Constraint(constraintTypeSlaIsolationLevel); - - final var serializedIsolationLevelEnums = - isolationLevelEnums.stream() - .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum)) - .collect(Collectors.toList()); - - final var expectedConstraintSlaIsolationLevel = - ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder() - .addAllIsolationLevel(serializedIsolationLevelEnums) - .build(); - - final var expectedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setSlaIsolation(expectedConstraintSlaIsolationLevel) - .build(); - - final var serializedConstraint = serializer.serialize(constraint); - - assertThat(serializedConstraint).isEqualTo(expectedConstraint); - } - - @Test - void shouldSerializeConstraintOfTypeConstraintSlaLatency() { - final var e2eLatencyMs = 45.32f; - - final var constraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs); - final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(constraintSlaLatency); - final var constraint = new Constraint(constraintTypeSlaLatency); - - final var expectedConstraintSlaLatency = - ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build(); - - final var expectedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setSlaLatency(expectedConstraintSlaLatency) - .build(); - - final var serializedConstraint = serializer.serialize(constraint); - - assertThat(serializedConstraint).isEqualTo(expectedConstraint); - } - - @Test - void shouldDeserializeConstraintOfTypeConstraintSlaLatency() { - final var e2eLatencyMs = 45.32f; - - final var expectedConstraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs); - final var expectedConstraintTypeSlaLatency = - new ConstraintTypeSlaLatency(expectedConstraintSlaLatency); - final var expectedConstraint = new Constraint(expectedConstraintTypeSlaLatency); - - final var serializedConstraintSlaLatency = - ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build(); - - final var serializedConstraint = - ContextOuterClass.Constraint.newBuilder() - .setSlaLatency(serializedConstraintSlaLatency) - .build(); - - final var constraint = serializer.deserialize(serializedConstraint); - - assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); - } - - @Test - void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConstraint() { - final var serializedKpiValue = ContextOuterClass.Constraint.newBuilder().build(); - - assertThatExceptionOfType(IllegalStateException.class) - .isThrownBy(() -> serializer.deserialize(serializedKpiValue)); - } - - @Test - void shouldSerializeEndPointId() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var serializedTopologyId = serializer.serialize(expectedTopologyId); - final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId); - final var serializedEndPointUuid = serializer.serializeUuid(expectedId); - - final var expectedEndPointId = - ContextOuterClass.EndPointId.newBuilder() - .setTopologyId(serializedTopologyId) - .setDeviceId(serializedDeviceId) - .setEndpointUuid(serializedEndPointUuid) - .build(); - - final var serializedEndPointId = serializer.serialize(endPointId); - - assertThat(serializedEndPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId); - } - - @Test - void shouldDeserializeEndPointId() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - - final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - - final var serializedEndPointId = serializer.serialize(expectedEndPointId); - final var endPointId = serializer.deserialize(serializedEndPointId); - - assertThat(endPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId); - } - - private static Stream provideEventTypeEnum() { - return Stream.of( - Arguments.of(EventTypeEnum.CREATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE), - Arguments.of(EventTypeEnum.REMOVE, ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE), - Arguments.of(EventTypeEnum.UNDEFINED, ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED), - Arguments.of(EventTypeEnum.UPDATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_UPDATE)); - } - - @ParameterizedTest - @MethodSource("provideEventTypeEnum") - void shouldSerializeEventType( - EventTypeEnum eventType, ContextOuterClass.EventTypeEnum expectedSerializedType) { - final var serializedType = serializer.serialize(eventType); - - assertThat(serializedType.getNumber()).isEqualTo(expectedSerializedType.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideEventTypeEnum") - void shouldDeserializeEventType( - EventTypeEnum expectedEventType, ContextOuterClass.EventTypeEnum serializedEventType) { - final var eventType = serializer.deserialize(serializedEventType); - - assertThat(eventType).isEqualTo(expectedEventType); - } - - @Test - void shouldSerializeEvent() { - final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build(); - - final var expectedEvent = - ContextOuterClass.Event.newBuilder() - .setTimestamp(timestamp) - .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE) - .build(); - - final var event = new Event(1, EventTypeEnum.CREATE); - final var serializedEvent = serializer.serialize(event); - - assertThat(serializedEvent).usingRecursiveComparison().isEqualTo(expectedEvent); - } - - @Test - void shouldDeserializeEvent() { - final var expectedEvent = new Event(1, EventTypeEnum.CREATE); - final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build(); - - final var serializedEvent = - ContextOuterClass.Event.newBuilder() - .setTimestamp(timestamp) - .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE) - .build(); - final var event = serializer.deserialize(serializedEvent); - - assertThat(event).usingRecursiveComparison().isEqualTo(expectedEvent); - } - - @Test - void shouldSerializeServiceId() { - final var expectedContextId = "expectedContextId"; - final var expectedId = "expectedId"; - final var serviceId = new ServiceId(expectedContextId, expectedId); - - final var serializedContextId = serializer.serializeContextId(expectedContextId); - final var serializedIdUuid = serializer.serializeUuid(expectedId); - - final var expectedServiceId = - ContextOuterClass.ServiceId.newBuilder() - .setContextId(serializedContextId) - .setServiceUuid(serializedIdUuid) - .build(); - - final var serializedServiceId = serializer.serialize(serviceId); - - assertThat(serializedServiceId).usingRecursiveComparison().isEqualTo(expectedServiceId); - } - - @Test - void shouldDeserializeServiceId() { - final var expectedContextId = "expectedContextId"; - final var expectedId = "expectedId"; - - final var expectedServiceId = new ServiceId(expectedContextId, expectedId); - - final var serializedServiceId = serializer.serialize(expectedServiceId); - - final var serviceId = serializer.deserialize(serializedServiceId); - - assertThat(serviceId).usingRecursiveComparison().isEqualTo(expectedServiceId); - } - - private static Stream provideServiceStatusEnum() { - return Stream.of( - Arguments.of( - ServiceStatusEnum.ACTIVE, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_ACTIVE), - Arguments.of( - ServiceStatusEnum.PLANNED, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PLANNED), - Arguments.of( - ServiceStatusEnum.PENDING_REMOVAL, - ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PENDING_REMOVAL), - Arguments.of( - ServiceStatusEnum.UNDEFINED, - ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideServiceStatusEnum") - void shouldSerializeServiceStatusEnum( - ServiceStatusEnum serviceStatusEnum, - ContextOuterClass.ServiceStatusEnum expectedSerializedType) { - final var serializedServiceStatusEnum = serializer.serialize(serviceStatusEnum); - - assertThat(serializedServiceStatusEnum.getNumber()) - .isEqualTo(expectedSerializedType.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideServiceStatusEnum") - void shouldDeserializeServiceStatusEnum( - ServiceStatusEnum expectedServiceStatusEnum, - ContextOuterClass.ServiceStatusEnum serializedServiceStatusEnum) { - final var serviceStatusEnum = serializer.deserialize(serializedServiceStatusEnum); - - assertThat(serviceStatusEnum).isEqualTo(expectedServiceStatusEnum); - } - - private static Stream provideServiceTypeEnum() { - return Stream.of( - Arguments.of(ServiceTypeEnum.L2NM, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L2NM), - Arguments.of(ServiceTypeEnum.L3NM, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L3NM), - Arguments.of( - ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE, - ContextOuterClass.ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE), - Arguments.of( - ServiceTypeEnum.UNKNOWN, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN)); - } - - @ParameterizedTest - @MethodSource("provideServiceTypeEnum") - void shouldSerializeServiceTypeEnum( - ServiceTypeEnum serviceTypeEnum, ContextOuterClass.ServiceTypeEnum expectedSerializedType) { - final var serializedServiceTypeEnum = serializer.serialize(serviceTypeEnum); - - assertThat(serializedServiceTypeEnum.getNumber()).isEqualTo(expectedSerializedType.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideServiceTypeEnum") - void shouldDeserializeServiceTypeEnum( - ServiceTypeEnum expectedServiceTypeEnum, - ContextOuterClass.ServiceTypeEnum serializedServiceTypeEnum) { - final var serviceTypeEnum = serializer.deserialize(serializedServiceTypeEnum); - - assertThat(serviceTypeEnum).isEqualTo(expectedServiceTypeEnum); - } - - @Test - void shouldSerializeServiceStatus() { - final var expectedServiceStatusEnum = ServiceStatusEnum.ACTIVE; - final var serviceStatus = new ServiceStatus(expectedServiceStatusEnum); - - final var serializedServiceStatusEnum = serializer.serialize(expectedServiceStatusEnum); - - final var expectedServiceStatus = - ContextOuterClass.ServiceStatus.newBuilder() - .setServiceStatus(serializedServiceStatusEnum) - .build(); - - final var serializedServiceStatus = serializer.serialize(serviceStatus); - - assertThat(serializedServiceStatus).usingRecursiveComparison().isEqualTo(expectedServiceStatus); - } - - @Test - void shouldDeserializeServiceStatus() { - final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PENDING_REMOVAL); - - final var serializedServiceStatus = serializer.serialize(expectedServiceStatus); - final var serviceStatus = serializer.deserialize(serializedServiceStatus); - - assertThat(serviceStatus).usingRecursiveComparison().isEqualTo(expectedServiceStatus); - } - - @Test - void shouldSerializeServiceConfig() { - final var configRuleA = createConfigRule(); - final var configRuleB = createConfigRule(); - final var serviceConfig = new ServiceConfig(List.of(configRuleA, configRuleB)); - - final var expectedConfigRuleA = serializer.serialize(configRuleA); - final var expectedConfigRuleB = serializer.serialize(configRuleB); - - final var expectedServiceConfig = - ContextOuterClass.ServiceConfig.newBuilder() - .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB)) - .build(); - - final var serializedServiceConfig = serializer.serialize(serviceConfig); - - assertThat(serializedServiceConfig).usingRecursiveComparison().isEqualTo(expectedServiceConfig); - } - - @Test - void shouldDeserializeServiceConfig() { - final var expectedConfigRuleA = createConfigRule(); - final var expectedConfigRuleB = createConfigRule(); - final var expectedServiceConfig = - new ServiceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB)); - - final var configRuleA = serializer.serialize(expectedConfigRuleA); - final var configRuleB = serializer.serialize(expectedConfigRuleB); - final var serializedServiceConfig = - ContextOuterClass.ServiceConfig.newBuilder() - .addAllConfigRules(List.of(configRuleA, configRuleB)) - .build(); - - final var serviceConfig = serializer.deserialize(serializedServiceConfig); - - assertThat(serviceConfig).usingRecursiveComparison().isEqualTo(expectedServiceConfig); - } - - @Test - void shouldSerializeService() { - final var expectedServiceId = new ServiceId("contextId", "serviceId"); - final var expectedServiceTypeEnum = ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE; - final var firstExpectedTopologyId = new TopologyId("contextId", "firstTopologyId"); - final var secondExpectedTopologyId = new TopologyId("contextId", "secondTopologyId"); - - final var firstExpectedEndPointId = - new EndPointId(firstExpectedTopologyId, "firstDeviceId", "firstEndPointId"); - final var secondExpectedEndPointId = - new EndPointId(secondExpectedTopologyId, "firstDeviceId", "firstEndPointId"); - final var expectedServiceEndPointIds = - List.of(firstExpectedEndPointId, secondExpectedEndPointId); - - final var expectedConstraintTypeA = "constraintTypeA"; - final var expectedConstraintValueA = "constraintValueA"; - - final var constraintCustomA = - new ConstraintCustom(expectedConstraintTypeA, expectedConstraintValueA); - final var constraintTypeCustomA = new ConstraintTypeCustom(constraintCustomA); - final var firstExpectedConstraint = new Constraint(constraintTypeCustomA); - - final var expectedConstraintTypeB = "constraintTypeB"; - final var expectedConstraintValueB = "constraintValueB"; - - final var constraintCustomB = - new ConstraintCustom(expectedConstraintTypeB, expectedConstraintValueB); - final var constraintTypeCustomB = new ConstraintTypeCustom(constraintCustomB); - final var secondExpectedConstraint = new Constraint(constraintTypeCustomB); - - final var expectedServiceConstraints = - List.of(firstExpectedConstraint, secondExpectedConstraint); - - final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PLANNED); - - final var expectedConfigRuleA = createConfigRule(); - final var expectedConfigRuleB = createConfigRule(); - - final var expectedConfigRules = List.of(expectedConfigRuleA, expectedConfigRuleB); - - final var expectedServiceConfig = new ServiceConfig(expectedConfigRules); - - final var expectedTimestamp = 2.3; - - final var service = - new Service( - expectedServiceId, - expectedServiceTypeEnum, - expectedServiceEndPointIds, - expectedServiceConstraints, - expectedServiceStatus, - expectedServiceConfig, - expectedTimestamp); - - final var serializedServiceId = serializer.serialize(expectedServiceId); - final var serializedServiceType = serializer.serialize(expectedServiceTypeEnum); - final var serializedServiceEndPointIds = - expectedServiceEndPointIds.stream() - .map(endPointId -> serializer.serialize(endPointId)) - .collect(Collectors.toList()); - final var serializedServiceConstraints = - expectedServiceConstraints.stream() - .map(constraint -> serializer.serialize(constraint)) - .collect(Collectors.toList()); - final var serializedServiceStatus = serializer.serialize(expectedServiceStatus); - final var serializedServiceConfig = serializer.serialize(expectedServiceConfig); - final var serializedTimestamp = serializer.serialize(expectedTimestamp); - - final var expectedService = - ContextOuterClass.Service.newBuilder() - .setServiceId(serializedServiceId) - .setServiceType(serializedServiceType) - .addAllServiceEndpointIds(serializedServiceEndPointIds) - .addAllServiceConstraints(serializedServiceConstraints) - .setServiceStatus(serializedServiceStatus) - .setServiceConfig(serializedServiceConfig) - .setTimestamp(serializedTimestamp) - .build(); - - final var serializedService = serializer.serialize(service); - - assertThat(serializedService).isEqualTo(expectedService); - } - - @Test - void shouldDeserializeService() { - final var expectedServiceId = new ServiceId("contextId", "serviceId"); - final var expectedServiceTypeEnum = ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE; - final var firstExpectedTopologyId = new TopologyId("contextId", "firstTopologyId"); - final var secondExpectedTopologyId = new TopologyId("contextId", "secondTopologyId"); - - final var firstExpectedEndPointId = - new EndPointId(firstExpectedTopologyId, "firstDeviceId", "firstEndPointId"); - final var secondExpectedEndPointId = - new EndPointId(secondExpectedTopologyId, "firstDeviceId", "firstEndPointId"); - final var expectedServiceEndPointIds = - List.of(firstExpectedEndPointId, secondExpectedEndPointId); - - final var expectedConstraintTypeA = "constraintTypeA"; - final var expectedConstraintValueA = "constraintValueA"; - - final var constraintCustomA = - new ConstraintCustom(expectedConstraintTypeA, expectedConstraintValueA); - final var constraintTypeCustomA = new ConstraintTypeCustom(constraintCustomA); - final var firstExpectedConstraint = new Constraint(constraintTypeCustomA); - - final var expectedConstraintTypeB = "constraintTypeB"; - final var expectedConstraintValueB = "constraintValueB"; - - final var constraintCustomB = - new ConstraintCustom(expectedConstraintTypeB, expectedConstraintValueB); - final var constraintTypeCustomB = new ConstraintTypeCustom(constraintCustomB); - final var secondExpectedConstraint = new Constraint(constraintTypeCustomB); - - final var expectedServiceConstraints = - List.of(firstExpectedConstraint, secondExpectedConstraint); - - final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PLANNED); - - final var firstExpectedConfigRuleA = createConfigRule(); - final var secondExpectedConfigRuleB = createConfigRule(); - - final var expectedConfigRules = List.of(firstExpectedConfigRuleA, secondExpectedConfigRuleB); - - final var expectedServiceConfig = new ServiceConfig(expectedConfigRules); - - final var expectedTimestamp = 7.8; - - final var expectedService = - new Service( - expectedServiceId, - expectedServiceTypeEnum, - expectedServiceEndPointIds, - expectedServiceConstraints, - expectedServiceStatus, - expectedServiceConfig, - expectedTimestamp); - - final var serializedServiceId = serializer.serialize(expectedServiceId); - final var serializedServiceType = serializer.serialize(expectedServiceTypeEnum); - final var serializedServiceEndPointIds = - expectedServiceEndPointIds.stream() - .map(endPointId -> serializer.serialize(endPointId)) - .collect(Collectors.toList()); - final var serializedServiceConstraints = - expectedServiceConstraints.stream() - .map(constraint -> serializer.serialize(constraint)) - .collect(Collectors.toList()); - final var serializedServiceStatus = serializer.serialize(expectedServiceStatus); - final var serializedServiceConfig = serializer.serialize(expectedServiceConfig); - final var serializedTimestamp = serializer.serialize(expectedTimestamp); - - final var serializedService = - ContextOuterClass.Service.newBuilder() - .setServiceId(serializedServiceId) - .setServiceType(serializedServiceType) - .addAllServiceEndpointIds(serializedServiceEndPointIds) - .addAllServiceConstraints(serializedServiceConstraints) - .setServiceStatus(serializedServiceStatus) - .setServiceConfig(serializedServiceConfig) - .setTimestamp(serializedTimestamp) - .build(); - - final var service = serializer.deserialize(serializedService); - - assertThat(service).usingRecursiveComparison().isEqualTo(expectedService); - } - - private static Stream provideKpiSampleType() { - return Stream.of( - Arguments.of( - KpiSampleType.PACKETS_TRANSMITTED, - KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED), - Arguments.of( - KpiSampleType.PACKETS_RECEIVED, - KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED), - Arguments.of( - KpiSampleType.BYTES_TRANSMITTED, - KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED), - Arguments.of( - KpiSampleType.BYTES_RECEIVED, - KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED), - Arguments.of(KpiSampleType.UNKNOWN, KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN)); - } - - @ParameterizedTest - @MethodSource("provideKpiSampleType") - void shouldSerializeKpiSampleType( - KpiSampleType kpiSampleType, KpiSampleTypes.KpiSampleType expectedSerializedType) { - final var serializedKpiSampleType = serializer.serialize(kpiSampleType); - - assertThat(serializedKpiSampleType.getNumber()).isEqualTo(expectedSerializedType.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideKpiSampleType") - void shouldDeserializeKpiSampleType( - KpiSampleType expectedKpiSampleType, KpiSampleTypes.KpiSampleType serializedKpiSampleType) { - final var kpiSampleType = serializer.deserialize(serializedKpiSampleType); - - assertThat(kpiSampleType).isEqualTo(expectedKpiSampleType); - } - - private static Stream provideRuleState() { - return Stream.of( - Arguments.of(RuleState.POLICY_UNDEFINED, Policy.RuleState.POLICY_UNDEFINED), - Arguments.of(RuleState.POLICY_FAILED, Policy.RuleState.POLICY_FAILED), - Arguments.of(RuleState.POLICY_INSERTED, Policy.RuleState.POLICY_INSERTED), - Arguments.of(RuleState.POLICY_VALIDATED, Policy.RuleState.POLICY_VALIDATED), - Arguments.of(RuleState.POLICY_PROVISIONED, Policy.RuleState.POLICY_PROVISIONED), - Arguments.of(RuleState.POLICY_ACTIVE, Policy.RuleState.POLICY_ACTIVE), - Arguments.of(RuleState.POLICY_ENFORCED, Policy.RuleState.POLICY_ENFORCED), - Arguments.of(RuleState.POLICY_INEFFECTIVE, Policy.RuleState.POLICY_INEFFECTIVE), - Arguments.of(RuleState.POLICY_EFFECTIVE, Policy.RuleState.POLICY_EFFECTIVE), - Arguments.of(RuleState.POLICY_UPDATED, Policy.RuleState.POLICY_UPDATED), - Arguments.of(RuleState.POLICY_REMOVED, Policy.RuleState.POLICY_REMOVED)); - } - - @ParameterizedTest - @MethodSource("provideRuleState") - void shouldSerializeRuleState(RuleState ruleState, Policy.RuleState expectedSerializedType) { - final var serializedRuleState = serializer.serialize(ruleState); - - assertThat(serializedRuleState.getNumber()).isEqualTo(expectedSerializedType.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideRuleState") - void shouldDeserializeRuleState( - RuleState expectedRuleState, Policy.RuleState serializedRuleState) { - final var ruleState = serializer.deserialize(serializedRuleState); - - assertThat(ruleState).isEqualTo(expectedRuleState); - } - - @Test - void shouldSerializePolicyRuleState() { - final var expectedRuleState = RuleState.POLICY_ACTIVE; - final var policyRuleState = new PolicyRuleState(expectedRuleState); - - final var serializedRuleState = serializer.serialize(expectedRuleState); - - final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(serializedRuleState).build(); - - final var serializedPolicyRuleState = serializer.serialize(policyRuleState); - - assertThat(serializedPolicyRuleState) - .usingRecursiveComparison() - .isEqualTo(expectedPolicyRuleState); - } - - @Test - void shouldDeserializePolicyRuleState() { - final var expectedRuleState = RuleState.POLICY_ENFORCED; - final var expectedPolicyRuleState = new PolicyRuleState(expectedRuleState); - - final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState); - - final var policyRuleState = serializer.deserialize(serializedPolicyRuleState); - - assertThat(policyRuleState).usingRecursiveComparison().isEqualTo(expectedPolicyRuleState); - } - - private static Stream provideNumericalOperator() { - return Stream.of( - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideNumericalOperator") - void shouldSerializeNumericalOperator( - NumericalOperator numericalOperator, - PolicyCondition.NumericalOperator expectedNumericalOperator) { - final var serializedNumericalOperator = serializer.serialize(numericalOperator); - - assertThat(serializedNumericalOperator).isEqualTo(expectedNumericalOperator); - } - - @ParameterizedTest - @MethodSource("provideNumericalOperator") - void shouldDeserializeNumericalOperator( - NumericalOperator expectedNumericalOperator, - PolicyCondition.NumericalOperator serializedNumericalOperator) { - final var numericalOperator = serializer.deserialize(serializedNumericalOperator); - - 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); - } - - private static Stream provideNumericalOperators() { - return Stream.of( - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN), - Arguments.of( - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL, - PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL)); - } - - @ParameterizedTest - @MethodSource("provideNumericalOperators") - void shouldSerializePolicyRuleConditionGivenMultipleNumericalOperators( - NumericalOperator expectedNumericalOperator) { - final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId"; - final var expectedPolicyRuleConditionKpiValue = new IntegerKpiValue(34); - - final var policyRuleCondition = - new PolicyRuleCondition( - expectedPolicyRuleConditionKpiId, - expectedNumericalOperator, - expectedPolicyRuleConditionKpiValue); - - final var serializedPolicyRuleConditionKpiIdUuid = - serializer.serializeUuid(expectedPolicyRuleConditionKpiId); - final var serializedPolicyRuleConditionKpiId = - KpiId.newBuilder().setKpiId(serializedPolicyRuleConditionKpiIdUuid).build(); - final var serializedNumericalOperator = serializer.serialize(expectedNumericalOperator); - final var serializedPolicyRuleConditionKpiValue = - serializer.serializeIntegerKpiValue(expectedPolicyRuleConditionKpiValue); - - final var expectedPolicyRuleCondition = - PolicyCondition.PolicyRuleCondition.newBuilder() - .setKpiId(serializedPolicyRuleConditionKpiId) - .setNumericalOperator(serializedNumericalOperator) - .setKpiValue(serializedPolicyRuleConditionKpiValue) - .build(); - - final var serializedPolicyRuleCondition = serializer.serialize(policyRuleCondition); - - assertThat(serializedPolicyRuleCondition) - .usingRecursiveComparison() - .isEqualTo(expectedPolicyRuleCondition); - } - - private static Stream provideKpiValues() { - return Stream.of( - Arguments.of( - new StringKpiValue("stringKpiValue"), - Monitoring.KpiValue.newBuilder().setStringVal("stringKpiValue").build()), - Arguments.of( - new BooleanKpiValue(true), Monitoring.KpiValue.newBuilder().setBoolVal(true).build()), - Arguments.of( - new IntegerKpiValue(44), Monitoring.KpiValue.newBuilder().setInt32Val(44).build()), - Arguments.of( - new FloatKpiValue(12.3f), Monitoring.KpiValue.newBuilder().setFloatVal(12.3f).build())); - } - - @ParameterizedTest - @MethodSource("provideKpiValues") - void shouldSerializeKpiValues(KpiValue kpiValue, Monitoring.KpiValue expectedKpiValue) { - final var serializedKpiValue = serializer.serialize(kpiValue); - - assertThat(serializedKpiValue).isEqualTo(expectedKpiValue); - } - - @ParameterizedTest - @MethodSource("provideKpiValues") - void shouldDeserializeKpiValues( - KpiValue expectedKpiValue, Monitoring.KpiValue serializedKpiValue) { - final var kpiValue = serializer.deserialize(serializedKpiValue); - - assertThat(kpiValue).usingRecursiveComparison().isEqualTo(expectedKpiValue); - } - - @Test - void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedKpiValue() { - final var serializedKpiValue = Monitoring.KpiValue.newBuilder().build(); - - assertThatExceptionOfType(IllegalStateException.class) - .isThrownBy(() -> serializer.deserialize(serializedKpiValue)); - } - - @Test - void shouldDeserializeIntegerKpiValue() { - final var expectedKpiValue = new IntegerKpiValue(66); - - final var intValue = serializer.serializeIntegerKpiValue(expectedKpiValue); - final var deserializedKpiValue = serializer.deserializeIntegerKpiValue(intValue); - - assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue()); - } - - @Test - void shouldDeserializeStringKpiValue() { - final var expectedKpiValue = new StringKpiValue("StringKpiValue"); - - final var stringValue = serializer.serializeStringKpiValue(expectedKpiValue); - final var deserializedKpiValue = serializer.deserializeStringKpiValue(stringValue); - - assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue()); - } - - @Test - void shouldDeserializeFloatKpiValue() { - final var expectedKpiValue = new FloatKpiValue(2.2f); - - final var floatValue = serializer.serializeFloatKpiValue(expectedKpiValue); - final var deserializedKpiValue = serializer.deserializeFloatKpiValue(floatValue); - - assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue()); - } - - @Test - void shouldDeserializeBooleanKpiValue() { - final var expectedKpiValue = new BooleanKpiValue(true); - - final var booleanValue = serializer.serializeBooleanKpiValue(expectedKpiValue); - final var deserializedKpiValue = serializer.deserializeBooleanKpiValue(booleanValue); - - assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue()); - } - - private static Stream provideKpiValueRanges() { - return Stream.of( - Arguments.of( - new KpiValueRange(new IntegerKpiValue(32), new IntegerKpiValue(42)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) - .build()), - Arguments.of( - new KpiValueRange(new IntegerKpiValue(32), new FloatKpiValue(42.2f)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) - .build()), - Arguments.of( - new KpiValueRange(new IntegerKpiValue(32), new BooleanKpiValue(true)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) - .build()), - Arguments.of( - new KpiValueRange(new IntegerKpiValue(32), new StringKpiValue("string")), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) - .build()), - Arguments.of( - new KpiValueRange(new FloatKpiValue(56.2f), new IntegerKpiValue(42)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) - .build()), - Arguments.of( - new KpiValueRange(new FloatKpiValue(56.2f), new FloatKpiValue(42.2f)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) - .build()), - Arguments.of( - new KpiValueRange(new FloatKpiValue(56.2f), new BooleanKpiValue(true)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) - .build()), - Arguments.of( - new KpiValueRange(new FloatKpiValue(56.2f), new StringKpiValue("string")), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) - .build()), - Arguments.of( - new KpiValueRange(new BooleanKpiValue(true), new IntegerKpiValue(42)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) - .build()), - Arguments.of( - new KpiValueRange(new BooleanKpiValue(false), new FloatKpiValue(42.2f)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) - .build()), - Arguments.of( - new KpiValueRange(new BooleanKpiValue(true), new BooleanKpiValue(true)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) - .build()), - Arguments.of( - new KpiValueRange(new BooleanKpiValue(false), new StringKpiValue("string")), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) - .build()), - Arguments.of( - new KpiValueRange(new StringKpiValue("string"), new IntegerKpiValue(42)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) - .build()), - Arguments.of( - new KpiValueRange(new StringKpiValue("string"), new FloatKpiValue(42.2f)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) - .build()), - Arguments.of( - new KpiValueRange(new StringKpiValue("string"), new BooleanKpiValue(true)), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) - .build()), - Arguments.of( - new KpiValueRange(new StringKpiValue("string"), new StringKpiValue("string")), - Monitoring.KpiValueRange.newBuilder() - .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) - .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) - .build())); - } - - @ParameterizedTest - @MethodSource("provideKpiValueRanges") - void shouldSerializeKpiValueRange( - KpiValueRange kpiValueRange, Monitoring.KpiValueRange expectedKpiValueRange) { - final var serializedKpiValueRange = serializer.serialize(kpiValueRange); - - assertThat(serializedKpiValueRange.getKpiMinValue()) - .isEqualTo(expectedKpiValueRange.getKpiMinValue()); - assertThat(serializedKpiValueRange.getKpiMaxValue()) - .isEqualTo(expectedKpiValueRange.getKpiMaxValue()); - } - - @ParameterizedTest - @MethodSource("provideKpiValueRanges") - void shouldDeserializeKpiValueRange( - KpiValueRange expectedKpiValueRange, Monitoring.KpiValueRange serializedKpiValueRange) { - final var kpiValueRange = serializer.deserialize(serializedKpiValueRange); - - assertThat(kpiValueRange.getKpiMinValue()) - .usingRecursiveComparison() - .isEqualTo(expectedKpiValueRange.getKpiMinValue()); - assertThat(kpiValueRange.getKpiMaxValue()) - .usingRecursiveComparison() - .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 alarmId = "alarmId"; - final var alarmDescription = "alarmDescription"; - final var name = "name"; - final var kpiId = "kpiId"; - final double timestamp = 100.0; - final var kpiIds = List.of("kpiId1", "kpiId2"); - - final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800)); - final var kpiValueRanges = List.of(kpiValueRange); - - final var alarmDescriptor = - new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp); - - final var serializedalarmIdUuid = serializer.serializeUuid(alarmId); - final var serializedalarmId = AlarmID.newBuilder().setAlarmId(serializedalarmIdUuid).build(); - - final var serializedKpiIdUuid = serializer.serializeUuid("kpiId1"); - final var serializedKpiId1 = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); - final var serializedKpiId2 = KpiId.newBuilder().setKpiId(serializer.serializeUuid("kpiId2")); - final var serializedKpiValueRange = serializer.serialize(kpiValueRange); - final var serializedTimeStamp = - context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(timestamp); - - final var expectedAlarmDescriptor = - Monitoring.AlarmDescriptor.newBuilder() - .setAlarmId(serializedalarmId) - .setAlarmDescription(alarmDescription) - .setName(name) - .addKpiId(serializedKpiId1) - .addKpiId(serializedKpiId2) - .addKpiValueRange(serializedKpiValueRange) - .setTimestamp(serializedTimeStamp) - .build(); - - final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor); - - assertThat(serializedAlarmDescriptor).isEqualTo(expectedAlarmDescriptor); - } - - @Test - void shouldDeserializeAlarmDescriptor() { - final var alarmId = "alarmId"; - final var alarmDescription = "alarmDescription"; - final var name = "name"; - final var kpiId = "kpiId"; - final double timestamp = 100.0; - final var kpiIds = List.of("kpiId1", "kpiId2"); - - final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800)); - final var kpiValueRanges = List.of(kpiValueRange); - - final var expectedAlarmDescriptor = - new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp); - - final var serializedalarmIdUuid = serializer.serializeUuid(alarmId); - final var serializedalarmId = AlarmID.newBuilder().setAlarmId(serializedalarmIdUuid).build(); - - final var serializedKpiIdUuid = serializer.serializeUuid("kpiId1"); - final var serializedKpiId1 = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); - final var serializedKpiId2 = KpiId.newBuilder().setKpiId(serializer.serializeUuid("kpiId2")); - - final var serializedKpiValueRange = serializer.serialize(kpiValueRange); - final var serializedTimeStamp = - context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(timestamp); - - final var serializedAlarmDescriptor = - Monitoring.AlarmDescriptor.newBuilder() - .setAlarmId(serializedalarmId) - .setAlarmDescription(alarmDescription) - .setName(name) - .addKpiId(serializedKpiId1) - .addKpiId(serializedKpiId2) - .addKpiValueRange(serializedKpiValueRange) - .setTimestamp(serializedTimeStamp) - .build(); - - final var alarmDescriptor = serializer.deserialize(serializedAlarmDescriptor); - - assertThat(alarmDescriptor).usingRecursiveComparison().isEqualTo(expectedAlarmDescriptor); - } - - @Test - void shouldSerializeAlarmResponse() { - final var alarmId = "alarmId"; - final var text = "text"; - final var kpiValue = new IntegerKpiValue(12); - - final var alarmResponse = new AlarmResponse(alarmId, text, kpiValue); - - final var serializedAlarmIdUuid = serializer.serializeUuid(alarmId); - final var serializedAlarmId = AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build(); - final var serializedKpiValue = serializer.serialize(kpiValue); - - final var expectedAlarmResponse = - Monitoring.AlarmResponse.newBuilder() - .setAlarmId(serializedAlarmId) - .setText(text) - .setKpiValue(serializedKpiValue) - .build(); - - final var serializedAlarmResponse = serializer.serialize(alarmResponse); - - assertThat(serializedAlarmResponse).isEqualTo(expectedAlarmResponse); - } - - @Test - void shouldDeserializeAlarmResponse() { - final var alarmId = "alarmId"; - final var text = "text"; - final var kpiValue = new IntegerKpiValue(12); - - final var expectedAlarmResponse = new AlarmResponse(alarmId, text, kpiValue); - - final var serializedAlarmIdUuid = serializer.serializeUuid(alarmId); - final var serializedAlarmId = AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build(); - final var serializedKpiValue = serializer.serialize(kpiValue); - - final var serializedAlarmResponse = - Monitoring.AlarmResponse.newBuilder() - .setAlarmId(serializedAlarmId) - .setText(text) - .setKpiValue(serializedKpiValue) - .build(); - - final var alarmResponse = serializer.deserialize(serializedAlarmResponse); - - assertThat(alarmResponse).usingRecursiveComparison().isEqualTo(expectedAlarmResponse); - } - - @Test - void shouldSerializeSubDescriptor() { - final var subscriptionId = "subscriptionId"; - final var kpiId = "kpiId"; - final var samplingDurationS = 10f; - final var samplingIntervalS = 45f; - final var startTimestamp = 1.0; - final var endTimestamp = 100.0; - - final var subDescriptor = - new SubsDescriptor( - subscriptionId, - kpiId, - samplingDurationS, - samplingIntervalS, - startTimestamp, - endTimestamp); - - final var serializedSubscriptionIdUuid = serializer.serializeUuid(subscriptionId); - final var serializedSubscriptionId = - monitoring.Monitoring.SubscriptionID.newBuilder() - .setSubsId(serializedSubscriptionIdUuid) - .build(); - final var serializedKpiIdUuid = serializer.serializeUuid(kpiId); - final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); - final var serializedStartTimestamp = - ContextOuterClass.Timestamp.newBuilder().setTimestamp(startTimestamp); - final var serializedEndTimestamp = - ContextOuterClass.Timestamp.newBuilder().setTimestamp(endTimestamp); - - final var expectedSubDescriptor = - Monitoring.SubsDescriptor.newBuilder() - .setSubsId(serializedSubscriptionId) - .setKpiId(serializedKpiId) - .setSamplingDurationS(samplingDurationS) - .setSamplingIntervalS(samplingIntervalS) - .setStartTimestamp(serializedStartTimestamp) - .setEndTimestamp(serializedEndTimestamp) - .build(); - - final var serializedSubDescriptor = serializer.serialize(subDescriptor); - - assertThat(serializedSubDescriptor).isEqualTo(expectedSubDescriptor); - } - - @Test - void shouldDeserializeSubDescriptor() { - final var subscriptionId = "subscriptionId"; - final var kpiId = "kpiId"; - final var samplingDurationS = 10f; - final var samplingIntervalS = 45f; - final var startTimestamp = 1.0; - final var endTimestamp = 100.0; - - final var expectedSubDescriptor = - new SubsDescriptor( - subscriptionId, - kpiId, - samplingDurationS, - samplingIntervalS, - startTimestamp, - endTimestamp); - - final var serializedSubscriptionIdUuid = serializer.serializeUuid(subscriptionId); - final var serializedSubscriptionId = - monitoring.Monitoring.SubscriptionID.newBuilder() - .setSubsId(serializedSubscriptionIdUuid) - .build(); - final var serializedKpiIdUuid = serializer.serializeUuid(kpiId); - final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); - final var serializedStartTimestamp = - ContextOuterClass.Timestamp.newBuilder().setTimestamp(startTimestamp); - final var serializedEndTimestamp = - ContextOuterClass.Timestamp.newBuilder().setTimestamp(endTimestamp); - - final var serializedSubDescriptor = - Monitoring.SubsDescriptor.newBuilder() - .setSubsId(serializedSubscriptionId) - .setKpiId(serializedKpiId) - .setSamplingDurationS(samplingDurationS) - .setSamplingIntervalS(samplingIntervalS) - .setStartTimestamp(serializedStartTimestamp) - .setEndTimestamp(serializedEndTimestamp) - .build(); - - final var subDescriptor = serializer.deserialize(serializedSubDescriptor); - - assertThat(subDescriptor).usingRecursiveComparison().isEqualTo(expectedSubDescriptor); - } - - @Test - void shouldDeserializePolicyRuleCondition() { - final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId"; - final var expectedPolicyRuleConditionNumericalOperator = - NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN; - final var expectedPolicyRuleConditionKpiValue = new IntegerKpiValue(34); - - final var expectedPolicyRuleCondition = - new PolicyRuleCondition( - expectedPolicyRuleConditionKpiId, - expectedPolicyRuleConditionNumericalOperator, - expectedPolicyRuleConditionKpiValue); - - final var serializedPolicyRuleCondition = serializer.serialize(expectedPolicyRuleCondition); - - final var policyRuleCondition = serializer.deserialize(serializedPolicyRuleCondition); - - assertThat(policyRuleCondition) - .usingRecursiveComparison() - .isEqualTo(expectedPolicyRuleCondition); - } - - private static Stream provideBooleanOperators() { - return Stream.of( - Arguments.of( - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, - PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND), - Arguments.of( - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR), - Arguments.of( - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED, - PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideBooleanOperators") - void shouldSerializeBooleanOperator( - BooleanOperator booleanOperator, PolicyCondition.BooleanOperator expectedBooleanOperator) { - final var serializedBooleanOperator = serializer.serialize(booleanOperator); - - assertThat(serializedBooleanOperator).isEqualTo(expectedBooleanOperator); - } - - @ParameterizedTest - @MethodSource("provideBooleanOperators") - void shouldDeserializeBooleanOperator( - BooleanOperator expectedBooleanOperator, - PolicyCondition.BooleanOperator serializedBooleanOperator) { - final var booleanOperator = serializer.deserialize(serializedBooleanOperator); - - assertThat(booleanOperator).isEqualTo(expectedBooleanOperator); - } - - private static Stream providePolicyRuleActionEnum() { - return Stream.of( - Arguments.of( - PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_SET_DEVICE_STATUS), - Arguments.of( - PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, - PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE), - Arguments.of( - PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT, - PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT), - Arguments.of( - PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION, - PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION)); - } - - @ParameterizedTest - @MethodSource("providePolicyRuleActionEnum") - void shouldSerializePolicyRuleActionEnum( - PolicyRuleActionEnum policyRuleActionEnum, - PolicyAction.PolicyRuleActionEnum expectedPolicyRuleActionEnum) { - final var serializedPolicyRuleActionEnum = serializer.serialize(policyRuleActionEnum); - - assertThat(serializedPolicyRuleActionEnum).isEqualTo(expectedPolicyRuleActionEnum); - } - - @ParameterizedTest - @MethodSource("providePolicyRuleActionEnum") - void shouldDeserializePolicyRuleActionEnum( - PolicyRuleActionEnum expectedPolicyRuleActionEnum, - PolicyAction.PolicyRuleActionEnum serializedPolicyRuleActionEnum) { - final var policyRuleActionEnum = serializer.deserialize(serializedPolicyRuleActionEnum); - - assertThat(policyRuleActionEnum).isEqualTo(expectedPolicyRuleActionEnum); - } - - @Test - void shouldSerializePolicyRuleAction() { - final var expectedPolicyRuleActionEnum = - PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT; - final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2"); - final var policyRuleAction = - new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters); - - final var serializedPolicyRuleActionEnum = serializer.serialize(expectedPolicyRuleActionEnum); - - final var expectedPolicyRuleAction = - PolicyAction.PolicyRuleAction.newBuilder() - .setAction(serializedPolicyRuleActionEnum) - .addAllParameters(expectedPolicyRuleActionParameters) - .build(); - - final var serializedPolicyRuleAction = serializer.serialize(policyRuleAction); - - assertThat(serializedPolicyRuleAction) - .usingRecursiveComparison() - .isEqualTo(expectedPolicyRuleAction); - } - - @Test - void shouldDeserializePolicyRuleAction() { - final var expectedPolicyRuleActionEnum = PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION; - final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2"); - final var expectedPolicyRuleAction = - new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters); - - final var serializedPolicyRuleAction = serializer.serialize(expectedPolicyRuleAction); - - final var policyRuleAction = serializer.deserialize(serializedPolicyRuleAction); - - assertThat(policyRuleAction).usingRecursiveComparison().isEqualTo(expectedPolicyRuleAction); - } - - @Test - void shouldSerializePolicyRuleBasic() { - final var policyRuleBasic = createPolicyRuleBasic(); - - final var expectedPolicyRuleId = policyRuleBasic.getPolicyRuleId(); - final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState(); - final var expectedPriority = policyRuleBasic.getPriority(); - final var expectedPolicyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); - final var expectedBooleanOperator = policyRuleBasic.getBooleanOperator(); - final var expectedPolicyRuleActions = policyRuleBasic.getPolicyRuleActions(); - - final var serializedPolicyRuleId = serializer.serializePolicyRuleId(expectedPolicyRuleId); - final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState); - final var serializedPolicyRuleConditions = - expectedPolicyRuleConditions.stream() - .map(policyRuleCondition -> serializer.serialize(policyRuleCondition)) - .collect(Collectors.toList()); - final var serializedBooleanOperator = serializer.serialize(expectedBooleanOperator); - final var serializedPolicyRuleActions = - expectedPolicyRuleActions.stream() - .map(policyRuleAction -> serializer.serialize(policyRuleAction)) - .collect(Collectors.toList()); - - final var expectedPolicyRuleBasic = - Policy.PolicyRuleBasic.newBuilder() - .setPolicyRuleId(serializedPolicyRuleId) - .setPolicyRuleState(serializedPolicyRuleState) - .setPriority(expectedPriority) - .addAllConditionList(serializedPolicyRuleConditions) - .setBooleanOperator(serializedBooleanOperator) - .addAllActionList(serializedPolicyRuleActions) - .build(); - - final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); - - assertThat(serializedPolicyRuleBasic) - .usingRecursiveComparison() - .isEqualTo(expectedPolicyRuleBasic); - } - - @Test - void shouldDeserializePolicyRuleBasic() { - final var expectedPolicyRuleBasic = createPolicyRuleBasic(); - - final var expectedPolicyRuleId = expectedPolicyRuleBasic.getPolicyRuleId(); - final var expectedPolicyRuleState = expectedPolicyRuleBasic.getPolicyRuleState(); - final var expectedPriority = expectedPolicyRuleBasic.getPriority(); - final var expectedPolicyRuleConditions = expectedPolicyRuleBasic.getPolicyRuleConditions(); - final var expectedBooleanOperator = expectedPolicyRuleBasic.getBooleanOperator(); - final var expectedPolicyRuleActions = expectedPolicyRuleBasic.getPolicyRuleActions(); - - final var serializedPolicyRuleId = serializer.serializePolicyRuleId(expectedPolicyRuleId); - final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState); - final var serializedPolicyRuleConditions = - expectedPolicyRuleConditions.stream() - .map(policyRuleCondition -> serializer.serialize(policyRuleCondition)) - .collect(Collectors.toList()); - final var serializedBooleanOperator = serializer.serialize(expectedBooleanOperator); - final var serializedPolicyRuleActions = - expectedPolicyRuleActions.stream() - .map(policyRuleAction -> serializer.serialize(policyRuleAction)) - .collect(Collectors.toList()); - - final var serializedPolicyRuleBasic = - Policy.PolicyRuleBasic.newBuilder() - .setPolicyRuleId(serializedPolicyRuleId) - .setPolicyRuleState(serializedPolicyRuleState) - .setPriority(expectedPriority) - .addAllConditionList(serializedPolicyRuleConditions) - .setBooleanOperator(serializedBooleanOperator) - .addAllActionList(serializedPolicyRuleActions) - .build(); - - final var policyRuleBasic = serializer.deserialize(serializedPolicyRuleBasic); - - assertThat(policyRuleBasic).usingRecursiveComparison().isEqualTo(expectedPolicyRuleBasic); - } - - @Test - void shouldSerializePolicyRuleService() { - final var policyRuleBasic = createPolicyRuleBasic(); - final var serviceId = new ServiceId("contextId", "serviceId"); - final var deviceIds = List.of("deviceId1", "deviceId2"); - - final var policyRuleService = new PolicyRuleService(policyRuleBasic, serviceId, deviceIds); - - final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); - final var serializedPolicyRuleServiceId = serializer.serialize(serviceId); - final var serializedPolicyRuleDeviceIds = - deviceIds.stream() - .map(deviceId -> serializer.serializeDeviceId(deviceId)) - .collect(Collectors.toList()); - - final var expectedPolicyRuleService = - Policy.PolicyRuleService.newBuilder() - .setPolicyRuleBasic(serializedPolicyRuleBasic) - .setServiceId(serializedPolicyRuleServiceId) - .addAllDeviceList(serializedPolicyRuleDeviceIds) - .build(); - - final var serializedPolicyRuleService = serializer.serialize(policyRuleService); - - assertThat(serializedPolicyRuleService) - .usingRecursiveComparison() - .isEqualTo(expectedPolicyRuleService); - } - - @Test - void shouldDeserializePolicyRuleService() { - final var expectedPolicyRuleBasic = createPolicyRuleBasic(); - final var expectedServiceId = new ServiceId("contextId", "serviceId"); - final var expectedDeviceIds = List.of("deviceId1", "deviceId2"); - final var expectedPolicyRuleService = - new PolicyRuleService(expectedPolicyRuleBasic, expectedServiceId, expectedDeviceIds); - - final var serializedPolicyRuleBasic = serializer.serialize(expectedPolicyRuleBasic); - final var serializedPolicyRuleServiceId = serializer.serialize(expectedServiceId); - final var serializedPolicyRuleDeviceIds = - expectedDeviceIds.stream() - .map(deviceId -> serializer.serializeDeviceId(deviceId)) - .collect(Collectors.toList()); - - final var serializedPolicyRuleService = - Policy.PolicyRuleService.newBuilder() - .setPolicyRuleBasic(serializedPolicyRuleBasic) - .setServiceId(serializedPolicyRuleServiceId) - .addAllDeviceList(serializedPolicyRuleDeviceIds) - .build(); - - final var policyRuleService = serializer.deserialize(serializedPolicyRuleService); - - assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService); - } - - @Test - void shouldSerializePolicyRuleDevice() { - final var policyRuleBasic = createPolicyRuleBasic(); - final var deviceIds = List.of("deviceId1", "deviceId2"); - - final var policyRuleDevice = new PolicyRuleDevice(policyRuleBasic, deviceIds); - - final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); - final var serializedPolicyRuleDeviceIds = - deviceIds.stream() - .map(deviceId -> serializer.serializeDeviceId(deviceId)) - .collect(Collectors.toList()); - - final var expectedPolicyRuleDevice = - Policy.PolicyRuleDevice.newBuilder() - .setPolicyRuleBasic(serializedPolicyRuleBasic) - .addAllDeviceList(serializedPolicyRuleDeviceIds) - .build(); - - final var serializedPolicyRuleDevice = serializer.serialize(policyRuleDevice); - - assertThat(serializedPolicyRuleDevice) - .usingRecursiveComparison() - .isEqualTo(expectedPolicyRuleDevice); - } - - @Test - void shouldDeserializePolicyRuleDevice() { - final var expectedPolicyRuleBasic = createPolicyRuleBasic(); - final var expectedDeviceIds = List.of("deviceId1", "deviceId2"); - final var expectedPolicyRuleDevice = - new PolicyRuleDevice(expectedPolicyRuleBasic, expectedDeviceIds); - - final var serializedPolicyRuleBasic = serializer.serialize(expectedPolicyRuleBasic); - final var serializedPolicyRuleDeviceIds = - expectedDeviceIds.stream() - .map(deviceId -> serializer.serializeDeviceId(deviceId)) - .collect(Collectors.toList()); - - final var serializedPolicyRuleDevice = - Policy.PolicyRuleDevice.newBuilder() - .setPolicyRuleBasic(serializedPolicyRuleBasic) - .addAllDeviceList(serializedPolicyRuleDeviceIds) - .build(); - - final var policyRuleDevice = serializer.deserialize(serializedPolicyRuleDevice); - - assertThat(policyRuleDevice).usingRecursiveComparison().isEqualTo(expectedPolicyRuleDevice); - } - - @Test - void shouldSerializeKpiId() { - final var kpiId = "kpiId"; - - final var kpiIdUuid = serializer.serializeUuid(kpiId); - - final var expectedKpiId = Monitoring.KpiId.newBuilder().setKpiId(kpiIdUuid).build(); - - final var serializedKpiId = serializer.serializeKpiId(kpiId); - - assertThat(serializedKpiId).usingRecursiveComparison().isEqualTo(expectedKpiId); - } - - @Test - void shouldDeserializeKpiId() { - final var expectedKpiId = "expectedKpiId"; - - final var serializedKpiIdUuid = serializer.serializeUuid(expectedKpiId); - final var serializedKpiId = Monitoring.KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); - - final var kpiId = serializer.deserialize(serializedKpiId); - - assertThat(kpiId).isEqualTo(expectedKpiId); - } - - @Test - void shouldSerializeKpi() { - final var expectedKpiId = "expectedKpiId"; - final var expectedTimestamp = 100.0; - final var expectedKpiValue = new FloatKpiValue(643.45f); - - final var kpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue); - - final var serializedKpiId = serializer.serializeKpiId(expectedKpiId); - final var serializedKpiValue = serializer.serialize(expectedKpiValue); - final var serializedexpectedTimestamp = - context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestamp); - - final var expectedKpi = - Monitoring.Kpi.newBuilder() - .setKpiId(serializedKpiId) - .setTimestamp(serializedexpectedTimestamp) - .setKpiValue(serializedKpiValue) - .build(); - - final var serializedKpi = serializer.serialize(kpi); - - assertThat(serializedKpi).usingRecursiveComparison().isEqualTo(expectedKpi); - } - - @Test - void shouldDeserializeKpi() { - final var expectedKpiId = "expectedKpiId"; - final var expectedTimestamp = 100.0; - final var expectedKpiValue = new BooleanKpiValue(true); - final var expectedKpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue); - - final var serializedKpi = serializer.serialize(expectedKpi); - - final var kpi = serializer.deserialize(serializedKpi); - - assertThat(kpi).usingRecursiveComparison().isEqualTo(expectedKpi); - } - - @Test - void shouldSerializeKpisList() { - final var expectedKpiIdA = "expectedKpiIdA"; - final var expectedTimestampA = 100.0; - final var expectedKpiValueA = new FloatKpiValue(643.45f); - final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA); - final var serializedexpectedTimestampA = - context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampA); - final var serializedKpiValueA = serializer.serialize(expectedKpiValueA); - final var kpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA); - - final var expectedKpiIdB = "expectedKpiIdB"; - final var expectedTimestampB = 100.0; - final var expectedKpiValueB = new IntegerKpiValue(32); - final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB); - final var serializedexpectedTimestampB = - context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampB); - 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(serializedexpectedTimestampA) - .setKpiValue(serializedKpiValueA) - .build(); - - final var expectedKpiB = - Monitoring.Kpi.newBuilder() - .setKpiId(serializedKpiIdB) - .setTimestamp(serializedexpectedTimestampB) - .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 = 100.0; - final var expectedKpiValueA = new FloatKpiValue(643.45f); - final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA); - final var serializedexpectedTimestampA = - context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampA); - final var serializedKpiValueA = serializer.serialize(expectedKpiValueA); - final var expectedKpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA); - - final var expectedKpiIdB = "expectedKpiIdB"; - final var expectedTimestampB = 200.0; - final var expectedKpiValueB = new IntegerKpiValue(32); - final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB); - final var serializedexpectedTimestampB = - context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampB); - 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(serializedexpectedTimestampA) - .setKpiValue(serializedKpiValueA) - .build(); - - final var serializedKpiB = - Monitoring.Kpi.newBuilder() - .setKpiId(serializedKpiIdB) - .setTimestamp(serializedexpectedTimestampB) - .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"; - final var expectedKpiSampleType = KpiSampleType.BYTES_RECEIVED; - final var expectedDeviceId = "expectedDeviceId"; - - final var expectedTopologyId = new TopologyId("contextId", "topologyId"); - final var expectedEndPointId = - new EndPointId(expectedTopologyId, expectedDeviceId, "endpointId"); - final var expectedServiceId = new ServiceId("contextId", "serviceId"); - final var expectedSliceId = new SliceId("contextId", "sliceId"); - - final var kpiDescriptor = - new KpiDescriptor( - expectedKpiDescription, - expectedKpiSampleType, - expectedDeviceId, - expectedEndPointId, - expectedServiceId, - expectedSliceId); - - final var serializedKpiSampleType = serializer.serialize(expectedKpiSampleType); - final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId); - final var serializedEndPointId = serializer.serialize(expectedEndPointId); - final var serializedServiceId = serializer.serialize(expectedServiceId); - final var serializedSliceId = serializer.serialize(expectedSliceId); - - final var expectedKpiDescriptor = - Monitoring.KpiDescriptor.newBuilder() - .setKpiDescription(expectedKpiDescription) - .setKpiSampleType(serializedKpiSampleType) - .setDeviceId(serializedDeviceId) - .setEndpointId(serializedEndPointId) - .setServiceId(serializedServiceId) - .setSliceId(serializedSliceId) - .build(); - - final var serializedKpiDescriptor = serializer.serialize(kpiDescriptor); - - assertThat(serializedKpiDescriptor).usingRecursiveComparison().isEqualTo(expectedKpiDescriptor); - } - - @Test - void shouldDeserializeKpiDescriptor() { - final var expectedKpiDescription = "expectedKpiDescription"; - final var expectedKpiSampleType = KpiSampleType.BYTES_RECEIVED; - final var expectedDeviceId = "expectedDeviceId"; - - final var expectedTopologyId = new TopologyId("contextId", "topologyId"); - final var expectedEndPointId = - new EndPointId(expectedTopologyId, expectedDeviceId, "endpointId"); - final var expectedServiceId = new ServiceId("contextId", "serviceId"); - final var expectedSliceId = new SliceId("contextId", "sliceId"); - - final var expectedKpiDescriptor = - new KpiDescriptor( - expectedKpiDescription, - expectedKpiSampleType, - expectedDeviceId, - expectedEndPointId, - expectedServiceId, - expectedSliceId); - - final var serializedKpiSampleType = serializer.serialize(expectedKpiSampleType); - final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId); - final var serializedEndPointId = serializer.serialize(expectedEndPointId); - final var serializedServiceId = serializer.serialize(expectedServiceId); - final var serializedSliceId = serializer.serialize(expectedSliceId); - - final var serializedKpiDescriptor = - Monitoring.KpiDescriptor.newBuilder() - .setKpiDescription(expectedKpiDescription) - .setKpiSampleType(serializedKpiSampleType) - .setDeviceId(serializedDeviceId) - .setEndpointId(serializedEndPointId) - .setServiceId(serializedServiceId) - .setSliceId(serializedSliceId) - .build(); - - final var kpiDescriptor = serializer.deserialize(serializedKpiDescriptor); - - assertThat(kpiDescriptor).usingRecursiveComparison().isEqualTo(expectedKpiDescriptor); - } - - @Test - void shouldSerializeDeviceConfig() { - final var expectedConfigRuleCustomA = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey("resourceKeyA") - .setResourceValue("resourceValueA") - .build(); - - final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); - - final var expectedConfigRuleCustomB = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey("resourceKeyB") - .setResourceValue("resourceValueB") - .build(); - - final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB"); - - final var expectedConfigRuleA = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) - .setCustom(expectedConfigRuleCustomA) - .build(); - final var expectedConfigRuleB = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) - .setCustom(expectedConfigRuleCustomB) - .build(); - - final var expectedDeviceConfig = - ContextOuterClass.DeviceConfig.newBuilder() - .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB)) - .build(); - - final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA); - final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB); - - final var configRuleA = new ConfigRule(ConfigActionEnum.SET, configRuleTypeA); - final var configRuleB = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeB); - - final var deviceConfig = new DeviceConfig(List.of(configRuleA, configRuleB)); - final var serializedDeviceConfig = serializer.serialize(deviceConfig); - - assertThat(serializedDeviceConfig).isEqualTo(expectedDeviceConfig); - } - - @Test - void shouldDeserializeDeviceConfig() { - final var expectedConfigRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); - final var expectedConfigRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB"); - - final var expectedConfigRuleTypeA = new ConfigRuleTypeCustom(expectedConfigRuleCustomA); - final var expectedConfigRuleTypeB = new ConfigRuleTypeCustom(expectedConfigRuleCustomB); - - final var expectedConfigRuleA = new ConfigRule(ConfigActionEnum.SET, expectedConfigRuleTypeA); - final var expectedConfigRuleB = - new ConfigRule(ConfigActionEnum.DELETE, expectedConfigRuleTypeB); - - final var expectedDeviceConfig = - new DeviceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB)); - - final var configRuleCustomA = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey("resourceKeyA") - .setResourceValue("resourceValueA") - .build(); - - final var configRuleCustomB = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey("resourceKeyB") - .setResourceValue("resourceValueB") - .build(); - - final var configRuleA = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) - .setCustom(configRuleCustomA) - .build(); - final var configRuleB = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) - .setCustom(configRuleCustomB) - .build(); - final var serializedDeviceConfig = - ContextOuterClass.DeviceConfig.newBuilder() - .addAllConfigRules(List.of(configRuleA, configRuleB)) - .build(); - final var deviceConfig = serializer.deserialize(serializedDeviceConfig); - - assertThat(deviceConfig).usingRecursiveComparison().isEqualTo(expectedDeviceConfig); - } - - private static Stream provideOperationalStatusEnum() { - return Stream.of( - Arguments.of( - DeviceOperationalStatus.ENABLED, - DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED), - Arguments.of( - DeviceOperationalStatus.DISABLED, - DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED), - Arguments.of( - DeviceOperationalStatus.UNDEFINED, - DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideOperationalStatusEnum") - void shouldSerializeOperationalStatusEnum( - DeviceOperationalStatus opStatus, - ContextOuterClass.DeviceOperationalStatusEnum expectedOpStatus) { - final var serializedOpStatus = serializer.serialize(opStatus); - assertThat(serializedOpStatus.getNumber()).isEqualTo(expectedOpStatus.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideOperationalStatusEnum") - void shouldDeserializeOperationalStatusEnum( - DeviceOperationalStatus expectedOpStatus, - ContextOuterClass.DeviceOperationalStatusEnum serializedOpStatus) { - final var operationalStatus = serializer.deserialize(serializedOpStatus); - assertThat(operationalStatus).isEqualTo(expectedOpStatus); - } - - private static Stream provideDeviceDriverEnum() { - return Stream.of( - Arguments.of( - DeviceDriverEnum.OPENCONFIG, - ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG), - Arguments.of( - DeviceDriverEnum.TRANSPORT_API, - ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API), - Arguments.of(DeviceDriverEnum.P4, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4), - Arguments.of( - DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, - ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY), - Arguments.of( - DeviceDriverEnum.ONF_TR_352, - ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352), - Arguments.of( - DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED)); - } - - @ParameterizedTest - @MethodSource("provideDeviceDriverEnum") - void shouldSerializeDeviceDriverEnum( - DeviceDriverEnum deviceDriverEnum, - ContextOuterClass.DeviceDriverEnum expectedDeviceDriverEnum) { - final var serializedDeviceDriverEnum = serializer.serialize(deviceDriverEnum); - - assertThat(serializedDeviceDriverEnum.getNumber()) - .isEqualTo(expectedDeviceDriverEnum.getNumber()); - } - - @ParameterizedTest - @MethodSource("provideDeviceDriverEnum") - void shouldDeserializeDeviceDriverEnum( - DeviceDriverEnum expectedDeviceDriverEnum, - ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) { - final var deviceDriverEnum = serializer.deserialize(serializedDeviceDriverEnum); - - assertThat(deviceDriverEnum).isEqualTo(expectedDeviceDriverEnum); - } - - @Test - void shouldSerializeEndPoint() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - final var endPointType = "endPointType"; - final var kpiSampleTypes = - List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); - - final var locationTypeRegion = new LocationTypeRegion("ATH"); - final var location = new Location(locationTypeRegion); - final var endPoint = - new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build(); - - final var serializedEndPointId = serializer.serialize(endPointId); - final var serializedKpiSampleTypes = - kpiSampleTypes.stream() - .map(kpiSampleType -> serializer.serialize(kpiSampleType)) - .collect(Collectors.toList()); - final var serializedLocation = serializer.serialize(location); - - final var expectedEndPoint = - ContextOuterClass.EndPoint.newBuilder() - .setEndpointId(serializedEndPointId) - .setEndpointType(endPointType) - .addAllKpiSampleTypes(serializedKpiSampleTypes) - .setEndpointLocation(serializedLocation) - .build(); - - final var serializedEndPoint = serializer.serialize(endPoint); - - assertThat(serializedEndPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint); - } - - @Test - void shouldDeserializeEndPoint() { - final var expectedTopologyId = new TopologyId("contextId", "id"); - final var expectedDeviceId = "expectedDeviceId"; - final var expectedId = "expectedId"; - final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); - final var expectedEndPointType = "expectedEndPointType"; - final var expectedKpiSampleTypes = - List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); - - final var expectedLocationTypeRegion = new LocationTypeRegion("ATH"); - final var expectedLocation = new Location(expectedLocationTypeRegion); - - final var expectedEndPoint = - new EndPointBuilder(expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes) - .location(expectedLocation) - .build(); - - final var serializedEndPointId = serializer.serialize(expectedEndPointId); - final var serializedKpiSampleTypes = - expectedKpiSampleTypes.stream() - .map(kpiSampleType -> serializer.serialize(kpiSampleType)) - .collect(Collectors.toList()); - final var serializedLocation = serializer.serialize(expectedLocation); - - final var serializedEndPoint = - ContextOuterClass.EndPoint.newBuilder() - .setEndpointId(serializedEndPointId) - .setEndpointType(expectedEndPointType) - .addAllKpiSampleTypes(serializedKpiSampleTypes) - .setEndpointLocation(serializedLocation) - .build(); - - final var endPoint = serializer.deserialize(serializedEndPoint); - - assertThat(endPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint); - } - - @Test - void shouldSerializeDevice() { - final var expectedConfigRuleCustomA = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey("resourceKeyA") - .setResourceValue("resourceValueA") - .build(); - final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); - - final var expectedConfigRule = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) - .setCustom(expectedConfigRuleCustomA) - .build(); - - 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 expectedTopologyIdA = new TopologyId("contextIdA", "idA"); - final var expectedDeviceIdA = "expectedDeviceIdA"; - final var expectedIdA = "expectedIdA"; - final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA); - - final var endPointTypeA = "endPointTypeA"; - final var kpiSampleTypesA = - List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); - final var locationTypeRegionA = new LocationTypeRegion("ATH"); - final var locationA = new Location(locationTypeRegionA); - final var endPointA = - new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA) - .location(locationA) - .build(); - - 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(endPointA, endPointB); - - final var expectedDeviceConfig = - ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(expectedConfigRule).build(); - - final var serializedDeviceId = serializer.serializeDeviceId("deviceId"); - final var serializedDrivers = - deviceDrivers.stream() - .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum)) - .collect(Collectors.toList()); - - final var serializedEndPoints = - endPoints.stream() - .map(endPoint -> serializer.serialize(endPoint)) - .collect(Collectors.toList()); - - final var deviceBuilder = ContextOuterClass.Device.newBuilder(); - - deviceBuilder.setDeviceId(serializedDeviceId); - deviceBuilder.setDeviceType("deviceType"); - deviceBuilder.setDeviceConfig(expectedDeviceConfig); - deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED)); - deviceBuilder.addAllDeviceDrivers(serializedDrivers); - deviceBuilder.addAllDeviceEndpoints(serializedEndPoints); - - final var expectedDevice = deviceBuilder.build(); - - final var device = - new Device( - "deviceId", - "deviceType", - deviceConfig, - DeviceOperationalStatus.ENABLED, - deviceDrivers, - endPoints); - final var serializedDevice = serializer.serialize(device); - - assertThat(serializedDevice).isEqualTo(expectedDevice); - } - - @Test - void shouldDeserializeDevice() { - final var configRuleCustom = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); - final var expectedConfigRuleCustom = - ContextOuterClass.ConfigRule_Custom.newBuilder() - .setResourceKey("resourceKeyA") - .setResourceValue("resourceValueA") - .build(); - final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom); - - final var expectedConfig = - new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.DELETE, configRuleType))); - - final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4); - - final var expectedTopologyIdA = new TopologyId("contextIdA", "idA"); - final var expectedDeviceIdA = "expectedDeviceIdA"; - final var expectedIdA = "expectedIdA"; - final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA); - - final var endPointTypeA = "endPointTypeA"; - final var kpiSampleTypesA = - List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); - final var locationTypeRegionA = new LocationTypeRegion("ATH"); - final var locationA = new Location(locationTypeRegionA); - final var endPointA = - new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA) - .location(locationA) - .build(); - - 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(endPointA, endPointB); - - final var expectedDevice = - new Device( - "deviceId", - "deviceType", - expectedConfig, - DeviceOperationalStatus.ENABLED, - deviceDrivers, - endPoints); - - final var configRule = - ContextOuterClass.ConfigRule.newBuilder() - .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) - .setCustom(expectedConfigRuleCustom) - .build(); - final var deviceConfig = - ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(configRule).build(); - - final var serializedDeviceId = serializer.serializeDeviceId("deviceId"); - final var serializedDeviceOperationalStatus = - serializer.serialize(DeviceOperationalStatus.ENABLED); - - final var serializedDrivers = - deviceDrivers.stream() - .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum)) - .collect(Collectors.toList()); - - final var serializedEndPoints = - endPoints.stream() - .map(endPoint -> serializer.serialize(endPoint)) - .collect(Collectors.toList()); - - final var deviceBuilder = ContextOuterClass.Device.newBuilder(); - deviceBuilder.setDeviceId(serializedDeviceId); - deviceBuilder.setDeviceType("deviceType"); - deviceBuilder.setDeviceConfig(deviceConfig); - deviceBuilder.setDeviceOperationalStatus(serializedDeviceOperationalStatus); - deviceBuilder.addAllDeviceDrivers(serializedDrivers); - deviceBuilder.addAllDeviceEndpoints(serializedEndPoints); - - final var serializedDevice = deviceBuilder.build(); - final var device = serializer.deserialize(serializedDevice); - - 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"; - - final var serializeUuid = serializer.serializeUuid(expectedUuid); - - assertThat(serializeUuid.getUuid()).isEqualTo(expectedUuid); - } - - @Test - void shouldDeserializeUuid() { - final var expectedUuid = "uuid"; - - final var uuid = serializer.deserialize(Uuid.newBuilder().setUuid(expectedUuid).build()); - - assertThat(uuid).isEqualTo(expectedUuid); - } -} diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java index 45a64fabb..89696d8ac 100644 --- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java +++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java @@ -62143,7 +62143,7 @@ public final class ContextOuterClass { "TION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n" + "\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL" + "_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIO" + - "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\357\022" + + "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\331\023" + "\n\016ContextService\022:\n\016ListContextIds\022\016.con" + "text.Empty\032\026.context.ContextIdList\"\000\0226\n\014" + "ListContexts\022\016.context.Empty\032\024.context.C" + @@ -62183,28 +62183,31 @@ public final class ContextOuterClass { "t.ContextId\032\024.context.ServiceList\"\000\0224\n\nG" + "etService\022\022.context.ServiceId\032\020.context." + "Service\"\000\0224\n\nSetService\022\020.context.Servic" + - "e\032\022.context.ServiceId\"\000\0225\n\rRemoveService" + - "\022\022.context.ServiceId\032\016.context.Empty\"\000\022=" + - "\n\020GetServiceEvents\022\016.context.Empty\032\025.con" + - "text.ServiceEvent\"\0000\001\022:\n\014ListSliceIds\022\022." + - "context.ContextId\032\024.context.SliceIdList\"" + - "\000\0226\n\nListSlices\022\022.context.ContextId\032\022.co" + - "ntext.SliceList\"\000\022.\n\010GetSlice\022\020.context." + - "SliceId\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016." + - "context.Slice\032\020.context.SliceId\"\000\0221\n\013Rem" + - "oveSlice\022\020.context.SliceId\032\016.context.Emp" + - "ty\"\000\0229\n\016GetSliceEvents\022\016.context.Empty\032\023" + - ".context.SliceEvent\"\0000\001\022D\n\021ListConnectio" + - "nIds\022\022.context.ServiceId\032\031.context.Conne" + - "ctionIdList\"\000\022@\n\017ListConnections\022\022.conte" + - "xt.ServiceId\032\027.context.ConnectionList\"\000\022" + - "=\n\rGetConnection\022\025.context.ConnectionId\032" + - "\023.context.Connection\"\000\022=\n\rSetConnection\022" + - "\023.context.Connection\032\025.context.Connectio" + - "nId\"\000\022;\n\020RemoveConnection\022\025.context.Conn" + - "ectionId\032\016.context.Empty\"\000\022C\n\023GetConnect" + - "ionEvents\022\016.context.Empty\032\030.context.Conn" + - "ectionEvent\"\0000\001b\006proto3" + "e\032\022.context.ServiceId\"\000\0226\n\014UnsetService\022" + + "\020.context.Service\032\022.context.ServiceId\"\000\022" + + "5\n\rRemoveService\022\022.context.ServiceId\032\016.c" + + "ontext.Empty\"\000\022=\n\020GetServiceEvents\022\016.con" + + "text.Empty\032\025.context.ServiceEvent\"\0000\001\022:\n" + + "\014ListSliceIds\022\022.context.ContextId\032\024.cont" + + "ext.SliceIdList\"\000\0226\n\nListSlices\022\022.contex" + + "t.ContextId\032\022.context.SliceList\"\000\022.\n\010Get" + + "Slice\022\020.context.SliceId\032\016.context.Slice\"" + + "\000\022.\n\010SetSlice\022\016.context.Slice\032\020.context." + + "SliceId\"\000\0220\n\nUnsetSlice\022\016.context.Slice\032" + + "\020.context.SliceId\"\000\0221\n\013RemoveSlice\022\020.con" + + "text.SliceId\032\016.context.Empty\"\000\0229\n\016GetSli" + + "ceEvents\022\016.context.Empty\032\023.context.Slice" + + "Event\"\0000\001\022D\n\021ListConnectionIds\022\022.context" + + ".ServiceId\032\031.context.ConnectionIdList\"\000\022" + + "@\n\017ListConnections\022\022.context.ServiceId\032\027" + + ".context.ConnectionList\"\000\022=\n\rGetConnecti" + + "on\022\025.context.ConnectionId\032\023.context.Conn" + + "ection\"\000\022=\n\rSetConnection\022\023.context.Conn" + + "ection\032\025.context.ConnectionId\"\000\022;\n\020Remov" + + "eConnection\022\025.context.ConnectionId\032\016.con" + + "text.Empty\"\000\022C\n\023GetConnectionEvents\022\016.co" + + "ntext.Empty\032\030.context.ConnectionEvent\"\0000" + + "\001b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, diff --git a/src/policy/target/generated-sources/grpc/context/ContextService.java b/src/policy/target/generated-sources/grpc/context/ContextService.java index d54c56057..814ea98b6 100644 --- a/src/policy/target/generated-sources/grpc/context/ContextService.java +++ b/src/policy/target/generated-sources/grpc/context/ContextService.java @@ -56,6 +56,8 @@ public interface ContextService extends MutinyService { io.smallrye.mutiny.Uni setService(context.ContextOuterClass.Service request); + io.smallrye.mutiny.Uni unsetService(context.ContextOuterClass.Service request); + io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request); io.smallrye.mutiny.Uni listSliceIds(context.ContextOuterClass.ContextId request); @@ -66,6 +68,8 @@ public interface ContextService extends MutinyService { io.smallrye.mutiny.Uni setSlice(context.ContextOuterClass.Slice request); + io.smallrye.mutiny.Uni unsetSlice(context.ContextOuterClass.Slice request); + io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request); io.smallrye.mutiny.Uni listConnectionIds(context.ContextOuterClass.ServiceId request); diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java index f552294b8..2b0099f10 100644 --- a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java +++ b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java @@ -208,6 +208,14 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI } } @Override + public io.smallrye.mutiny.Uni unsetService(context.ContextOuterClass.Service request) { + try { + return delegate.unsetService(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + @Override public io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request) { try { return delegate.removeService(request); @@ -248,6 +256,14 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI } } @Override + public io.smallrye.mutiny.Uni unsetSlice(context.ContextOuterClass.Slice request) { + try { + return delegate.unsetSlice(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + @Override public io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request) { try { return delegate.removeSlice(request); diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java index c6493bd4d..c518a0b46 100644 --- a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java +++ b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java @@ -117,6 +117,10 @@ public class ContextServiceClient implements ContextService, MutinyClient unsetService(context.ContextOuterClass.Service request) { + return stub.unsetService(request); + } + @Override public io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request) { return stub.removeService(request); } @@ -137,6 +141,10 @@ public class ContextServiceClient implements ContextService, MutinyClient unsetSlice(context.ContextOuterClass.Slice request) { + return stub.unsetSlice(request); + } + @Override public io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request) { return stub.removeSlice(request); } diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java index be720c127..f59378086 100644 --- a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java +++ b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java @@ -882,6 +882,37 @@ public final class ContextServiceGrpc { return getSetServiceMethod; } + private static volatile io.grpc.MethodDescriptor getUnsetServiceMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "UnsetService", + requestType = context.ContextOuterClass.Service.class, + responseType = context.ContextOuterClass.ServiceId.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getUnsetServiceMethod() { + io.grpc.MethodDescriptor getUnsetServiceMethod; + if ((getUnsetServiceMethod = ContextServiceGrpc.getUnsetServiceMethod) == null) { + synchronized (ContextServiceGrpc.class) { + if ((getUnsetServiceMethod = ContextServiceGrpc.getUnsetServiceMethod) == null) { + ContextServiceGrpc.getUnsetServiceMethod = getUnsetServiceMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "UnsetService")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.Service.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.ServiceId.getDefaultInstance())) + .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("UnsetService")) + .build(); + } + } + } + return getUnsetServiceMethod; + } + private static volatile io.grpc.MethodDescriptor getRemoveServiceMethod; @@ -1068,6 +1099,37 @@ public final class ContextServiceGrpc { return getSetSliceMethod; } + private static volatile io.grpc.MethodDescriptor getUnsetSliceMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "UnsetSlice", + requestType = context.ContextOuterClass.Slice.class, + responseType = context.ContextOuterClass.SliceId.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getUnsetSliceMethod() { + io.grpc.MethodDescriptor getUnsetSliceMethod; + if ((getUnsetSliceMethod = ContextServiceGrpc.getUnsetSliceMethod) == null) { + synchronized (ContextServiceGrpc.class) { + if ((getUnsetSliceMethod = ContextServiceGrpc.getUnsetSliceMethod) == null) { + ContextServiceGrpc.getUnsetSliceMethod = getUnsetSliceMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "UnsetSlice")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.Slice.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.SliceId.getDefaultInstance())) + .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("UnsetSlice")) + .build(); + } + } + } + return getUnsetSliceMethod; + } + private static volatile io.grpc.MethodDescriptor getRemoveSliceMethod; @@ -1560,6 +1622,13 @@ public final class ContextServiceGrpc { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetServiceMethod(), responseObserver); } + /** + */ + public void unsetService(context.ContextOuterClass.Service request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getUnsetServiceMethod(), responseObserver); + } + /** */ public void removeService(context.ContextOuterClass.ServiceId request, @@ -1602,6 +1671,13 @@ public final class ContextServiceGrpc { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetSliceMethod(), responseObserver); } + /** + */ + public void unsetSlice(context.ContextOuterClass.Slice request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getUnsetSliceMethod(), responseObserver); + } + /** */ public void removeSlice(context.ContextOuterClass.SliceId request, @@ -1856,6 +1932,13 @@ public final class ContextServiceGrpc { context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>( this, METHODID_SET_SERVICE))) + .addMethod( + getUnsetServiceMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Service, + context.ContextOuterClass.ServiceId>( + this, METHODID_UNSET_SERVICE))) .addMethod( getRemoveServiceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -1898,6 +1981,13 @@ public final class ContextServiceGrpc { context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>( this, METHODID_SET_SLICE))) + .addMethod( + getUnsetSliceMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Slice, + context.ContextOuterClass.SliceId>( + this, METHODID_UNSET_SLICE))) .addMethod( getRemoveSliceMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -2196,6 +2286,14 @@ public final class ContextServiceGrpc { getChannel().newCall(getSetServiceMethod(), getCallOptions()), request, responseObserver); } + /** + */ + public void unsetService(context.ContextOuterClass.Service request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getUnsetServiceMethod(), getCallOptions()), request, responseObserver); + } + /** */ public void removeService(context.ContextOuterClass.ServiceId request, @@ -2244,6 +2342,14 @@ public final class ContextServiceGrpc { getChannel().newCall(getSetSliceMethod(), getCallOptions()), request, responseObserver); } + /** + */ + public void unsetSlice(context.ContextOuterClass.Slice request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getUnsetSliceMethod(), getCallOptions()), request, responseObserver); + } + /** */ public void removeSlice(context.ContextOuterClass.SliceId request, @@ -2523,6 +2629,13 @@ public final class ContextServiceGrpc { getChannel(), getSetServiceMethod(), getCallOptions(), request); } + /** + */ + public context.ContextOuterClass.ServiceId unsetService(context.ContextOuterClass.Service request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUnsetServiceMethod(), getCallOptions(), request); + } + /** */ public context.ContextOuterClass.Empty removeService(context.ContextOuterClass.ServiceId request) { @@ -2566,6 +2679,13 @@ public final class ContextServiceGrpc { getChannel(), getSetSliceMethod(), getCallOptions(), request); } + /** + */ + public context.ContextOuterClass.SliceId unsetSlice(context.ContextOuterClass.Slice request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUnsetSliceMethod(), getCallOptions(), request); + } + /** */ public context.ContextOuterClass.Empty removeSlice(context.ContextOuterClass.SliceId request) { @@ -2831,6 +2951,14 @@ public final class ContextServiceGrpc { getChannel().newCall(getSetServiceMethod(), getCallOptions()), request); } + /** + */ + public com.google.common.util.concurrent.ListenableFuture unsetService( + context.ContextOuterClass.Service request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUnsetServiceMethod(), getCallOptions()), request); + } + /** */ public com.google.common.util.concurrent.ListenableFuture removeService( @@ -2871,6 +2999,14 @@ public final class ContextServiceGrpc { getChannel().newCall(getSetSliceMethod(), getCallOptions()), request); } + /** + */ + public com.google.common.util.concurrent.ListenableFuture unsetSlice( + context.ContextOuterClass.Slice request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUnsetSliceMethod(), getCallOptions()), request); + } + /** */ public com.google.common.util.concurrent.ListenableFuture removeSlice( @@ -2948,20 +3084,22 @@ public final class ContextServiceGrpc { private static final int METHODID_LIST_SERVICES = 25; private static final int METHODID_GET_SERVICE = 26; private static final int METHODID_SET_SERVICE = 27; - private static final int METHODID_REMOVE_SERVICE = 28; - private static final int METHODID_GET_SERVICE_EVENTS = 29; - private static final int METHODID_LIST_SLICE_IDS = 30; - private static final int METHODID_LIST_SLICES = 31; - private static final int METHODID_GET_SLICE = 32; - private static final int METHODID_SET_SLICE = 33; - private static final int METHODID_REMOVE_SLICE = 34; - private static final int METHODID_GET_SLICE_EVENTS = 35; - private static final int METHODID_LIST_CONNECTION_IDS = 36; - private static final int METHODID_LIST_CONNECTIONS = 37; - private static final int METHODID_GET_CONNECTION = 38; - private static final int METHODID_SET_CONNECTION = 39; - private static final int METHODID_REMOVE_CONNECTION = 40; - private static final int METHODID_GET_CONNECTION_EVENTS = 41; + private static final int METHODID_UNSET_SERVICE = 28; + private static final int METHODID_REMOVE_SERVICE = 29; + private static final int METHODID_GET_SERVICE_EVENTS = 30; + private static final int METHODID_LIST_SLICE_IDS = 31; + private static final int METHODID_LIST_SLICES = 32; + private static final int METHODID_GET_SLICE = 33; + private static final int METHODID_SET_SLICE = 34; + private static final int METHODID_UNSET_SLICE = 35; + private static final int METHODID_REMOVE_SLICE = 36; + private static final int METHODID_GET_SLICE_EVENTS = 37; + private static final int METHODID_LIST_CONNECTION_IDS = 38; + private static final int METHODID_LIST_CONNECTIONS = 39; + private static final int METHODID_GET_CONNECTION = 40; + private static final int METHODID_SET_CONNECTION = 41; + private static final int METHODID_REMOVE_CONNECTION = 42; + private static final int METHODID_GET_CONNECTION_EVENTS = 43; private static final class MethodHandlers implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -3092,6 +3230,10 @@ public final class ContextServiceGrpc { serviceImpl.setService((context.ContextOuterClass.Service) request, (io.grpc.stub.StreamObserver) responseObserver); break; + case METHODID_UNSET_SERVICE: + serviceImpl.unsetService((context.ContextOuterClass.Service) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; case METHODID_REMOVE_SERVICE: serviceImpl.removeService((context.ContextOuterClass.ServiceId) request, (io.grpc.stub.StreamObserver) responseObserver); @@ -3116,6 +3258,10 @@ public final class ContextServiceGrpc { serviceImpl.setSlice((context.ContextOuterClass.Slice) request, (io.grpc.stub.StreamObserver) responseObserver); break; + case METHODID_UNSET_SLICE: + serviceImpl.unsetSlice((context.ContextOuterClass.Slice) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; case METHODID_REMOVE_SLICE: serviceImpl.removeSlice((context.ContextOuterClass.SliceId) request, (io.grpc.stub.StreamObserver) responseObserver); @@ -3237,12 +3383,14 @@ public final class ContextServiceGrpc { .addMethod(getListServicesMethod()) .addMethod(getGetServiceMethod()) .addMethod(getSetServiceMethod()) + .addMethod(getUnsetServiceMethod()) .addMethod(getRemoveServiceMethod()) .addMethod(getGetServiceEventsMethod()) .addMethod(getListSliceIdsMethod()) .addMethod(getListSlicesMethod()) .addMethod(getGetSliceMethod()) .addMethod(getSetSliceMethod()) + .addMethod(getUnsetSliceMethod()) .addMethod(getRemoveSliceMethod()) .addMethod(getGetSliceEventsMethod()) .addMethod(getListConnectionIdsMethod()) diff --git a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java index 9f71b5378..f7d2cb94e 100644 --- a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java +++ b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java @@ -156,6 +156,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M } + public io.smallrye.mutiny.Uni unsetService(context.ContextOuterClass.Service request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::unsetService); + } + + public io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request) { return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeService); } @@ -181,6 +186,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M } + public io.smallrye.mutiny.Uni unsetSlice(context.ContextOuterClass.Slice request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::unsetSlice); + } + + public io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request) { return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeSlice); } @@ -383,6 +393,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M } + public io.smallrye.mutiny.Uni unsetService(context.ContextOuterClass.Service request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + public io.smallrye.mutiny.Uni removeService(context.ContextOuterClass.ServiceId request) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } @@ -408,6 +423,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M } + public io.smallrye.mutiny.Uni unsetSlice(context.ContextOuterClass.Slice request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + public io.smallrye.mutiny.Uni removeSlice(context.ContextOuterClass.SliceId request) { throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); } @@ -670,6 +690,13 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>( this, METHODID_SET_SERVICE, compression))) + .addMethod( + context.ContextServiceGrpc.getUnsetServiceMethod(), + asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Service, + context.ContextOuterClass.ServiceId>( + this, METHODID_UNSET_SERVICE, compression))) .addMethod( context.ContextServiceGrpc.getRemoveServiceMethod(), asyncUnaryCall( @@ -712,6 +739,13 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M context.ContextOuterClass.Slice, context.ContextOuterClass.SliceId>( this, METHODID_SET_SLICE, compression))) + .addMethod( + context.ContextServiceGrpc.getUnsetSliceMethod(), + asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Slice, + context.ContextOuterClass.SliceId>( + this, METHODID_UNSET_SLICE, compression))) .addMethod( context.ContextServiceGrpc.getRemoveSliceMethod(), asyncUnaryCall( @@ -800,20 +834,22 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M private static final int METHODID_LIST_SERVICES = 25; private static final int METHODID_GET_SERVICE = 26; private static final int METHODID_SET_SERVICE = 27; - private static final int METHODID_REMOVE_SERVICE = 28; - private static final int METHODID_GET_SERVICE_EVENTS = 29; - private static final int METHODID_LIST_SLICE_IDS = 30; - private static final int METHODID_LIST_SLICES = 31; - private static final int METHODID_GET_SLICE = 32; - private static final int METHODID_SET_SLICE = 33; - private static final int METHODID_REMOVE_SLICE = 34; - private static final int METHODID_GET_SLICE_EVENTS = 35; - private static final int METHODID_LIST_CONNECTION_IDS = 36; - private static final int METHODID_LIST_CONNECTIONS = 37; - private static final int METHODID_GET_CONNECTION = 38; - private static final int METHODID_SET_CONNECTION = 39; - private static final int METHODID_REMOVE_CONNECTION = 40; - private static final int METHODID_GET_CONNECTION_EVENTS = 41; + private static final int METHODID_UNSET_SERVICE = 28; + private static final int METHODID_REMOVE_SERVICE = 29; + private static final int METHODID_GET_SERVICE_EVENTS = 30; + private static final int METHODID_LIST_SLICE_IDS = 31; + private static final int METHODID_LIST_SLICES = 32; + private static final int METHODID_GET_SLICE = 33; + private static final int METHODID_SET_SLICE = 34; + private static final int METHODID_UNSET_SLICE = 35; + private static final int METHODID_REMOVE_SLICE = 36; + private static final int METHODID_GET_SLICE_EVENTS = 37; + private static final int METHODID_LIST_CONNECTION_IDS = 38; + private static final int METHODID_LIST_CONNECTIONS = 39; + private static final int METHODID_GET_CONNECTION = 40; + private static final int METHODID_SET_CONNECTION = 41; + private static final int METHODID_REMOVE_CONNECTION = 42; + private static final int METHODID_GET_CONNECTION_EVENTS = 43; private static final class MethodHandlers implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -1002,6 +1038,12 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M compression, serviceImpl::setService); break; + case METHODID_UNSET_SERVICE: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Service) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::unsetService); + break; case METHODID_REMOVE_SERVICE: io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request, (io.grpc.stub.StreamObserver) responseObserver, @@ -1038,6 +1080,12 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M compression, serviceImpl::setSlice); break; + case METHODID_UNSET_SLICE: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Slice) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::unsetSlice); + break; case METHODID_REMOVE_SLICE: io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.SliceId) request, (io.grpc.stub.StreamObserver) responseObserver, diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml new file mode 100644 index 000000000..9214f896a --- /dev/null +++ b/src/policy/target/kubernetes/kubernetes.yml @@ -0,0 +1,89 @@ +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + app.quarkus.io/commit-id: de07e72e3832e3857bf4cfd81319ec7e50f2b89e + app.quarkus.io/build-timestamp: 2022-09-16 - 15:03:58 +0000 + labels: + app.kubernetes.io/name: policyservice + app: policyservice + name: policyservice +spec: + ports: + - name: grpc + port: 6060 + targetPort: 6060 + - name: http + port: 8080 + targetPort: 8080 + selector: + app.kubernetes.io/name: policyservice + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + app.quarkus.io/commit-id: de07e72e3832e3857bf4cfd81319ec7e50f2b89e + app.quarkus.io/build-timestamp: 2022-09-16 - 15:03:58 +0000 + labels: + app: policyservice + app.kubernetes.io/name: policyservice + name: policyservice +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: policyservice + template: + metadata: + annotations: + app.quarkus.io/commit-id: de07e72e3832e3857bf4cfd81319ec7e50f2b89e + app.quarkus.io/build-timestamp: 2022-09-16 - 15:03:58 +0000 + labels: + app: policyservice + app.kubernetes.io/name: policyservice + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONTEXT_SERVICE_HOST + value: contextservice + - name: SERVICE_SERVICE_HOST + value: serviceservice + - name: MONITORING_SERVICE_HOST + value: monitoringservice + image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0 + imagePullPolicy: Always + livenessProbe: + failureThreshold: 3 + httpGet: + path: /q/health/live + port: 8080 + scheme: HTTP + initialDelaySeconds: 2 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 10 + name: policyservice + ports: + - containerPort: 6060 + name: grpc + protocol: TCP + - containerPort: 8080 + name: http + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /q/health/ready + port: 8080 + scheme: HTTP + initialDelaySeconds: 2 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 10 -- GitLab From 9bf824059937789e4d8249f248015d32dcb8c955 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Tue, 20 Sep 2022 19:27:52 +0300 Subject: [PATCH 02/34] Implement conversion from PolicyRuleService to AlarmDescriptor --- .../eu/teraflow/policy/PolicyServiceImpl.java | 228 +++++++----------- 1 file changed, 87 insertions(+), 141 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index dcc3ca2db..336ddc082 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -16,18 +16,6 @@ package eu.teraflow.policy; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; - -import org.jboss.logging.Logger; - import eu.teraflow.policy.context.ContextService; import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; @@ -42,6 +30,15 @@ import eu.teraflow.policy.monitoring.model.AlarmDescriptor; import eu.teraflow.policy.monitoring.model.KpiValueRange; import eu.teraflow.policy.service.ServiceService; import io.smallrye.mutiny.Uni; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import org.jboss.logging.Logger; @ApplicationScoped public class PolicyServiceImpl implements PolicyService { @@ -127,143 +124,126 @@ public class PolicyServiceImpl implements PolicyService { } }); - // monitoringService.setKpiAlarm(alarmDescriptor); + List alarmDescriptorList = parsePolicyRuleCondition(policyRuleService); + + if (alarmDescriptorList.isEmpty()) { + for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) { + monitoringService.setKpiAlarm(alarmDescriptor); + } + } return; } - private void parsePolicyRuleCondition(PolicyRuleService policyRuleService) { + private List parsePolicyRuleCondition(PolicyRuleService policyRuleService) { BooleanOperator booleanOperator = policyRuleService.getPolicyRuleBasic().getBooleanOperator(); if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR) { - parsePolicyRuleConditionOr(policyRuleService); - } + return parsePolicyRuleConditionOr(policyRuleService); + } if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND) { - + return Arrays.asList(parsePolicyRuleConditionAnd(policyRuleService)); } + return List.of(); } - private void parsePolicyRuleConditionOr(PolicyRuleService policyRuleService) { - PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); - List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); - - + private List parsePolicyRuleConditionOr(PolicyRuleService policyRuleService) { + + List policyRuleConditions = + policyRuleService.getPolicyRuleBasic().getPolicyRuleConditions(); + List alarmDescriptorList = new ArrayList<>(); + for (PolicyRuleCondition policyRuleCondition : policyRuleConditions) { - var kpiId = Arrays.asList( policyRuleCondition.getKpiId()); - var kpiValue = Arrays.asList( policyRuleCondition.getKpiValue()); + var kpiIdList = Arrays.asList(policyRuleCondition.getKpiId()); var kpiValueRange = convertPolicyRuleConditionToAlarmDescriptor(policyRuleCondition); - AlarmDescriptor alarmDescriptor = - new AlarmDescriptor("dummyId", "dummyDescription", "dummyAlarmName", kpiId, kpiValue, 0.0); + var kpiValueRangeList = Arrays.asList(kpiValueRange); + + AlarmDescriptor alarmDescriptor = + new AlarmDescriptor( + "dummyId", "dummyDescription", "dummyAlarmName", kpiIdList, kpiValueRangeList, 0.0); + + alarmDescriptorList.add(alarmDescriptor); } + + return alarmDescriptorList; } - private KpiValueRange convertPolicyRuleConditionToAlarmDescriptor(PolicyRuleCondition policyRuleCondition) { + private KpiValueRange convertPolicyRuleConditionToAlarmDescriptor( + PolicyRuleCondition policyRuleCondition) { - switch(policyRuleCondition.getNumericalOperator()) { + switch (policyRuleCondition.getNumericalOperator()) { case POLICY_RULE_CONDITION_NUMERICAL_EQUAL: - return new KpiValueRange( - policyRuleCondition.getKpiValue(), - policyRuleCondition.getKpiValue(), - true, - true, - true); + return new KpiValueRange( + policyRuleCondition.getKpiValue(), policyRuleCondition.getKpiValue(), true, true, true); case POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL: - return new KpiValueRange( - policyRuleCondition.getKpiValue(), - policyRuleCondition.getKpiValue(), - true, - false, - false); - + return new KpiValueRange( + policyRuleCondition.getKpiValue(), + policyRuleCondition.getKpiValue(), + true, + false, + false); + case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN: - return new KpiValueRange( - policyRuleCondition.getKpiValue(), - null, - false, - false, - false); - + return new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, false, false); + case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL: - return new KpiValueRange( - policyRuleCondition.getKpiValue(), - null, - false, - true, - false); - + return new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, true, false); + case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN: - return new KpiValueRange( - null, - policyRuleCondition.getKpiValue(), - false, - false, - false); - + return new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, false); + case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL: - return new KpiValueRange( - null, - policyRuleCondition.getKpiValue(), - false, - false, - true); + return new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, true); default: - return null; - } - + return null; + } } - private void convertPolicyRuleConditionToAlarmDescriptor(PolicyRuleService policyRuleService) { + private AlarmDescriptor parsePolicyRuleConditionAnd(PolicyRuleService policyRuleService) { - boolean uniqueKpi = true; + PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); + List policyRuleConditionList = policyRuleBasic.getPolicyRuleConditions(); List kpisList = new ArrayList(); - var booleanOperator = policyRuleService.getPolicyRuleBasic().getBooleanOperator(); - List alarmDescriptorList = new ArrayList(); - List policyRuleConditionList = - policyRuleService.getPolicyRuleBasic().getPolicyRuleConditions(); - for (PolicyRuleCondition element : policyRuleConditionList) { - kpisList.add(element.getKpiId()); + for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) { + kpisList.add(policyRuleCondition.getKpiId()); } Set kpisSet = new HashSet(kpisList); - if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR) { - if (kpisSet.size() < kpisList.size()) { - var policyRuleBasic = policyRuleService.getPolicyRuleBasic(); - policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); - contextService.setPolicyRule(policyRuleBasic); - state.setRuleState(RuleState.POLICY_FAILED); - uniqueKpi = false; - return; + if (kpisSet.size() == kpisList.size()) { + List kpiIdList = new ArrayList<>(); + List kpiValueRangeList = new ArrayList<>(); + for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) { + + kpisList.add(policyRuleCondition.getKpiId()); + kpiValueRangeList.add(convertPolicyRuleConditionToAlarmDescriptor(policyRuleCondition)); } - } - if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND) { - if (uniqueKpi == false) {} + return new AlarmDescriptor( + "dummyId", "dummyDescription", "dummyAlarmName", kpiIdList, kpiValueRangeList, 0.0); } - HashMap temp = new HashMap<>(); + HashMap KpiValueRangeMap = new HashMap<>(); for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) { - policyRuleCondition.getKpiId(); - policyRuleCondition.getKpiValue(); - if (temp.containsKey(policyRuleCondition.getKpiId())) { - var kpiValueRange = temp.get(policyRuleCondition.getKpiId()); + if (KpiValueRangeMap.containsKey(policyRuleCondition.getKpiId())) { + var kpiValueRange = KpiValueRangeMap.get(policyRuleCondition.getKpiId()); if (kpiValueRange.getInRange() == true) { LOGGER.errorf("Received %s", policyRuleService); - return; + return null; } if ((kpiValueRange.getKpiMaxValue() != null) && (kpiValueRange.getKpiMinValue() != null)) { LOGGER.errorf("Received %s", policyRuleService); - return; + return null; } if (policyRuleCondition.getNumericalOperator() == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN && kpiValueRange.getKpiMinValue() == null) { - temp.put( + KpiValueRangeMap.put( policyRuleCondition.getKpiId(), new KpiValueRange( policyRuleCondition.getKpiValue(), @@ -276,7 +256,7 @@ public class PolicyServiceImpl implements PolicyService { if (policyRuleCondition.getNumericalOperator() == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL && kpiValueRange.getKpiMinValue() == null) { - temp.put( + KpiValueRangeMap.put( policyRuleCondition.getKpiId(), new KpiValueRange( policyRuleCondition.getKpiValue(), @@ -289,7 +269,7 @@ public class PolicyServiceImpl implements PolicyService { if (policyRuleCondition.getNumericalOperator() == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN && kpiValueRange.getKpiMaxValue() == null) { - temp.put( + KpiValueRangeMap.put( policyRuleCondition.getKpiId(), new KpiValueRange( kpiValueRange.getKpiMinValue(), @@ -302,7 +282,7 @@ public class PolicyServiceImpl implements PolicyService { if (policyRuleCondition.getNumericalOperator() == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL && kpiValueRange.getKpiMaxValue() == null) { - temp.put( + KpiValueRangeMap.put( policyRuleCondition.getKpiId(), new KpiValueRange( kpiValueRange.getKpiMinValue(), @@ -312,48 +292,14 @@ public class PolicyServiceImpl implements PolicyService { true)); } } + } - if (policyRuleCondition.getNumericalOperator() - == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN) { - - temp.put( - policyRuleCondition.getKpiId(), - new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, false, false)); - } else if (policyRuleCondition.getNumericalOperator() - == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL) { - - temp.put( - policyRuleCondition.getKpiId(), - new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, true, false)); - } else if (policyRuleCondition.getNumericalOperator() - == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN) { - temp.put( - policyRuleCondition.getKpiId(), - new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, false)); - } else if (policyRuleCondition.getNumericalOperator() - == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL) { - temp.put( - policyRuleCondition.getKpiId(), - new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, true)); - } else if (policyRuleCondition.getNumericalOperator() - == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL) { - temp.put( - policyRuleCondition.getKpiId(), - new KpiValueRange( - policyRuleCondition.getKpiValue(), - policyRuleCondition.getKpiValue(), - false, - false, - false)); - } + List kpiIdList = new ArrayList<>(); + kpiIdList.addAll(KpiValueRangeMap.keySet()); + List kpiValueRangeList = new ArrayList<>(KpiValueRangeMap.values()); - final String alarmId = "dummyId"; - final String alarmDescription = "dummyDes"; - final String name = "dummyName"; - final double timestamp = 5.5; - final List kpiIds; - final List kpiValueRanges = new ArrayList(); - } + return new AlarmDescriptor( + "dummyId", "dummyDescription", "dummyAlarmName", kpiIdList, kpiValueRangeList, 0.0); } @Override -- GitLab From cecdf31e0d266bee677e861232a3dbeb62aaf457 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Thu, 22 Sep 2022 10:39:36 +0300 Subject: [PATCH 03/34] temp ch --- .../policy/PolicyRuleConditionValidator.java | 10 +- .../eu/teraflow/policy/PolicyServiceImpl.java | 138 ++++++++++++------ 2 files changed, 101 insertions(+), 47 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java index 1b086844b..00a23169a 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java @@ -86,12 +86,12 @@ public class PolicyRuleConditionValidator { private Uni isServiceIdValid(ServiceId serviceId) { LOGGER.errorf("===> isServiceIdValid: %s", serviceId.getId()); - return Uni.createFrom().item(true); + // return Uni.createFrom().item(true); - // return contextService - // .getService(serviceId) - // .onItem() - // .transform(service -> checkIfServiceIdExists(service, serviceId)); + return contextService + .getService(serviceId) + .onItem() + .transform(service -> checkIfServiceIdExists(service, serviceId)); } private boolean checkIfServiceIdExists(Service service, ServiceId serviceId) { diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index 336ddc082..ed4204582 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -19,6 +19,8 @@ package eu.teraflow.policy; import eu.teraflow.policy.context.ContextService; 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.PolicyRuleDevice; @@ -27,6 +29,8 @@ import eu.teraflow.policy.model.PolicyRuleState; import eu.teraflow.policy.model.RuleState; import eu.teraflow.policy.monitoring.MonitoringService; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; +import eu.teraflow.policy.monitoring.model.AlarmResponse; +import eu.teraflow.policy.monitoring.model.AlarmSubscription; import eu.teraflow.policy.monitoring.model.KpiValueRange; import eu.teraflow.policy.service.ServiceService; import io.smallrye.mutiny.Uni; @@ -60,6 +64,7 @@ public class PolicyServiceImpl implements PolicyService { private final PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter; private PolicyRuleState state = new PolicyRuleState(RuleState.POLICY_UNDEFINED); + HashMap policyRuleActionMap = new HashMap<>(); @Inject public PolicyServiceImpl( @@ -75,9 +80,60 @@ public class PolicyServiceImpl implements PolicyService { this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter; } - private void validateService(PolicyRuleService policyRuleService) { - LOGGER.info(" ====> validate phase <===="); + private void provisionAlarm(List alarmDescriptorList) { + + List alarmSubscriptionList = new ArrayList<>(); + + for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) { + monitoringService.setKpiAlarm(alarmDescriptor) + .subscribe() + .with(alarmId -> alarmSubscriptionList.add(new AlarmSubscription(alarmId, 0,0))); + } + + for (AlarmSubscription alarmSubscription:alarmSubscriptionList) { + monitoringService + .getAlarmResponseStream(alarmSubscription) + .subscribe() + .with(alarmResponse -> { + LOGGER.info(alarmResponse); + alarmResponse.getAlarmId(); + alarmResponse.getText(); + alarmResponse.getKpiValue(); + }); + } + } + private void validateDevice(PolicyRuleDevice policyRuleDevice) { + final var deviceIds = policyRuleDevice.getDeviceIds(); + final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); + + final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds); + if (!invalidDeviceIds.isEmpty()) { + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_FAILED.toString()); + policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); + contextService.setPolicyRule(policyRuleBasic); + return; + } + + List alarmDescriptorList = + parsePolicyRuleCondition(policyRuleDevice.getPolicyRuleBasic()); + + if (alarmDescriptorList.isEmpty()) { + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_FAILED.toString()); + policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); + contextService.setPolicyRule(policyRuleBasic); + return; + } + + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_INSERTED.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_VALIDATED)); + contextService.setPolicyRule(policyRuleBasic); + + provisionAlarm(alarmDescriptorList); + return; + } + + private void validateService(PolicyRuleService policyRuleService) { final var serviceId = policyRuleService.getServiceId(); final var deviceIds = policyRuleService.getDeviceIds(); final var policyRuleBasic = policyRuleService.getPolicyRuleBasic(); @@ -124,33 +180,37 @@ public class PolicyServiceImpl implements PolicyService { } }); - List alarmDescriptorList = parsePolicyRuleCondition(policyRuleService); + List alarmDescriptorList = + parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic()); if (alarmDescriptorList.isEmpty()) { - for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) { - monitoringService.setKpiAlarm(alarmDescriptor); - } + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_FAILED.toString()); + policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); + contextService.setPolicyRule(policyRuleBasic); + return; } + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_INSERTED.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_VALIDATED)); + contextService.setPolicyRule(policyRuleBasic); + provisionAlarm(alarmDescriptorList); return; } - private List parsePolicyRuleCondition(PolicyRuleService policyRuleService) { - - BooleanOperator booleanOperator = policyRuleService.getPolicyRuleBasic().getBooleanOperator(); + private List parsePolicyRuleCondition(PolicyRuleBasic policyRuleBasic) { + BooleanOperator booleanOperator = policyRuleBasic.getBooleanOperator(); if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR) { - return parsePolicyRuleConditionOr(policyRuleService); + return parsePolicyRuleConditionOr(policyRuleBasic); } if (booleanOperator == BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND) { - return Arrays.asList(parsePolicyRuleConditionAnd(policyRuleService)); + return Arrays.asList(parsePolicyRuleConditionAnd(policyRuleBasic)); } return List.of(); } - private List parsePolicyRuleConditionOr(PolicyRuleService policyRuleService) { + private List parsePolicyRuleConditionOr(PolicyRuleBasic policyRuleBasic) { - List policyRuleConditions = - policyRuleService.getPolicyRuleBasic().getPolicyRuleConditions(); + List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); List alarmDescriptorList = new ArrayList<>(); for (PolicyRuleCondition policyRuleCondition : policyRuleConditions) { @@ -166,6 +226,18 @@ public class PolicyServiceImpl implements PolicyService { alarmDescriptorList.add(alarmDescriptor); } + HashMap policyRuleActionMap = new HashMap<>(); + List policyRuleActions = policyRuleBasic.getPolicyRuleActions(); + + for(int i =0; i policyRuleActionParameters = policyRuleAction.getPolicyRuleActionParameters(); + PolicyRuleActionEnum policyRuleActionEnum = policyRuleAction.getPolicyRuleActionEnum(); + } + return alarmDescriptorList; } @@ -200,9 +272,8 @@ public class PolicyServiceImpl implements PolicyService { } } - private AlarmDescriptor parsePolicyRuleConditionAnd(PolicyRuleService policyRuleService) { + private AlarmDescriptor parsePolicyRuleConditionAnd(PolicyRuleBasic policyRuleBasic) { - PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); List policyRuleConditionList = policyRuleBasic.getPolicyRuleConditions(); List kpisList = new ArrayList(); @@ -231,12 +302,12 @@ public class PolicyServiceImpl implements PolicyService { var kpiValueRange = KpiValueRangeMap.get(policyRuleCondition.getKpiId()); if (kpiValueRange.getInRange() == true) { - LOGGER.errorf("Received %s", policyRuleService); + LOGGER.errorf("Received %s", policyRuleBasic); return null; } if ((kpiValueRange.getKpiMaxValue() != null) && (kpiValueRange.getKpiMinValue() != null)) { - LOGGER.errorf("Received %s", policyRuleService); + LOGGER.errorf("Received %s", policyRuleBasic); return null; } @@ -325,33 +396,16 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof("Received %s", policyRuleDevice); final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); - final var deviceIds = policyRuleDevice.getDeviceIds(); - - final var policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); - final var kpiIds = policyRuleConditionFieldsGetter.getKpiIds(policyRuleConditions); - final var kpiValues = policyRuleConditionFieldsGetter.getKpiValues(policyRuleConditions); - final var numericalOperators = - policyRuleConditionFieldsGetter.getNumericalOperators(policyRuleConditions); - - logAndSetPolicyRuleState(INSERTED_POLICYRULE_STATE, policyRuleBasic); - contextService.setPolicyRule(policyRuleBasic); + policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE); - // VALIDATION PHASE - final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds); + new Thread( + () -> { + validateDevice(policyRuleDevice); + }) + .start(); - if (!invalidDeviceIds.isEmpty()) { - logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic); - } else { - LOGGER.infof("All deviceIds are valid"); - logAndSetPolicyRuleState(VALIDATED_POLICYRULE_STATE, policyRuleBasic); - } contextService.setPolicyRule(policyRuleBasic); - - // PROVISION PHASE - - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED); - - return Uni.createFrom().item(policyRuleState); + return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState()); } private List returnInvalidDeviceIds(List deviceIds) { -- GitLab From d40fdc7c0add61b101bd200b4e8fb1faa8970e01 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Thu, 22 Sep 2022 11:03:29 +0300 Subject: [PATCH 04/34] Fix automation --- .../grpc/context/ContextOuterClass.java | 231 ------------------ 1 file changed, 231 deletions(-) diff --git a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java index 31dbd6344..3dbc75753 100644 --- a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java +++ b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java @@ -62184,7 +62184,6 @@ public final class ContextOuterClass { "(\0132\023.context.ConfigRule\"5\n\014DeviceIdList\022" + "%\n\ndevice_ids\030\001 \003(\0132\021.context.DeviceId\"." + "\n\nDeviceList\022 \n\007devices\030\001 \003(\0132\017.context." + -<<<<<<< HEAD "Device\"R\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016.c" + "ontext.Event\022$\n\tdevice_id\030\002 \001(\0132\021.contex" + "t.DeviceId\"*\n\006LinkId\022 \n\tlink_uuid\030\001 \001(\0132" + @@ -62412,236 +62411,6 @@ public final class ContextOuterClass { "text.Empty\"\000\022C\n\023GetConnectionEvents\022\016.co" + "ntext.Empty\032\030.context.ConnectionEvent\"\0000" + "\001b\006proto3" -======= - "Device\"\200\001\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016." + - "context.Event\022$\n\tdevice_id\030\002 \001(\0132\021.conte" + - "xt.DeviceId\022,\n\rdevice_config\030\003 \001(\0132\025.con" + - "text.DeviceConfig\"*\n\006LinkId\022 \n\tlink_uuid" + - "\030\001 \001(\0132\r.context.Uuid\"X\n\004Link\022 \n\007link_id" + - "\030\001 \001(\0132\017.context.LinkId\022.\n\021link_endpoint" + - "_ids\030\002 \003(\0132\023.context.EndPointId\"/\n\nLinkI" + - "dList\022!\n\010link_ids\030\001 \003(\0132\017.context.LinkId" + - "\"(\n\010LinkList\022\034\n\005links\030\001 \003(\0132\r.context.Li" + - "nk\"L\n\tLinkEvent\022\035\n\005event\030\001 \001(\0132\016.context" + - ".Event\022 \n\007link_id\030\002 \001(\0132\017.context.LinkId" + - "\"X\n\tServiceId\022&\n\ncontext_id\030\001 \001(\0132\022.cont" + - "ext.ContextId\022#\n\014service_uuid\030\002 \001(\0132\r.co" + - "ntext.Uuid\"\315\002\n\007Service\022&\n\nservice_id\030\001 \001" + - "(\0132\022.context.ServiceId\022.\n\014service_type\030\002" + - " \001(\0162\030.context.ServiceTypeEnum\0221\n\024servic" + - "e_endpoint_ids\030\003 \003(\0132\023.context.EndPointI" + - "d\0220\n\023service_constraints\030\004 \003(\0132\023.context" + - ".Constraint\022.\n\016service_status\030\005 \001(\0132\026.co" + - "ntext.ServiceStatus\022.\n\016service_config\030\006 " + - "\001(\0132\026.context.ServiceConfig\022%\n\ttimestamp" + - "\030\007 \001(\0132\022.context.Timestamp\"C\n\rServiceSta" + - "tus\0222\n\016service_status\030\001 \001(\0162\032.context.Se" + - "rviceStatusEnum\":\n\rServiceConfig\022)\n\014conf" + - "ig_rules\030\001 \003(\0132\023.context.ConfigRule\"8\n\rS" + - "erviceIdList\022\'\n\013service_ids\030\001 \003(\0132\022.cont" + - "ext.ServiceId\"1\n\013ServiceList\022\"\n\010services" + - "\030\001 \003(\0132\020.context.Service\"U\n\014ServiceEvent" + - "\022\035\n\005event\030\001 \001(\0132\016.context.Event\022&\n\nservi" + - "ce_id\030\002 \001(\0132\022.context.ServiceId\"T\n\007Slice" + - "Id\022&\n\ncontext_id\030\001 \001(\0132\022.context.Context" + - "Id\022!\n\nslice_uuid\030\002 \001(\0132\r.context.Uuid\"\222\003" + - "\n\005Slice\022\"\n\010slice_id\030\001 \001(\0132\020.context.Slic" + - "eId\022/\n\022slice_endpoint_ids\030\002 \003(\0132\023.contex" + - "t.EndPointId\022.\n\021slice_constraints\030\003 \003(\0132" + - "\023.context.Constraint\022-\n\021slice_service_id" + - "s\030\004 \003(\0132\022.context.ServiceId\022,\n\022slice_sub" + - "slice_ids\030\005 \003(\0132\020.context.SliceId\022*\n\014sli" + - "ce_status\030\006 \001(\0132\024.context.SliceStatus\022*\n" + - "\014slice_config\030\007 \001(\0132\024.context.SliceConfi" + - "g\022(\n\013slice_owner\030\010 \001(\0132\023.context.SliceOw" + - "ner\022%\n\ttimestamp\030\t \001(\0132\022.context.Timesta" + - "mp\"E\n\nSliceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.c" + - "ontext.Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013Sli" + - "ceStatus\022.\n\014slice_status\030\001 \001(\0162\030.context" + - ".SliceStatusEnum\"8\n\013SliceConfig\022)\n\014confi" + - "g_rules\030\001 \003(\0132\023.context.ConfigRule\"2\n\013Sl" + - "iceIdList\022#\n\tslice_ids\030\001 \003(\0132\020.context.S" + - "liceId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.co" + - "ntext.Slice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\013" + - "2\016.context.Event\022\"\n\010slice_id\030\002 \001(\0132\020.con" + - "text.SliceId\"6\n\014ConnectionId\022&\n\017connecti" + - "on_uuid\030\001 \001(\0132\r.context.Uuid\"2\n\025Connecti" + - "onSettings_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t" + - "\"\236\001\n\025ConnectionSettings_L2\022\027\n\017src_mac_ad" + - "dress\030\001 \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\n" + - "ether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpl" + - "s_label\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(" + - "\r\"t\n\025ConnectionSettings_L3\022\026\n\016src_ip_add" + - "ress\030\001 \001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004ds" + - "cp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"" + - "[\n\025ConnectionSettings_L4\022\020\n\010src_port\030\001 \001" + - "(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022" + - "\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l" + - "0\030\001 \001(\0132\036.context.ConnectionSettings_L0\022" + - "*\n\002l2\030\002 \001(\0132\036.context.ConnectionSettings" + - "_L2\022*\n\002l3\030\003 \001(\0132\036.context.ConnectionSett" + - "ings_L3\022*\n\002l4\030\004 \001(\0132\036.context.Connection" + - "Settings_L4\"\363\001\n\nConnection\022,\n\rconnection" + - "_id\030\001 \001(\0132\025.context.ConnectionId\022&\n\nserv" + - "ice_id\030\002 \001(\0132\022.context.ServiceId\0223\n\026path" + - "_hops_endpoint_ids\030\003 \003(\0132\023.context.EndPo" + - "intId\022+\n\017sub_service_ids\030\004 \003(\0132\022.context" + - ".ServiceId\022-\n\010settings\030\005 \001(\0132\033.context.C" + - "onnectionSettings\"A\n\020ConnectionIdList\022-\n" + - "\016connection_ids\030\001 \003(\0132\025.context.Connecti" + - "onId\":\n\016ConnectionList\022(\n\013connections\030\001 " + - "\003(\0132\023.context.Connection\"^\n\017ConnectionEv" + - "ent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022,\n\rco" + - "nnection_id\030\002 \001(\0132\025.context.ConnectionId" + - "\"\202\001\n\nEndPointId\022(\n\013topology_id\030\001 \001(\0132\023.c" + - "ontext.TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.c" + - "ontext.DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r" + - ".context.Uuid\"\264\001\n\010EndPoint\022(\n\013endpoint_i" + - "d\030\001 \001(\0132\023.context.EndPointId\022\025\n\rendpoint" + - "_type\030\002 \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037." + - "kpi_sample_types.KpiSampleType\022,\n\021endpoi" + - "nt_location\030\004 \001(\0132\021.context.Location\"A\n\021" + - "ConfigRule_Custom\022\024\n\014resource_key\030\001 \001(\t\022" + - "\026\n\016resource_value\030\002 \001(\t\"]\n\016ConfigRule_AC" + - "L\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPoin" + - "tId\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234" + - "\001\n\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context." + - "ConfigActionEnum\022,\n\006custom\030\002 \001(\0132\032.conte" + - "xt.ConfigRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.co" + - "ntext.ConfigRule_ACLH\000B\r\n\013config_rule\"F\n" + - "\021Constraint_Custom\022\027\n\017constraint_type\030\001 " + - "\001(\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n\023Constra" + - "int_Schedule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n" + - "\rduration_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010" + - "latitude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Loc" + - "ation\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030" + - "\002 \001(\0132\025.context.GPS_PositionH\000B\n\n\010locati" + - "on\"l\n\033Constraint_EndPointLocation\022(\n\013end" + - "point_id\030\001 \001(\0132\023.context.EndPointId\022#\n\010l" + - "ocation\030\002 \001(\0132\021.context.Location\"Y\n\033Cons" + - "traint_EndPointPriority\022(\n\013endpoint_id\030\001" + - " \001(\0132\023.context.EndPointId\022\020\n\010priority\030\002 " + - "\001(\r\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_lat" + - "ency_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity" + - "\022\025\n\rcapacity_gbps\030\001 \001(\002\"M\n\033Constraint_SL" + - "A_Availability\022\032\n\022num_disjoint_paths\030\001 \001" + - "(\r\022\022\n\nall_active\030\002 \001(\010\"V\n\036Constraint_SLA" + - "_Isolation_level\0224\n\017isolation_level\030\001 \003(" + - "\0162\033.context.IsolationLevelEnum\"\366\003\n\nConst" + - "raint\022,\n\006custom\030\001 \001(\0132\032.context.Constrai" + - "nt_CustomH\000\0220\n\010schedule\030\002 \001(\0132\034.context." + - "Constraint_ScheduleH\000\022A\n\021endpoint_locati" + - "on\030\003 \001(\0132$.context.Constraint_EndPointLo" + - "cationH\000\022A\n\021endpoint_priority\030\004 \001(\0132$.co" + - "ntext.Constraint_EndPointPriorityH\000\0228\n\014s" + - "la_capacity\030\005 \001(\0132 .context.Constraint_S" + - "LA_CapacityH\000\0226\n\013sla_latency\030\006 \001(\0132\037.con" + - "text.Constraint_SLA_LatencyH\000\022@\n\020sla_ava" + - "ilability\030\007 \001(\0132$.context.Constraint_SLA" + - "_AvailabilityH\000\022@\n\rsla_isolation\030\010 \001(\0132\'" + - ".context.Constraint_SLA_Isolation_levelH" + - "\000B\014\n\nconstraint\"^\n\022TeraFlowController\022&\n" + - "\ncontext_id\030\001 \001(\0132\022.context.ContextId\022\022\n" + - "\nip_address\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024Authe" + - "nticationResult\022&\n\ncontext_id\030\001 \001(\0132\022.co" + - "ntext.ContextId\022\025\n\rauthenticated\030\002 \001(\010*j" + - "\n\rEventTypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000" + - "\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDA" + - "TE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDri" + - "verEnum\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027D" + - "EVICEDRIVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER" + - "_TRANSPORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n" + - "\"DEVICEDRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n" + - "\027DEVICEDRIVER_ONF_TR_352\020\005*\217\001\n\033DeviceOpe" + - "rationalStatusEnum\022%\n!DEVICEOPERATIONALS" + - "TATUS_UNDEFINED\020\000\022$\n DEVICEOPERATIONALST" + - "ATUS_DISABLED\020\001\022#\n\037DEVICEOPERATIONALSTAT" + - "US_ENABLED\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERV" + - "ICETYPE_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022" + - "\024\n\020SERVICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAP" + - "I_CONNECTIVITY_SERVICE\020\003*\250\001\n\021ServiceStat" + - "usEnum\022\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025S" + - "ERVICESTATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_" + - "ACTIVE\020\002\022!\n\035SERVICESTATUS_PENDING_REMOVA" + - "L\020\003\022\036\n\032SERVICESTATUS_SLA_VIOLATED\020\004*\251\001\n\017" + - "SliceStatusEnum\022\031\n\025SLICESTATUS_UNDEFINED" + - "\020\000\022\027\n\023SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTAT" + - "US_INIT\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLI" + - "CESTATUS_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIO" + - "LATED\020\005*]\n\020ConfigActionEnum\022\032\n\026CONFIGACT" + - "ION_UNDEFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n" + - "\023CONFIGACTION_DELETE\020\002*\203\002\n\022IsolationLeve" + - "lEnum\022\020\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOL" + - "ATION\020\001\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCES" + - "S_ISOLATION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATI" + - "ON\020\004\022\036\n\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032" + - "VIRTUAL_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_" + - "FUNCTIONS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATI" + - "ON\020\0102\331\023\n\016ContextService\022:\n\016ListContextId" + - "s\022\016.context.Empty\032\026.context.ContextIdLis" + - "t\"\000\0226\n\014ListContexts\022\016.context.Empty\032\024.co" + - "ntext.ContextList\"\000\0224\n\nGetContext\022\022.cont" + - "ext.ContextId\032\020.context.Context\"\000\0224\n\nSet" + - "Context\022\020.context.Context\032\022.context.Cont" + - "extId\"\000\0225\n\rRemoveContext\022\022.context.Conte" + - "xtId\032\016.context.Empty\"\000\022=\n\020GetContextEven" + - "ts\022\016.context.Empty\032\025.context.ContextEven" + - "t\"\0000\001\022@\n\017ListTopologyIds\022\022.context.Conte" + - "xtId\032\027.context.TopologyIdList\"\000\022=\n\016ListT" + - "opologies\022\022.context.ContextId\032\025.context." + - "TopologyList\"\000\0227\n\013GetTopology\022\023.context." + - "TopologyId\032\021.context.Topology\"\000\0227\n\013SetTo" + - "pology\022\021.context.Topology\032\023.context.Topo" + - "logyId\"\000\0227\n\016RemoveTopology\022\023.context.Top" + - "ologyId\032\016.context.Empty\"\000\022?\n\021GetTopology" + - "Events\022\016.context.Empty\032\026.context.Topolog" + - "yEvent\"\0000\001\0228\n\rListDeviceIds\022\016.context.Em" + - "pty\032\025.context.DeviceIdList\"\000\0224\n\013ListDevi" + - "ces\022\016.context.Empty\032\023.context.DeviceList" + - "\"\000\0221\n\tGetDevice\022\021.context.DeviceId\032\017.con" + - "text.Device\"\000\0221\n\tSetDevice\022\017.context.Dev" + - "ice\032\021.context.DeviceId\"\000\0223\n\014RemoveDevice" + - "\022\021.context.DeviceId\032\016.context.Empty\"\000\022;\n" + - "\017GetDeviceEvents\022\016.context.Empty\032\024.conte" + - "xt.DeviceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.cont" + - "ext.Empty\032\023.context.LinkIdList\"\000\0220\n\tList" + - "Links\022\016.context.Empty\032\021.context.LinkList" + - "\"\000\022+\n\007GetLink\022\017.context.LinkId\032\r.context" + - ".Link\"\000\022+\n\007SetLink\022\r.context.Link\032\017.cont" + - "ext.LinkId\"\000\022/\n\nRemoveLink\022\017.context.Lin" + - "kId\032\016.context.Empty\"\000\0227\n\rGetLinkEvents\022\016" + - ".context.Empty\032\022.context.LinkEvent\"\0000\001\022>" + - "\n\016ListServiceIds\022\022.context.ContextId\032\026.c" + - "ontext.ServiceIdList\"\000\022:\n\014ListServices\022\022" + - ".context.ContextId\032\024.context.ServiceList" + - "\"\000\0224\n\nGetService\022\022.context.ServiceId\032\020.c" + - "ontext.Service\"\000\0224\n\nSetService\022\020.context" + - ".Service\032\022.context.ServiceId\"\000\0226\n\014UnsetS" + - "ervice\022\020.context.Service\032\022.context.Servi" + - "ceId\"\000\0225\n\rRemoveService\022\022.context.Servic" + - "eId\032\016.context.Empty\"\000\022=\n\020GetServiceEvent" + - "s\022\016.context.Empty\032\025.context.ServiceEvent" + - "\"\0000\001\022:\n\014ListSliceIds\022\022.context.ContextId" + - "\032\024.context.SliceIdList\"\000\0226\n\nListSlices\022\022" + - ".context.ContextId\032\022.context.SliceList\"\000" + - "\022.\n\010GetSlice\022\020.context.SliceId\032\016.context" + - ".Slice\"\000\022.\n\010SetSlice\022\016.context.Slice\032\020.c" + - "ontext.SliceId\"\000\0220\n\nUnsetSlice\022\016.context" + - ".Slice\032\020.context.SliceId\"\000\0221\n\013RemoveSlic" + - "e\022\020.context.SliceId\032\016.context.Empty\"\000\0229\n" + - "\016GetSliceEvents\022\016.context.Empty\032\023.contex" + - "t.SliceEvent\"\0000\001\022D\n\021ListConnectionIds\022\022." + - "context.ServiceId\032\031.context.ConnectionId" + - "List\"\000\022@\n\017ListConnections\022\022.context.Serv" + - "iceId\032\027.context.ConnectionList\"\000\022=\n\rGetC" + - "onnection\022\025.context.ConnectionId\032\023.conte" + - "xt.Connection\"\000\022=\n\rSetConnection\022\023.conte" + - "xt.Connection\032\025.context.ConnectionId\"\000\022;" + - "\n\020RemoveConnection\022\025.context.ConnectionI" + - "d\032\016.context.Empty\"\000\022C\n\023GetConnectionEven" + - "ts\022\016.context.Empty\032\030.context.ConnectionE" + - "vent\"\0000\001b\006proto3" ->>>>>>> develop }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, -- GitLab From 5c8f97494a6c2cc222175fd4aa35956b5fbb1f5a Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Thu, 22 Sep 2022 11:05:28 +0300 Subject: [PATCH 05/34] copy file from automation --- .../grpc/context/ContextOuterClass.java | 455 +++++++++--------- 1 file changed, 228 insertions(+), 227 deletions(-) diff --git a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java index 3dbc75753..3c0d7ce36 100644 --- a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java +++ b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java @@ -62184,233 +62184,234 @@ public final class ContextOuterClass { "(\0132\023.context.ConfigRule\"5\n\014DeviceIdList\022" + "%\n\ndevice_ids\030\001 \003(\0132\021.context.DeviceId\"." + "\n\nDeviceList\022 \n\007devices\030\001 \003(\0132\017.context." + - "Device\"R\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016.c" + - "ontext.Event\022$\n\tdevice_id\030\002 \001(\0132\021.contex" + - "t.DeviceId\"*\n\006LinkId\022 \n\tlink_uuid\030\001 \001(\0132" + - "\r.context.Uuid\"X\n\004Link\022 \n\007link_id\030\001 \001(\0132" + - "\017.context.LinkId\022.\n\021link_endpoint_ids\030\002 " + - "\003(\0132\023.context.EndPointId\"/\n\nLinkIdList\022!" + - "\n\010link_ids\030\001 \003(\0132\017.context.LinkId\"(\n\010Lin" + - "kList\022\034\n\005links\030\001 \003(\0132\r.context.Link\"L\n\tL" + - "inkEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022" + - " \n\007link_id\030\002 \001(\0132\017.context.LinkId\"X\n\tSer" + - "viceId\022&\n\ncontext_id\030\001 \001(\0132\022.context.Con" + - "textId\022#\n\014service_uuid\030\002 \001(\0132\r.context.U" + - "uid\"\315\002\n\007Service\022&\n\nservice_id\030\001 \001(\0132\022.co" + - "ntext.ServiceId\022.\n\014service_type\030\002 \001(\0162\030." + - "context.ServiceTypeEnum\0221\n\024service_endpo" + - "int_ids\030\003 \003(\0132\023.context.EndPointId\0220\n\023se" + - "rvice_constraints\030\004 \003(\0132\023.context.Constr" + - "aint\022.\n\016service_status\030\005 \001(\0132\026.context.S" + - "erviceStatus\022.\n\016service_config\030\006 \001(\0132\026.c" + - "ontext.ServiceConfig\022%\n\ttimestamp\030\007 \001(\0132" + - "\022.context.Timestamp\"C\n\rServiceStatus\0222\n\016" + - "service_status\030\001 \001(\0162\032.context.ServiceSt" + - "atusEnum\":\n\rServiceConfig\022)\n\014config_rule" + - "s\030\001 \003(\0132\023.context.ConfigRule\"8\n\rServiceI" + - "dList\022\'\n\013service_ids\030\001 \003(\0132\022.context.Ser" + - "viceId\"1\n\013ServiceList\022\"\n\010services\030\001 \003(\0132" + - "\020.context.Service\"U\n\014ServiceEvent\022\035\n\005eve" + - "nt\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002" + - " \001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nc" + - "ontext_id\030\001 \001(\0132\022.context.ContextId\022!\n\ns" + - "lice_uuid\030\002 \001(\0132\r.context.Uuid\"\222\003\n\005Slice" + - "\022\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022/\n\022" + - "slice_endpoint_ids\030\002 \003(\0132\023.context.EndPo" + - "intId\022.\n\021slice_constraints\030\003 \003(\0132\023.conte" + - "xt.Constraint\022-\n\021slice_service_ids\030\004 \003(\013" + - "2\022.context.ServiceId\022,\n\022slice_subslice_i" + - "ds\030\005 \003(\0132\020.context.SliceId\022*\n\014slice_stat" + - "us\030\006 \001(\0132\024.context.SliceStatus\022*\n\014slice_" + - "config\030\007 \001(\0132\024.context.SliceConfig\022(\n\013sl" + - "ice_owner\030\010 \001(\0132\023.context.SliceOwner\022%\n\t" + - "timestamp\030\t \001(\0132\022.context.Timestamp\"E\n\nS" + - "liceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.context." + - "Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStatu" + - "s\022.\n\014slice_status\030\001 \001(\0162\030.context.SliceS" + - "tatusEnum\"8\n\013SliceConfig\022)\n\014config_rules" + - "\030\001 \003(\0132\023.context.ConfigRule\"2\n\013SliceIdLi" + - "st\022#\n\tslice_ids\030\001 \003(\0132\020.context.SliceId\"" + - "+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.context.S" + - "lice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132\016.cont" + - "ext.Event\022\"\n\010slice_id\030\002 \001(\0132\020.context.Sl" + - "iceId\"6\n\014ConnectionId\022&\n\017connection_uuid" + - "\030\001 \001(\0132\r.context.Uuid\"2\n\025ConnectionSetti" + - "ngs_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t\"\236\001\n\025Co" + - "nnectionSettings_L2\022\027\n\017src_mac_address\030\001" + - " \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\nether_t" + - "ype\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpls_label" + - "\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(\r\"t\n\025Co" + - "nnectionSettings_L3\022\026\n\016src_ip_address\030\001 " + - "\001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004dscp\030\003 \001(" + - "\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[\n\025Conn" + - "ectionSettings_L4\022\020\n\010src_port\030\001 \001(\r\022\020\n\010d" + - "st_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013\n\003ttl\030" + - "\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l0\030\001 \001(\013" + - "2\036.context.ConnectionSettings_L0\022*\n\002l2\030\002" + - " \001(\0132\036.context.ConnectionSettings_L2\022*\n\002" + - "l3\030\003 \001(\0132\036.context.ConnectionSettings_L3" + - "\022*\n\002l4\030\004 \001(\0132\036.context.ConnectionSetting" + - "s_L4\"\363\001\n\nConnection\022,\n\rconnection_id\030\001 \001" + - "(\0132\025.context.ConnectionId\022&\n\nservice_id\030" + - "\002 \001(\0132\022.context.ServiceId\0223\n\026path_hops_e" + - "ndpoint_ids\030\003 \003(\0132\023.context.EndPointId\022+" + - "\n\017sub_service_ids\030\004 \003(\0132\022.context.Servic" + - "eId\022-\n\010settings\030\005 \001(\0132\033.context.Connecti" + - "onSettings\"A\n\020ConnectionIdList\022-\n\016connec" + - "tion_ids\030\001 \003(\0132\025.context.ConnectionId\":\n" + - "\016ConnectionList\022(\n\013connections\030\001 \003(\0132\023.c" + - "ontext.Connection\"^\n\017ConnectionEvent\022\035\n\005" + - "event\030\001 \001(\0132\016.context.Event\022,\n\rconnectio" + - "n_id\030\002 \001(\0132\025.context.ConnectionId\"\202\001\n\nEn" + - "dPointId\022(\n\013topology_id\030\001 \001(\0132\023.context." + - "TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.context." + - "DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r.contex" + - "t.Uuid\"\264\001\n\010EndPoint\022(\n\013endpoint_id\030\001 \001(\013" + - "2\023.context.EndPointId\022\025\n\rendpoint_type\030\002" + - " \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037.kpi_sam" + - "ple_types.KpiSampleType\022,\n\021endpoint_loca" + - "tion\030\004 \001(\0132\021.context.Location\"A\n\021ConfigR" + - "ule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n\016reso" + - "urce_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022(\n\013en" + - "dpoint_id\030\001 \001(\0132\023.context.EndPointId\022!\n\010" + - "rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n\nConf" + - "igRule\022)\n\006action\030\001 \001(\0162\031.context.ConfigA" + - "ctionEnum\022,\n\006custom\030\002 \001(\0132\032.context.Conf" + - "igRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.context.C" + - "onfigRule_ACLH\000B\r\n\013config_rule\"F\n\021Constr" + - "aint_Custom\022\027\n\017constraint_type\030\001 \001(\t\022\030\n\020" + - "constraint_value\030\002 \001(\t\"E\n\023Constraint_Sch" + - "edule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rdurati" + - "on_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010latitud" + - "e\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Location\022\020" + - "\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 \001(\0132\025" + - ".context.GPS_PositionH\000B\n\n\010location\"l\n\033C" + - "onstraint_EndPointLocation\022(\n\013endpoint_i" + - "d\030\001 \001(\0132\023.context.EndPointId\022#\n\010location" + - "\030\002 \001(\0132\021.context.Location\"Y\n\033Constraint_" + - "EndPointPriority\022(\n\013endpoint_id\030\001 \001(\0132\023." + - "context.EndPointId\022\020\n\010priority\030\002 \001(\r\"0\n\026" + - "Constraint_SLA_Latency\022\026\n\016e2e_latency_ms" + - "\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025\n\rcap" + - "acity_gbps\030\001 \001(\002\"M\n\033Constraint_SLA_Avail" + - "ability\022\032\n\022num_disjoint_paths\030\001 \001(\r\022\022\n\na" + - "ll_active\030\002 \001(\010\"V\n\036Constraint_SLA_Isolat" + - "ion_level\0224\n\017isolation_level\030\001 \003(\0162\033.con" + - "text.IsolationLevelEnum\"\366\003\n\nConstraint\022," + - "\n\006custom\030\001 \001(\0132\032.context.Constraint_Cust" + - "omH\000\0220\n\010schedule\030\002 \001(\0132\034.context.Constra" + - "int_ScheduleH\000\022A\n\021endpoint_location\030\003 \001(" + - "\0132$.context.Constraint_EndPointLocationH" + - "\000\022A\n\021endpoint_priority\030\004 \001(\0132$.context.C" + - "onstraint_EndPointPriorityH\000\0228\n\014sla_capa" + - "city\030\005 \001(\0132 .context.Constraint_SLA_Capa" + - "cityH\000\0226\n\013sla_latency\030\006 \001(\0132\037.context.Co" + - "nstraint_SLA_LatencyH\000\022@\n\020sla_availabili" + - "ty\030\007 \001(\0132$.context.Constraint_SLA_Availa" + - "bilityH\000\022@\n\rsla_isolation\030\010 \001(\0132\'.contex" + - "t.Constraint_SLA_Isolation_levelH\000B\014\n\nco" + - "nstraint\"^\n\022TeraFlowController\022&\n\ncontex" + - "t_id\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_add" + - "ress\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024Authenticati" + - "onResult\022&\n\ncontext_id\030\001 \001(\0132\022.context.C" + - "ontextId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEvent" + - "TypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVE" + - "NTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n" + - "\020EVENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum" + - "\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDR" + - "IVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSP" + - "ORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICE" + - "DRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICE" + - "DRIVER_ONF_TR_352\020\005*\217\001\n\033DeviceOperationa" + - "lStatusEnum\022%\n!DEVICEOPERATIONALSTATUS_U" + - "NDEFINED\020\000\022$\n DEVICEOPERATIONALSTATUS_DI" + - "SABLED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENAB" + - "LED\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE" + - "_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERV" + - "ICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNE" + - "CTIVITY_SERVICE\020\003*\250\001\n\021ServiceStatusEnum\022" + - "\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICES" + - "TATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020" + - "\002\022!\n\035SERVICESTATUS_PENDING_REMOVAL\020\003\022\036\n\032" + - "SERVICESTATUS_SLA_VIOLATED\020\004*\251\001\n\017SliceSt" + - "atusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023S" + - "LICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS_INIT" + - "\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTATU" + - "S_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020\005" + - "*]\n\020ConfigActionEnum\022\032\n\026CONFIGACTION_UND" + - "EFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIG" + - "ACTION_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020" + - "\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001" + - "\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLA" + - "TION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n" + - "\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL" + - "_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIO" + - "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\331\023" + - "\n\016ContextService\022:\n\016ListContextIds\022\016.con" + - "text.Empty\032\026.context.ContextIdList\"\000\0226\n\014" + - "ListContexts\022\016.context.Empty\032\024.context.C" + - "ontextList\"\000\0224\n\nGetContext\022\022.context.Con" + - "textId\032\020.context.Context\"\000\0224\n\nSetContext" + - "\022\020.context.Context\032\022.context.ContextId\"\000" + - "\0225\n\rRemoveContext\022\022.context.ContextId\032\016." + - "context.Empty\"\000\022=\n\020GetContextEvents\022\016.co" + - "ntext.Empty\032\025.context.ContextEvent\"\0000\001\022@" + - "\n\017ListTopologyIds\022\022.context.ContextId\032\027." + - "context.TopologyIdList\"\000\022=\n\016ListTopologi" + - "es\022\022.context.ContextId\032\025.context.Topolog" + - "yList\"\000\0227\n\013GetTopology\022\023.context.Topolog" + - "yId\032\021.context.Topology\"\000\0227\n\013SetTopology\022" + - "\021.context.Topology\032\023.context.TopologyId\"" + - "\000\0227\n\016RemoveTopology\022\023.context.TopologyId" + - "\032\016.context.Empty\"\000\022?\n\021GetTopologyEvents\022" + - "\016.context.Empty\032\026.context.TopologyEvent\"" + - "\0000\001\0228\n\rListDeviceIds\022\016.context.Empty\032\025.c" + - "ontext.DeviceIdList\"\000\0224\n\013ListDevices\022\016.c" + - "ontext.Empty\032\023.context.DeviceList\"\000\0221\n\tG" + - "etDevice\022\021.context.DeviceId\032\017.context.De" + - "vice\"\000\0221\n\tSetDevice\022\017.context.Device\032\021.c" + - "ontext.DeviceId\"\000\0223\n\014RemoveDevice\022\021.cont" + - "ext.DeviceId\032\016.context.Empty\"\000\022;\n\017GetDev" + - "iceEvents\022\016.context.Empty\032\024.context.Devi" + - "ceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.context.Emp" + - "ty\032\023.context.LinkIdList\"\000\0220\n\tListLinks\022\016" + - ".context.Empty\032\021.context.LinkList\"\000\022+\n\007G" + - "etLink\022\017.context.LinkId\032\r.context.Link\"\000" + - "\022+\n\007SetLink\022\r.context.Link\032\017.context.Lin" + - "kId\"\000\022/\n\nRemoveLink\022\017.context.LinkId\032\016.c" + - "ontext.Empty\"\000\0227\n\rGetLinkEvents\022\016.contex" + - "t.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016ListS" + - "erviceIds\022\022.context.ContextId\032\026.context." + - "ServiceIdList\"\000\022:\n\014ListServices\022\022.contex" + - "t.ContextId\032\024.context.ServiceList\"\000\0224\n\nG" + - "etService\022\022.context.ServiceId\032\020.context." + - "Service\"\000\0224\n\nSetService\022\020.context.Servic" + - "e\032\022.context.ServiceId\"\000\0226\n\014UnsetService\022" + - "\020.context.Service\032\022.context.ServiceId\"\000\022" + - "5\n\rRemoveService\022\022.context.ServiceId\032\016.c" + - "ontext.Empty\"\000\022=\n\020GetServiceEvents\022\016.con" + - "text.Empty\032\025.context.ServiceEvent\"\0000\001\022:\n" + - "\014ListSliceIds\022\022.context.ContextId\032\024.cont" + - "ext.SliceIdList\"\000\0226\n\nListSlices\022\022.contex" + - "t.ContextId\032\022.context.SliceList\"\000\022.\n\010Get" + - "Slice\022\020.context.SliceId\032\016.context.Slice\"" + - "\000\022.\n\010SetSlice\022\016.context.Slice\032\020.context." + - "SliceId\"\000\0220\n\nUnsetSlice\022\016.context.Slice\032" + - "\020.context.SliceId\"\000\0221\n\013RemoveSlice\022\020.con" + - "text.SliceId\032\016.context.Empty\"\000\0229\n\016GetSli" + - "ceEvents\022\016.context.Empty\032\023.context.Slice" + - "Event\"\0000\001\022D\n\021ListConnectionIds\022\022.context" + - ".ServiceId\032\031.context.ConnectionIdList\"\000\022" + - "@\n\017ListConnections\022\022.context.ServiceId\032\027" + - ".context.ConnectionList\"\000\022=\n\rGetConnecti" + - "on\022\025.context.ConnectionId\032\023.context.Conn" + - "ection\"\000\022=\n\rSetConnection\022\023.context.Conn" + - "ection\032\025.context.ConnectionId\"\000\022;\n\020Remov" + - "eConnection\022\025.context.ConnectionId\032\016.con" + - "text.Empty\"\000\022C\n\023GetConnectionEvents\022\016.co" + - "ntext.Empty\032\030.context.ConnectionEvent\"\0000" + - "\001b\006proto3" + "Device\"\200\001\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016." + + "context.Event\022$\n\tdevice_id\030\002 \001(\0132\021.conte" + + "xt.DeviceId\022,\n\rdevice_config\030\003 \001(\0132\025.con" + + "text.DeviceConfig\"*\n\006LinkId\022 \n\tlink_uuid" + + "\030\001 \001(\0132\r.context.Uuid\"X\n\004Link\022 \n\007link_id" + + "\030\001 \001(\0132\017.context.LinkId\022.\n\021link_endpoint" + + "_ids\030\002 \003(\0132\023.context.EndPointId\"/\n\nLinkI" + + "dList\022!\n\010link_ids\030\001 \003(\0132\017.context.LinkId" + + "\"(\n\010LinkList\022\034\n\005links\030\001 \003(\0132\r.context.Li" + + "nk\"L\n\tLinkEvent\022\035\n\005event\030\001 \001(\0132\016.context" + + ".Event\022 \n\007link_id\030\002 \001(\0132\017.context.LinkId" + + "\"X\n\tServiceId\022&\n\ncontext_id\030\001 \001(\0132\022.cont" + + "ext.ContextId\022#\n\014service_uuid\030\002 \001(\0132\r.co" + + "ntext.Uuid\"\315\002\n\007Service\022&\n\nservice_id\030\001 \001" + + "(\0132\022.context.ServiceId\022.\n\014service_type\030\002" + + " \001(\0162\030.context.ServiceTypeEnum\0221\n\024servic" + + "e_endpoint_ids\030\003 \003(\0132\023.context.EndPointI" + + "d\0220\n\023service_constraints\030\004 \003(\0132\023.context" + + ".Constraint\022.\n\016service_status\030\005 \001(\0132\026.co" + + "ntext.ServiceStatus\022.\n\016service_config\030\006 " + + "\001(\0132\026.context.ServiceConfig\022%\n\ttimestamp" + + "\030\007 \001(\0132\022.context.Timestamp\"C\n\rServiceSta" + + "tus\0222\n\016service_status\030\001 \001(\0162\032.context.Se" + + "rviceStatusEnum\":\n\rServiceConfig\022)\n\014conf" + + "ig_rules\030\001 \003(\0132\023.context.ConfigRule\"8\n\rS" + + "erviceIdList\022\'\n\013service_ids\030\001 \003(\0132\022.cont" + + "ext.ServiceId\"1\n\013ServiceList\022\"\n\010services" + + "\030\001 \003(\0132\020.context.Service\"U\n\014ServiceEvent" + + "\022\035\n\005event\030\001 \001(\0132\016.context.Event\022&\n\nservi" + + "ce_id\030\002 \001(\0132\022.context.ServiceId\"T\n\007Slice" + + "Id\022&\n\ncontext_id\030\001 \001(\0132\022.context.Context" + + "Id\022!\n\nslice_uuid\030\002 \001(\0132\r.context.Uuid\"\222\003" + + "\n\005Slice\022\"\n\010slice_id\030\001 \001(\0132\020.context.Slic" + + "eId\022/\n\022slice_endpoint_ids\030\002 \003(\0132\023.contex" + + "t.EndPointId\022.\n\021slice_constraints\030\003 \003(\0132" + + "\023.context.Constraint\022-\n\021slice_service_id" + + "s\030\004 \003(\0132\022.context.ServiceId\022,\n\022slice_sub" + + "slice_ids\030\005 \003(\0132\020.context.SliceId\022*\n\014sli" + + "ce_status\030\006 \001(\0132\024.context.SliceStatus\022*\n" + + "\014slice_config\030\007 \001(\0132\024.context.SliceConfi" + + "g\022(\n\013slice_owner\030\010 \001(\0132\023.context.SliceOw" + + "ner\022%\n\ttimestamp\030\t \001(\0132\022.context.Timesta" + + "mp\"E\n\nSliceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.c" + + "ontext.Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013Sli" + + "ceStatus\022.\n\014slice_status\030\001 \001(\0162\030.context" + + ".SliceStatusEnum\"8\n\013SliceConfig\022)\n\014confi" + + "g_rules\030\001 \003(\0132\023.context.ConfigRule\"2\n\013Sl" + + "iceIdList\022#\n\tslice_ids\030\001 \003(\0132\020.context.S" + + "liceId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.co" + + "ntext.Slice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\013" + + "2\016.context.Event\022\"\n\010slice_id\030\002 \001(\0132\020.con" + + "text.SliceId\"6\n\014ConnectionId\022&\n\017connecti" + + "on_uuid\030\001 \001(\0132\r.context.Uuid\"2\n\025Connecti" + + "onSettings_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t" + + "\"\236\001\n\025ConnectionSettings_L2\022\027\n\017src_mac_ad" + + "dress\030\001 \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\n" + + "ether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpl" + + "s_label\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(" + + "\r\"t\n\025ConnectionSettings_L3\022\026\n\016src_ip_add" + + "ress\030\001 \001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004ds" + + "cp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"" + + "[\n\025ConnectionSettings_L4\022\020\n\010src_port\030\001 \001" + + "(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022" + + "\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l" + + "0\030\001 \001(\0132\036.context.ConnectionSettings_L0\022" + + "*\n\002l2\030\002 \001(\0132\036.context.ConnectionSettings" + + "_L2\022*\n\002l3\030\003 \001(\0132\036.context.ConnectionSett" + + "ings_L3\022*\n\002l4\030\004 \001(\0132\036.context.Connection" + + "Settings_L4\"\363\001\n\nConnection\022,\n\rconnection" + + "_id\030\001 \001(\0132\025.context.ConnectionId\022&\n\nserv" + + "ice_id\030\002 \001(\0132\022.context.ServiceId\0223\n\026path" + + "_hops_endpoint_ids\030\003 \003(\0132\023.context.EndPo" + + "intId\022+\n\017sub_service_ids\030\004 \003(\0132\022.context" + + ".ServiceId\022-\n\010settings\030\005 \001(\0132\033.context.C" + + "onnectionSettings\"A\n\020ConnectionIdList\022-\n" + + "\016connection_ids\030\001 \003(\0132\025.context.Connecti" + + "onId\":\n\016ConnectionList\022(\n\013connections\030\001 " + + "\003(\0132\023.context.Connection\"^\n\017ConnectionEv" + + "ent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022,\n\rco" + + "nnection_id\030\002 \001(\0132\025.context.ConnectionId" + + "\"\202\001\n\nEndPointId\022(\n\013topology_id\030\001 \001(\0132\023.c" + + "ontext.TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.c" + + "ontext.DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r" + + ".context.Uuid\"\264\001\n\010EndPoint\022(\n\013endpoint_i" + + "d\030\001 \001(\0132\023.context.EndPointId\022\025\n\rendpoint" + + "_type\030\002 \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037." + + "kpi_sample_types.KpiSampleType\022,\n\021endpoi" + + "nt_location\030\004 \001(\0132\021.context.Location\"A\n\021" + + "ConfigRule_Custom\022\024\n\014resource_key\030\001 \001(\t\022" + + "\026\n\016resource_value\030\002 \001(\t\"]\n\016ConfigRule_AC" + + "L\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPoin" + + "tId\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234" + + "\001\n\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context." + + "ConfigActionEnum\022,\n\006custom\030\002 \001(\0132\032.conte" + + "xt.ConfigRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.co" + + "ntext.ConfigRule_ACLH\000B\r\n\013config_rule\"F\n" + + "\021Constraint_Custom\022\027\n\017constraint_type\030\001 " + + "\001(\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n\023Constra" + + "int_Schedule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n" + + "\rduration_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010" + + "latitude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Loc" + + "ation\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030" + + "\002 \001(\0132\025.context.GPS_PositionH\000B\n\n\010locati" + + "on\"l\n\033Constraint_EndPointLocation\022(\n\013end" + + "point_id\030\001 \001(\0132\023.context.EndPointId\022#\n\010l" + + "ocation\030\002 \001(\0132\021.context.Location\"Y\n\033Cons" + + "traint_EndPointPriority\022(\n\013endpoint_id\030\001" + + " \001(\0132\023.context.EndPointId\022\020\n\010priority\030\002 " + + "\001(\r\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_lat" + + "ency_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity" + + "\022\025\n\rcapacity_gbps\030\001 \001(\002\"M\n\033Constraint_SL" + + "A_Availability\022\032\n\022num_disjoint_paths\030\001 \001" + + "(\r\022\022\n\nall_active\030\002 \001(\010\"V\n\036Constraint_SLA" + + "_Isolation_level\0224\n\017isolation_level\030\001 \003(" + + "\0162\033.context.IsolationLevelEnum\"\366\003\n\nConst" + + "raint\022,\n\006custom\030\001 \001(\0132\032.context.Constrai" + + "nt_CustomH\000\0220\n\010schedule\030\002 \001(\0132\034.context." + + "Constraint_ScheduleH\000\022A\n\021endpoint_locati" + + "on\030\003 \001(\0132$.context.Constraint_EndPointLo" + + "cationH\000\022A\n\021endpoint_priority\030\004 \001(\0132$.co" + + "ntext.Constraint_EndPointPriorityH\000\0228\n\014s" + + "la_capacity\030\005 \001(\0132 .context.Constraint_S" + + "LA_CapacityH\000\0226\n\013sla_latency\030\006 \001(\0132\037.con" + + "text.Constraint_SLA_LatencyH\000\022@\n\020sla_ava" + + "ilability\030\007 \001(\0132$.context.Constraint_SLA" + + "_AvailabilityH\000\022@\n\rsla_isolation\030\010 \001(\0132\'" + + ".context.Constraint_SLA_Isolation_levelH" + + "\000B\014\n\nconstraint\"^\n\022TeraFlowController\022&\n" + + "\ncontext_id\030\001 \001(\0132\022.context.ContextId\022\022\n" + + "\nip_address\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024Authe" + + "nticationResult\022&\n\ncontext_id\030\001 \001(\0132\022.co" + + "ntext.ContextId\022\025\n\rauthenticated\030\002 \001(\010*j" + + "\n\rEventTypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000" + + "\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDA" + + "TE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDri" + + "verEnum\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027D" + + "EVICEDRIVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER" + + "_TRANSPORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n" + + "\"DEVICEDRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n" + + "\027DEVICEDRIVER_ONF_TR_352\020\005*\217\001\n\033DeviceOpe" + + "rationalStatusEnum\022%\n!DEVICEOPERATIONALS" + + "TATUS_UNDEFINED\020\000\022$\n DEVICEOPERATIONALST" + + "ATUS_DISABLED\020\001\022#\n\037DEVICEOPERATIONALSTAT" + + "US_ENABLED\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERV" + + "ICETYPE_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022" + + "\024\n\020SERVICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAP" + + "I_CONNECTIVITY_SERVICE\020\003*\250\001\n\021ServiceStat" + + "usEnum\022\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025S" + + "ERVICESTATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_" + + "ACTIVE\020\002\022!\n\035SERVICESTATUS_PENDING_REMOVA" + + "L\020\003\022\036\n\032SERVICESTATUS_SLA_VIOLATED\020\004*\251\001\n\017" + + "SliceStatusEnum\022\031\n\025SLICESTATUS_UNDEFINED" + + "\020\000\022\027\n\023SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTAT" + + "US_INIT\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLI" + + "CESTATUS_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIO" + + "LATED\020\005*]\n\020ConfigActionEnum\022\032\n\026CONFIGACT" + + "ION_UNDEFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n" + + "\023CONFIGACTION_DELETE\020\002*\203\002\n\022IsolationLeve" + + "lEnum\022\020\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOL" + + "ATION\020\001\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCES" + + "S_ISOLATION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATI" + + "ON\020\004\022\036\n\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032" + + "VIRTUAL_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_" + + "FUNCTIONS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATI" + + "ON\020\0102\331\023\n\016ContextService\022:\n\016ListContextId" + + "s\022\016.context.Empty\032\026.context.ContextIdLis" + + "t\"\000\0226\n\014ListContexts\022\016.context.Empty\032\024.co" + + "ntext.ContextList\"\000\0224\n\nGetContext\022\022.cont" + + "ext.ContextId\032\020.context.Context\"\000\0224\n\nSet" + + "Context\022\020.context.Context\032\022.context.Cont" + + "extId\"\000\0225\n\rRemoveContext\022\022.context.Conte" + + "xtId\032\016.context.Empty\"\000\022=\n\020GetContextEven" + + "ts\022\016.context.Empty\032\025.context.ContextEven" + + "t\"\0000\001\022@\n\017ListTopologyIds\022\022.context.Conte" + + "xtId\032\027.context.TopologyIdList\"\000\022=\n\016ListT" + + "opologies\022\022.context.ContextId\032\025.context." + + "TopologyList\"\000\0227\n\013GetTopology\022\023.context." + + "TopologyId\032\021.context.Topology\"\000\0227\n\013SetTo" + + "pology\022\021.context.Topology\032\023.context.Topo" + + "logyId\"\000\0227\n\016RemoveTopology\022\023.context.Top" + + "ologyId\032\016.context.Empty\"\000\022?\n\021GetTopology" + + "Events\022\016.context.Empty\032\026.context.Topolog" + + "yEvent\"\0000\001\0228\n\rListDeviceIds\022\016.context.Em" + + "pty\032\025.context.DeviceIdList\"\000\0224\n\013ListDevi" + + "ces\022\016.context.Empty\032\023.context.DeviceList" + + "\"\000\0221\n\tGetDevice\022\021.context.DeviceId\032\017.con" + + "text.Device\"\000\0221\n\tSetDevice\022\017.context.Dev" + + "ice\032\021.context.DeviceId\"\000\0223\n\014RemoveDevice" + + "\022\021.context.DeviceId\032\016.context.Empty\"\000\022;\n" + + "\017GetDeviceEvents\022\016.context.Empty\032\024.conte" + + "xt.DeviceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.cont" + + "ext.Empty\032\023.context.LinkIdList\"\000\0220\n\tList" + + "Links\022\016.context.Empty\032\021.context.LinkList" + + "\"\000\022+\n\007GetLink\022\017.context.LinkId\032\r.context" + + ".Link\"\000\022+\n\007SetLink\022\r.context.Link\032\017.cont" + + "ext.LinkId\"\000\022/\n\nRemoveLink\022\017.context.Lin" + + "kId\032\016.context.Empty\"\000\0227\n\rGetLinkEvents\022\016" + + ".context.Empty\032\022.context.LinkEvent\"\0000\001\022>" + + "\n\016ListServiceIds\022\022.context.ContextId\032\026.c" + + "ontext.ServiceIdList\"\000\022:\n\014ListServices\022\022" + + ".context.ContextId\032\024.context.ServiceList" + + "\"\000\0224\n\nGetService\022\022.context.ServiceId\032\020.c" + + "ontext.Service\"\000\0224\n\nSetService\022\020.context" + + ".Service\032\022.context.ServiceId\"\000\0226\n\014UnsetS" + + "ervice\022\020.context.Service\032\022.context.Servi" + + "ceId\"\000\0225\n\rRemoveService\022\022.context.Servic" + + "eId\032\016.context.Empty\"\000\022=\n\020GetServiceEvent" + + "s\022\016.context.Empty\032\025.context.ServiceEvent" + + "\"\0000\001\022:\n\014ListSliceIds\022\022.context.ContextId" + + "\032\024.context.SliceIdList\"\000\0226\n\nListSlices\022\022" + + ".context.ContextId\032\022.context.SliceList\"\000" + + "\022.\n\010GetSlice\022\020.context.SliceId\032\016.context" + + ".Slice\"\000\022.\n\010SetSlice\022\016.context.Slice\032\020.c" + + "ontext.SliceId\"\000\0220\n\nUnsetSlice\022\016.context" + + ".Slice\032\020.context.SliceId\"\000\0221\n\013RemoveSlic" + + "e\022\020.context.SliceId\032\016.context.Empty\"\000\0229\n" + + "\016GetSliceEvents\022\016.context.Empty\032\023.contex" + + "t.SliceEvent\"\0000\001\022D\n\021ListConnectionIds\022\022." + + "context.ServiceId\032\031.context.ConnectionId" + + "List\"\000\022@\n\017ListConnections\022\022.context.Serv" + + "iceId\032\027.context.ConnectionList\"\000\022=\n\rGetC" + + "onnection\022\025.context.ConnectionId\032\023.conte" + + "xt.Connection\"\000\022=\n\rSetConnection\022\023.conte" + + "xt.Connection\032\025.context.ConnectionId\"\000\022;" + + "\n\020RemoveConnection\022\025.context.ConnectionI" + + "d\032\016.context.Empty\"\000\022C\n\023GetConnectionEven" + + "ts\022\016.context.Empty\032\030.context.ConnectionE" + + "vent\"\0000\001b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, -- GitLab From 50482a4e39c50800c5a9cc298d8228da1b85a154 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Sun, 25 Sep 2022 22:24:53 +0300 Subject: [PATCH 06/34] Add device proto files --- .../eu/teraflow/policy/PolicyRuleAlarms.java | 40 + .../eu/teraflow/policy/PolicyServiceImpl.java | 89 +- .../teraflow/policy/context/model/Device.java | 4 + .../policy/context/model/Service.java | 4 + .../teraflow/policy/device/DeviceGateway.java | 30 + .../policy/device/DeviceGatewayImpl.java | 71 ++ .../teraflow/policy/device/DeviceService.java | 31 + .../policy/device/DeviceServiceImpl.java | 52 + src/policy/src/main/proto/device.proto | 1 + .../generated-sources/grpc/device/Device.java | 1031 +++++++++++++++++ .../grpc/device/DeviceService.java | 24 + .../grpc/device/DeviceServiceBean.java | 59 + .../grpc/device/DeviceServiceClient.java | 44 + .../grpc/device/DeviceServiceGrpc.java | 571 +++++++++ .../grpc/device/MutinyDeviceServiceGrpc.java | 216 ++++ 15 files changed, 2266 insertions(+), 1 deletion(-) create mode 100644 src/policy/src/main/java/eu/teraflow/policy/PolicyRuleAlarms.java create mode 100644 src/policy/src/main/java/eu/teraflow/policy/device/DeviceGateway.java create mode 100644 src/policy/src/main/java/eu/teraflow/policy/device/DeviceGatewayImpl.java create mode 100644 src/policy/src/main/java/eu/teraflow/policy/device/DeviceService.java create mode 100644 src/policy/src/main/java/eu/teraflow/policy/device/DeviceServiceImpl.java create mode 120000 src/policy/src/main/proto/device.proto create mode 100644 src/policy/target/generated-sources/grpc/device/Device.java create mode 100644 src/policy/target/generated-sources/grpc/device/DeviceService.java create mode 100644 src/policy/target/generated-sources/grpc/device/DeviceServiceBean.java create mode 100644 src/policy/target/generated-sources/grpc/device/DeviceServiceClient.java create mode 100644 src/policy/target/generated-sources/grpc/device/DeviceServiceGrpc.java create mode 100644 src/policy/target/generated-sources/grpc/device/MutinyDeviceServiceGrpc.java diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleAlarms.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleAlarms.java new file mode 100644 index 000000000..a6fb866ad --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleAlarms.java @@ -0,0 +1,40 @@ +/* +* 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 java.util.ArrayList; +import java.util.List; +import javax.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class PolicyRuleAlarms { + + private final String policyRuleId; + private final List AlarmIdList = new ArrayList<>(); + + public PolicyRuleAlarms(String policyRuleId) { + this.policyRuleId = policyRuleId; + } + + public String getPolicyRuleId() { + return policyRuleId; + } + + public boolean containsAlarmId(String alarmId) { + return true; + } +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index e170ee291..77656b293 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -17,6 +17,11 @@ package eu.teraflow.policy; import eu.teraflow.policy.context.ContextService; +import eu.teraflow.policy.context.model.Constraint; +import eu.teraflow.policy.context.model.ConstraintCustom; +import eu.teraflow.policy.context.model.ConstraintTypeCustom; +import eu.teraflow.policy.context.model.DeviceOperationalStatus; +import eu.teraflow.policy.device.DeviceService; import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; import eu.teraflow.policy.model.PolicyRuleAction; @@ -29,16 +34,20 @@ import eu.teraflow.policy.model.PolicyRuleState; import eu.teraflow.policy.model.RuleState; import eu.teraflow.policy.monitoring.MonitoringService; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; +import eu.teraflow.policy.monitoring.model.AlarmResponse; import eu.teraflow.policy.monitoring.model.AlarmSubscription; import eu.teraflow.policy.monitoring.model.KpiValueRange; import eu.teraflow.policy.service.ServiceService; +import io.smallrye.mutiny.Multi; import io.smallrye.mutiny.Uni; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import org.jboss.logging.Logger; @@ -59,22 +68,30 @@ public class PolicyServiceImpl implements PolicyService { private final ContextService contextService; private final MonitoringService monitoringService; private final ServiceService serviceService; + private final DeviceService deviceService; private final PolicyRuleConditionValidator policyRuleConditionValidator; private final PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter; private PolicyRuleState state = new PolicyRuleState(RuleState.POLICY_UNDEFINED); - HashMap policyRuleActionMap = new HashMap<>(); + private HashMap policyRuleActionMap = new HashMap<>(); + private ConcurrentHashMap alarmPolicyRuleServiceMap = + new ConcurrentHashMap<>(); + private ConcurrentHashMap alarmPolicyRuleDeviceMap = + new ConcurrentHashMap<>(); + private ConcurrentHashMap policyRuleIdActivatedMap = new ConcurrentHashMap<>(); @Inject public PolicyServiceImpl( ContextService contextService, MonitoringService monitoringService, ServiceService serviceService, + DeviceService deviceService, PolicyRuleConditionValidator policyRuleConditionValidator, PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter) { this.contextService = contextService; this.monitoringService = monitoringService; this.serviceService = serviceService; + this.deviceService = deviceService; this.policyRuleConditionValidator = policyRuleConditionValidator; this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter; } @@ -90,6 +107,7 @@ public class PolicyServiceImpl implements PolicyService { .with(alarmId -> alarmSubscriptionList.add(new AlarmSubscription(alarmId, 0, 0))); } + List> alarmResponseStreamList = new ArrayList<>(); for (AlarmSubscription alarmSubscription : alarmSubscriptionList) { monitoringService .getAlarmResponseStream(alarmSubscription) @@ -100,10 +118,71 @@ public class PolicyServiceImpl implements PolicyService { alarmResponse.getAlarmId(); alarmResponse.getText(); alarmResponse.getKpiValue(); + + activatePhase(alarmResponse.getAlarmId()); }); } } + private List parsePolicyRuleAction(PolicyRuleAction policyRuleAction) { + if (policyRuleAction.getPolicyRuleActionEnum() + == PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT) { + List parameters = policyRuleAction.getPolicyRuleActionParameters(); + if (parameters.size() % 2 == 0) { + return parameters; + } + } + return Collections.emptyList(); + } + + private void activateDevice(String alarmId) { + PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId); + PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); + List actionParameters = parsePolicyRuleAction(policyRuleAction); + + final var deserializedDeviceUni = + contextService.getDevice(policyRuleDevice.getDeviceIds().get(0)); + + deserializedDeviceUni + .subscribe() + .with( + device -> { + if (actionParameters.get(0) == "ENABLED") { + device.setDeviceOperationalStatus(DeviceOperationalStatus.ENABLED); + } else if (actionParameters.get(0) == "DISABLED") { + device.setDeviceOperationalStatus(DeviceOperationalStatus.DISABLED); + } else { + device.setDeviceOperationalStatus(DeviceOperationalStatus.UNDEFINED); + } + + deviceService.configureDevice(device); + }); + } + + private void activatePhase(String alarmId) { + PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId); + PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); + List actionParameters = parsePolicyRuleAction(policyRuleAction); + List constraintList = new ArrayList<>(); + + for (int i = 0; i < actionParameters.size() - 2; i += 2) { + var constraintCustom = + new ConstraintCustom(actionParameters.get(i), actionParameters.get(i + 1)); + var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom); + constraintList.add(new Constraint(constraintTypeCustom)); + } + + final var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId()); + + deserializedServiceUni + .subscribe() + .with( + deserializedService -> { + deserializedService.appendServiceConstraints(constraintList); + serviceService.updateService(deserializedService); + }); + } + private void validateDevice(PolicyRuleDevice policyRuleDevice) { final var deviceIds = policyRuleDevice.getDeviceIds(); final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); @@ -181,6 +260,10 @@ public class PolicyServiceImpl implements PolicyService { } }); + if (state.getRuleState() != RuleState.POLICY_VALIDATED) { + return; + } + List alarmDescriptorList = parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic()); @@ -194,6 +277,10 @@ public class PolicyServiceImpl implements PolicyService { policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_VALIDATED)); contextService.setPolicyRule(policyRuleBasic); + for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) { + alarmPolicyRuleServiceMap.put(alarmDescriptor.getAlarmId(), policyRuleService); + } + provisionAlarm(alarmDescriptorList); return; } diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java index b00fd235c..0aba77041 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java +++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java @@ -60,6 +60,10 @@ public class Device { return deviceOperationalStatus; } + public void setDeviceOperationalStatus(DeviceOperationalStatus deviceOperationalStatus) { + this.deviceOperationalStatus = deviceOperationalStatus; + } + public List getDeviceDrivers() { return deviceDrivers; } diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java index e61179bcf..bf9cf6880 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java +++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java @@ -62,6 +62,10 @@ public class Service { return serviceConstraints; } + public void appendServiceConstraints(List serviceConstraints) { + this.serviceConstraints.addAll(serviceConstraints); + } + public ServiceStatus getServiceStatus() { return serviceStatus; } diff --git a/src/policy/src/main/java/eu/teraflow/policy/device/DeviceGateway.java b/src/policy/src/main/java/eu/teraflow/policy/device/DeviceGateway.java new file mode 100644 index 000000000..02550446d --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/device/DeviceGateway.java @@ -0,0 +1,30 @@ +/* +* 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.device; + +import eu.teraflow.policy.context.model.Device; +import eu.teraflow.policy.context.model.DeviceConfig; +import eu.teraflow.policy.context.model.Empty; +import io.smallrye.mutiny.Uni; + +public interface DeviceGateway { + Uni getInitialConfiguration(String deviceId); + + Uni configureDevice(Device device); + + Uni deleteDevice(String deviceId); +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/device/DeviceGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/device/DeviceGatewayImpl.java new file mode 100644 index 000000000..21f679e01 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/device/DeviceGatewayImpl.java @@ -0,0 +1,71 @@ +/* +* 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.device; + +import device.DeviceService; +import eu.teraflow.policy.Serializer; +import eu.teraflow.policy.context.model.Device; +import eu.teraflow.policy.context.model.DeviceConfig; +import eu.teraflow.policy.context.model.Empty; +import io.quarkus.grpc.GrpcClient; +import io.smallrye.mutiny.Uni; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +@ApplicationScoped +public class DeviceGatewayImpl implements DeviceGateway { + + @GrpcClient("device") + DeviceService deviceDelegate; + + private final Serializer serializer; + + @Inject + public DeviceGatewayImpl(Serializer serializer) { + this.serializer = serializer; + } + + @Override + public Uni getInitialConfiguration(String deviceId) { + final var serializedDeviceId = serializer.serializeDeviceId(deviceId); + + return deviceDelegate + .getInitialConfig(serializedDeviceId) + .onItem() + .transform(serializer::deserialize); + } + + @Override + public Uni configureDevice(Device device) { + final var serializedDevice = serializer.serialize(device); + + return deviceDelegate + .configureDevice(serializedDevice) + .onItem() + .transform(serializer::deserialize); + } + + @Override + public Uni deleteDevice(String deviceId) { + final var serializedDeviceId = serializer.serializeDeviceId(deviceId); + + return deviceDelegate + .deleteDevice(serializedDeviceId) + .onItem() + .transform(serializer::deserializeEmpty); + } +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/device/DeviceService.java b/src/policy/src/main/java/eu/teraflow/policy/device/DeviceService.java new file mode 100644 index 000000000..25fa7e73c --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/device/DeviceService.java @@ -0,0 +1,31 @@ +/* +* 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.device; + +import eu.teraflow.policy.context.model.Device; +import eu.teraflow.policy.context.model.DeviceConfig; +import eu.teraflow.policy.context.model.Empty; +import io.smallrye.mutiny.Uni; + +public interface DeviceService { + + Uni getInitialConfiguration(String deviceId); + + Uni configureDevice(Device device); + + Uni deleteDevice(String deviceId); +} diff --git a/src/policy/src/main/java/eu/teraflow/policy/device/DeviceServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/device/DeviceServiceImpl.java new file mode 100644 index 000000000..4c747af3d --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/device/DeviceServiceImpl.java @@ -0,0 +1,52 @@ +/* +* 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.device; + +import eu.teraflow.policy.context.model.Device; +import eu.teraflow.policy.context.model.DeviceConfig; +import eu.teraflow.policy.context.model.Empty; +import io.smallrye.mutiny.Uni; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +@ApplicationScoped +public class DeviceServiceImpl implements DeviceService { + + private final DeviceGateway deviceGateway; + + @Inject + public DeviceServiceImpl(DeviceGateway deviceGateway) { + this.deviceGateway = deviceGateway; + } + + @Override + public Uni getInitialConfiguration(String deviceId) { + + return deviceGateway.getInitialConfiguration(deviceId); + } + + @Override + public Uni configureDevice(Device device) { + + return deviceGateway.configureDevice(device); + } + + @Override + public Uni deleteDevice(String deviceId) { + return deviceGateway.deleteDevice(deviceId); + } +} diff --git a/src/policy/src/main/proto/device.proto b/src/policy/src/main/proto/device.proto new file mode 120000 index 000000000..ad6e7c47e --- /dev/null +++ b/src/policy/src/main/proto/device.proto @@ -0,0 +1 @@ +../../../../../proto/device.proto \ No newline at end of file diff --git a/src/policy/target/generated-sources/grpc/device/Device.java b/src/policy/target/generated-sources/grpc/device/Device.java new file mode 100644 index 000000000..bc57d19ca --- /dev/null +++ b/src/policy/target/generated-sources/grpc/device/Device.java @@ -0,0 +1,1031 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: device.proto + +package device; + +public final class Device { + private Device() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface MonitoringSettingsOrBuilder extends + // @@protoc_insertion_point(interface_extends:device.MonitoringSettings) + com.google.protobuf.MessageOrBuilder { + + /** + * .monitoring.KpiId kpi_id = 1; + * @return Whether the kpiId field is set. + */ + boolean hasKpiId(); + /** + * .monitoring.KpiId kpi_id = 1; + * @return The kpiId. + */ + monitoring.Monitoring.KpiId getKpiId(); + /** + * .monitoring.KpiId kpi_id = 1; + */ + monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(); + + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + * @return Whether the kpiDescriptor field is set. + */ + boolean hasKpiDescriptor(); + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + * @return The kpiDescriptor. + */ + monitoring.Monitoring.KpiDescriptor getKpiDescriptor(); + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorOrBuilder(); + + /** + * float sampling_duration_s = 3; + * @return The samplingDurationS. + */ + float getSamplingDurationS(); + + /** + * float sampling_interval_s = 4; + * @return The samplingIntervalS. + */ + float getSamplingIntervalS(); + } + /** + * Protobuf type {@code device.MonitoringSettings} + */ + public static final class MonitoringSettings extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:device.MonitoringSettings) + MonitoringSettingsOrBuilder { + private static final long serialVersionUID = 0L; + // Use MonitoringSettings.newBuilder() to construct. + private MonitoringSettings(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private MonitoringSettings() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new MonitoringSettings(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private MonitoringSettings( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + monitoring.Monitoring.KpiId.Builder subBuilder = null; + if (kpiId_ != null) { + subBuilder = kpiId_.toBuilder(); + } + kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(kpiId_); + kpiId_ = subBuilder.buildPartial(); + } + + break; + } + case 18: { + monitoring.Monitoring.KpiDescriptor.Builder subBuilder = null; + if (kpiDescriptor_ != null) { + subBuilder = kpiDescriptor_.toBuilder(); + } + kpiDescriptor_ = input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(kpiDescriptor_); + kpiDescriptor_ = subBuilder.buildPartial(); + } + + break; + } + case 29: { + + samplingDurationS_ = input.readFloat(); + break; + } + case 37: { + + samplingIntervalS_ = input.readFloat(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return device.Device.internal_static_device_MonitoringSettings_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return device.Device.internal_static_device_MonitoringSettings_fieldAccessorTable + .ensureFieldAccessorsInitialized( + device.Device.MonitoringSettings.class, device.Device.MonitoringSettings.Builder.class); + } + + public static final int KPI_ID_FIELD_NUMBER = 1; + private monitoring.Monitoring.KpiId kpiId_; + /** + * .monitoring.KpiId kpi_id = 1; + * @return Whether the kpiId field is set. + */ + @java.lang.Override + public boolean hasKpiId() { + return kpiId_ != null; + } + /** + * .monitoring.KpiId kpi_id = 1; + * @return The kpiId. + */ + @java.lang.Override + public monitoring.Monitoring.KpiId getKpiId() { + return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; + } + /** + * .monitoring.KpiId kpi_id = 1; + */ + @java.lang.Override + public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() { + return getKpiId(); + } + + public static final int KPI_DESCRIPTOR_FIELD_NUMBER = 2; + private monitoring.Monitoring.KpiDescriptor kpiDescriptor_; + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + * @return Whether the kpiDescriptor field is set. + */ + @java.lang.Override + public boolean hasKpiDescriptor() { + return kpiDescriptor_ != null; + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + * @return The kpiDescriptor. + */ + @java.lang.Override + public monitoring.Monitoring.KpiDescriptor getKpiDescriptor() { + return kpiDescriptor_ == null ? monitoring.Monitoring.KpiDescriptor.getDefaultInstance() : kpiDescriptor_; + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + @java.lang.Override + public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorOrBuilder() { + return getKpiDescriptor(); + } + + public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 3; + private float samplingDurationS_; + /** + * float sampling_duration_s = 3; + * @return The samplingDurationS. + */ + @java.lang.Override + public float getSamplingDurationS() { + return samplingDurationS_; + } + + public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 4; + private float samplingIntervalS_; + /** + * float sampling_interval_s = 4; + * @return The samplingIntervalS. + */ + @java.lang.Override + public float getSamplingIntervalS() { + return samplingIntervalS_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (kpiId_ != null) { + output.writeMessage(1, getKpiId()); + } + if (kpiDescriptor_ != null) { + output.writeMessage(2, getKpiDescriptor()); + } + if (samplingDurationS_ != 0F) { + output.writeFloat(3, samplingDurationS_); + } + if (samplingIntervalS_ != 0F) { + output.writeFloat(4, samplingIntervalS_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (kpiId_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getKpiId()); + } + if (kpiDescriptor_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getKpiDescriptor()); + } + if (samplingDurationS_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(3, samplingDurationS_); + } + if (samplingIntervalS_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(4, samplingIntervalS_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof device.Device.MonitoringSettings)) { + return super.equals(obj); + } + device.Device.MonitoringSettings other = (device.Device.MonitoringSettings) obj; + + if (hasKpiId() != other.hasKpiId()) return false; + if (hasKpiId()) { + if (!getKpiId() + .equals(other.getKpiId())) return false; + } + if (hasKpiDescriptor() != other.hasKpiDescriptor()) return false; + if (hasKpiDescriptor()) { + if (!getKpiDescriptor() + .equals(other.getKpiDescriptor())) return false; + } + if (java.lang.Float.floatToIntBits(getSamplingDurationS()) + != java.lang.Float.floatToIntBits( + other.getSamplingDurationS())) return false; + if (java.lang.Float.floatToIntBits(getSamplingIntervalS()) + != java.lang.Float.floatToIntBits( + other.getSamplingIntervalS())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasKpiId()) { + hash = (37 * hash) + KPI_ID_FIELD_NUMBER; + hash = (53 * hash) + getKpiId().hashCode(); + } + if (hasKpiDescriptor()) { + hash = (37 * hash) + KPI_DESCRIPTOR_FIELD_NUMBER; + hash = (53 * hash) + getKpiDescriptor().hashCode(); + } + hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getSamplingDurationS()); + hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getSamplingIntervalS()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static device.Device.MonitoringSettings parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static device.Device.MonitoringSettings parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static device.Device.MonitoringSettings parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static device.Device.MonitoringSettings parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static device.Device.MonitoringSettings parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static device.Device.MonitoringSettings parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static device.Device.MonitoringSettings parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static device.Device.MonitoringSettings parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static device.Device.MonitoringSettings parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static device.Device.MonitoringSettings parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static device.Device.MonitoringSettings parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static device.Device.MonitoringSettings parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(device.Device.MonitoringSettings prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code device.MonitoringSettings} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:device.MonitoringSettings) + device.Device.MonitoringSettingsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return device.Device.internal_static_device_MonitoringSettings_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return device.Device.internal_static_device_MonitoringSettings_fieldAccessorTable + .ensureFieldAccessorsInitialized( + device.Device.MonitoringSettings.class, device.Device.MonitoringSettings.Builder.class); + } + + // Construct using device.Device.MonitoringSettings.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (kpiIdBuilder_ == null) { + kpiId_ = null; + } else { + kpiId_ = null; + kpiIdBuilder_ = null; + } + if (kpiDescriptorBuilder_ == null) { + kpiDescriptor_ = null; + } else { + kpiDescriptor_ = null; + kpiDescriptorBuilder_ = null; + } + samplingDurationS_ = 0F; + + samplingIntervalS_ = 0F; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return device.Device.internal_static_device_MonitoringSettings_descriptor; + } + + @java.lang.Override + public device.Device.MonitoringSettings getDefaultInstanceForType() { + return device.Device.MonitoringSettings.getDefaultInstance(); + } + + @java.lang.Override + public device.Device.MonitoringSettings build() { + device.Device.MonitoringSettings result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public device.Device.MonitoringSettings buildPartial() { + device.Device.MonitoringSettings result = new device.Device.MonitoringSettings(this); + if (kpiIdBuilder_ == null) { + result.kpiId_ = kpiId_; + } else { + result.kpiId_ = kpiIdBuilder_.build(); + } + if (kpiDescriptorBuilder_ == null) { + result.kpiDescriptor_ = kpiDescriptor_; + } else { + result.kpiDescriptor_ = kpiDescriptorBuilder_.build(); + } + result.samplingDurationS_ = samplingDurationS_; + result.samplingIntervalS_ = samplingIntervalS_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof device.Device.MonitoringSettings) { + return mergeFrom((device.Device.MonitoringSettings)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(device.Device.MonitoringSettings other) { + if (other == device.Device.MonitoringSettings.getDefaultInstance()) return this; + if (other.hasKpiId()) { + mergeKpiId(other.getKpiId()); + } + if (other.hasKpiDescriptor()) { + mergeKpiDescriptor(other.getKpiDescriptor()); + } + if (other.getSamplingDurationS() != 0F) { + setSamplingDurationS(other.getSamplingDurationS()); + } + if (other.getSamplingIntervalS() != 0F) { + setSamplingIntervalS(other.getSamplingIntervalS()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + device.Device.MonitoringSettings parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (device.Device.MonitoringSettings) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private monitoring.Monitoring.KpiId kpiId_; + private com.google.protobuf.SingleFieldBuilderV3< + monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_; + /** + * .monitoring.KpiId kpi_id = 1; + * @return Whether the kpiId field is set. + */ + public boolean hasKpiId() { + return kpiIdBuilder_ != null || kpiId_ != null; + } + /** + * .monitoring.KpiId kpi_id = 1; + * @return The kpiId. + */ + public monitoring.Monitoring.KpiId getKpiId() { + if (kpiIdBuilder_ == null) { + return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; + } else { + return kpiIdBuilder_.getMessage(); + } + } + /** + * .monitoring.KpiId kpi_id = 1; + */ + public Builder setKpiId(monitoring.Monitoring.KpiId value) { + if (kpiIdBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + kpiId_ = value; + onChanged(); + } else { + kpiIdBuilder_.setMessage(value); + } + + return this; + } + /** + * .monitoring.KpiId kpi_id = 1; + */ + public Builder setKpiId( + monitoring.Monitoring.KpiId.Builder builderForValue) { + if (kpiIdBuilder_ == null) { + kpiId_ = builderForValue.build(); + onChanged(); + } else { + kpiIdBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .monitoring.KpiId kpi_id = 1; + */ + public Builder mergeKpiId(monitoring.Monitoring.KpiId value) { + if (kpiIdBuilder_ == null) { + if (kpiId_ != null) { + kpiId_ = + monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial(); + } else { + kpiId_ = value; + } + onChanged(); + } else { + kpiIdBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .monitoring.KpiId kpi_id = 1; + */ + public Builder clearKpiId() { + if (kpiIdBuilder_ == null) { + kpiId_ = null; + onChanged(); + } else { + kpiId_ = null; + kpiIdBuilder_ = null; + } + + return this; + } + /** + * .monitoring.KpiId kpi_id = 1; + */ + public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() { + + onChanged(); + return getKpiIdFieldBuilder().getBuilder(); + } + /** + * .monitoring.KpiId kpi_id = 1; + */ + public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() { + if (kpiIdBuilder_ != null) { + return kpiIdBuilder_.getMessageOrBuilder(); + } else { + return kpiId_ == null ? + monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_; + } + } + /** + * .monitoring.KpiId kpi_id = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> + getKpiIdFieldBuilder() { + if (kpiIdBuilder_ == null) { + kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>( + getKpiId(), + getParentForChildren(), + isClean()); + kpiId_ = null; + } + return kpiIdBuilder_; + } + + private monitoring.Monitoring.KpiDescriptor kpiDescriptor_; + private com.google.protobuf.SingleFieldBuilderV3< + monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorBuilder_; + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + * @return Whether the kpiDescriptor field is set. + */ + public boolean hasKpiDescriptor() { + return kpiDescriptorBuilder_ != null || kpiDescriptor_ != null; + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + * @return The kpiDescriptor. + */ + public monitoring.Monitoring.KpiDescriptor getKpiDescriptor() { + if (kpiDescriptorBuilder_ == null) { + return kpiDescriptor_ == null ? monitoring.Monitoring.KpiDescriptor.getDefaultInstance() : kpiDescriptor_; + } else { + return kpiDescriptorBuilder_.getMessage(); + } + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + public Builder setKpiDescriptor(monitoring.Monitoring.KpiDescriptor value) { + if (kpiDescriptorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + kpiDescriptor_ = value; + onChanged(); + } else { + kpiDescriptorBuilder_.setMessage(value); + } + + return this; + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + public Builder setKpiDescriptor( + monitoring.Monitoring.KpiDescriptor.Builder builderForValue) { + if (kpiDescriptorBuilder_ == null) { + kpiDescriptor_ = builderForValue.build(); + onChanged(); + } else { + kpiDescriptorBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + public Builder mergeKpiDescriptor(monitoring.Monitoring.KpiDescriptor value) { + if (kpiDescriptorBuilder_ == null) { + if (kpiDescriptor_ != null) { + kpiDescriptor_ = + monitoring.Monitoring.KpiDescriptor.newBuilder(kpiDescriptor_).mergeFrom(value).buildPartial(); + } else { + kpiDescriptor_ = value; + } + onChanged(); + } else { + kpiDescriptorBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + public Builder clearKpiDescriptor() { + if (kpiDescriptorBuilder_ == null) { + kpiDescriptor_ = null; + onChanged(); + } else { + kpiDescriptor_ = null; + kpiDescriptorBuilder_ = null; + } + + return this; + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorBuilder() { + + onChanged(); + return getKpiDescriptorFieldBuilder().getBuilder(); + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorOrBuilder() { + if (kpiDescriptorBuilder_ != null) { + return kpiDescriptorBuilder_.getMessageOrBuilder(); + } else { + return kpiDescriptor_ == null ? + monitoring.Monitoring.KpiDescriptor.getDefaultInstance() : kpiDescriptor_; + } + } + /** + * .monitoring.KpiDescriptor kpi_descriptor = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> + getKpiDescriptorFieldBuilder() { + if (kpiDescriptorBuilder_ == null) { + kpiDescriptorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder>( + getKpiDescriptor(), + getParentForChildren(), + isClean()); + kpiDescriptor_ = null; + } + return kpiDescriptorBuilder_; + } + + private float samplingDurationS_ ; + /** + * float sampling_duration_s = 3; + * @return The samplingDurationS. + */ + @java.lang.Override + public float getSamplingDurationS() { + return samplingDurationS_; + } + /** + * float sampling_duration_s = 3; + * @param value The samplingDurationS to set. + * @return This builder for chaining. + */ + public Builder setSamplingDurationS(float value) { + + samplingDurationS_ = value; + onChanged(); + return this; + } + /** + * float sampling_duration_s = 3; + * @return This builder for chaining. + */ + public Builder clearSamplingDurationS() { + + samplingDurationS_ = 0F; + onChanged(); + return this; + } + + private float samplingIntervalS_ ; + /** + * float sampling_interval_s = 4; + * @return The samplingIntervalS. + */ + @java.lang.Override + public float getSamplingIntervalS() { + return samplingIntervalS_; + } + /** + * float sampling_interval_s = 4; + * @param value The samplingIntervalS to set. + * @return This builder for chaining. + */ + public Builder setSamplingIntervalS(float value) { + + samplingIntervalS_ = value; + onChanged(); + return this; + } + /** + * float sampling_interval_s = 4; + * @return This builder for chaining. + */ + public Builder clearSamplingIntervalS() { + + samplingIntervalS_ = 0F; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:device.MonitoringSettings) + } + + // @@protoc_insertion_point(class_scope:device.MonitoringSettings) + private static final device.Device.MonitoringSettings DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new device.Device.MonitoringSettings(); + } + + public static device.Device.MonitoringSettings getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public MonitoringSettings parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new MonitoringSettings(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public device.Device.MonitoringSettings getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_device_MonitoringSettings_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_device_MonitoringSettings_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\014device.proto\022\006device\032\rcontext.proto\032\020m" + + "onitoring.proto\"\244\001\n\022MonitoringSettings\022!" + + "\n\006kpi_id\030\001 \001(\0132\021.monitoring.KpiId\0221\n\016kpi" + + "_descriptor\030\002 \001(\0132\031.monitoring.KpiDescri" + + "ptor\022\033\n\023sampling_duration_s\030\003 \001(\002\022\033\n\023sam" + + "pling_interval_s\030\004 \001(\0022\262\002\n\rDeviceService" + + "\0221\n\tAddDevice\022\017.context.Device\032\021.context" + + ".DeviceId\"\000\0227\n\017ConfigureDevice\022\017.context" + + ".Device\032\021.context.DeviceId\"\000\0223\n\014DeleteDe" + + "vice\022\021.context.DeviceId\032\016.context.Empty\"" + + "\000\022>\n\020GetInitialConfig\022\021.context.DeviceId" + + "\032\025.context.DeviceConfig\"\000\022@\n\020MonitorDevi" + + "ceKpi\022\032.device.MonitoringSettings\032\016.cont" + + "ext.Empty\"\000b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + context.ContextOuterClass.getDescriptor(), + monitoring.Monitoring.getDescriptor(), + }); + internal_static_device_MonitoringSettings_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_device_MonitoringSettings_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_device_MonitoringSettings_descriptor, + new java.lang.String[] { "KpiId", "KpiDescriptor", "SamplingDurationS", "SamplingIntervalS", }); + context.ContextOuterClass.getDescriptor(); + monitoring.Monitoring.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/src/policy/target/generated-sources/grpc/device/DeviceService.java b/src/policy/target/generated-sources/grpc/device/DeviceService.java new file mode 100644 index 000000000..1768f9911 --- /dev/null +++ b/src/policy/target/generated-sources/grpc/device/DeviceService.java @@ -0,0 +1,24 @@ +package device; + +import io.quarkus.grpc.runtime.MutinyService; + +@javax.annotation.Generated( +value = "by Mutiny Grpc generator", +comments = "Source: device.proto") +public interface DeviceService extends MutinyService { + + + io.smallrye.mutiny.Uni addDevice(context.ContextOuterClass.Device request); + + io.smallrye.mutiny.Uni configureDevice(context.ContextOuterClass.Device request); + + io.smallrye.mutiny.Uni deleteDevice(context.ContextOuterClass.DeviceId request); + + io.smallrye.mutiny.Uni getInitialConfig(context.ContextOuterClass.DeviceId request); + + io.smallrye.mutiny.Uni monitorDeviceKpi(device.Device.MonitoringSettings request); + + + + +} \ No newline at end of file diff --git a/src/policy/target/generated-sources/grpc/device/DeviceServiceBean.java b/src/policy/target/generated-sources/grpc/device/DeviceServiceBean.java new file mode 100644 index 000000000..c7e767237 --- /dev/null +++ b/src/policy/target/generated-sources/grpc/device/DeviceServiceBean.java @@ -0,0 +1,59 @@ +package device; + +import io.grpc.BindableService; +import io.quarkus.grpc.GrpcService; +import io.quarkus.grpc.runtime.MutinyBean; + +@javax.annotation.Generated( +value = "by Mutiny Grpc generator", +comments = "Source: device.proto") +public class DeviceServiceBean extends MutinyDeviceServiceGrpc.DeviceServiceImplBase implements BindableService, MutinyBean { + + private final DeviceService delegate; + + DeviceServiceBean(@GrpcService DeviceService delegate) { + this.delegate = delegate; + } + + @Override + public io.smallrye.mutiny.Uni addDevice(context.ContextOuterClass.Device request) { + try { + return delegate.addDevice(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + @Override + public io.smallrye.mutiny.Uni configureDevice(context.ContextOuterClass.Device request) { + try { + return delegate.configureDevice(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + @Override + public io.smallrye.mutiny.Uni deleteDevice(context.ContextOuterClass.DeviceId request) { + try { + return delegate.deleteDevice(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + @Override + public io.smallrye.mutiny.Uni getInitialConfig(context.ContextOuterClass.DeviceId request) { + try { + return delegate.getInitialConfig(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + @Override + public io.smallrye.mutiny.Uni monitorDeviceKpi(device.Device.MonitoringSettings request) { + try { + return delegate.monitorDeviceKpi(request); + } catch (UnsupportedOperationException e) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + } + +} \ No newline at end of file diff --git a/src/policy/target/generated-sources/grpc/device/DeviceServiceClient.java b/src/policy/target/generated-sources/grpc/device/DeviceServiceClient.java new file mode 100644 index 000000000..2445752a6 --- /dev/null +++ b/src/policy/target/generated-sources/grpc/device/DeviceServiceClient.java @@ -0,0 +1,44 @@ +package device; + +import java.util.function.BiFunction; + +import io.quarkus.grpc.runtime.MutinyClient; + +@javax.annotation.Generated( +value = "by Mutiny Grpc generator", +comments = "Source: device.proto") +public class DeviceServiceClient implements DeviceService, MutinyClient { + + private final MutinyDeviceServiceGrpc.MutinyDeviceServiceStub stub; + + public DeviceServiceClient(String name, io.grpc.Channel channel, BiFunction stubConfigurator) { + this.stub = stubConfigurator.apply(name,MutinyDeviceServiceGrpc.newMutinyStub(channel)); + } + + @Override + public MutinyDeviceServiceGrpc.MutinyDeviceServiceStub getStub() { + return stub; + } + + @Override + public io.smallrye.mutiny.Uni addDevice(context.ContextOuterClass.Device request) { + return stub.addDevice(request); + } + @Override + public io.smallrye.mutiny.Uni configureDevice(context.ContextOuterClass.Device request) { + return stub.configureDevice(request); + } + @Override + public io.smallrye.mutiny.Uni deleteDevice(context.ContextOuterClass.DeviceId request) { + return stub.deleteDevice(request); + } + @Override + public io.smallrye.mutiny.Uni getInitialConfig(context.ContextOuterClass.DeviceId request) { + return stub.getInitialConfig(request); + } + @Override + public io.smallrye.mutiny.Uni monitorDeviceKpi(device.Device.MonitoringSettings request) { + return stub.monitorDeviceKpi(request); + } + +} \ No newline at end of file diff --git a/src/policy/target/generated-sources/grpc/device/DeviceServiceGrpc.java b/src/policy/target/generated-sources/grpc/device/DeviceServiceGrpc.java new file mode 100644 index 000000000..9c2e379d3 --- /dev/null +++ b/src/policy/target/generated-sources/grpc/device/DeviceServiceGrpc.java @@ -0,0 +1,571 @@ +package device; + +import static io.grpc.MethodDescriptor.generateFullMethodName; + +/** + */ +@javax.annotation.Generated( + value = "by gRPC proto compiler (version 1.38.1)", + comments = "Source: device.proto") +public final class DeviceServiceGrpc { + + private DeviceServiceGrpc() {} + + public static final String SERVICE_NAME = "device.DeviceService"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor getAddDeviceMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "AddDevice", + requestType = context.ContextOuterClass.Device.class, + responseType = context.ContextOuterClass.DeviceId.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getAddDeviceMethod() { + io.grpc.MethodDescriptor getAddDeviceMethod; + if ((getAddDeviceMethod = DeviceServiceGrpc.getAddDeviceMethod) == null) { + synchronized (DeviceServiceGrpc.class) { + if ((getAddDeviceMethod = DeviceServiceGrpc.getAddDeviceMethod) == null) { + DeviceServiceGrpc.getAddDeviceMethod = getAddDeviceMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "AddDevice")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.Device.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.DeviceId.getDefaultInstance())) + .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("AddDevice")) + .build(); + } + } + } + return getAddDeviceMethod; + } + + private static volatile io.grpc.MethodDescriptor getConfigureDeviceMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ConfigureDevice", + requestType = context.ContextOuterClass.Device.class, + responseType = context.ContextOuterClass.DeviceId.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getConfigureDeviceMethod() { + io.grpc.MethodDescriptor getConfigureDeviceMethod; + if ((getConfigureDeviceMethod = DeviceServiceGrpc.getConfigureDeviceMethod) == null) { + synchronized (DeviceServiceGrpc.class) { + if ((getConfigureDeviceMethod = DeviceServiceGrpc.getConfigureDeviceMethod) == null) { + DeviceServiceGrpc.getConfigureDeviceMethod = getConfigureDeviceMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ConfigureDevice")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.Device.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.DeviceId.getDefaultInstance())) + .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("ConfigureDevice")) + .build(); + } + } + } + return getConfigureDeviceMethod; + } + + private static volatile io.grpc.MethodDescriptor getDeleteDeviceMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "DeleteDevice", + requestType = context.ContextOuterClass.DeviceId.class, + responseType = context.ContextOuterClass.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getDeleteDeviceMethod() { + io.grpc.MethodDescriptor getDeleteDeviceMethod; + if ((getDeleteDeviceMethod = DeviceServiceGrpc.getDeleteDeviceMethod) == null) { + synchronized (DeviceServiceGrpc.class) { + if ((getDeleteDeviceMethod = DeviceServiceGrpc.getDeleteDeviceMethod) == null) { + DeviceServiceGrpc.getDeleteDeviceMethod = getDeleteDeviceMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteDevice")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.DeviceId.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.Empty.getDefaultInstance())) + .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("DeleteDevice")) + .build(); + } + } + } + return getDeleteDeviceMethod; + } + + private static volatile io.grpc.MethodDescriptor getGetInitialConfigMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "GetInitialConfig", + requestType = context.ContextOuterClass.DeviceId.class, + responseType = context.ContextOuterClass.DeviceConfig.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getGetInitialConfigMethod() { + io.grpc.MethodDescriptor getGetInitialConfigMethod; + if ((getGetInitialConfigMethod = DeviceServiceGrpc.getGetInitialConfigMethod) == null) { + synchronized (DeviceServiceGrpc.class) { + if ((getGetInitialConfigMethod = DeviceServiceGrpc.getGetInitialConfigMethod) == null) { + DeviceServiceGrpc.getGetInitialConfigMethod = getGetInitialConfigMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetInitialConfig")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.DeviceId.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.DeviceConfig.getDefaultInstance())) + .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("GetInitialConfig")) + .build(); + } + } + } + return getGetInitialConfigMethod; + } + + private static volatile io.grpc.MethodDescriptor getMonitorDeviceKpiMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "MonitorDeviceKpi", + requestType = device.Device.MonitoringSettings.class, + responseType = context.ContextOuterClass.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getMonitorDeviceKpiMethod() { + io.grpc.MethodDescriptor getMonitorDeviceKpiMethod; + if ((getMonitorDeviceKpiMethod = DeviceServiceGrpc.getMonitorDeviceKpiMethod) == null) { + synchronized (DeviceServiceGrpc.class) { + if ((getMonitorDeviceKpiMethod = DeviceServiceGrpc.getMonitorDeviceKpiMethod) == null) { + DeviceServiceGrpc.getMonitorDeviceKpiMethod = getMonitorDeviceKpiMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "MonitorDeviceKpi")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + device.Device.MonitoringSettings.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + context.ContextOuterClass.Empty.getDefaultInstance())) + .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("MonitorDeviceKpi")) + .build(); + } + } + } + return getMonitorDeviceKpiMethod; + } + + /** + * Creates a new async stub that supports all call types for the service + */ + public static DeviceServiceStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DeviceServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DeviceServiceStub(channel, callOptions); + } + }; + return DeviceServiceStub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static DeviceServiceBlockingStub newBlockingStub( + io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DeviceServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DeviceServiceBlockingStub(channel, callOptions); + } + }; + return DeviceServiceBlockingStub.newStub(factory, channel); + } + + /** + * Creates a new ListenableFuture-style stub that supports unary calls on the service + */ + public static DeviceServiceFutureStub newFutureStub( + io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DeviceServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DeviceServiceFutureStub(channel, callOptions); + } + }; + return DeviceServiceFutureStub.newStub(factory, channel); + } + + /** + */ + public static abstract class DeviceServiceImplBase implements io.grpc.BindableService { + + /** + */ + public void addDevice(context.ContextOuterClass.Device request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getAddDeviceMethod(), responseObserver); + } + + /** + */ + public void configureDevice(context.ContextOuterClass.Device request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getConfigureDeviceMethod(), responseObserver); + } + + /** + */ + public void deleteDevice(context.ContextOuterClass.DeviceId request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteDeviceMethod(), responseObserver); + } + + /** + */ + public void getInitialConfig(context.ContextOuterClass.DeviceId request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInitialConfigMethod(), responseObserver); + } + + /** + */ + public void monitorDeviceKpi(device.Device.MonitoringSettings request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getMonitorDeviceKpiMethod(), responseObserver); + } + + @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getAddDeviceMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Device, + context.ContextOuterClass.DeviceId>( + this, METHODID_ADD_DEVICE))) + .addMethod( + getConfigureDeviceMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Device, + context.ContextOuterClass.DeviceId>( + this, METHODID_CONFIGURE_DEVICE))) + .addMethod( + getDeleteDeviceMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.DeviceId, + context.ContextOuterClass.Empty>( + this, METHODID_DELETE_DEVICE))) + .addMethod( + getGetInitialConfigMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.DeviceId, + context.ContextOuterClass.DeviceConfig>( + this, METHODID_GET_INITIAL_CONFIG))) + .addMethod( + getMonitorDeviceKpiMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + device.Device.MonitoringSettings, + context.ContextOuterClass.Empty>( + this, METHODID_MONITOR_DEVICE_KPI))) + .build(); + } + } + + /** + */ + public static final class DeviceServiceStub extends io.grpc.stub.AbstractAsyncStub { + private DeviceServiceStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DeviceServiceStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DeviceServiceStub(channel, callOptions); + } + + /** + */ + public void addDevice(context.ContextOuterClass.Device request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getAddDeviceMethod(), getCallOptions()), request, responseObserver); + } + + /** + */ + public void configureDevice(context.ContextOuterClass.Device request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getConfigureDeviceMethod(), getCallOptions()), request, responseObserver); + } + + /** + */ + public void deleteDevice(context.ContextOuterClass.DeviceId request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getDeleteDeviceMethod(), getCallOptions()), request, responseObserver); + } + + /** + */ + public void getInitialConfig(context.ContextOuterClass.DeviceId request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getGetInitialConfigMethod(), getCallOptions()), request, responseObserver); + } + + /** + */ + public void monitorDeviceKpi(device.Device.MonitoringSettings request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getMonitorDeviceKpiMethod(), getCallOptions()), request, responseObserver); + } + } + + /** + */ + public static final class DeviceServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub { + private DeviceServiceBlockingStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DeviceServiceBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DeviceServiceBlockingStub(channel, callOptions); + } + + /** + */ + public context.ContextOuterClass.DeviceId addDevice(context.ContextOuterClass.Device request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getAddDeviceMethod(), getCallOptions(), request); + } + + /** + */ + public context.ContextOuterClass.DeviceId configureDevice(context.ContextOuterClass.Device request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getConfigureDeviceMethod(), getCallOptions(), request); + } + + /** + */ + public context.ContextOuterClass.Empty deleteDevice(context.ContextOuterClass.DeviceId request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteDeviceMethod(), getCallOptions(), request); + } + + /** + */ + public context.ContextOuterClass.DeviceConfig getInitialConfig(context.ContextOuterClass.DeviceId request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetInitialConfigMethod(), getCallOptions(), request); + } + + /** + */ + public context.ContextOuterClass.Empty monitorDeviceKpi(device.Device.MonitoringSettings request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getMonitorDeviceKpiMethod(), getCallOptions(), request); + } + } + + /** + */ + public static final class DeviceServiceFutureStub extends io.grpc.stub.AbstractFutureStub { + private DeviceServiceFutureStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DeviceServiceFutureStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DeviceServiceFutureStub(channel, callOptions); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture addDevice( + context.ContextOuterClass.Device request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getAddDeviceMethod(), getCallOptions()), request); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture configureDevice( + context.ContextOuterClass.Device request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getConfigureDeviceMethod(), getCallOptions()), request); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture deleteDevice( + context.ContextOuterClass.DeviceId request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getDeleteDeviceMethod(), getCallOptions()), request); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture getInitialConfig( + context.ContextOuterClass.DeviceId request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getGetInitialConfigMethod(), getCallOptions()), request); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture monitorDeviceKpi( + device.Device.MonitoringSettings request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getMonitorDeviceKpiMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_ADD_DEVICE = 0; + private static final int METHODID_CONFIGURE_DEVICE = 1; + private static final int METHODID_DELETE_DEVICE = 2; + private static final int METHODID_GET_INITIAL_CONFIG = 3; + private static final int METHODID_MONITOR_DEVICE_KPI = 4; + + private static final class MethodHandlers implements + io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final DeviceServiceImplBase serviceImpl; + private final int methodId; + + MethodHandlers(DeviceServiceImplBase serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_ADD_DEVICE: + serviceImpl.addDevice((context.ContextOuterClass.Device) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_CONFIGURE_DEVICE: + serviceImpl.configureDevice((context.ContextOuterClass.Device) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_DELETE_DEVICE: + serviceImpl.deleteDevice((context.ContextOuterClass.DeviceId) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_GET_INITIAL_CONFIG: + serviceImpl.getInitialConfig((context.ContextOuterClass.DeviceId) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_MONITOR_DEVICE_KPI: + serviceImpl.monitorDeviceKpi((device.Device.MonitoringSettings) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + default: + throw new AssertionError(); + } + } + } + + private static abstract class DeviceServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier { + DeviceServiceBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return device.Device.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("DeviceService"); + } + } + + private static final class DeviceServiceFileDescriptorSupplier + extends DeviceServiceBaseDescriptorSupplier { + DeviceServiceFileDescriptorSupplier() {} + } + + private static final class DeviceServiceMethodDescriptorSupplier + extends DeviceServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final String methodName; + + DeviceServiceMethodDescriptorSupplier(String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (DeviceServiceGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new DeviceServiceFileDescriptorSupplier()) + .addMethod(getAddDeviceMethod()) + .addMethod(getConfigureDeviceMethod()) + .addMethod(getDeleteDeviceMethod()) + .addMethod(getGetInitialConfigMethod()) + .addMethod(getMonitorDeviceKpiMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/src/policy/target/generated-sources/grpc/device/MutinyDeviceServiceGrpc.java b/src/policy/target/generated-sources/grpc/device/MutinyDeviceServiceGrpc.java new file mode 100644 index 000000000..096784b5a --- /dev/null +++ b/src/policy/target/generated-sources/grpc/device/MutinyDeviceServiceGrpc.java @@ -0,0 +1,216 @@ +package device; + +import static device.DeviceServiceGrpc.getServiceDescriptor; +import static io.grpc.stub.ServerCalls.asyncUnaryCall; +import static io.grpc.stub.ServerCalls.asyncServerStreamingCall; +import static io.grpc.stub.ServerCalls.asyncClientStreamingCall; +import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall; + +@javax.annotation.Generated( +value = "by Mutiny Grpc generator", +comments = "Source: device.proto") +public final class MutinyDeviceServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc { + private MutinyDeviceServiceGrpc() {} + + public static MutinyDeviceServiceStub newMutinyStub(io.grpc.Channel channel) { + return new MutinyDeviceServiceStub(channel); + } + + + public static final class MutinyDeviceServiceStub extends io.grpc.stub.AbstractStub implements io.quarkus.grpc.runtime.MutinyStub { + private DeviceServiceGrpc.DeviceServiceStub delegateStub; + + private MutinyDeviceServiceStub(io.grpc.Channel channel) { + super(channel); + delegateStub = DeviceServiceGrpc.newStub(channel); + } + + private MutinyDeviceServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + delegateStub = DeviceServiceGrpc.newStub(channel).build(channel, callOptions); + } + + @Override + protected MutinyDeviceServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new MutinyDeviceServiceStub(channel, callOptions); + } + + + public io.smallrye.mutiny.Uni addDevice(context.ContextOuterClass.Device request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::addDevice); + } + + + public io.smallrye.mutiny.Uni configureDevice(context.ContextOuterClass.Device request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::configureDevice); + } + + + public io.smallrye.mutiny.Uni deleteDevice(context.ContextOuterClass.DeviceId request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteDevice); + } + + + public io.smallrye.mutiny.Uni getInitialConfig(context.ContextOuterClass.DeviceId request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getInitialConfig); + } + + + public io.smallrye.mutiny.Uni monitorDeviceKpi(device.Device.MonitoringSettings request) { + return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::monitorDeviceKpi); + } + + } + + + public static abstract class DeviceServiceImplBase implements io.grpc.BindableService { + + private String compression; + /** + * Set whether the server will try to use a compressed response. + * + * @param compression the compression, e.g {@code gzip} + */ + public DeviceServiceImplBase withCompression(String compression) { + this.compression = compression; + return this; + } + + + + public io.smallrye.mutiny.Uni addDevice(context.ContextOuterClass.Device request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + + public io.smallrye.mutiny.Uni configureDevice(context.ContextOuterClass.Device request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + + public io.smallrye.mutiny.Uni deleteDevice(context.ContextOuterClass.DeviceId request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + + public io.smallrye.mutiny.Uni getInitialConfig(context.ContextOuterClass.DeviceId request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + + public io.smallrye.mutiny.Uni monitorDeviceKpi(device.Device.MonitoringSettings request) { + throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED); + } + + @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + device.DeviceServiceGrpc.getAddDeviceMethod(), + asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Device, + context.ContextOuterClass.DeviceId>( + this, METHODID_ADD_DEVICE, compression))) + .addMethod( + device.DeviceServiceGrpc.getConfigureDeviceMethod(), + asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.Device, + context.ContextOuterClass.DeviceId>( + this, METHODID_CONFIGURE_DEVICE, compression))) + .addMethod( + device.DeviceServiceGrpc.getDeleteDeviceMethod(), + asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.DeviceId, + context.ContextOuterClass.Empty>( + this, METHODID_DELETE_DEVICE, compression))) + .addMethod( + device.DeviceServiceGrpc.getGetInitialConfigMethod(), + asyncUnaryCall( + new MethodHandlers< + context.ContextOuterClass.DeviceId, + context.ContextOuterClass.DeviceConfig>( + this, METHODID_GET_INITIAL_CONFIG, compression))) + .addMethod( + device.DeviceServiceGrpc.getMonitorDeviceKpiMethod(), + asyncUnaryCall( + new MethodHandlers< + device.Device.MonitoringSettings, + context.ContextOuterClass.Empty>( + this, METHODID_MONITOR_DEVICE_KPI, compression))) + .build(); + } + } + + private static final int METHODID_ADD_DEVICE = 0; + private static final int METHODID_CONFIGURE_DEVICE = 1; + private static final int METHODID_DELETE_DEVICE = 2; + private static final int METHODID_GET_INITIAL_CONFIG = 3; + private static final int METHODID_MONITOR_DEVICE_KPI = 4; + + private static final class MethodHandlers implements + io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final DeviceServiceImplBase serviceImpl; + private final int methodId; + private final String compression; + + MethodHandlers(DeviceServiceImplBase serviceImpl, int methodId, String compression) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + this.compression = compression; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_ADD_DEVICE: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Device) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::addDevice); + break; + case METHODID_CONFIGURE_DEVICE: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Device) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::configureDevice); + break; + case METHODID_DELETE_DEVICE: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::deleteDevice); + break; + case METHODID_GET_INITIAL_CONFIG: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::getInitialConfig); + break; + case METHODID_MONITOR_DEVICE_KPI: + io.quarkus.grpc.runtime.ServerCalls.oneToOne((device.Device.MonitoringSettings) request, + (io.grpc.stub.StreamObserver) responseObserver, + compression, + serviceImpl::monitorDeviceKpi); + break; + default: + throw new java.lang.AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke(io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + default: + throw new java.lang.AssertionError(); + } + } + } + +} \ No newline at end of file -- GitLab From 83742615074896c91e47fecf6b56e2e08ce336dc Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Mon, 26 Sep 2022 17:35:07 +0300 Subject: [PATCH 07/34] Final changes --- .../eu/teraflow/policy/PolicyServiceImpl.java | 38 +++++++++++++------ .../policy/monitoring/MonitoringGateway.java | 3 ++ .../monitoring/MonitoringGatewayImpl.java | 11 ++++++ .../policy/monitoring/MonitoringService.java | 3 ++ .../monitoring/MonitoringServiceImpl.java | 6 +++ 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index 77656b293..40095b4dd 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -40,6 +40,7 @@ import eu.teraflow.policy.monitoring.model.KpiValueRange; import eu.teraflow.policy.service.ServiceService; import io.smallrye.mutiny.Multi; import io.smallrye.mutiny.Uni; +import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -48,6 +49,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import org.jboss.logging.Logger; @@ -109,18 +111,30 @@ public class PolicyServiceImpl implements PolicyService { List> alarmResponseStreamList = new ArrayList<>(); for (AlarmSubscription alarmSubscription : alarmSubscriptionList) { - monitoringService - .getAlarmResponseStream(alarmSubscription) - .subscribe() - .with( - alarmResponse -> { - LOGGER.info(alarmResponse); - alarmResponse.getAlarmId(); - alarmResponse.getText(); - alarmResponse.getKpiValue(); - - activatePhase(alarmResponse.getAlarmId()); - }); + alarmResponseStreamList.add(monitoringService.getAlarmResponseStream(alarmSubscription)); + } + Multi multi = Multi.createBy().merging().streams(alarmResponseStreamList); + + multi + .select() + .first() + .subscribe() + .with( + alarmResponse -> { + LOGGER.info(alarmResponse); + activatePhase(alarmResponse.getAlarmId()); + }); + + Long count = multi.collect().with(Collectors.counting()).await().atMost(Duration.ofMinutes(5)); + if (count > 3) { + for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) { + monitoringService + .deleteAlarm(alarmDescriptor.getAlarmId()) + .subscribe() + .with( + emptyMessage -> + LOGGER.infof("Alarm [%s] has been deleted.\n", alarmDescriptor.getAlarmId())); + } } } diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java index 925c22aa6..43cfefc1e 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java @@ -16,6 +16,7 @@ package eu.teraflow.policy.monitoring; +import eu.teraflow.policy.context.model.Empty; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; import eu.teraflow.policy.monitoring.model.AlarmResponse; import eu.teraflow.policy.monitoring.model.AlarmSubscription; @@ -41,4 +42,6 @@ public interface MonitoringGateway { Uni getAlarmDescriptor(String alarmId); Multi getAlarmResponseStream(AlarmSubscription alarmSubscription); + + Uni deleteAlarm(String deviceId); } diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java index e500b78c5..82ddd4251 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java @@ -17,6 +17,7 @@ package eu.teraflow.policy.monitoring; import eu.teraflow.policy.Serializer; +import eu.teraflow.policy.context.model.Empty; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; import eu.teraflow.policy.monitoring.model.AlarmResponse; import eu.teraflow.policy.monitoring.model.AlarmSubscription; @@ -113,4 +114,14 @@ public class MonitoringGatewayImpl implements MonitoringGateway { .onItem() .transform(serializer::deserialize); } + + @Override + public Uni deleteAlarm(String alarmId) { + final var serializedAlarmId = serializer.serializeAlarmId(alarmId); + + return streamingDelegateMonitoring + .deleteAlarm(serializedAlarmId) + .onItem() + .transform(serializer::deserializeEmpty); + } } diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java index 5022833ce..5417b429c 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java @@ -16,6 +16,7 @@ package eu.teraflow.policy.monitoring; +import eu.teraflow.policy.context.model.Empty; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; import eu.teraflow.policy.monitoring.model.AlarmResponse; import eu.teraflow.policy.monitoring.model.AlarmSubscription; @@ -41,4 +42,6 @@ public interface MonitoringService { Uni getAlarmDescriptor(String alarmId); Multi getAlarmResponseStream(AlarmSubscription alarmSubscription); + + Uni deleteAlarm(String deviceId); } diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java index 5cec6e989..c45e57c12 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java @@ -16,6 +16,7 @@ package eu.teraflow.policy.monitoring; +import eu.teraflow.policy.context.model.Empty; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; import eu.teraflow.policy.monitoring.model.AlarmResponse; import eu.teraflow.policy.monitoring.model.AlarmSubscription; @@ -72,4 +73,9 @@ public class MonitoringServiceImpl implements MonitoringService { public Multi getAlarmResponseStream(AlarmSubscription alarmSubscription) { return monitoringGateway.getAlarmResponseStream(alarmSubscription); } + + @Override + public Uni deleteAlarm(String alarmId) { + return monitoringGateway.deleteAlarm(alarmId); + } } -- GitLab From df1bdae5b35fdaaf47837a2016f6e47491c1bc9d Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Mon, 26 Sep 2022 18:34:34 +0300 Subject: [PATCH 08/34] Remove class --- .../eu/teraflow/policy/PolicyRuleAlarms.java | 40 ------------------- .../eu/teraflow/policy/PolicyServiceTest.java | 2 +- src/policy/target/kubernetes/kubernetes.yml | 32 +++++++-------- 3 files changed, 17 insertions(+), 57 deletions(-) delete mode 100644 src/policy/src/main/java/eu/teraflow/policy/PolicyRuleAlarms.java diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleAlarms.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleAlarms.java deleted file mode 100644 index a6fb866ad..000000000 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleAlarms.java +++ /dev/null @@ -1,40 +0,0 @@ -/* -* 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 java.util.ArrayList; -import java.util.List; -import javax.enterprise.context.ApplicationScoped; - -@ApplicationScoped -public class PolicyRuleAlarms { - - private final String policyRuleId; - private final List AlarmIdList = new ArrayList<>(); - - public PolicyRuleAlarms(String policyRuleId) { - this.policyRuleId = policyRuleId; - } - - public String getPolicyRuleId() { - return policyRuleId; - } - - public boolean containsAlarmId(String alarmId) { - return true; - } -} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java index f99889556..8f8f46811 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java @@ -77,7 +77,7 @@ class PolicyServiceTest { Policy.PolicyRuleId.newBuilder().setUuid(expectedPolicyRuleIdUuid).build(); final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_VALIDATED).build(); + Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_INSERTED).build(); final var expectedFirstKpiValue = new IntegerKpiValue(22); final var expectedSecondKpiValue = new FloatKpiValue(69.1f); diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml index 9214f896a..3c01c2031 100644 --- a/src/policy/target/kubernetes/kubernetes.yml +++ b/src/policy/target/kubernetes/kubernetes.yml @@ -3,20 +3,20 @@ apiVersion: v1 kind: Service metadata: annotations: - app.quarkus.io/commit-id: de07e72e3832e3857bf4cfd81319ec7e50f2b89e - app.quarkus.io/build-timestamp: 2022-09-16 - 15:03:58 +0000 + app.quarkus.io/commit-id: 83742615074896c91e47fecf6b56e2e08ce336dc + app.quarkus.io/build-timestamp: 2022-09-26 - 15:31:18 +0000 labels: app.kubernetes.io/name: policyservice app: policyservice name: policyservice spec: ports: - - name: grpc - port: 6060 - targetPort: 6060 - name: http port: 8080 targetPort: 8080 + - name: grpc + port: 6060 + targetPort: 6060 selector: app.kubernetes.io/name: policyservice type: ClusterIP @@ -25,8 +25,8 @@ apiVersion: apps/v1 kind: Deployment metadata: annotations: - app.quarkus.io/commit-id: de07e72e3832e3857bf4cfd81319ec7e50f2b89e - app.quarkus.io/build-timestamp: 2022-09-16 - 15:03:58 +0000 + app.quarkus.io/commit-id: 83742615074896c91e47fecf6b56e2e08ce336dc + app.quarkus.io/build-timestamp: 2022-09-26 - 15:31:18 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice @@ -39,8 +39,8 @@ spec: template: metadata: annotations: - app.quarkus.io/commit-id: de07e72e3832e3857bf4cfd81319ec7e50f2b89e - app.quarkus.io/build-timestamp: 2022-09-16 - 15:03:58 +0000 + app.quarkus.io/commit-id: 83742615074896c91e47fecf6b56e2e08ce336dc + app.quarkus.io/build-timestamp: 2022-09-26 - 15:31:18 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice @@ -51,12 +51,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - - name: CONTEXT_SERVICE_HOST - value: contextservice - - name: SERVICE_SERVICE_HOST - value: serviceservice - name: MONITORING_SERVICE_HOST value: monitoringservice + - name: SERVICE_SERVICE_HOST + value: serviceservice + - name: CONTEXT_SERVICE_HOST + value: contextservice image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0 imagePullPolicy: Always livenessProbe: @@ -71,12 +71,12 @@ spec: timeoutSeconds: 10 name: policyservice ports: - - containerPort: 6060 - name: grpc - protocol: TCP - containerPort: 8080 name: http protocol: TCP + - containerPort: 6060 + name: grpc + protocol: TCP readinessProbe: failureThreshold: 3 httpGet: -- GitLab From fb05c3b6226eabc3d2f53d3169791352713ab83f Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Mon, 26 Sep 2022 20:55:25 +0300 Subject: [PATCH 09/34] Remove policyRuleIdActivatedMap --- .../eu/teraflow/policy/PolicyGatewayImpl.java | 13 +- .../eu/teraflow/policy/PolicyServiceImpl.java | 112 +++++++++++++++--- src/policy/target/kubernetes/kubernetes.yml | 28 ++--- 3 files changed, 115 insertions(+), 38 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java index adbc9bab2..c76f8c8c4 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java @@ -45,15 +45,10 @@ public class PolicyGatewayImpl implements PolicyGateway { public Uni policyAddService(PolicyRuleService request) { final var policyRuleService = serializer.deserialize(request); - // Uni temp = - // policyService.addPolicyService(policyRuleService); - - // Uni ttt = Uni.createFrom().item(() -> "Hello"); - - final var getPolicyService = - policyService.addPolicyService(policyRuleService).onItem().transform(serializer::serialize); - - return getPolicyService; + return policyService + .addPolicyService(policyRuleService) + .onItem() + .transform(serializer::serialize); } @Override diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index 40095b4dd..bba516fed 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -41,12 +41,14 @@ import eu.teraflow.policy.service.ServiceService; import io.smallrye.mutiny.Multi; import io.smallrye.mutiny.Uni; import java.time.Duration; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Random; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -66,6 +68,16 @@ public class PolicyServiceImpl implements PolicyService { new PolicyRuleState(RuleState.POLICY_VALIDATED); private static final PolicyRuleState FAILED_POLICYRULE_STATE = new PolicyRuleState(RuleState.POLICY_FAILED); + private static final PolicyRuleState PROVISIONED_POLICYRULE_STATE = + new PolicyRuleState(RuleState.POLICY_PROVISIONED); + private static final PolicyRuleState ACTIVE_POLICYRULE_STATE = + new PolicyRuleState(RuleState.POLICY_ACTIVE); + private static final PolicyRuleState ENFORCED_POLICYRULE_STATE = + new PolicyRuleState(RuleState.POLICY_ENFORCED); + private static final PolicyRuleState INEFFECTIVE_POLICYRULE_STATE = + new PolicyRuleState(RuleState.POLICY_INEFFECTIVE); + private static final PolicyRuleState EFFECTIVE_POLICYRULE_STATE = + new PolicyRuleState(RuleState.POLICY_EFFECTIVE); private final ContextService contextService; private final MonitoringService monitoringService; @@ -98,7 +110,10 @@ public class PolicyServiceImpl implements PolicyService { this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter; } - private void provisionAlarm(List alarmDescriptorList) { + private void provisionAlarm( + PolicyRuleBasic policyRuleBasic, + List alarmDescriptorList, + Boolean isService) { List alarmSubscriptionList = new ArrayList<>(); @@ -109,6 +124,10 @@ public class PolicyServiceImpl implements PolicyService { .with(alarmId -> alarmSubscriptionList.add(new AlarmSubscription(alarmId, 0, 0))); } + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_PROVISIONED.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_PROVISIONED)); + contextService.setPolicyRule(policyRuleBasic); + List> alarmResponseStreamList = new ArrayList<>(); for (AlarmSubscription alarmSubscription : alarmSubscriptionList) { alarmResponseStreamList.add(monitoringService.getAlarmResponseStream(alarmSubscription)); @@ -122,7 +141,11 @@ public class PolicyServiceImpl implements PolicyService { .with( alarmResponse -> { LOGGER.info(alarmResponse); - activatePhase(alarmResponse.getAlarmId()); + if (isService) { + activateService(alarmResponse.getAlarmId()); + } else { + activateDevice(alarmResponse.getAlarmId()); + } }); Long count = multi.collect().with(Collectors.counting()).await().atMost(Duration.ofMinutes(5)); @@ -135,6 +158,26 @@ public class PolicyServiceImpl implements PolicyService { emptyMessage -> LOGGER.infof("Alarm [%s] has been deleted.\n", alarmDescriptor.getAlarmId())); } + + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_INEFFECTIVE.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_INEFFECTIVE)); + contextService.setPolicyRule(policyRuleBasic); + } else { + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_EFFECTIVE.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_EFFECTIVE)); + contextService.setPolicyRule(policyRuleBasic); + + multi + .subscribe() + .with( + alarmResponse -> { + LOGGER.info(alarmResponse); + if (isService) { + activateService(alarmResponse.getAlarmId()); + } else { + activateDevice(alarmResponse.getAlarmId()); + } + }); } } @@ -152,8 +195,13 @@ public class PolicyServiceImpl implements PolicyService { private void activateDevice(String alarmId) { PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId); PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); + PolicyRuleBasic policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); List actionParameters = parsePolicyRuleAction(policyRuleAction); + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_ACTIVE)); + contextService.setPolicyRule(policyRuleBasic); + final var deserializedDeviceUni = contextService.getDevice(policyRuleDevice.getDeviceIds().get(0)); @@ -170,15 +218,24 @@ public class PolicyServiceImpl implements PolicyService { } deviceService.configureDevice(device); + LOGGER.infof( + "Setting Policy Rule state to [%s]", RuleState.POLICY_ENFORCED.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_ENFORCED)); + contextService.setPolicyRule(policyRuleBasic); }); } - private void activatePhase(String alarmId) { + private void activateService(String alarmId) { PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId); + PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); List actionParameters = parsePolicyRuleAction(policyRuleAction); List constraintList = new ArrayList<>(); + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_ACTIVE)); + contextService.setPolicyRule(policyRuleBasic); + for (int i = 0; i < actionParameters.size() - 2; i += 2) { var constraintCustom = new ConstraintCustom(actionParameters.get(i), actionParameters.get(i + 1)); @@ -194,6 +251,11 @@ public class PolicyServiceImpl implements PolicyService { deserializedService -> { deserializedService.appendServiceConstraints(constraintList); serviceService.updateService(deserializedService); + + LOGGER.infof( + "Setting Policy Rule state to [%s]", RuleState.POLICY_ENFORCED.toString()); + policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_ENFORCED)); + contextService.setPolicyRule(policyRuleBasic); }); } @@ -219,11 +281,11 @@ public class PolicyServiceImpl implements PolicyService { return; } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_INSERTED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_VALIDATED.toString()); policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_VALIDATED)); contextService.setPolicyRule(policyRuleBasic); - provisionAlarm(alarmDescriptorList); + provisionAlarm(policyRuleBasic, alarmDescriptorList, false); return; } @@ -246,10 +308,8 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.info("All Device Ids are valid."); } - // logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic); policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); - state.setRuleState(RuleState.POLICY_FAILED); return; } else { LOGGER.infof(VALID_MESSAGE, serviceId); @@ -257,10 +317,8 @@ public class PolicyServiceImpl implements PolicyService { final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds); if (!invalidDeviceIds.isEmpty()) { - // logAndSetPolicyRuleState(FAILED_POLICYRULE_STATE, policyRuleBasic); policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); - state.setRuleState(RuleState.POLICY_FAILED); return; } else { LOGGER.infof("All deviceIds are valid"); @@ -269,7 +327,6 @@ public class PolicyServiceImpl implements PolicyService { // logAndSetPolicyRuleState(VALIDATED_POLICYRULE_STATE, policyRuleBasic); policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); - state.setRuleState(RuleState.POLICY_VALIDATED); return; } }); @@ -287,7 +344,7 @@ public class PolicyServiceImpl implements PolicyService { contextService.setPolicyRule(policyRuleBasic); return; } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_INSERTED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_VALIDATED.toString()); policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_VALIDATED)); contextService.setPolicyRule(policyRuleBasic); @@ -295,7 +352,7 @@ public class PolicyServiceImpl implements PolicyService { alarmPolicyRuleServiceMap.put(alarmDescriptor.getAlarmId(), policyRuleService); } - provisionAlarm(alarmDescriptorList); + provisionAlarm(policyRuleBasic, alarmDescriptorList, true); return; } @@ -310,6 +367,16 @@ public class PolicyServiceImpl implements PolicyService { return List.of(); } + private static String gen() { + Random r = new Random(System.currentTimeMillis()); + return String.valueOf((1 + r.nextInt(2)) * 10000 + r.nextInt(10000)); + } + + private static double getTimeStamp() { + long now = Instant.now().getEpochSecond(); + return Long.valueOf(now).doubleValue(); + } + private List parsePolicyRuleConditionOr(PolicyRuleBasic policyRuleBasic) { List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); @@ -323,7 +390,12 @@ public class PolicyServiceImpl implements PolicyService { AlarmDescriptor alarmDescriptor = new AlarmDescriptor( - "dummyId", "dummyDescription", "dummyAlarmName", kpiIdList, kpiValueRangeList, 0.0); + "alarmId-" + gen(), + "alarmDescription", + "alarmName-" + gen(), + kpiIdList, + kpiValueRangeList, + getTimeStamp()); alarmDescriptorList.add(alarmDescriptor); } @@ -394,7 +466,12 @@ public class PolicyServiceImpl implements PolicyService { } return new AlarmDescriptor( - "dummyId", "dummyDescription", "dummyAlarmName", kpiIdList, kpiValueRangeList, 0.0); + "alarmId-" + gen(), + "alarmDescription", + "alarmName-" + gen(), + kpiIdList, + kpiValueRangeList, + getTimeStamp()); } HashMap KpiValueRangeMap = new HashMap<>(); @@ -472,7 +549,12 @@ public class PolicyServiceImpl implements PolicyService { List kpiValueRangeList = new ArrayList<>(KpiValueRangeMap.values()); return new AlarmDescriptor( - "dummyId", "dummyDescription", "dummyAlarmName", kpiIdList, kpiValueRangeList, 0.0); + "alarmId-" + gen(), + "alarmDescription", + "alarmName-" + gen(), + kpiIdList, + kpiValueRangeList, + getTimeStamp()); } @Override diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml index 3c01c2031..26e946928 100644 --- a/src/policy/target/kubernetes/kubernetes.yml +++ b/src/policy/target/kubernetes/kubernetes.yml @@ -3,20 +3,20 @@ apiVersion: v1 kind: Service metadata: annotations: - app.quarkus.io/commit-id: 83742615074896c91e47fecf6b56e2e08ce336dc - app.quarkus.io/build-timestamp: 2022-09-26 - 15:31:18 +0000 + app.quarkus.io/commit-id: df1bdae5b35fdaaf47837a2016f6e47491c1bc9d + app.quarkus.io/build-timestamp: 2022-09-26 - 17:49:33 +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 @@ -25,8 +25,8 @@ apiVersion: apps/v1 kind: Deployment metadata: annotations: - app.quarkus.io/commit-id: 83742615074896c91e47fecf6b56e2e08ce336dc - app.quarkus.io/build-timestamp: 2022-09-26 - 15:31:18 +0000 + app.quarkus.io/commit-id: df1bdae5b35fdaaf47837a2016f6e47491c1bc9d + app.quarkus.io/build-timestamp: 2022-09-26 - 17:49:33 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice @@ -39,8 +39,8 @@ spec: template: metadata: annotations: - app.quarkus.io/commit-id: 83742615074896c91e47fecf6b56e2e08ce336dc - app.quarkus.io/build-timestamp: 2022-09-26 - 15:31:18 +0000 + app.quarkus.io/commit-id: df1bdae5b35fdaaf47837a2016f6e47491c1bc9d + app.quarkus.io/build-timestamp: 2022-09-26 - 17:49:33 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice @@ -51,10 +51,10 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - - name: MONITORING_SERVICE_HOST - value: monitoringservice - name: SERVICE_SERVICE_HOST value: serviceservice + - name: MONITORING_SERVICE_HOST + value: monitoringservice - name: CONTEXT_SERVICE_HOST value: contextservice image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0 @@ -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: -- GitLab From 8d3ee28e241f82b34af68f6697b05121d2462e3a Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Mon, 26 Sep 2022 21:06:58 +0300 Subject: [PATCH 10/34] Remove not needed variables --- .../eu/teraflow/policy/PolicyServiceImpl.java | 51 +++++-------------- src/policy/target/kubernetes/kubernetes.yml | 28 +++++----- 2 files changed, 26 insertions(+), 53 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index bba516fed..4d4fa3312 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -86,13 +86,11 @@ public class PolicyServiceImpl implements PolicyService { private final PolicyRuleConditionValidator policyRuleConditionValidator; private final PolicyRuleConditionFieldsGetter policyRuleConditionFieldsGetter; - private PolicyRuleState state = new PolicyRuleState(RuleState.POLICY_UNDEFINED); private HashMap policyRuleActionMap = new HashMap<>(); private ConcurrentHashMap alarmPolicyRuleServiceMap = new ConcurrentHashMap<>(); private ConcurrentHashMap alarmPolicyRuleDeviceMap = new ConcurrentHashMap<>(); - private ConcurrentHashMap policyRuleIdActivatedMap = new ConcurrentHashMap<>(); @Inject public PolicyServiceImpl( @@ -125,7 +123,7 @@ public class PolicyServiceImpl implements PolicyService { } LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_PROVISIONED.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_PROVISIONED)); + policyRuleBasic.setPolicyRuleState(PROVISIONED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); List> alarmResponseStreamList = new ArrayList<>(); @@ -159,12 +157,12 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof("Alarm [%s] has been deleted.\n", alarmDescriptor.getAlarmId())); } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_INEFFECTIVE.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_INEFFECTIVE)); + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_INEFFECTIVE.toString()); + policyRuleBasic.setPolicyRuleState(INEFFECTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); } else { - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_EFFECTIVE.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_EFFECTIVE)); + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_EFFECTIVE.toString()); + policyRuleBasic.setPolicyRuleState(EFFECTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); multi @@ -199,7 +197,7 @@ public class PolicyServiceImpl implements PolicyService { List actionParameters = parsePolicyRuleAction(policyRuleAction); LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_ACTIVE)); + policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); final var deserializedDeviceUni = @@ -220,7 +218,7 @@ public class PolicyServiceImpl implements PolicyService { deviceService.configureDevice(device); LOGGER.infof( "Setting Policy Rule state to [%s]", RuleState.POLICY_ENFORCED.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_ENFORCED)); + policyRuleBasic.setPolicyRuleState(ENFORCED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); }); } @@ -233,7 +231,7 @@ public class PolicyServiceImpl implements PolicyService { List constraintList = new ArrayList<>(); LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_ACTIVE)); + policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); for (int i = 0; i < actionParameters.size() - 2; i += 2) { @@ -254,7 +252,7 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof( "Setting Policy Rule state to [%s]", RuleState.POLICY_ENFORCED.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_ENFORCED)); + policyRuleBasic.setPolicyRuleState(ENFORCED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); }); } @@ -282,7 +280,7 @@ public class PolicyServiceImpl implements PolicyService { } LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_VALIDATED.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_VALIDATED)); + policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); provisionAlarm(policyRuleBasic, alarmDescriptorList, false); @@ -331,7 +329,7 @@ public class PolicyServiceImpl implements PolicyService { } }); - if (state.getRuleState() != RuleState.POLICY_VALIDATED) { + if (policyRuleBasic.getPolicyRuleState() != VALIDATED_POLICYRULE_STATE) { return; } @@ -345,7 +343,7 @@ public class PolicyServiceImpl implements PolicyService { return; } LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_VALIDATED.toString()); - policyRuleBasic.setPolicyRuleState(new PolicyRuleState(RuleState.POLICY_VALIDATED)); + policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) { @@ -407,11 +405,6 @@ public class PolicyServiceImpl implements PolicyService { policyRuleActionMap.put(alarmDescriptorList.get(i).getAlarmId(), policyRuleActions.get(i)); } - for (PolicyRuleAction policyRuleAction : policyRuleActions) { - List policyRuleActionParameters = policyRuleAction.getPolicyRuleActionParameters(); - PolicyRuleActionEnum policyRuleActionEnum = policyRuleAction.getPolicyRuleActionEnum(); - } - return alarmDescriptorList; } @@ -616,24 +609,4 @@ public class PolicyServiceImpl implements PolicyService { return invalidDeviceIds; } - - private void logAndSetPolicyRuleState( - PolicyRuleState policyRuleState, PolicyRuleBasic policyRuleBasic) { - final var POLICY_RULE_STATE_MESSAGE = "Setting Policy Rule state to [%s]"; - - if (policyRuleState.getRuleState() == RuleState.POLICY_INSERTED) { - LOGGER.infof(POLICY_RULE_STATE_MESSAGE, RuleState.POLICY_INSERTED.toString()); - policyRuleBasic.setPolicyRuleState(policyRuleState); - } - - if (policyRuleState.getRuleState() == RuleState.POLICY_VALIDATED) { - LOGGER.infof(POLICY_RULE_STATE_MESSAGE, RuleState.POLICY_VALIDATED.toString()); - policyRuleBasic.setPolicyRuleState(policyRuleState); - } - - if (policyRuleState.getRuleState() == RuleState.POLICY_FAILED) { - LOGGER.errorf(POLICY_RULE_STATE_MESSAGE, RuleState.POLICY_FAILED.toString()); - policyRuleBasic.setPolicyRuleState(policyRuleState); - } - } } diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml index 26e946928..1dc45d746 100644 --- a/src/policy/target/kubernetes/kubernetes.yml +++ b/src/policy/target/kubernetes/kubernetes.yml @@ -3,20 +3,20 @@ apiVersion: v1 kind: Service metadata: annotations: - app.quarkus.io/commit-id: df1bdae5b35fdaaf47837a2016f6e47491c1bc9d - app.quarkus.io/build-timestamp: 2022-09-26 - 17:49:33 +0000 + app.quarkus.io/commit-id: fb05c3b6226eabc3d2f53d3169791352713ab83f + app.quarkus.io/build-timestamp: 2022-09-26 - 18:06:22 +0000 labels: app.kubernetes.io/name: policyservice app: policyservice name: policyservice spec: ports: - - name: grpc - port: 6060 - targetPort: 6060 - name: http port: 8080 targetPort: 8080 + - name: grpc + port: 6060 + targetPort: 6060 selector: app.kubernetes.io/name: policyservice type: ClusterIP @@ -25,8 +25,8 @@ apiVersion: apps/v1 kind: Deployment metadata: annotations: - app.quarkus.io/commit-id: df1bdae5b35fdaaf47837a2016f6e47491c1bc9d - app.quarkus.io/build-timestamp: 2022-09-26 - 17:49:33 +0000 + app.quarkus.io/commit-id: fb05c3b6226eabc3d2f53d3169791352713ab83f + app.quarkus.io/build-timestamp: 2022-09-26 - 18:06:22 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice @@ -39,8 +39,8 @@ spec: template: metadata: annotations: - app.quarkus.io/commit-id: df1bdae5b35fdaaf47837a2016f6e47491c1bc9d - app.quarkus.io/build-timestamp: 2022-09-26 - 17:49:33 +0000 + app.quarkus.io/commit-id: fb05c3b6226eabc3d2f53d3169791352713ab83f + app.quarkus.io/build-timestamp: 2022-09-26 - 18:06:22 +0000 labels: app: policyservice app.kubernetes.io/name: policyservice @@ -51,12 +51,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - - name: SERVICE_SERVICE_HOST - value: serviceservice - name: MONITORING_SERVICE_HOST value: monitoringservice - name: CONTEXT_SERVICE_HOST value: contextservice + - name: SERVICE_SERVICE_HOST + value: serviceservice image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0 imagePullPolicy: Always livenessProbe: @@ -71,12 +71,12 @@ spec: timeoutSeconds: 10 name: policyservice ports: - - containerPort: 6060 - name: grpc - protocol: TCP - containerPort: 8080 name: http protocol: TCP + - containerPort: 6060 + name: grpc + protocol: TCP readinessProbe: failureThreshold: 3 httpGet: -- GitLab From e2158dd4c4413715be4dbdfb7ca908bf1722a300 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Mon, 26 Sep 2022 21:31:06 +0300 Subject: [PATCH 11/34] Fixes --- .../policy/PolicyRuleConditionValidator.java | 4 - .../eu/teraflow/policy/PolicyServiceImpl.java | 1 - .../policy/context/ContextGatewayImpl.java | 14 ++- src/policy/target/kubernetes/kubernetes.yml | 89 ------------------- 4 files changed, 6 insertions(+), 102 deletions(-) delete mode 100644 src/policy/target/kubernetes/kubernetes.yml diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java index 00a23169a..0ca242dbb 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java @@ -84,10 +84,6 @@ public class PolicyRuleConditionValidator { } private Uni isServiceIdValid(ServiceId serviceId) { - LOGGER.errorf("===> isServiceIdValid: %s", serviceId.getId()); - - // return Uni.createFrom().item(true); - return contextService .getService(serviceId) .onItem() diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index 4d4fa3312..10820971d 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -322,7 +322,6 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof("All deviceIds are valid"); } - // logAndSetPolicyRuleState(VALIDATED_POLICYRULE_STATE, policyRuleBasic); policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); return; diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java index 630686316..568ff449a 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java @@ -89,14 +89,12 @@ public class ContextGatewayImpl implements ContextGateway { @Override public Uni setPolicyRule(PolicyRuleBasic policyRuleBasic) { + // return Uni.createFrom().item("571eabc1-0f59-48da-b608-c45876c3fa8a"); + final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); - return Uni.createFrom().item("571eabc1-0f59-48da-b608-c45876c3fa8a"); - - // final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); - - // return streamingDelegateContextPolicy - // .setPolicyRule(serializedPolicyRuleBasic) - // .onItem() - // .transform(serializer::deserialize); + return streamingDelegateContextPolicy + .setPolicyRule(serializedPolicyRuleBasic) + .onItem() + .transform(serializer::deserialize); } } diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml deleted file mode 100644 index 1dc45d746..000000000 --- a/src/policy/target/kubernetes/kubernetes.yml +++ /dev/null @@ -1,89 +0,0 @@ ---- -apiVersion: v1 -kind: Service -metadata: - annotations: - app.quarkus.io/commit-id: fb05c3b6226eabc3d2f53d3169791352713ab83f - app.quarkus.io/build-timestamp: 2022-09-26 - 18:06:22 +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 - selector: - app.kubernetes.io/name: policyservice - type: ClusterIP ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - app.quarkus.io/commit-id: fb05c3b6226eabc3d2f53d3169791352713ab83f - app.quarkus.io/build-timestamp: 2022-09-26 - 18:06:22 +0000 - labels: - app: policyservice - app.kubernetes.io/name: policyservice - name: policyservice -spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: policyservice - template: - metadata: - annotations: - app.quarkus.io/commit-id: fb05c3b6226eabc3d2f53d3169791352713ab83f - app.quarkus.io/build-timestamp: 2022-09-26 - 18:06:22 +0000 - labels: - app: policyservice - app.kubernetes.io/name: policyservice - spec: - containers: - - env: - - name: KUBERNETES_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: MONITORING_SERVICE_HOST - value: monitoringservice - - name: CONTEXT_SERVICE_HOST - value: contextservice - - name: SERVICE_SERVICE_HOST - value: serviceservice - image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0 - imagePullPolicy: Always - livenessProbe: - failureThreshold: 3 - httpGet: - path: /q/health/live - port: 8080 - scheme: HTTP - initialDelaySeconds: 2 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 10 - name: policyservice - ports: - - containerPort: 8080 - name: http - protocol: TCP - - containerPort: 6060 - name: grpc - protocol: TCP - readinessProbe: - failureThreshold: 3 - httpGet: - path: /q/health/ready - port: 8080 - scheme: HTTP - initialDelaySeconds: 2 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 10 -- GitLab From 9d0a76125ce1c2c47299401c655f3ff5ec99bcc1 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Mon, 26 Sep 2022 21:42:23 +0300 Subject: [PATCH 12/34] Add tests --- .../teraflow/policy/ConfigRuleTypeTest.java | 90 + .../teraflow/policy/ConstraintTypeTest.java | 136 + .../teraflow/policy/EndPointCreationTest.java | 124 + .../eu/teraflow/policy/LocationTypeTest.java | 49 + .../policy/PolicyRuleBasicValidationTest.java | 359 ++ .../PolicyRuleConditionValidationTest.java | 139 + .../PolicyRuleDeviceValidationTest.java | 178 + .../PolicyRuleServiceValidationTest.java | 222 + .../eu/teraflow/policy/PolicyServiceTest.java | 195 +- .../eu/teraflow/policy/SerializerTest.java | 3880 +++++++++++++++++ 10 files changed, 5353 insertions(+), 19 deletions(-) create mode 100644 src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java create mode 100644 src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java create mode 100644 src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java create mode 100644 src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java create mode 100644 src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java create mode 100644 src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java create mode 100644 src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java create mode 100644 src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java create mode 100644 src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java new file mode 100644 index 000000000..faaa49c34 --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java @@ -0,0 +1,90 @@ +/* +* 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 eu.teraflow.policy.acl.AclAction; +import eu.teraflow.policy.acl.AclEntry; +import eu.teraflow.policy.acl.AclForwardActionEnum; +import eu.teraflow.policy.acl.AclLogActionEnum; +import eu.teraflow.policy.acl.AclMatch; +import eu.teraflow.policy.acl.AclRuleSet; +import eu.teraflow.policy.acl.AclRuleTypeEnum; +import eu.teraflow.policy.context.model.ConfigRuleAcl; +import eu.teraflow.policy.context.model.ConfigRuleCustom; +import eu.teraflow.policy.context.model.ConfigRuleTypeAcl; +import eu.teraflow.policy.context.model.ConfigRuleTypeCustom; +import eu.teraflow.policy.context.model.EndPointId; +import eu.teraflow.policy.context.model.TopologyId; +import io.quarkus.test.junit.QuarkusTest; +import java.util.List; +import org.junit.jupiter.api.Test; + +@QuarkusTest +class ConfigRuleTypeTest { + + private AclMatch createAclMatch() { + + return new AclMatch(1, 2, "192.168.3.52", "192.168.4.192", 3224, 3845, 5, 10); + } + + private AclAction createAclAction() { + + return new AclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + } + + private AclEntry createAclEntry(AclMatch aclMatch, AclAction aclAction) { + + return new AclEntry(1, "aclEntryDescription", aclMatch, aclAction); + } + + @Test + void shouldExtractConfigRuleCustomFromConfigRuleTypeCustom() { + final var resourceKey = "resourceKey"; + final var resourceValue = "resourceValue"; + + final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue); + final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom); + + assertThat(configRuleTypeCustom.getConfigRuleType()).isEqualTo(expectedConfigRuleCustom); + } + + @Test + void shouldExtractConfigRuleAclFromConfigRuleTypeAcl() { + final var contextIdUuid = "contextId"; + final var topologyIdUuid = "topologyUuid"; + final var deviceIdUuid = "deviceIdUuid"; + final var endpointIdUuid = "endpointIdUuid"; + + final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid); + final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid); + + final var aclMatch = createAclMatch(); + final var aclAction = createAclAction(); + final var aclEntry = createAclEntry(aclMatch, aclAction); + + final var aclRuleSet = + new AclRuleSet( + "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry)); + + final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); + final var configRuleTypeAcl = new ConfigRuleTypeAcl(expectedConfigRuleAcl); + + assertThat(configRuleTypeAcl.getConfigRuleType()).isEqualTo(expectedConfigRuleAcl); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java new file mode 100644 index 000000000..6389a3599 --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java @@ -0,0 +1,136 @@ +/* +* 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 eu.teraflow.policy.context.model.ConstraintCustom; +import eu.teraflow.policy.context.model.ConstraintEndPointLocation; +import eu.teraflow.policy.context.model.ConstraintSchedule; +import eu.teraflow.policy.context.model.ConstraintSlaAvailability; +import eu.teraflow.policy.context.model.ConstraintSlaCapacity; +import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel; +import eu.teraflow.policy.context.model.ConstraintSlaLatency; +import eu.teraflow.policy.context.model.ConstraintTypeCustom; +import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation; +import eu.teraflow.policy.context.model.ConstraintTypeSchedule; +import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability; +import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity; +import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel; +import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency; +import eu.teraflow.policy.context.model.EndPointId; +import eu.teraflow.policy.context.model.IsolationLevelEnum; +import eu.teraflow.policy.context.model.Location; +import eu.teraflow.policy.context.model.LocationTypeRegion; +import eu.teraflow.policy.context.model.TopologyId; +import io.quarkus.test.junit.QuarkusTest; +import java.util.List; +import org.junit.jupiter.api.Test; + +@QuarkusTest +class ConstraintTypeTest { + + @Test + void shouldExtractConstraintCustomFromConstraintTypeCustom() { + final var constraintType = "constraintType"; + final var constraintValue = "constraintValue"; + + final var expectedConstraintCustom = new ConstraintCustom(constraintType, constraintValue); + final var constraintTypeCustom = new ConstraintTypeCustom(expectedConstraintCustom); + + assertThat(constraintTypeCustom.getConstraintType()).isEqualTo(expectedConstraintCustom); + } + + @Test + void shouldExtractConstraintEndPointLocationFromConstraintTypeEndPointLocation() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var locationType = new LocationTypeRegion("ATH"); + final var location = new Location(locationType); + + final var expectedConstraintEndPointLocation = + new ConstraintEndPointLocation(endPointId, location); + final var constraintTypeEndPointLocation = + new ConstraintTypeEndPointLocation(expectedConstraintEndPointLocation); + + assertThat(constraintTypeEndPointLocation.getConstraintType()) + .isEqualTo(expectedConstraintEndPointLocation); + } + + @Test + void shouldExtractConstraintScheduleFromConstraintTypeSchedule() { + final var startTimestamp = 4.7f; + final var durationDays = 97.4f; + + final var expectedConstraintSchedule = new ConstraintSchedule(startTimestamp, durationDays); + final var constraintTypeSchedule = new ConstraintTypeSchedule(expectedConstraintSchedule); + + assertThat(constraintTypeSchedule.getConstraintType()).isEqualTo(expectedConstraintSchedule); + } + + @Test + void shouldExtractConstraintSlaAvailabilityFromConstraintTypeSlaAvailability() { + final var numDisjointPaths = 88; + final var allActive = false; + + final var expectedConstraintSlaAvailability = + new ConstraintSlaAvailability(numDisjointPaths, allActive); + final var constraintTypeSlaAvailability = + new ConstraintTypeSlaAvailability(expectedConstraintSlaAvailability); + + assertThat(constraintTypeSlaAvailability.getConstraintType()) + .isEqualTo(expectedConstraintSlaAvailability); + } + + @Test + void shouldExtractConstraintSlaCapacityFromConstraintTypeSlaCapacity() { + final var capacityGbps = 0.2f; + + final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); + final var constraintTypeSlaCapacity = + new ConstraintTypeSlaCapacity(expectedConstraintSlaCapacity); + + assertThat(constraintTypeSlaCapacity.getConstraintType()) + .isEqualTo(expectedConstraintSlaCapacity); + } + + @Test + void shouldExtractConstraintSlaIsolationLevelFromConstraintTypeSlaIsolationLevel() { + final var expectedConstraintSlaIsolationLevel = + new ConstraintSlaIsolationLevel( + List.of(IsolationLevelEnum.PHYSICAL_ISOLATION, IsolationLevelEnum.LOGICAL_ISOLATION)); + final var constraintTypeSlaIsolationLevel = + new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel); + + assertThat(constraintTypeSlaIsolationLevel.getConstraintType()) + .isEqualTo(expectedConstraintSlaIsolationLevel); + } + + @Test + void shouldExtractConstraintSlaLatencyFromConstraintTypeSlaLatency() { + final var capacityGbps = 0.2f; + + final var expectedConstraintSlaLatency = new ConstraintSlaLatency(capacityGbps); + final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(expectedConstraintSlaLatency); + + assertThat(constraintTypeSlaLatency.getConstraintType()) + .isEqualTo(expectedConstraintSlaLatency); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java b/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java new file mode 100644 index 000000000..4c113dc95 --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java @@ -0,0 +1,124 @@ +/* +* 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.EndPoint; +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.TopologyId; +import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType; +import io.quarkus.test.junit.QuarkusTest; +import java.util.List; +import org.junit.jupiter.api.Test; + +@QuarkusTest +class EndPointCreationTest { + + @Test + void shouldCreateEndPointObjectGivenAllAvailableFields() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + + final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + final var expectedEndPointType = "expectedEndPointType"; + final var expectedKpiSampleTypes = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + + final var expectedLocationType = new LocationTypeRegion("ATH"); + final var expectedEndPointLocation = new Location(expectedLocationType); + + final var expectedEndPoint = + new EndPoint.EndPointBuilder( + expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes) + .location(expectedEndPointLocation) + .build(); + + assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId); + assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType); + assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes); + assertThat(expectedEndPoint.getEndPointLocation()).isEqualTo(expectedEndPointLocation); + } + + @Test + void shouldCreateEndPointObjectGivenAllFieldsExceptFromLocation() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + + final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + final var expectedEndPointType = "expectedEndPointType"; + final var expectedKpiSampleTypes = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + + final var expectedEndPoint = + new EndPoint.EndPointBuilder( + expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes) + .build(); + + assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId); + assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType); + assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes); + } + + @Test + void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointId() { + final var expectedEndPointType = "expectedEndPointType"; + final var expectedKpiSampleTypes = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + + final var endPoint = + new EndPoint.EndPointBuilder(null, expectedEndPointType, expectedKpiSampleTypes); + + assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build); + } + + @Test + void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointType() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + + final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + final var expectedKpiSampleTypes = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + + final var endPoint = + new EndPoint.EndPointBuilder(expectedEndPointId, null, expectedKpiSampleTypes); + + assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build); + } + + @Test + void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingKpiSampleTypes() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + + final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + final var expectedEndPointType = "expectedEndPointType"; + + final var endPoint = + new EndPoint.EndPointBuilder(expectedEndPointId, expectedEndPointType, null); + + assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java new file mode 100644 index 000000000..d89d62c63 --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java @@ -0,0 +1,49 @@ +/* +* 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 eu.teraflow.policy.context.model.GpsPosition; +import eu.teraflow.policy.context.model.LocationTypeGpsPosition; +import eu.teraflow.policy.context.model.LocationTypeRegion; +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +@QuarkusTest +class LocationTypeTest { + + @Test + void shouldExtractRegionFromLocationTypeRegion() { + final var expectedRegion = "ATH"; + + final var locationTypeRegion = new LocationTypeRegion(expectedRegion); + + assertThat(locationTypeRegion.getLocationType()).isEqualTo(expectedRegion); + } + + @Test + void shouldExtractLocationGpsPositionFromLocationTypeGpsPosition() { + final var latitude = 3.99f; + final var longitude = 77.32f; + + final var expectedLocationGpsPosition = new GpsPosition(latitude, longitude); + final var locationTypeGpsPosition = new LocationTypeGpsPosition(expectedLocationGpsPosition); + + assertThat(locationTypeGpsPosition.getLocationType()).isEqualTo(expectedLocationGpsPosition); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java new file mode 100644 index 000000000..53cddf6be --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java @@ -0,0 +1,359 @@ +/* +* 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.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.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 PolicyRuleBasicValidationTest { + + private PolicyRuleBasic createPolicyRuleBasic( + String policyRuleId, + int priority, + PolicyRuleState policyRuleState, + BooleanOperator booleanOperator, + List policyRuleConditions, + List policyRuleActions) { + + return new PolicyRuleBasic( + policyRuleId, + policyRuleState, + priority, + policyRuleConditions, + booleanOperator, + policyRuleActions); + } + + private List createPolicyRuleConditions( + String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) { + final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); + + return List.of(policyRuleCondition); + } + + private List createPolicyRuleActions( + PolicyRuleActionEnum policyRuleActionEnum, List parameters) { + final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); + + return List.of(policyRuleAction); + } + + @Test + void shouldThrowNullPointerExceptionGivenNullPolicyRuleId() { + 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); + + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + null, + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + policyRuleActions)); + } + + @Test + void shouldThrowIllegalArgumentExceptionGivenEmptyPolicyRuleId() { + 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_ADD_SERVICE_CONFIGRULE, + List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + + final var policyRuleState = new PolicyRuleState(RuleState.POLICY_ENFORCED); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + "", + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + policyRuleActions)); + } + + @Test + void shouldThrowIllegalArgumentExceptionGivenWhiteSpacedPolicyRuleId() { + final var policyRuleConditions = + createPolicyRuleConditions( + UUID.randomUUID().toString(), + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, + new IntegerKpiValue(3)); + final var policyRuleActions = + createPolicyRuleActions( + PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION, + List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + + final var policyRuleState = new PolicyRuleState(RuleState.POLICY_ENFORCED); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + " ", + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + policyRuleActions)); + } + + @Test + void shouldThrowIllegalArgumentExceptionGivenNegativePriority() { + 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_SET_DEVICE_STATUS, + List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + + final var policyRuleState = new PolicyRuleState(RuleState.POLICY_INSERTED); + + final var policyRuleId = UUID.randomUUID().toString(); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + policyRuleId, + -3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + policyRuleActions)); + } + + @Test + void shouldThrowNullPointerExceptionGivenNullPolicyRuleConditions() { + 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_ENFORCED); + + final var policyRuleId = UUID.randomUUID().toString(); + + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + policyRuleId, + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + null, + policyRuleActions)); + } + + @Test + void shouldThrowIllegalArgumentExceptionGivenEmptyPolicyRuleConditions() { + final var policyRuleConditions = Collections.emptyList(); + 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_REMOVED); + + final var policyRuleId = UUID.randomUUID().toString(); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + policyRuleId, + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + policyRuleActions)); + } + + @Test + void shouldThrowIllegalArgumentExceptionGivenUndefinedBooleanOperator() { + 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_ADD_SERVICE_CONFIGRULE, + List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + + final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED); + + final var policyRuleId = UUID.randomUUID().toString(); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + policyRuleId, + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED, + policyRuleConditions, + policyRuleActions)); + } + + @Test + void shouldThrowNullPointerExceptionGivenNullPolicyRuleActions() { + final var policyRuleConditions = + createPolicyRuleConditions( + UUID.randomUUID().toString(), + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + new IntegerKpiValue(3)); + + final var policyRuleState = new PolicyRuleState(RuleState.POLICY_PROVISIONED); + + final var policyRuleId = UUID.randomUUID().toString(); + + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + policyRuleId, + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + null)); + } + + @Test + void shouldThrowIllegalArgumentExceptionGivenEmptyPolicyPolicyRuleActions() { + final var policyRuleConditions = + createPolicyRuleConditions( + UUID.randomUUID().toString(), + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + new IntegerKpiValue(3)); + final var policyRuleActions = Collections.emptyList(); + + final var policyRuleState = new PolicyRuleState(RuleState.POLICY_FAILED); + + final var policyRuleId = UUID.randomUUID().toString(); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleBasic( + policyRuleId, + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + policyRuleActions)); + } + + @Test + void shouldCreatePolicyRuleBasicObject() { + final var expectedPolicyRuleId = "expectedPolicyRuleId"; + final var expectedPolicyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); + final var expectedPriority = 3; + + final var firstKpiValue = new IntegerKpiValue(22); + + final var firstExpectedPolicyRuleCondition = + new PolicyRuleCondition( + "firstExpectedPolicyRuleConditionVariable", + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + firstKpiValue); + + final var expectedPolicyRuleConditions = List.of(firstExpectedPolicyRuleCondition); + + final var expectedBooleanOperator = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR; + + final var firstExpectedPolicyRuleAction = + new PolicyRuleAction( + PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, + List.of("parameter1", "parameter2")); + + final var expectedPolicyRuleActions = List.of(firstExpectedPolicyRuleAction); + + final var expectedPolicyRuleBasic = + new PolicyRuleBasic( + expectedPolicyRuleId, + expectedPolicyRuleState, + expectedPriority, + expectedPolicyRuleConditions, + expectedBooleanOperator, + expectedPolicyRuleActions); + + final var policyRuleConditions = + createPolicyRuleConditions( + "firstExpectedPolicyRuleConditionVariable", + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + new IntegerKpiValue(22)); + final var policyRuleActions = + createPolicyRuleActions( + PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, + List.of("parameter1", "parameter2")); + + final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); + + final var policyRuleBasic = + createPolicyRuleBasic( + "expectedPolicyRuleId", + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + policyRuleActions); + + assertThat(policyRuleBasic).usingRecursiveComparison().isEqualTo(expectedPolicyRuleBasic); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java new file mode 100644 index 000000000..635876dcb --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleConditionValidationTest.java @@ -0,0 +1,139 @@ +/* +* 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.model.NumericalOperator; +import eu.teraflow.policy.model.PolicyRuleCondition; +import eu.teraflow.policy.monitoring.model.BooleanKpiValue; +import eu.teraflow.policy.monitoring.model.FloatKpiValue; +import eu.teraflow.policy.monitoring.model.IntegerKpiValue; +import eu.teraflow.policy.monitoring.model.KpiValue; +import eu.teraflow.policy.monitoring.model.StringKpiValue; +import io.quarkus.test.junit.QuarkusTest; +import java.util.stream.Stream; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.Mockito; + +@QuarkusTest +class PolicyRuleConditionValidationTest { + + private PolicyRuleCondition createPolicyRuleCondition( + String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) { + + return new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); + } + + private static Stream provideKpiValues() { + return Stream.of( + Arguments.of(new StringKpiValue("stringKpiValue")), + Arguments.of(new BooleanKpiValue(true)), + Arguments.of(new IntegerKpiValue(44)), + Arguments.of(new FloatKpiValue(12.3f))); + } + + @ParameterizedTest + @MethodSource("provideKpiValues") + void shouldThrowNullPointerExceptionGivenNullKpiId(KpiValue kpiValue) { + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy( + () -> + createPolicyRuleCondition( + null, + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + kpiValue)); + } + + @ParameterizedTest + @MethodSource("provideKpiValues") + void shouldThrowIllegalArgumentExceptionGivenEmptyKpiId(KpiValue kpiValue) { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleCondition( + "", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, kpiValue)); + } + + @ParameterizedTest + @MethodSource("provideKpiValues") + void shouldThrowIllegalArgumentExceptionGivenWhiteSpacedKpiId(KpiValue kpiValue) { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleCondition( + " ", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, kpiValue)); + } + + @ParameterizedTest + @MethodSource("provideKpiValues") + void shouldThrowIllegalArgumentExceptionGivenUndefinedNumericalOperator(KpiValue kpiValue) { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleCondition( + "kpiId", + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED, + kpiValue)); + } + + @Test + void shouldThrowNullPointerExceptionGivenNullKpiValue() { + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy( + () -> + createPolicyRuleCondition( + "kpiId", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, null)); + } + + @Test + void shouldThrowIllegalArgumentExceptionIfIsKpiValueIsOfInvalidType() { + final var kpiValue = Mockito.mock(KpiValue.class); + Mockito.when(kpiValue.getValue()).thenReturn(1_2L); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> + createPolicyRuleCondition( + "kpiId", + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + kpiValue)); + } + + @ParameterizedTest + @MethodSource("provideKpiValues") + void shouldCreatePolicyRuleConditionObject(KpiValue kpiValue) { + final var expectedKpiId = "expectedKpiId"; + final var expectedNumericalOperator = + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN; + + final var expectedPolicyRuleCondition = + new PolicyRuleCondition(expectedKpiId, expectedNumericalOperator, kpiValue); + + final var policyRuleCondition = + createPolicyRuleCondition( + "expectedKpiId", NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, kpiValue); + + assertThat(policyRuleCondition) + .usingRecursiveComparison() + .isEqualTo(expectedPolicyRuleCondition); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java new file mode 100644 index 000000000..064cd7ee0 --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java @@ -0,0 +1,178 @@ +/* +* 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.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.PolicyRuleDevice; +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 PolicyRuleDeviceValidationTest { + + private PolicyRuleBasic createPolicyRuleBasic( + String policyRuleId, + int priority, + PolicyRuleState policyRuleState, + BooleanOperator booleanOperator, + List policyRuleConditions, + List policyRuleActions) { + + return new PolicyRuleBasic( + policyRuleId, + policyRuleState, + priority, + policyRuleConditions, + booleanOperator, + policyRuleActions); + } + + private List createPolicyRuleConditions( + String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) { + final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); + + return List.of(policyRuleCondition); + } + + private List createPolicyRuleActions( + PolicyRuleActionEnum policyRuleActionEnum, List parameters) { + final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); + + return List.of(policyRuleAction); + } + + private PolicyRuleDevice createPolicyRuleDevice( + PolicyRuleBasic policyRuleBasic, List deviceIds) { + + return new PolicyRuleDevice(policyRuleBasic, deviceIds); + } + + private List createDeviceIds() { + return List.of("deviceId1", "deviceId2"); + } + + @Test + void shouldThrowNullPointerExceptionGivenNullPolicyRuleBasic() { + final var deviceIds = createDeviceIds(); + + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy(() -> createPolicyRuleDevice(null, deviceIds)); + } + + @Test + void shouldThrowNullPointerExceptionGivenNullDeviceIds() { + 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); + + assertThatExceptionOfType(NullPointerException.class) + .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, null)); + } + + @Test + void shouldThrowIllegalArgumentExceptionGivenEmptyDeviceIds() { + 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_CONFIGRULE, + List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + + final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); + + final var policyRuleBasic = + createPolicyRuleBasic( + "policyRuleId1", + 213, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, + policyRuleConditions, + policyRuleActions); + + final var deviceIds = Collections.emptyList(); + + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, deviceIds)); + } + + @Test + void shouldCreatePolicyRuleDeviceObject() { + final var policyRuleConditions = + createPolicyRuleConditions( + UUID.randomUUID().toString(), + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, + 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", + 3, + policyRuleState, + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + policyRuleConditions, + policyRuleActions); + + final var deviceIds = createDeviceIds(); + + final var expectedPolicyRuleDevice = new PolicyRuleDevice(policyRuleBasic, deviceIds); + + final var policyRuleDevice = createPolicyRuleDevice(policyRuleBasic, deviceIds); + + assertThat(policyRuleDevice).usingRecursiveComparison().isEqualTo(expectedPolicyRuleDevice); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java new file mode 100644 index 000000000..b565b7e75 --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java @@ -0,0 +1,222 @@ +/* +* 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 createPolicyRuleConditions( + String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) { + final var policyRuleCondition = new PolicyRuleCondition(kpiId, numericalOperator, kpiValue); + + return List.of(policyRuleCondition); + } + + private List createPolicyRuleActions( + PolicyRuleActionEnum policyRuleActionEnum, List parameters) { + final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); + + return List.of(policyRuleAction); + } + + private PolicyRuleBasic createPolicyRuleBasic( + String policyRuleId, + int priority, + PolicyRuleState policyRuleState, + BooleanOperator booleanOperator, + List policyRuleConditions, + List policyRuleActions) { + + return new PolicyRuleBasic( + policyRuleId, + policyRuleState, + priority, + policyRuleConditions, + booleanOperator, + policyRuleActions); + } + + private ServiceId createServiceId(String contextId, String id) { + return new ServiceId(contextId, id); + } + + private List createDeviceIds() { + return List.of("deviceIdA", "deviceIdB"); + } + + private PolicyRuleService createPolicyRuleService( + PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List 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.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); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java index 8f8f46811..c9c8e62aa 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java @@ -18,12 +18,14 @@ package eu.teraflow.policy; import static org.assertj.core.api.Assertions.assertThat; +import context.ContextOuterClass; import context.ContextOuterClass.Uuid; import eu.teraflow.policy.monitoring.model.FloatKpiValue; import eu.teraflow.policy.monitoring.model.IntegerKpiValue; import io.quarkus.grpc.GrpcClient; import io.quarkus.test.junit.QuarkusTest; import java.util.List; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -55,20 +57,6 @@ class PolicyServiceTest { this.serializer = serializer; } - private context.ContextOuterClass.ServiceId createContextServiceId() { - final var contextIdUuid = serializer.serializeUuid("571eabc1-0f59-48da-b608-c45876c3fa8a"); - - final var serviceIdUuid = serializer.serializeUuid("123456789"); - - context.ContextOuterClass.ContextId contextId = - context.ContextOuterClass.ContextId.newBuilder().setContextUuid(contextIdUuid).build(); - - return context.ContextOuterClass.ServiceId.newBuilder() - .setContextId(contextId) - .setServiceUuid(serviceIdUuid) - .build(); - } - private PolicyRuleBasic createPolicyRuleBasic() { final var expectedPolicyRuleIdUuid = serializer.serializeUuid("571eabc1-0f59-48da-b608-c45876c3fa8a"); @@ -140,20 +128,189 @@ class PolicyServiceTest { final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState(); - final var serviceId = createContextServiceId(); - final var policyRuleService = - Policy.PolicyRuleService.newBuilder() + Policy.PolicyRuleService.newBuilder().setPolicyRuleBasic(policyRuleBasic).build(); + + client + .policyAddService(policyRuleService) + .subscribe() + .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); + + assertThat(message.get(5, TimeUnit.SECONDS)) + .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); + } + + @Test + void shouldAddPolicyDevice() throws ExecutionException, InterruptedException, TimeoutException { + CompletableFuture message = new CompletableFuture<>(); + + final var expectedDeviceIdUuid1 = + serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257"); + final var expectedDeviceIdUuid2 = + serializer.serializeUuid("095974ac-d757-412d-b317-bcf355220aa9"); + + final var expectedDeviceId1 = + ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid1).build(); + final var expectedDeviceId2 = + ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid2).build(); + + final var policyRuleBasic = createPolicyRuleBasic(); + final var deviceIds = List.of(expectedDeviceId1, expectedDeviceId2); + + final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState(); + + final var policyRuleDevice = + Policy.PolicyRuleDevice.newBuilder() .setPolicyRuleBasic(policyRuleBasic) - .setServiceId(serviceId) + .addAllDeviceList(deviceIds) .build(); client - .policyAddService(policyRuleService) + .policyAddDevice(policyRuleDevice) + .subscribe() + .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); + + assertThat(message.get(5, TimeUnit.SECONDS)) + .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); + } + + @Test + void shouldUpdatePolicyService() + throws ExecutionException, InterruptedException, TimeoutException { + CompletableFuture message = new CompletableFuture<>(); + + final var expectedPolicyRuleState = + Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_ENFORCED).build(); + + final var policyRuleBasic = + PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build(); + final var policyRuleService = + Policy.PolicyRuleService.newBuilder().setPolicyRuleBasic(policyRuleBasic).build(); + + client + .policyUpdateService(policyRuleService) + .subscribe() + .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); + + assertThat(message.get(5, TimeUnit.SECONDS)) + .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); + } + + @Test + void shouldUpdatePolicyDevice() + throws ExecutionException, InterruptedException, TimeoutException { + CompletableFuture message = new CompletableFuture<>(); + + final var expectedPolicyRuleState = + Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_ENFORCED).build(); + + final var policyRuleBasic = + PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build(); + final var policyRuleDevice = + Policy.PolicyRuleDevice.newBuilder().setPolicyRuleBasic(policyRuleBasic).build(); + + client + .policyUpdateDevice(policyRuleDevice) + .subscribe() + .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); + + assertThat(message.get(5, TimeUnit.SECONDS)) + .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); + } + + @Test + void shouldDeletePolicy() throws ExecutionException, InterruptedException, TimeoutException { + CompletableFuture message = new CompletableFuture<>(); + + final var uuid = + ContextOuterClass.Uuid.newBuilder() + .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString()) + .build(); + final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build(); + + final var expectedPolicyRuleState = + Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_REMOVED).build(); + + client + .policyDelete(policyRuleId) .subscribe() .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString())); assertThat(message.get(5, TimeUnit.SECONDS)) .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString()); } + + @Test + void shouldGetPolicyService() throws ExecutionException, InterruptedException, TimeoutException { + CompletableFuture message = new CompletableFuture<>(); + + final var uuid = + ContextOuterClass.Uuid.newBuilder() + .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString()) + .build(); + final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build(); + + client + .getPolicyService(policyRuleId) + .subscribe() + .with( + policyRuleService -> { + LOGGER.infof( + "Getting policy with ID: %s", + policyRuleService.getPolicyRuleBasic().getPolicyRuleId().getUuid()); + message.complete( + policyRuleService.getPolicyRuleBasic().getPolicyRuleId().getUuid().getUuid()); + }); + + assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(policyRuleId.getUuid().getUuid()); + } + + @Test + void shouldGetPolicyDevice() throws ExecutionException, InterruptedException, TimeoutException { + CompletableFuture message = new CompletableFuture<>(); + + final var uuid = + ContextOuterClass.Uuid.newBuilder() + .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString()) + .build(); + final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build(); + + client + .getPolicyDevice(policyRuleId) + .subscribe() + .with( + policyRuleService -> { + LOGGER.infof( + "Getting policy with ID: %s", + policyRuleService.getPolicyRuleBasic().getPolicyRuleId().getUuid()); + message.complete( + policyRuleService.getPolicyRuleBasic().getPolicyRuleId().getUuid().getUuid()); + }); + + assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(policyRuleId.getUuid().getUuid()); + } + + @Test + void shouldGetPolicyByServiceId() + throws ExecutionException, InterruptedException, TimeoutException { + + CompletableFuture message = new CompletableFuture<>(); + + final var uuid = + ContextOuterClass.Uuid.newBuilder() + .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString()) + .build(); + final var serviceId = ContextOuterClass.ServiceId.newBuilder().setServiceUuid(uuid).build(); + + client + .getPolicyByServiceId(serviceId) + .subscribe() + .with( + policyRuleList -> { + LOGGER.infof("Getting policyRuleList with ID: %s", policyRuleList); + message.complete(policyRuleList.toString()); + }); + + assertThat(message.get(5, TimeUnit.SECONDS)).isEmpty(); + } } diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java new file mode 100644 index 000000000..fa0495217 --- /dev/null +++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java @@ -0,0 +1,3880 @@ +/* +* 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 +*provideKpiValueRanges +* 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 acl.Acl; +import context.ContextOuterClass; +import context.ContextOuterClass.ContextId; +import context.ContextOuterClass.DeviceId; +import context.ContextOuterClass.DeviceOperationalStatusEnum; +import context.ContextOuterClass.Uuid; +import eu.teraflow.policy.acl.AclAction; +import eu.teraflow.policy.acl.AclEntry; +import eu.teraflow.policy.acl.AclForwardActionEnum; +import eu.teraflow.policy.acl.AclLogActionEnum; +import eu.teraflow.policy.acl.AclMatch; +import eu.teraflow.policy.acl.AclRuleSet; +import eu.teraflow.policy.acl.AclRuleTypeEnum; +import eu.teraflow.policy.context.model.ConfigActionEnum; +import eu.teraflow.policy.context.model.ConfigRule; +import eu.teraflow.policy.context.model.ConfigRuleAcl; +import eu.teraflow.policy.context.model.ConfigRuleCustom; +import eu.teraflow.policy.context.model.ConfigRuleTypeAcl; +import eu.teraflow.policy.context.model.ConfigRuleTypeCustom; +import eu.teraflow.policy.context.model.Constraint; +import eu.teraflow.policy.context.model.ConstraintCustom; +import eu.teraflow.policy.context.model.ConstraintEndPointLocation; +import eu.teraflow.policy.context.model.ConstraintSchedule; +import eu.teraflow.policy.context.model.ConstraintSlaAvailability; +import eu.teraflow.policy.context.model.ConstraintSlaCapacity; +import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel; +import eu.teraflow.policy.context.model.ConstraintSlaLatency; +import eu.teraflow.policy.context.model.ConstraintTypeCustom; +import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation; +import eu.teraflow.policy.context.model.ConstraintTypeSchedule; +import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability; +import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity; +import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel; +import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency; +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.EndPointBuilder; +import eu.teraflow.policy.context.model.EndPointId; +import eu.teraflow.policy.context.model.Event; +import eu.teraflow.policy.context.model.EventTypeEnum; +import eu.teraflow.policy.context.model.GpsPosition; +import eu.teraflow.policy.context.model.IsolationLevelEnum; +import eu.teraflow.policy.context.model.Location; +import eu.teraflow.policy.context.model.LocationTypeGpsPosition; +import eu.teraflow.policy.context.model.LocationTypeRegion; +import eu.teraflow.policy.context.model.Service; +import eu.teraflow.policy.context.model.ServiceConfig; +import eu.teraflow.policy.context.model.ServiceId; +import eu.teraflow.policy.context.model.ServiceStatus; +import eu.teraflow.policy.context.model.ServiceStatusEnum; +import eu.teraflow.policy.context.model.ServiceTypeEnum; +import eu.teraflow.policy.context.model.SliceId; +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; +import eu.teraflow.policy.model.PolicyRuleActionEnum; +import eu.teraflow.policy.model.PolicyRuleBasic; +import eu.teraflow.policy.model.PolicyRuleCondition; +import eu.teraflow.policy.model.PolicyRuleDevice; +import eu.teraflow.policy.model.PolicyRuleService; +import eu.teraflow.policy.model.PolicyRuleState; +import eu.teraflow.policy.model.RuleState; +import eu.teraflow.policy.monitoring.model.AlarmDescriptor; +import eu.teraflow.policy.monitoring.model.AlarmResponse; +import eu.teraflow.policy.monitoring.model.BooleanKpiValue; +import eu.teraflow.policy.monitoring.model.FloatKpiValue; +import eu.teraflow.policy.monitoring.model.IntegerKpiValue; +import eu.teraflow.policy.monitoring.model.Kpi; +import eu.teraflow.policy.monitoring.model.KpiDescriptor; +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 io.quarkus.test.junit.QuarkusTest; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.inject.Inject; +import kpi_sample_types.KpiSampleTypes; +import monitoring.Monitoring; +import monitoring.Monitoring.AlarmID; +import monitoring.Monitoring.KpiId; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import policy.Policy; +import policy.Policy.PolicyRuleId; +import policy.PolicyAction; +import policy.PolicyCondition; + +@QuarkusTest +class SerializerTest { + @Inject Serializer serializer; + + private AclMatch createAclMatch( + int dscp, + int protocol, + String srcAddress, + String dstAddress, + int srcPort, + int dstPort, + int startMplsLabel, + int endMplsLabel) { + return new AclMatch( + dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel); + } + + private AclAction createAclAction( + AclForwardActionEnum forwardActionEnum, AclLogActionEnum logActionEnum) { + + return new AclAction(forwardActionEnum, logActionEnum); + } + + private AclEntry createAclEntry( + int sequenceId, String description, AclMatch aclMatch, AclAction aclAction) { + + return new AclEntry(sequenceId, description, aclMatch, aclAction); + } + + private PolicyRuleBasic createPolicyRuleBasic() { + final var expectedPolicyRuleId = "expectedPolicyRuleId"; + final var expectedPolicyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); + final var expectedPriority = 3; + + final var firstKpiValue = new IntegerKpiValue(22); + final var secondKpiValue = new FloatKpiValue(69.1f); + + final var firstExpectedPolicyRuleCondition = + new PolicyRuleCondition( + "firstExpectedPolicyRuleConditionVariable", + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + firstKpiValue); + final var secondExpectedPolicyRuleCondition = + new PolicyRuleCondition( + "secondExpectedPolicyRuleConditionVariable", + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL, + secondKpiValue); + + final var expectedPolicyRuleConditions = + List.of(firstExpectedPolicyRuleCondition, secondExpectedPolicyRuleCondition); + + final var expectedBooleanOperator = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR; + + final var firstExpectedPolicyRuleAction = + new PolicyRuleAction( + PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, + List.of("parameter1", "parameter2")); + + final var secondExpectedPolicyRuleAction = + new PolicyRuleAction( + PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, + List.of("parameter3", "parameter4")); + + final var expectedPolicyRuleActions = + List.of(firstExpectedPolicyRuleAction, secondExpectedPolicyRuleAction); + + return new PolicyRuleBasic( + expectedPolicyRuleId, + expectedPolicyRuleState, + expectedPriority, + expectedPolicyRuleConditions, + expectedBooleanOperator, + expectedPolicyRuleActions); + } + + private ConfigRule createConfigRule() { + final var contextIdUuid = "contextId"; + final var topologyIdUuid = "topologyUuid"; + final var deviceIdUuid = "deviceIdUuid"; + final var endpointIdUuid = "endpointIdUuid"; + + final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid); + final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid); + + final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2); + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction); + + final var aclRuleSet = + new AclRuleSet( + "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry)); + + final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); + final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl); + + return new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl); + } + + @Test + void shouldSerializeDeviceId() { + final var deviceId = "deviceId"; + + final var deviceIdUuid = serializer.serializeUuid(deviceId); + final var expectedDeviceId = + ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(deviceIdUuid).build(); + + final var serializedDeviceId = serializer.serializeDeviceId(deviceId); + + assertThat(serializedDeviceId).usingRecursiveComparison().isEqualTo(expectedDeviceId); + } + + @Test + void shouldDeserializeDeviceId() { + final var expectedDeviceId = "expectedDeviceId"; + + final var serializedDeviceIdUuid = serializer.serializeUuid(expectedDeviceId); + final var serializedDeviceId = + DeviceId.newBuilder().setDeviceUuid(serializedDeviceIdUuid).build(); + + final var deviceId = serializer.deserialize(serializedDeviceId); + + assertThat(deviceId).isEqualTo(expectedDeviceId); + } + + @Test + void shouldSerializeContextId() { + final var contextId = "contextId"; + + final var contextIdUuid = serializer.serializeUuid(contextId); + + final var expectedContextId = + ContextOuterClass.ContextId.newBuilder().setContextUuid(contextIdUuid).build(); + + final var serializedContextId = serializer.serializeContextId(contextId); + + assertThat(serializedContextId).usingRecursiveComparison().isEqualTo(expectedContextId); + } + + @Test + void shouldDeserializeContextId() { + final var expectedContextId = "expectedContextId"; + + final var serializedContextIdUuid = serializer.serializeUuid(expectedContextId); + final var serializedContextId = + ContextId.newBuilder().setContextUuid(serializedContextIdUuid).build(); + + final var contextId = serializer.deserialize(serializedContextId); + + assertThat(contextId).isEqualTo(expectedContextId); + } + + @Test + void shouldSerializePolicyRuleId() { + final var policyRuleId = "policyRuleId"; + + final var policyRuleIdUuid = serializer.serializeUuid(policyRuleId); + final var expectedPolicyRuleId = + Policy.PolicyRuleId.newBuilder().setUuid(policyRuleIdUuid).build(); + + final var serializedPolicyRuleId = serializer.serializePolicyRuleId(policyRuleId); + + assertThat(serializedPolicyRuleId).usingRecursiveComparison().isEqualTo(expectedPolicyRuleId); + } + + @Test + void shouldDeserializePolicyRuleId() { + final var expectedPolicyRuleId = "expectedPolicyRuleId"; + + final var serializedPolicyRuleIdUuid = serializer.serializeUuid(expectedPolicyRuleId); + final var serializedPolicyRuleId = + PolicyRuleId.newBuilder().setUuid(serializedPolicyRuleIdUuid).build(); + + final var policyRuleId = serializer.deserialize(serializedPolicyRuleId); + + assertThat(policyRuleId).isEqualTo(expectedPolicyRuleId); + } + + @Test + void shouldSerializeTopologyId() { + final var expectedContextId = "expectedContextId"; + final var expectedId = "expectedId"; + final var topologyId = new TopologyId(expectedContextId, expectedId); + + final var serializedContextId = serializer.serializeContextId(expectedContextId); + final var serializedIdUuid = serializer.serializeUuid(expectedId); + + final var expectedTopologyId = + ContextOuterClass.TopologyId.newBuilder() + .setContextId(serializedContextId) + .setTopologyUuid(serializedIdUuid) + .build(); + + final var serializedTopologyId = serializer.serialize(topologyId); + + assertThat(serializedTopologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId); + } + + @Test + void shouldDeserializeTopologyId() { + final var expectedContextId = "expectedContextId"; + final var expectedId = "expectedId"; + + final var expectedTopologyId = new TopologyId(expectedContextId, expectedId); + + final var serializedTopologyId = serializer.serialize(expectedTopologyId); + final var topologyId = serializer.deserialize(serializedTopologyId); + + assertThat(topologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId); + } + + private static Stream provideConfigActionEnum() { + return Stream.of( + Arguments.of(ConfigActionEnum.SET, ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET), + Arguments.of( + ConfigActionEnum.DELETE, ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE), + Arguments.of( + ConfigActionEnum.UNDEFINED, ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideConfigActionEnum") + void shouldSerializeConfigActionEnum( + ConfigActionEnum configActionEnum, + ContextOuterClass.ConfigActionEnum expectedConfigActionEnum) { + final var serializedType = serializer.serialize(configActionEnum); + assertThat(serializedType.getNumber()).isEqualTo(expectedConfigActionEnum.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideConfigActionEnum") + void shouldDeserializeConfigActionEnum( + ConfigActionEnum expectedConfigActionEnum, + ContextOuterClass.ConfigActionEnum serializedConfigActionEnum) { + + final var configActionEnum = serializer.deserialize(serializedConfigActionEnum); + + assertThat(configActionEnum).isEqualTo(expectedConfigActionEnum); + } + + private static Stream provideAclRuleTypeEnum() { + return Stream.of( + Arguments.of(AclRuleTypeEnum.IPV4, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4), + Arguments.of(AclRuleTypeEnum.IPV6, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6), + Arguments.of(AclRuleTypeEnum.L2, Acl.AclRuleTypeEnum.ACLRULETYPE_L2), + Arguments.of(AclRuleTypeEnum.MPLS, Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS), + Arguments.of(AclRuleTypeEnum.MIXED, Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED), + Arguments.of(AclRuleTypeEnum.UNDEFINED, Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideAclRuleTypeEnum") + void shouldSerializeAclRuleTypeEnum( + AclRuleTypeEnum aclRuleTypeEnum, Acl.AclRuleTypeEnum expectedAclRuleTypeEnum) { + final var serializedAclRuleTypeEnum = serializer.serialize(aclRuleTypeEnum); + assertThat(serializedAclRuleTypeEnum.getNumber()) + .isEqualTo(expectedAclRuleTypeEnum.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideAclRuleTypeEnum") + void shouldDeserializeAclRuleTypeEnum( + AclRuleTypeEnum expectedAclRuleTypeEnum, Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) { + final var aclRuleTypeEnum = serializer.deserialize(serializedAclRuleTypeEnum); + assertThat(aclRuleTypeEnum).isEqualTo(expectedAclRuleTypeEnum); + } + + private static Stream provideAclForwardActionEnum() { + return Stream.of( + Arguments.of(AclForwardActionEnum.DROP, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP), + Arguments.of( + AclForwardActionEnum.ACCEPT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT), + Arguments.of( + AclForwardActionEnum.REJECT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT), + Arguments.of( + AclForwardActionEnum.UNDEFINED, + Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideAclForwardActionEnum") + void shouldSerializeAclForwardActionEnum( + AclForwardActionEnum aclForwardActionEnum, + Acl.AclForwardActionEnum expectedAclForwardActionEnum) { + final var serializedAclForwardActionEnum = serializer.serialize(aclForwardActionEnum); + assertThat(serializedAclForwardActionEnum.getNumber()) + .isEqualTo(expectedAclForwardActionEnum.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideAclForwardActionEnum") + void shouldDeserializeAclForwardActionEnum( + AclForwardActionEnum expectedAclForwardActionEnum, + Acl.AclForwardActionEnum serializedAclForwardActionEnum) { + final var aclForwardActionEnum = serializer.deserialize(serializedAclForwardActionEnum); + assertThat(aclForwardActionEnum).isEqualTo(expectedAclForwardActionEnum); + } + + private static Stream provideAclLogActionEnum() { + return Stream.of( + Arguments.of(AclLogActionEnum.NO_LOG, Acl.AclLogActionEnum.ACLLOGACTION_NOLOG), + Arguments.of(AclLogActionEnum.SYSLOG, Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG), + Arguments.of(AclLogActionEnum.UNDEFINED, Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideAclLogActionEnum") + void shouldSerializeAclLogActionEnum( + AclLogActionEnum aclLogActionEnum, Acl.AclLogActionEnum expectedAclLogActionEnum) { + final var serializedAclLogActionEnum = serializer.serialize(aclLogActionEnum); + assertThat(serializedAclLogActionEnum.getNumber()) + .isEqualTo(expectedAclLogActionEnum.getNumber()); + } + + @Test + void shouldSerializeAclAction() { + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + + final var expectedAclAction = + Acl.AclAction.newBuilder() + .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT) + .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG) + .build(); + + final var serializedAclAction = serializer.serialize(aclAction); + + assertThat(serializedAclAction).usingRecursiveComparison().isEqualTo(expectedAclAction); + } + + @Test + void shouldDeserializeAclAction() { + final var expectedAclAction = + createAclAction(AclForwardActionEnum.DROP, AclLogActionEnum.NO_LOG); + + final var serializedAclAction = serializer.serialize(expectedAclAction); + final var aclAction = serializer.deserialize(serializedAclAction); + + assertThat(aclAction).usingRecursiveComparison().isEqualTo(expectedAclAction); + } + + @Test + void shouldSerializeAclMatch() { + final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2); + + final var expectedAclMatch = + Acl.AclMatch.newBuilder() + .setDscp(1) + .setProtocol(1) + .setSrcAddress("127.0.0.1") + .setDstAddress("127.0.0.2") + .setSrcPort(5601) + .setDstPort(5602) + .setStartMplsLabel(1) + .setEndMplsLabel(2) + .build(); + + final var serializedAclMatch = serializer.serialize(aclMatch); + + assertThat(serializedAclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch); + } + + @Test + void shouldDeserializeAclMatch() { + final var expectedAclMatch = createAclMatch(7, 2, "127.0.0.5", "127.0.0.6", 32456, 3123, 5, 10); + + final var serializedAclMatch = serializer.serialize(expectedAclMatch); + final var aclMatch = serializer.deserialize(serializedAclMatch); + + assertThat(aclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch); + } + + @Test + void shouldSerializeAclEntry() { + final var sequenceId = 1; + final var description = "aclEntryDescription"; + + final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + final var aclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction); + + final var serializedAclMatch = serializer.serialize(aclMatch); + final var serializedAclAction = serializer.serialize(aclAction); + + final var expectedAclEntry = + Acl.AclEntry.newBuilder() + .setSequenceId(sequenceId) + .setDescription(description) + .setMatch(serializedAclMatch) + .setAction(serializedAclAction) + .build(); + + final var serializedAclEntry = serializer.serialize(aclEntry); + + assertThat(serializedAclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry); + } + + @Test + void shouldDeserializeAclEntry() { + final var sequenceId = 7; + final var description = "aclEntryDescriptor"; + + final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + final var expectedAclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction); + + final var serializedAclEntry = serializer.serialize(expectedAclEntry); + final var aclEntry = serializer.deserialize(serializedAclEntry); + + assertThat(aclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry); + } + + @Test + void shouldSerializeAclRuleSet() { + final var sequenceId = 1; + final var aclEntryDescription = "aclEntryDescription"; + + final var aclRuleSetName = "aclRuleSetName"; + final var aclRuleSetDescription = "aclRuleSetDescription"; + final var aclRuleSetUserId = "aclRuleSetUserId"; + + final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction); + final var aclRuleSet = + new AclRuleSet( + aclRuleSetName, + AclRuleTypeEnum.MIXED, + aclRuleSetDescription, + aclRuleSetUserId, + List.of(aclEntry)); + + final var serializedAclEntry = serializer.serialize(aclEntry); + final var serializedAclEntries = List.of(serializedAclEntry); + + final var expectedAclRuleSet = + Acl.AclRuleSet.newBuilder() + .setName(aclRuleSetName) + .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED) + .setDescription(aclRuleSetDescription) + .setUserId(aclRuleSetUserId) + .addAllEntries(serializedAclEntries) + .build(); + + final var serializedAclRuleset = serializer.serialize(aclRuleSet); + + assertThat(serializedAclRuleset).usingRecursiveComparison().isEqualTo(expectedAclRuleSet); + } + + @Test + void shouldDeserializeAclRuleSet() { + final var sequenceId = 1; + final var aclEntryDescription = "aclEntryDescription"; + + final var aclRuleSetName = "aclRuleSetName"; + final var aclRuleSetDescription = "aclRuleSetDescription"; + final var aclRuleSetUserId = "aclRuleSetUserId"; + + final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction); + final var expectedAclRuleSet = + new AclRuleSet( + aclRuleSetName, + AclRuleTypeEnum.MIXED, + aclRuleSetDescription, + aclRuleSetUserId, + List.of(aclEntry)); + + final var serializedAclRuleSet = serializer.serialize(expectedAclRuleSet); + final var aclRuleSet = serializer.deserialize(serializedAclRuleSet); + + assertThat(aclRuleSet).usingRecursiveComparison().isEqualTo(expectedAclRuleSet); + } + + @ParameterizedTest + @MethodSource("provideAclLogActionEnum") + void shouldDeserializeAclLogActionEnum( + AclLogActionEnum expectedAclLogActionEnum, Acl.AclLogActionEnum serializedAclLogActionEnum) { + final var aclLogActionEnum = serializer.deserialize(serializedAclLogActionEnum); + assertThat(aclLogActionEnum).isEqualTo(expectedAclLogActionEnum); + } + + @Test + void shouldSerializeConfigRuleAcl() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + + final var sequenceId = 1; + final var aclEntryDescription = "aclEntryDescription"; + + final var aclRuleSetName = "aclRuleSetName"; + final var aclRuleSetDescription = "aclRuleSetDescription"; + final var aclRuleSetUserId = "aclRuleSetUserId"; + + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction); + final var aclRuleSet = + new AclRuleSet( + aclRuleSetName, + AclRuleTypeEnum.MIXED, + aclRuleSetDescription, + aclRuleSetUserId, + List.of(aclEntry)); + + final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); + + final var serializedEndPointId = serializer.serialize(endPointId); + final var serializedAclRuleSet = serializer.serialize(aclRuleSet); + + final var expectedConfigRuleAcl = + ContextOuterClass.ConfigRule_ACL.newBuilder() + .setEndpointId(serializedEndPointId) + .setRuleSet(serializedAclRuleSet) + .build(); + + final var serializedConfigRuleAcl = serializer.serialize(configRuleAcl); + + assertThat(serializedConfigRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl); + } + + @Test + void shouldDeserializeConfigRuleAcl() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + + final var sequenceId = 1; + final var aclEntryDescription = "aclEntryDescription"; + + final var aclRuleSetName = "aclRuleSetName"; + final var aclRuleSetDescription = "aclRuleSetDescription"; + final var aclRuleSetUserId = "aclRuleSetUserId"; + + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction); + final var aclRuleSet = + new AclRuleSet( + aclRuleSetName, + AclRuleTypeEnum.MIXED, + aclRuleSetDescription, + aclRuleSetUserId, + List.of(aclEntry)); + + final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); + + final var serializedConfigRuleAcl = serializer.serialize(expectedConfigRuleAcl); + final var configRuleAcl = serializer.deserialize(serializedConfigRuleAcl); + + assertThat(configRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl); + } + + @Test + void shouldSerializeConfigRuleCustom() { + final var resourceKey = "resourceKey"; + final var resourceValue = "resourceValue"; + + final var configRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue); + + final var expectedConfigRuleCustom = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey(resourceKey) + .setResourceValue(resourceValue) + .build(); + + final var serializedConfigRuleCustom = serializer.serialize(configRuleCustom); + + assertThat(serializedConfigRuleCustom) + .usingRecursiveComparison() + .isEqualTo(expectedConfigRuleCustom); + } + + @Test + void shouldDeserializeConfigRuleCustom() { + final var resourceKey = "resourceKey"; + final var resourceValue = "resourceValue"; + + final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue); + + final var serializedConfigRuleCustom = serializer.serialize(expectedConfigRuleCustom); + final var configRuleCustom = serializer.deserialize(serializedConfigRuleCustom); + + assertThat(configRuleCustom).usingRecursiveComparison().isEqualTo(expectedConfigRuleCustom); + } + + @Test + void shouldSerializeConfigRuleofTypeConfigRuleAcl() { + final var contextIdUuid = "contextId"; + final var topologyIdUuid = "topologyUuid"; + final var deviceIdUuid = "deviceIdUuid"; + final var endpointIdUuid = "endpointIdUuid"; + + final var expectedSerializedContextId = serializer.serializeContextId(contextIdUuid); + final var expectedSerializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid); + final var expectedSerializedDeviceId = serializer.serializeDeviceId(deviceIdUuid); + final var expectedSerializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid); + + final var expectedSerializedTopologyId = + ContextOuterClass.TopologyId.newBuilder() + .setContextId(expectedSerializedContextId) + .setTopologyUuid(expectedSerializedTopologyIdUuid) + .build(); + + final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid); + + final var expectedSerializedEndPointId = + ContextOuterClass.EndPointId.newBuilder() + .setTopologyId(expectedSerializedTopologyId) + .setDeviceId(expectedSerializedDeviceId) + .setEndpointUuid(expectedSerializedEndPointIdUuid) + .build(); + + final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid); + + final var expectedSerializedAclMatch = + Acl.AclMatch.newBuilder() + .setDscp(1) + .setProtocol(1) + .setSrcAddress("127.0.0.1") + .setDstAddress("127.0.0.2") + .setSrcPort(5601) + .setDstPort(5602) + .setStartMplsLabel(1) + .setEndMplsLabel(2) + .build(); + + final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2); + + final var expectedSerializedAclAction = + Acl.AclAction.newBuilder() + .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT) + .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG) + .build(); + + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + + final var expectedSerializedAclEntry = + Acl.AclEntry.newBuilder() + .setSequenceId(1) + .setDescription("aclEntryDescription") + .setMatch(expectedSerializedAclMatch) + .setAction(expectedSerializedAclAction) + .build(); + + final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction); + + final var expectedSerializedAclRuleSet = + Acl.AclRuleSet.newBuilder() + .setName("aclRuleName") + .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4) + .setDescription("AclRuleDescription") + .setUserId("userId") + .addEntries(expectedSerializedAclEntry) + .build(); + + final var aclRuleSet = + new AclRuleSet( + "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry)); + + final var expectedSerializedConfigRuleAcl = + ContextOuterClass.ConfigRule_ACL.newBuilder() + .setEndpointId(expectedSerializedEndPointId) + .setRuleSet(expectedSerializedAclRuleSet) + .build(); + + final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); + + final var expectedConfigRule = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) + .setAcl(expectedSerializedConfigRuleAcl) + .build(); + + final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl); + final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl); + final var serializedConfigRule = serializer.serialize(configRule); + + assertThat(serializedConfigRule).isEqualTo(expectedConfigRule); + } + + @Test + void shouldDeserializeConfigRuleOfTypeConfigRuleAcl() { + final var contextIdUuid = "contextId"; + final var topologyIdUuid = "topologyUuid"; + final var deviceIdUuid = "deviceIdUuid"; + final var endpointIdUuid = "endpointIdUuid"; + + final var serializedContextId = serializer.serializeContextId(contextIdUuid); + final var serializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid); + final var serializedDeviceId = serializer.serializeDeviceId(deviceIdUuid); + final var serializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid); + + final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid); + final var serializedTopologyId = + ContextOuterClass.TopologyId.newBuilder() + .setContextId(serializedContextId) + .setTopologyUuid(serializedTopologyIdUuid) + .build(); + + final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid); + final var serializedEndPointId = + ContextOuterClass.EndPointId.newBuilder() + .setTopologyId(serializedTopologyId) + .setDeviceId(serializedDeviceId) + .setEndpointUuid(serializedEndPointIdUuid) + .build(); + + final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10); + final var serializedAclMatch = + Acl.AclMatch.newBuilder() + .setDscp(1) + .setProtocol(2) + .setSrcAddress("127.0.0.1") + .setDstAddress("127.0.0.2") + .setSrcPort(5601) + .setDstPort(5602) + .setStartMplsLabel(5) + .setEndMplsLabel(10) + .build(); + + final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG); + final var serializedAclAction = + Acl.AclAction.newBuilder() + .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT) + .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG) + .build(); + + final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction); + + final var serializedAclEntry = + Acl.AclEntry.newBuilder() + .setSequenceId(1) + .setDescription("aclEntryDescription") + .setMatch(serializedAclMatch) + .setAction(serializedAclAction) + .build(); + + final var aclRuleSet = + new AclRuleSet( + "aclRuleName", + eu.teraflow.policy.acl.AclRuleTypeEnum.IPV4, + "AclRuleDescription", + "userId", + List.of(aclEntry)); + + final var serializedAclRuleSet = + Acl.AclRuleSet.newBuilder() + .setName("aclRuleName") + .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4) + .setDescription("AclRuleDescription") + .setUserId("userId") + .addEntries(serializedAclEntry) + .build(); + + final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet); + final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl); + + final var expectedConfigRule = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeAcl); + + final var serializedConfigRuleAcl = + ContextOuterClass.ConfigRule_ACL.newBuilder() + .setEndpointId(serializedEndPointId) + .setRuleSet(serializedAclRuleSet) + .build(); + + final var serializedConfigRule = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) + .setAcl(serializedConfigRuleAcl) + .build(); + + final var configRule = serializer.deserialize(serializedConfigRule); + + assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule); + } + + @Test + void shouldSerializeConfigRuleOfTypeConfigRuleCustom() { + final var expectedSerializedConfigRuleCustom = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey("resourceKey") + .setResourceValue("resourceValue") + .build(); + + final var configRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue"); + + final var expectedConfigRule = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) + .setCustom(expectedSerializedConfigRuleCustom) + .build(); + + final var configRuleTypeCustom = new ConfigRuleTypeCustom(configRuleCustom); + final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeCustom); + final var serializedConfigRule = serializer.serialize(configRule); + + assertThat(serializedConfigRule).isEqualTo(expectedConfigRule); + } + + @Test + void shouldDeserializeConfigRuleOfTypeConfigRuleCustom() { + final var serializedConfigRuleCustom = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey("resourceKey") + .setResourceValue("resourceValue") + .build(); + + final var expectedConfigRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue"); + final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom); + final var expectedConfigRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeCustom); + + final var serializedConfigRule = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) + .setCustom(serializedConfigRuleCustom) + .build(); + + final var configRule = serializer.deserialize(serializedConfigRule); + + assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule); + } + + @Test + void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConfigRule() { + final var serializedConfigRule = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) + .build(); + + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> serializer.deserialize(serializedConfigRule)); + } + + @Test + void shouldSerializeConstraintCustom() { + final var expectedConstraintType = "constraintType"; + final var expectedConstraintValue = "constraintValue"; + + final var constraintCustom = + new ConstraintCustom(expectedConstraintType, expectedConstraintValue); + + final var expectedConstraintCustom = + ContextOuterClass.Constraint_Custom.newBuilder() + .setConstraintType(expectedConstraintType) + .setConstraintValue(expectedConstraintValue) + .build(); + + final var serializedConstraintCustom = serializer.serialize(constraintCustom); + + assertThat(serializedConstraintCustom) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintCustom); + } + + @Test + void shouldDeserializeConstraintCustom() { + final var expectedConstraintType = "constraintType"; + final var expectedConstraintValue = "constraintValue"; + final var expectedConstraintCustom = + new ConstraintCustom(expectedConstraintType, expectedConstraintValue); + + final var serializedConstraintCustom = + ContextOuterClass.Constraint_Custom.newBuilder() + .setConstraintType(expectedConstraintType) + .setConstraintValue(expectedConstraintValue) + .build(); + + final var constraintCustom = serializer.deserialize(serializedConstraintCustom); + + assertThat(constraintCustom).usingRecursiveComparison().isEqualTo(expectedConstraintCustom); + } + + @Test + void shouldSerializeConstraintSchedule() { + final var expectedStartTimestamp = 10; + final var expectedDurationDays = 2.2f; + + final var constraintSchedule = + new ConstraintSchedule(expectedStartTimestamp, expectedDurationDays); + + final var expectedConstraintSchedule = + ContextOuterClass.Constraint_Schedule.newBuilder() + .setStartTimestamp(expectedStartTimestamp) + .setDurationDays(expectedDurationDays) + .build(); + + final var serializedConstraintSchedule = serializer.serialize(constraintSchedule); + + assertThat(serializedConstraintSchedule) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSchedule); + } + + @Test + void shouldDeserializeConstraintSchedule() { + final var expectedStartTimestamp = 10; + final var expectedDurationDays = 2.2f; + + final var expectedConstraintSchedule = + new ConstraintSchedule(expectedStartTimestamp, expectedDurationDays); + + final var serializedConstraintSchedule = + ContextOuterClass.Constraint_Schedule.newBuilder() + .setStartTimestamp(expectedStartTimestamp) + .setDurationDays(expectedDurationDays) + .build(); + + final var constraintSchedule = serializer.deserialize(serializedConstraintSchedule); + + assertThat(constraintSchedule).usingRecursiveComparison().isEqualTo(expectedConstraintSchedule); + } + + @Test + void shouldSerializeLocationOfTypeRegion() { + final var region = "Tokyo"; + + final var locationTypeRegion = new LocationTypeRegion(region); + final var location = new Location(locationTypeRegion); + + final var expectedLocation = ContextOuterClass.Location.newBuilder().setRegion(region).build(); + + final var serializedLocation = serializer.serialize(location); + + assertThat(serializedLocation).isEqualTo(expectedLocation); + } + + @Test + void shouldDeserializeLocationOfTypeRegion() { + final var region = "Tokyo"; + + final var locationTypeRegion = new LocationTypeRegion(region); + final var expectedLocation = new Location(locationTypeRegion); + + final var serializedLocation = + ContextOuterClass.Location.newBuilder().setRegion(region).build(); + + final var location = serializer.deserialize(serializedLocation); + + assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation); + } + + @Test + void shouldSerializeLocationOfTypeGpsPosition() { + final var latitude = 33.3f; + final var longitude = 86.4f; + + final var gpsPosition = new GpsPosition(latitude, longitude); + final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition); + final var location = new Location(locationTypeGpsPosition); + + final var serializedGpsPosition = + ContextOuterClass.GPS_Position.newBuilder() + .setLatitude(latitude) + .setLongitude(longitude) + .build(); + + final var expectedLocation = + ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build(); + + final var serializedLocation = serializer.serialize(location); + + assertThat(serializedLocation).isEqualTo(expectedLocation); + } + + @Test + void shouldDeserializeLocationOfTypeGpsPosition() { + final var latitude = 33.3f; + final var longitude = 86.4f; + + final var gpsPosition = new GpsPosition(latitude, longitude); + final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition); + final var expectedLocation = new Location(locationTypeGpsPosition); + + final var serializedGpsPosition = + ContextOuterClass.GPS_Position.newBuilder() + .setLatitude(latitude) + .setLongitude(longitude) + .build(); + + final var serializedLocation = + ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build(); + + final var location = serializer.deserialize(serializedLocation); + + assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation); + } + + @Test + void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedLocation() { + final var serializedLocation = ContextOuterClass.Location.newBuilder().build(); + + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> serializer.deserialize(serializedLocation)); + } + + private static Stream provideIsolationLevelEnum() { + return Stream.of( + Arguments.of( + IsolationLevelEnum.NO_ISOLATION, ContextOuterClass.IsolationLevelEnum.NO_ISOLATION), + Arguments.of( + IsolationLevelEnum.PHYSICAL_ISOLATION, + ContextOuterClass.IsolationLevelEnum.PHYSICAL_ISOLATION), + Arguments.of( + IsolationLevelEnum.LOGICAL_ISOLATION, + ContextOuterClass.IsolationLevelEnum.LOGICAL_ISOLATION), + Arguments.of( + IsolationLevelEnum.PROCESS_ISOLATION, + ContextOuterClass.IsolationLevelEnum.PROCESS_ISOLATION), + Arguments.of( + IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION, + ContextOuterClass.IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION), + Arguments.of( + IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION, + ContextOuterClass.IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION), + Arguments.of( + IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION, + ContextOuterClass.IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION), + Arguments.of( + IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION, + ContextOuterClass.IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION), + Arguments.of( + IsolationLevelEnum.SERVICE_ISOLATION, + ContextOuterClass.IsolationLevelEnum.SERVICE_ISOLATION)); + } + + @ParameterizedTest + @MethodSource("provideIsolationLevelEnum") + void shouldSerializeIsolationLevelEnum( + IsolationLevelEnum isolationLevelEnum, + ContextOuterClass.IsolationLevelEnum expectedIsolationLevelEnum) { + final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum); + + assertThat(serializedIsolationLevelEnum.getNumber()) + .isEqualTo(expectedIsolationLevelEnum.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideIsolationLevelEnum") + void shouldDeserializeIsolationLevelEnum( + IsolationLevelEnum expectedIsolationLevelEnum, + ContextOuterClass.IsolationLevelEnum serializedIsolationLevelEnum) { + final var isolationLevelEnum = serializer.deserialize(serializedIsolationLevelEnum); + + assertThat(isolationLevelEnum).isEqualTo(expectedIsolationLevelEnum); + } + + @Test + void shouldSerializeConstraintEndPointLocation() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var locationType = new LocationTypeRegion("ATH"); + final var location = new Location(locationType); + + final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location); + + final var serializedEndPointId = serializer.serialize(endPointId); + final var serializedLocation = serializer.serialize(location); + + final var expectedConstraintEndPointLocation = + ContextOuterClass.Constraint_EndPointLocation.newBuilder() + .setEndpointId(serializedEndPointId) + .setLocation(serializedLocation) + .build(); + + final var serializedConstraintEndPointLocation = + serializer.serialize(constraintEndPointLocation); + + assertThat(serializedConstraintEndPointLocation) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintEndPointLocation); + } + + @Test + void shouldDeserializeConstraintEndPointLocation() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var latitude = 54.6f; + final var longitude = 123.7f; + final var gpsPosition = new GpsPosition(latitude, longitude); + + final var locationType = new LocationTypeGpsPosition(gpsPosition); + final var location = new Location(locationType); + + final var expectedConstraintEndPointLocation = + new ConstraintEndPointLocation(endPointId, location); + + final var serializedEndPointId = serializer.serialize(endPointId); + final var serializedLocation = serializer.serialize(location); + + final var serializedConstraintEndPointLocation = + ContextOuterClass.Constraint_EndPointLocation.newBuilder() + .setEndpointId(serializedEndPointId) + .setLocation(serializedLocation) + .build(); + + final var constraintEndPointLocation = + serializer.deserialize(serializedConstraintEndPointLocation); + + assertThat(constraintEndPointLocation) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintEndPointLocation); + } + + @Test + void shouldSerializeConstraintSlaAvailability() { + final var numDisJointPaths = 2; + final var isAllActive = true; + + final var constraintSlaAvailability = + new ConstraintSlaAvailability(numDisJointPaths, isAllActive); + + final var expectedConstraintSlaAvailability = + ContextOuterClass.Constraint_SLA_Availability.newBuilder() + .setNumDisjointPaths(numDisJointPaths) + .setAllActive(isAllActive) + .build(); + + final var serializedConstraintSlaAvailability = serializer.serialize(constraintSlaAvailability); + + assertThat(serializedConstraintSlaAvailability) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSlaAvailability); + } + + @Test + void shouldDeserializeConstraintSlaAvailability() { + final var numDisJointPaths = 2; + final var isAllActive = true; + + final var expectedConstraintSlaAvailability = + new ConstraintSlaAvailability(numDisJointPaths, isAllActive); + + final var serializedConstraintSlaAvailability = + ContextOuterClass.Constraint_SLA_Availability.newBuilder() + .setNumDisjointPaths(numDisJointPaths) + .setAllActive(isAllActive) + .build(); + + final var constraintSlaAvailability = + serializer.deserialize(serializedConstraintSlaAvailability); + + assertThat(constraintSlaAvailability) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSlaAvailability); + } + + @Test + void shouldSerializeConstraintSlaCapacity() { + final var capacityGbps = 5; + + final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); + + final var expectedConstraintSlaCapacity = + ContextOuterClass.Constraint_SLA_Capacity.newBuilder() + .setCapacityGbps(capacityGbps) + .build(); + + final var serializedConstraintSlaCapacity = serializer.serialize(constraintSlaCapacity); + + assertThat(serializedConstraintSlaCapacity) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSlaCapacity); + } + + @Test + void shouldDeserializeConstraintSlaCapacity() { + final var capacityGbps = 5; + + final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); + + final var serializedConstraintSlaCapacity = + ContextOuterClass.Constraint_SLA_Capacity.newBuilder() + .setCapacityGbps(capacityGbps) + .build(); + + final var constraintSlaCapacity = serializer.deserialize(serializedConstraintSlaCapacity); + + assertThat(constraintSlaCapacity) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSlaCapacity); + } + + @Test + void shouldSerializeConstraintSlaIsolationLevel() { + final var isolationLevelEnums = + List.of( + IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION, + IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION); + + final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnums); + + final var serializedIsolationLevelEnums = + isolationLevelEnums.stream() + .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum)) + .collect(Collectors.toList()); + final var expectedConstraintSlaIsolationLevel = + ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder() + .addAllIsolationLevel(serializedIsolationLevelEnums) + .build(); + + final var serializedConstraintSlaIsolationLevel = + serializer.serialize(constraintSlaIsolationLevel); + + assertThat(serializedConstraintSlaIsolationLevel) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSlaIsolationLevel); + } + + @Test + void shouldDeserializeConstraintSlaIsolationLevel() { + final var isolationLevelEnums = + List.of(IsolationLevelEnum.PROCESS_ISOLATION, IsolationLevelEnum.SERVICE_ISOLATION); + + final var expectedConstraintSlaIsolationLevel = + new ConstraintSlaIsolationLevel(isolationLevelEnums); + + final var serializedIsolationLevelEnums = + isolationLevelEnums.stream() + .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum)) + .collect(Collectors.toList()); + final var serializedConstraintSlaIsolationLevel = + ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder() + .addAllIsolationLevel(serializedIsolationLevelEnums) + .build(); + + final var constraintSlaIsolationLevel = + serializer.deserialize(serializedConstraintSlaIsolationLevel); + + assertThat(constraintSlaIsolationLevel) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSlaIsolationLevel); + } + + @Test + void shouldSerializeConstraintSlaLatency() { + final var e2eLatencyMs = 5.7f; + + final var constraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs); + + final var expectedConstraintSlaLatency = + ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build(); + + final var serializedConstraintSlaLatency = serializer.serialize(constraintSlaLatency); + + assertThat(serializedConstraintSlaLatency) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSlaLatency); + } + + @Test + void shouldDeserializeConstraintSlaLatency() { + final var e2eLatencyMs = 5.7f; + + final var expectedConstraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs); + + final var serializedConstraintSlaLatency = + ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build(); + + final var constraintSlaLatency = serializer.deserialize(serializedConstraintSlaLatency); + + assertThat(constraintSlaLatency) + .usingRecursiveComparison() + .isEqualTo(expectedConstraintSlaLatency); + } + + @Test + void shouldSerializeConstraintOfTypeConstraintCustom() { + final var expectedConstraintType = "constraintType"; + final var expectedConstraintValue = "constraintValue"; + + final var constraintCustom = + new ConstraintCustom(expectedConstraintType, expectedConstraintValue); + final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom); + final var constraint = new Constraint(constraintTypeCustom); + + final var expectedConstraintCustom = + ContextOuterClass.Constraint_Custom.newBuilder() + .setConstraintType(expectedConstraintType) + .setConstraintValue(expectedConstraintValue) + .build(); + + final var expectedConstraint = + ContextOuterClass.Constraint.newBuilder().setCustom(expectedConstraintCustom).build(); + + final var serializedConstraint = serializer.serialize(constraint); + + assertThat(serializedConstraint).usingRecursiveComparison().isEqualTo(expectedConstraint); + } + + @Test + void shouldDeserializeConstraintOfTypeConstraintCustom() { + final var expectedConstraintType = "constraintType"; + final var expectedConstraintValue = "constraintValue"; + + final var constraintCustom = + new ConstraintCustom(expectedConstraintType, expectedConstraintValue); + final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom); + final var expectedConstraint = new Constraint(constraintTypeCustom); + + final var serializedConstraintCustom = + ContextOuterClass.Constraint_Custom.newBuilder() + .setConstraintType(expectedConstraintType) + .setConstraintValue(expectedConstraintValue) + .build(); + + final var serializedConstraint = + ContextOuterClass.Constraint.newBuilder().setCustom(serializedConstraintCustom).build(); + + final var constraint = serializer.deserialize(serializedConstraint); + + assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); + } + + @Test + void shouldSerializeConstraintOfTypeConstraintSchedule() { + final var startTimeSTamp = 2.2f; + final var durationDays = 5.73f; + + final var constraintSchedule = new ConstraintSchedule(startTimeSTamp, durationDays); + final var constraintTypeSchedule = new ConstraintTypeSchedule(constraintSchedule); + final var constraint = new Constraint(constraintTypeSchedule); + + final var expectedConstraintSchedule = + ContextOuterClass.Constraint_Schedule.newBuilder() + .setStartTimestamp(startTimeSTamp) + .setDurationDays(durationDays) + .build(); + + final var expectedConstraint = + ContextOuterClass.Constraint.newBuilder().setSchedule(expectedConstraintSchedule).build(); + + final var serializedConstraint = serializer.serialize(constraint); + + assertThat(serializedConstraint).isEqualTo(expectedConstraint); + } + + @Test + void shouldDeserializeConstraintOfTypeConstraintSchedule() { + final var startTimeSTamp = 2.2f; + final var durationDays = 5.73f; + + final var expectedConstraintSchedule = new ConstraintSchedule(startTimeSTamp, durationDays); + final var expectedConstraintTypeSchedule = + new ConstraintTypeSchedule(expectedConstraintSchedule); + final var expectedConstraint = new Constraint(expectedConstraintTypeSchedule); + + final var serializedConstraintSchedule = + ContextOuterClass.Constraint_Schedule.newBuilder() + .setStartTimestamp(startTimeSTamp) + .setDurationDays(durationDays) + .build(); + + final var serializedConstraint = + ContextOuterClass.Constraint.newBuilder().setSchedule(serializedConstraintSchedule).build(); + + final var constraint = serializer.deserialize(serializedConstraint); + + assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); + } + + @Test + void shouldSerializeConstraintOfTypeConstraintEndPointLocation() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var locationType = new LocationTypeRegion("ATH"); + final var location = new Location(locationType); + + final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location); + final var constraintTypeEndPointLocation = + new ConstraintTypeEndPointLocation(constraintEndPointLocation); + final var constraint = new Constraint(constraintTypeEndPointLocation); + + final var serializedEndPointId = serializer.serialize(endPointId); + final var serializedLocation = serializer.serialize(location); + + final var expectedConstraintEndPointLocation = + ContextOuterClass.Constraint_EndPointLocation.newBuilder() + .setEndpointId(serializedEndPointId) + .setLocation(serializedLocation) + .build(); + + final var expectedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setEndpointLocation(expectedConstraintEndPointLocation) + .build(); + + final var serializedConstraint = serializer.serialize(constraint); + + assertThat(serializedConstraint).isEqualTo(expectedConstraint); + } + + @Test + void shouldDeserializeConstraintOfTypeConstraintEndPointLocation() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var locationType = new LocationTypeRegion("ATH"); + final var location = new Location(locationType); + + final var expectedConstraintEndPointLocation = + new ConstraintEndPointLocation(endPointId, location); + final var expectedConstraintTypeEndPointLocation = + new ConstraintTypeEndPointLocation(expectedConstraintEndPointLocation); + final var expectedConstraint = new Constraint(expectedConstraintTypeEndPointLocation); + + final var serializedEndPointId = serializer.serialize(endPointId); + final var serializedLocation = serializer.serialize(location); + + final var serializedEndPointLocation = + ContextOuterClass.Constraint_EndPointLocation.newBuilder() + .setEndpointId(serializedEndPointId) + .setLocation(serializedLocation) + .build(); + + final var serializedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setEndpointLocation(serializedEndPointLocation) + .build(); + + final var constraint = serializer.deserialize(serializedConstraint); + + assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); + } + + @Test + void shouldSerializeConstraintOfTypeConstraintSlaAvailability() { + final var numDisjointPaths = 2; + final var isAllActive = true; + + final var constraintSlaAvailability = + new ConstraintSlaAvailability(numDisjointPaths, isAllActive); + final var constraintTypeSlaAvailability = + new ConstraintTypeSlaAvailability(constraintSlaAvailability); + final var constraint = new Constraint(constraintTypeSlaAvailability); + + final var expectedConstraintSlaAvailability = + ContextOuterClass.Constraint_SLA_Availability.newBuilder() + .setNumDisjointPaths(numDisjointPaths) + .setAllActive(isAllActive) + .build(); + + final var expectedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setSlaAvailability(expectedConstraintSlaAvailability) + .build(); + + final var serializedConstraint = serializer.serialize(constraint); + + assertThat(serializedConstraint).isEqualTo(expectedConstraint); + } + + @Test + void shouldDeserializeConstraintOfTypeConstraintSlaAvailability() { + final var numDisjointPaths = 2; + final var isAllActive = true; + + final var expectedConstraintSlaAvailability = + new ConstraintSlaAvailability(numDisjointPaths, isAllActive); + final var expectedConstraintTypeSlaAvailability = + new ConstraintTypeSlaAvailability(expectedConstraintSlaAvailability); + final var expectedConstraint = new Constraint(expectedConstraintTypeSlaAvailability); + + final var serializedConstraintSlaAvailability = + ContextOuterClass.Constraint_SLA_Availability.newBuilder() + .setNumDisjointPaths(numDisjointPaths) + .setAllActive(isAllActive) + .build(); + + final var serializedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setSlaAvailability(serializedConstraintSlaAvailability) + .build(); + + final var constraint = serializer.deserialize(serializedConstraint); + + assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); + } + + @Test + void shouldSerializeConstraintOfTypeConstraintSlaCapacity() { + final var capacityGbps = 77.3f; + + final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); + final var constraintTypeSlaCapacity = new ConstraintTypeSlaCapacity(constraintSlaCapacity); + final var constraint = new Constraint(constraintTypeSlaCapacity); + + final var expectedConstraintSlaCapacity = + ContextOuterClass.Constraint_SLA_Capacity.newBuilder() + .setCapacityGbps(capacityGbps) + .build(); + + final var expectedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setSlaCapacity(expectedConstraintSlaCapacity) + .build(); + + final var serializedConstraint = serializer.serialize(constraint); + + assertThat(serializedConstraint).isEqualTo(expectedConstraint); + } + + @Test + void shouldDeserializeConstraintOfTypeConstraintSlaCapacity() { + final var capacityGbps = 77.3f; + + final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps); + final var expectedConstraintTypeSlaCapacity = + new ConstraintTypeSlaCapacity(expectedConstraintSlaCapacity); + final var expectedConstraint = new Constraint(expectedConstraintTypeSlaCapacity); + + final var serializedConstraintSlaCapacity = + ContextOuterClass.Constraint_SLA_Capacity.newBuilder() + .setCapacityGbps(capacityGbps) + .build(); + + final var serializedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setSlaCapacity(serializedConstraintSlaCapacity) + .build(); + + final var constraint = serializer.deserialize(serializedConstraint); + + assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); + } + + @Test + void shouldDeserializeConstraintOfTypeConstraintSlaIsolationLevel() { + final var isolationLevelEnums = + List.of(IsolationLevelEnum.PHYSICAL_ISOLATION, IsolationLevelEnum.NO_ISOLATION); + + final var expectedConstraintSlaIsolationLevel = + new ConstraintSlaIsolationLevel(isolationLevelEnums); + final var expectedConstraintTypeSlaIsolationLevel = + new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel); + final var expectedConstraint = new Constraint(expectedConstraintTypeSlaIsolationLevel); + + final var serializedIsolationLevelEnums = + isolationLevelEnums.stream() + .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum)) + .collect(Collectors.toList()); + + final var serializedConstraintSlaIsolationLevel = + ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder() + .addAllIsolationLevel(serializedIsolationLevelEnums) + .build(); + + final var serializedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setSlaIsolation(serializedConstraintSlaIsolationLevel) + .build(); + + final var constraint = serializer.deserialize(serializedConstraint); + + assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); + } + + @Test + void shouldSerializeConstraintOfTypeConstraintSlaIsolationLevel() { + final var isolationLevelEnums = + List.of( + IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION, + IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION); + + final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnums); + final var constraintTypeSlaIsolationLevel = + new ConstraintTypeSlaIsolationLevel(constraintSlaIsolationLevel); + final var constraint = new Constraint(constraintTypeSlaIsolationLevel); + + final var serializedIsolationLevelEnums = + isolationLevelEnums.stream() + .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum)) + .collect(Collectors.toList()); + + final var expectedConstraintSlaIsolationLevel = + ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder() + .addAllIsolationLevel(serializedIsolationLevelEnums) + .build(); + + final var expectedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setSlaIsolation(expectedConstraintSlaIsolationLevel) + .build(); + + final var serializedConstraint = serializer.serialize(constraint); + + assertThat(serializedConstraint).isEqualTo(expectedConstraint); + } + + @Test + void shouldSerializeConstraintOfTypeConstraintSlaLatency() { + final var e2eLatencyMs = 45.32f; + + final var constraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs); + final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(constraintSlaLatency); + final var constraint = new Constraint(constraintTypeSlaLatency); + + final var expectedConstraintSlaLatency = + ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build(); + + final var expectedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setSlaLatency(expectedConstraintSlaLatency) + .build(); + + final var serializedConstraint = serializer.serialize(constraint); + + assertThat(serializedConstraint).isEqualTo(expectedConstraint); + } + + @Test + void shouldDeserializeConstraintOfTypeConstraintSlaLatency() { + final var e2eLatencyMs = 45.32f; + + final var expectedConstraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs); + final var expectedConstraintTypeSlaLatency = + new ConstraintTypeSlaLatency(expectedConstraintSlaLatency); + final var expectedConstraint = new Constraint(expectedConstraintTypeSlaLatency); + + final var serializedConstraintSlaLatency = + ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build(); + + final var serializedConstraint = + ContextOuterClass.Constraint.newBuilder() + .setSlaLatency(serializedConstraintSlaLatency) + .build(); + + final var constraint = serializer.deserialize(serializedConstraint); + + assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint); + } + + @Test + void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConstraint() { + final var serializedKpiValue = ContextOuterClass.Constraint.newBuilder().build(); + + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> serializer.deserialize(serializedKpiValue)); + } + + @Test + void shouldSerializeEndPointId() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var serializedTopologyId = serializer.serialize(expectedTopologyId); + final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId); + final var serializedEndPointUuid = serializer.serializeUuid(expectedId); + + final var expectedEndPointId = + ContextOuterClass.EndPointId.newBuilder() + .setTopologyId(serializedTopologyId) + .setDeviceId(serializedDeviceId) + .setEndpointUuid(serializedEndPointUuid) + .build(); + + final var serializedEndPointId = serializer.serialize(endPointId); + + assertThat(serializedEndPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId); + } + + @Test + void shouldDeserializeEndPointId() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + + final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + + final var serializedEndPointId = serializer.serialize(expectedEndPointId); + final var endPointId = serializer.deserialize(serializedEndPointId); + + assertThat(endPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId); + } + + private static Stream provideEventTypeEnum() { + return Stream.of( + Arguments.of(EventTypeEnum.CREATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE), + Arguments.of(EventTypeEnum.REMOVE, ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE), + Arguments.of(EventTypeEnum.UNDEFINED, ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED), + Arguments.of(EventTypeEnum.UPDATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_UPDATE)); + } + + @ParameterizedTest + @MethodSource("provideEventTypeEnum") + void shouldSerializeEventType( + EventTypeEnum eventType, ContextOuterClass.EventTypeEnum expectedSerializedType) { + final var serializedType = serializer.serialize(eventType); + + assertThat(serializedType.getNumber()).isEqualTo(expectedSerializedType.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideEventTypeEnum") + void shouldDeserializeEventType( + EventTypeEnum expectedEventType, ContextOuterClass.EventTypeEnum serializedEventType) { + final var eventType = serializer.deserialize(serializedEventType); + + assertThat(eventType).isEqualTo(expectedEventType); + } + + @Test + void shouldSerializeEvent() { + final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build(); + + final var expectedEvent = + ContextOuterClass.Event.newBuilder() + .setTimestamp(timestamp) + .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE) + .build(); + + final var event = new Event(1, EventTypeEnum.CREATE); + final var serializedEvent = serializer.serialize(event); + + assertThat(serializedEvent).usingRecursiveComparison().isEqualTo(expectedEvent); + } + + @Test + void shouldDeserializeEvent() { + final var expectedEvent = new Event(1, EventTypeEnum.CREATE); + final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build(); + + final var serializedEvent = + ContextOuterClass.Event.newBuilder() + .setTimestamp(timestamp) + .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE) + .build(); + final var event = serializer.deserialize(serializedEvent); + + assertThat(event).usingRecursiveComparison().isEqualTo(expectedEvent); + } + + @Test + void shouldSerializeServiceId() { + final var expectedContextId = "expectedContextId"; + final var expectedId = "expectedId"; + final var serviceId = new ServiceId(expectedContextId, expectedId); + + final var serializedContextId = serializer.serializeContextId(expectedContextId); + final var serializedIdUuid = serializer.serializeUuid(expectedId); + + final var expectedServiceId = + ContextOuterClass.ServiceId.newBuilder() + .setContextId(serializedContextId) + .setServiceUuid(serializedIdUuid) + .build(); + + final var serializedServiceId = serializer.serialize(serviceId); + + assertThat(serializedServiceId).usingRecursiveComparison().isEqualTo(expectedServiceId); + } + + @Test + void shouldDeserializeServiceId() { + final var expectedContextId = "expectedContextId"; + final var expectedId = "expectedId"; + + final var expectedServiceId = new ServiceId(expectedContextId, expectedId); + + final var serializedServiceId = serializer.serialize(expectedServiceId); + + final var serviceId = serializer.deserialize(serializedServiceId); + + assertThat(serviceId).usingRecursiveComparison().isEqualTo(expectedServiceId); + } + + private static Stream provideServiceStatusEnum() { + return Stream.of( + Arguments.of( + ServiceStatusEnum.ACTIVE, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_ACTIVE), + Arguments.of( + ServiceStatusEnum.PLANNED, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PLANNED), + Arguments.of( + ServiceStatusEnum.PENDING_REMOVAL, + ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PENDING_REMOVAL), + Arguments.of( + ServiceStatusEnum.UNDEFINED, + ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideServiceStatusEnum") + void shouldSerializeServiceStatusEnum( + ServiceStatusEnum serviceStatusEnum, + ContextOuterClass.ServiceStatusEnum expectedSerializedType) { + final var serializedServiceStatusEnum = serializer.serialize(serviceStatusEnum); + + assertThat(serializedServiceStatusEnum.getNumber()) + .isEqualTo(expectedSerializedType.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideServiceStatusEnum") + void shouldDeserializeServiceStatusEnum( + ServiceStatusEnum expectedServiceStatusEnum, + ContextOuterClass.ServiceStatusEnum serializedServiceStatusEnum) { + final var serviceStatusEnum = serializer.deserialize(serializedServiceStatusEnum); + + assertThat(serviceStatusEnum).isEqualTo(expectedServiceStatusEnum); + } + + private static Stream provideServiceTypeEnum() { + return Stream.of( + Arguments.of(ServiceTypeEnum.L2NM, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L2NM), + Arguments.of(ServiceTypeEnum.L3NM, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L3NM), + Arguments.of( + ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE, + ContextOuterClass.ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE), + Arguments.of( + ServiceTypeEnum.UNKNOWN, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN)); + } + + @ParameterizedTest + @MethodSource("provideServiceTypeEnum") + void shouldSerializeServiceTypeEnum( + ServiceTypeEnum serviceTypeEnum, ContextOuterClass.ServiceTypeEnum expectedSerializedType) { + final var serializedServiceTypeEnum = serializer.serialize(serviceTypeEnum); + + assertThat(serializedServiceTypeEnum.getNumber()).isEqualTo(expectedSerializedType.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideServiceTypeEnum") + void shouldDeserializeServiceTypeEnum( + ServiceTypeEnum expectedServiceTypeEnum, + ContextOuterClass.ServiceTypeEnum serializedServiceTypeEnum) { + final var serviceTypeEnum = serializer.deserialize(serializedServiceTypeEnum); + + assertThat(serviceTypeEnum).isEqualTo(expectedServiceTypeEnum); + } + + @Test + void shouldSerializeServiceStatus() { + final var expectedServiceStatusEnum = ServiceStatusEnum.ACTIVE; + final var serviceStatus = new ServiceStatus(expectedServiceStatusEnum); + + final var serializedServiceStatusEnum = serializer.serialize(expectedServiceStatusEnum); + + final var expectedServiceStatus = + ContextOuterClass.ServiceStatus.newBuilder() + .setServiceStatus(serializedServiceStatusEnum) + .build(); + + final var serializedServiceStatus = serializer.serialize(serviceStatus); + + assertThat(serializedServiceStatus).usingRecursiveComparison().isEqualTo(expectedServiceStatus); + } + + @Test + void shouldDeserializeServiceStatus() { + final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PENDING_REMOVAL); + + final var serializedServiceStatus = serializer.serialize(expectedServiceStatus); + final var serviceStatus = serializer.deserialize(serializedServiceStatus); + + assertThat(serviceStatus).usingRecursiveComparison().isEqualTo(expectedServiceStatus); + } + + @Test + void shouldSerializeServiceConfig() { + final var configRuleA = createConfigRule(); + final var configRuleB = createConfigRule(); + final var serviceConfig = new ServiceConfig(List.of(configRuleA, configRuleB)); + + final var expectedConfigRuleA = serializer.serialize(configRuleA); + final var expectedConfigRuleB = serializer.serialize(configRuleB); + + final var expectedServiceConfig = + ContextOuterClass.ServiceConfig.newBuilder() + .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB)) + .build(); + + final var serializedServiceConfig = serializer.serialize(serviceConfig); + + assertThat(serializedServiceConfig).usingRecursiveComparison().isEqualTo(expectedServiceConfig); + } + + @Test + void shouldDeserializeServiceConfig() { + final var expectedConfigRuleA = createConfigRule(); + final var expectedConfigRuleB = createConfigRule(); + final var expectedServiceConfig = + new ServiceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB)); + + final var configRuleA = serializer.serialize(expectedConfigRuleA); + final var configRuleB = serializer.serialize(expectedConfigRuleB); + final var serializedServiceConfig = + ContextOuterClass.ServiceConfig.newBuilder() + .addAllConfigRules(List.of(configRuleA, configRuleB)) + .build(); + + final var serviceConfig = serializer.deserialize(serializedServiceConfig); + + assertThat(serviceConfig).usingRecursiveComparison().isEqualTo(expectedServiceConfig); + } + + @Test + void shouldSerializeService() { + final var expectedServiceId = new ServiceId("contextId", "serviceId"); + final var expectedServiceTypeEnum = ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE; + final var firstExpectedTopologyId = new TopologyId("contextId", "firstTopologyId"); + final var secondExpectedTopologyId = new TopologyId("contextId", "secondTopologyId"); + + final var firstExpectedEndPointId = + new EndPointId(firstExpectedTopologyId, "firstDeviceId", "firstEndPointId"); + final var secondExpectedEndPointId = + new EndPointId(secondExpectedTopologyId, "firstDeviceId", "firstEndPointId"); + final var expectedServiceEndPointIds = + List.of(firstExpectedEndPointId, secondExpectedEndPointId); + + final var expectedConstraintTypeA = "constraintTypeA"; + final var expectedConstraintValueA = "constraintValueA"; + + final var constraintCustomA = + new ConstraintCustom(expectedConstraintTypeA, expectedConstraintValueA); + final var constraintTypeCustomA = new ConstraintTypeCustom(constraintCustomA); + final var firstExpectedConstraint = new Constraint(constraintTypeCustomA); + + final var expectedConstraintTypeB = "constraintTypeB"; + final var expectedConstraintValueB = "constraintValueB"; + + final var constraintCustomB = + new ConstraintCustom(expectedConstraintTypeB, expectedConstraintValueB); + final var constraintTypeCustomB = new ConstraintTypeCustom(constraintCustomB); + final var secondExpectedConstraint = new Constraint(constraintTypeCustomB); + + final var expectedServiceConstraints = + List.of(firstExpectedConstraint, secondExpectedConstraint); + + final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PLANNED); + + final var expectedConfigRuleA = createConfigRule(); + final var expectedConfigRuleB = createConfigRule(); + + final var expectedConfigRules = List.of(expectedConfigRuleA, expectedConfigRuleB); + + final var expectedServiceConfig = new ServiceConfig(expectedConfigRules); + + final var expectedTimestamp = 2.3; + + final var service = + new Service( + expectedServiceId, + expectedServiceTypeEnum, + expectedServiceEndPointIds, + expectedServiceConstraints, + expectedServiceStatus, + expectedServiceConfig, + expectedTimestamp); + + final var serializedServiceId = serializer.serialize(expectedServiceId); + final var serializedServiceType = serializer.serialize(expectedServiceTypeEnum); + final var serializedServiceEndPointIds = + expectedServiceEndPointIds.stream() + .map(endPointId -> serializer.serialize(endPointId)) + .collect(Collectors.toList()); + final var serializedServiceConstraints = + expectedServiceConstraints.stream() + .map(constraint -> serializer.serialize(constraint)) + .collect(Collectors.toList()); + final var serializedServiceStatus = serializer.serialize(expectedServiceStatus); + final var serializedServiceConfig = serializer.serialize(expectedServiceConfig); + final var serializedTimestamp = serializer.serialize(expectedTimestamp); + + final var expectedService = + ContextOuterClass.Service.newBuilder() + .setServiceId(serializedServiceId) + .setServiceType(serializedServiceType) + .addAllServiceEndpointIds(serializedServiceEndPointIds) + .addAllServiceConstraints(serializedServiceConstraints) + .setServiceStatus(serializedServiceStatus) + .setServiceConfig(serializedServiceConfig) + .setTimestamp(serializedTimestamp) + .build(); + + final var serializedService = serializer.serialize(service); + + assertThat(serializedService).isEqualTo(expectedService); + } + + @Test + void shouldDeserializeService() { + final var expectedServiceId = new ServiceId("contextId", "serviceId"); + final var expectedServiceTypeEnum = ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE; + final var firstExpectedTopologyId = new TopologyId("contextId", "firstTopologyId"); + final var secondExpectedTopologyId = new TopologyId("contextId", "secondTopologyId"); + + final var firstExpectedEndPointId = + new EndPointId(firstExpectedTopologyId, "firstDeviceId", "firstEndPointId"); + final var secondExpectedEndPointId = + new EndPointId(secondExpectedTopologyId, "firstDeviceId", "firstEndPointId"); + final var expectedServiceEndPointIds = + List.of(firstExpectedEndPointId, secondExpectedEndPointId); + + final var expectedConstraintTypeA = "constraintTypeA"; + final var expectedConstraintValueA = "constraintValueA"; + + final var constraintCustomA = + new ConstraintCustom(expectedConstraintTypeA, expectedConstraintValueA); + final var constraintTypeCustomA = new ConstraintTypeCustom(constraintCustomA); + final var firstExpectedConstraint = new Constraint(constraintTypeCustomA); + + final var expectedConstraintTypeB = "constraintTypeB"; + final var expectedConstraintValueB = "constraintValueB"; + + final var constraintCustomB = + new ConstraintCustom(expectedConstraintTypeB, expectedConstraintValueB); + final var constraintTypeCustomB = new ConstraintTypeCustom(constraintCustomB); + final var secondExpectedConstraint = new Constraint(constraintTypeCustomB); + + final var expectedServiceConstraints = + List.of(firstExpectedConstraint, secondExpectedConstraint); + + final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PLANNED); + + final var firstExpectedConfigRuleA = createConfigRule(); + final var secondExpectedConfigRuleB = createConfigRule(); + + final var expectedConfigRules = List.of(firstExpectedConfigRuleA, secondExpectedConfigRuleB); + + final var expectedServiceConfig = new ServiceConfig(expectedConfigRules); + + final var expectedTimestamp = 7.8; + + final var expectedService = + new Service( + expectedServiceId, + expectedServiceTypeEnum, + expectedServiceEndPointIds, + expectedServiceConstraints, + expectedServiceStatus, + expectedServiceConfig, + expectedTimestamp); + + final var serializedServiceId = serializer.serialize(expectedServiceId); + final var serializedServiceType = serializer.serialize(expectedServiceTypeEnum); + final var serializedServiceEndPointIds = + expectedServiceEndPointIds.stream() + .map(endPointId -> serializer.serialize(endPointId)) + .collect(Collectors.toList()); + final var serializedServiceConstraints = + expectedServiceConstraints.stream() + .map(constraint -> serializer.serialize(constraint)) + .collect(Collectors.toList()); + final var serializedServiceStatus = serializer.serialize(expectedServiceStatus); + final var serializedServiceConfig = serializer.serialize(expectedServiceConfig); + final var serializedTimestamp = serializer.serialize(expectedTimestamp); + + final var serializedService = + ContextOuterClass.Service.newBuilder() + .setServiceId(serializedServiceId) + .setServiceType(serializedServiceType) + .addAllServiceEndpointIds(serializedServiceEndPointIds) + .addAllServiceConstraints(serializedServiceConstraints) + .setServiceStatus(serializedServiceStatus) + .setServiceConfig(serializedServiceConfig) + .setTimestamp(serializedTimestamp) + .build(); + + final var service = serializer.deserialize(serializedService); + + assertThat(service).usingRecursiveComparison().isEqualTo(expectedService); + } + + private static Stream provideKpiSampleType() { + return Stream.of( + Arguments.of( + KpiSampleType.PACKETS_TRANSMITTED, + KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED), + Arguments.of( + KpiSampleType.PACKETS_RECEIVED, + KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED), + Arguments.of( + KpiSampleType.BYTES_TRANSMITTED, + KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED), + Arguments.of( + KpiSampleType.BYTES_RECEIVED, + KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED), + Arguments.of(KpiSampleType.UNKNOWN, KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN)); + } + + @ParameterizedTest + @MethodSource("provideKpiSampleType") + void shouldSerializeKpiSampleType( + KpiSampleType kpiSampleType, KpiSampleTypes.KpiSampleType expectedSerializedType) { + final var serializedKpiSampleType = serializer.serialize(kpiSampleType); + + assertThat(serializedKpiSampleType.getNumber()).isEqualTo(expectedSerializedType.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideKpiSampleType") + void shouldDeserializeKpiSampleType( + KpiSampleType expectedKpiSampleType, KpiSampleTypes.KpiSampleType serializedKpiSampleType) { + final var kpiSampleType = serializer.deserialize(serializedKpiSampleType); + + assertThat(kpiSampleType).isEqualTo(expectedKpiSampleType); + } + + private static Stream provideRuleState() { + return Stream.of( + Arguments.of(RuleState.POLICY_UNDEFINED, Policy.RuleState.POLICY_UNDEFINED), + Arguments.of(RuleState.POLICY_FAILED, Policy.RuleState.POLICY_FAILED), + Arguments.of(RuleState.POLICY_INSERTED, Policy.RuleState.POLICY_INSERTED), + Arguments.of(RuleState.POLICY_VALIDATED, Policy.RuleState.POLICY_VALIDATED), + Arguments.of(RuleState.POLICY_PROVISIONED, Policy.RuleState.POLICY_PROVISIONED), + Arguments.of(RuleState.POLICY_ACTIVE, Policy.RuleState.POLICY_ACTIVE), + Arguments.of(RuleState.POLICY_ENFORCED, Policy.RuleState.POLICY_ENFORCED), + Arguments.of(RuleState.POLICY_INEFFECTIVE, Policy.RuleState.POLICY_INEFFECTIVE), + Arguments.of(RuleState.POLICY_EFFECTIVE, Policy.RuleState.POLICY_EFFECTIVE), + Arguments.of(RuleState.POLICY_UPDATED, Policy.RuleState.POLICY_UPDATED), + Arguments.of(RuleState.POLICY_REMOVED, Policy.RuleState.POLICY_REMOVED)); + } + + @ParameterizedTest + @MethodSource("provideRuleState") + void shouldSerializeRuleState(RuleState ruleState, Policy.RuleState expectedSerializedType) { + final var serializedRuleState = serializer.serialize(ruleState); + + assertThat(serializedRuleState.getNumber()).isEqualTo(expectedSerializedType.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideRuleState") + void shouldDeserializeRuleState( + RuleState expectedRuleState, Policy.RuleState serializedRuleState) { + final var ruleState = serializer.deserialize(serializedRuleState); + + assertThat(ruleState).isEqualTo(expectedRuleState); + } + + @Test + void shouldSerializePolicyRuleState() { + final var expectedRuleState = RuleState.POLICY_ACTIVE; + final var policyRuleState = new PolicyRuleState(expectedRuleState); + + final var serializedRuleState = serializer.serialize(expectedRuleState); + + final var expectedPolicyRuleState = + Policy.PolicyRuleState.newBuilder().setPolicyRuleState(serializedRuleState).build(); + + final var serializedPolicyRuleState = serializer.serialize(policyRuleState); + + assertThat(serializedPolicyRuleState) + .usingRecursiveComparison() + .isEqualTo(expectedPolicyRuleState); + } + + @Test + void shouldDeserializePolicyRuleState() { + final var expectedRuleState = RuleState.POLICY_ENFORCED; + final var expectedPolicyRuleState = new PolicyRuleState(expectedRuleState); + + final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState); + + final var policyRuleState = serializer.deserialize(serializedPolicyRuleState); + + assertThat(policyRuleState).usingRecursiveComparison().isEqualTo(expectedPolicyRuleState); + } + + private static Stream provideNumericalOperator() { + return Stream.of( + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideNumericalOperator") + void shouldSerializeNumericalOperator( + NumericalOperator numericalOperator, + PolicyCondition.NumericalOperator expectedNumericalOperator) { + final var serializedNumericalOperator = serializer.serialize(numericalOperator); + + assertThat(serializedNumericalOperator).isEqualTo(expectedNumericalOperator); + } + + @ParameterizedTest + @MethodSource("provideNumericalOperator") + void shouldDeserializeNumericalOperator( + NumericalOperator expectedNumericalOperator, + PolicyCondition.NumericalOperator serializedNumericalOperator) { + final var numericalOperator = serializer.deserialize(serializedNumericalOperator); + + 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); + } + + private static Stream provideNumericalOperators() { + return Stream.of( + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN), + Arguments.of( + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL, + PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL)); + } + + @ParameterizedTest + @MethodSource("provideNumericalOperators") + void shouldSerializePolicyRuleConditionGivenMultipleNumericalOperators( + NumericalOperator expectedNumericalOperator) { + final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId"; + final var expectedPolicyRuleConditionKpiValue = new IntegerKpiValue(34); + + final var policyRuleCondition = + new PolicyRuleCondition( + expectedPolicyRuleConditionKpiId, + expectedNumericalOperator, + expectedPolicyRuleConditionKpiValue); + + final var serializedPolicyRuleConditionKpiIdUuid = + serializer.serializeUuid(expectedPolicyRuleConditionKpiId); + final var serializedPolicyRuleConditionKpiId = + KpiId.newBuilder().setKpiId(serializedPolicyRuleConditionKpiIdUuid).build(); + final var serializedNumericalOperator = serializer.serialize(expectedNumericalOperator); + final var serializedPolicyRuleConditionKpiValue = + serializer.serializeIntegerKpiValue(expectedPolicyRuleConditionKpiValue); + + final var expectedPolicyRuleCondition = + PolicyCondition.PolicyRuleCondition.newBuilder() + .setKpiId(serializedPolicyRuleConditionKpiId) + .setNumericalOperator(serializedNumericalOperator) + .setKpiValue(serializedPolicyRuleConditionKpiValue) + .build(); + + final var serializedPolicyRuleCondition = serializer.serialize(policyRuleCondition); + + assertThat(serializedPolicyRuleCondition) + .usingRecursiveComparison() + .isEqualTo(expectedPolicyRuleCondition); + } + + private static Stream provideKpiValues() { + return Stream.of( + Arguments.of( + new StringKpiValue("stringKpiValue"), + Monitoring.KpiValue.newBuilder().setStringVal("stringKpiValue").build()), + Arguments.of( + new BooleanKpiValue(true), Monitoring.KpiValue.newBuilder().setBoolVal(true).build()), + Arguments.of( + new IntegerKpiValue(44), Monitoring.KpiValue.newBuilder().setInt32Val(44).build()), + Arguments.of( + new FloatKpiValue(12.3f), Monitoring.KpiValue.newBuilder().setFloatVal(12.3f).build())); + } + + @ParameterizedTest + @MethodSource("provideKpiValues") + void shouldSerializeKpiValues(KpiValue kpiValue, Monitoring.KpiValue expectedKpiValue) { + final var serializedKpiValue = serializer.serialize(kpiValue); + + assertThat(serializedKpiValue).isEqualTo(expectedKpiValue); + } + + @ParameterizedTest + @MethodSource("provideKpiValues") + void shouldDeserializeKpiValues( + KpiValue expectedKpiValue, Monitoring.KpiValue serializedKpiValue) { + final var kpiValue = serializer.deserialize(serializedKpiValue); + + assertThat(kpiValue).usingRecursiveComparison().isEqualTo(expectedKpiValue); + } + + @Test + void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedKpiValue() { + final var serializedKpiValue = Monitoring.KpiValue.newBuilder().build(); + + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> serializer.deserialize(serializedKpiValue)); + } + + @Test + void shouldDeserializeIntegerKpiValue() { + final var expectedKpiValue = new IntegerKpiValue(66); + + final var intValue = serializer.serializeIntegerKpiValue(expectedKpiValue); + final var deserializedKpiValue = serializer.deserializeIntegerKpiValue(intValue); + + assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue()); + } + + @Test + void shouldDeserializeStringKpiValue() { + final var expectedKpiValue = new StringKpiValue("StringKpiValue"); + + final var stringValue = serializer.serializeStringKpiValue(expectedKpiValue); + final var deserializedKpiValue = serializer.deserializeStringKpiValue(stringValue); + + assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue()); + } + + @Test + void shouldDeserializeFloatKpiValue() { + final var expectedKpiValue = new FloatKpiValue(2.2f); + + final var floatValue = serializer.serializeFloatKpiValue(expectedKpiValue); + final var deserializedKpiValue = serializer.deserializeFloatKpiValue(floatValue); + + assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue()); + } + + @Test + void shouldDeserializeBooleanKpiValue() { + final var expectedKpiValue = new BooleanKpiValue(true); + + final var booleanValue = serializer.serializeBooleanKpiValue(expectedKpiValue); + final var deserializedKpiValue = serializer.deserializeBooleanKpiValue(booleanValue); + + assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue()); + } + + private static Stream provideKpiValueRanges() { + return Stream.of( + Arguments.of( + new KpiValueRange(new IntegerKpiValue(32), new IntegerKpiValue(42)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) + .build()), + Arguments.of( + new KpiValueRange(new IntegerKpiValue(32), new FloatKpiValue(42.2f)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) + .build()), + Arguments.of( + new KpiValueRange(new IntegerKpiValue(32), new BooleanKpiValue(true)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) + .build()), + Arguments.of( + new KpiValueRange(new IntegerKpiValue(32), new StringKpiValue("string")), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) + .build()), + Arguments.of( + new KpiValueRange(new FloatKpiValue(56.2f), new IntegerKpiValue(42)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) + .build()), + Arguments.of( + new KpiValueRange(new FloatKpiValue(56.2f), new FloatKpiValue(42.2f)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) + .build()), + Arguments.of( + new KpiValueRange(new FloatKpiValue(56.2f), new BooleanKpiValue(true)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) + .build()), + Arguments.of( + new KpiValueRange(new FloatKpiValue(56.2f), new StringKpiValue("string")), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) + .build()), + Arguments.of( + new KpiValueRange(new BooleanKpiValue(true), new IntegerKpiValue(42)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) + .build()), + Arguments.of( + new KpiValueRange(new BooleanKpiValue(false), new FloatKpiValue(42.2f)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) + .build()), + Arguments.of( + new KpiValueRange(new BooleanKpiValue(true), new BooleanKpiValue(true)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) + .build()), + Arguments.of( + new KpiValueRange(new BooleanKpiValue(false), new StringKpiValue("string")), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) + .build()), + Arguments.of( + new KpiValueRange(new StringKpiValue("string"), new IntegerKpiValue(42)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) + .build()), + Arguments.of( + new KpiValueRange(new StringKpiValue("string"), new FloatKpiValue(42.2f)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) + .build()), + Arguments.of( + new KpiValueRange(new StringKpiValue("string"), new BooleanKpiValue(true)), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) + .build()), + Arguments.of( + new KpiValueRange(new StringKpiValue("string"), new StringKpiValue("string")), + Monitoring.KpiValueRange.newBuilder() + .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) + .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) + .build())); + } + + @ParameterizedTest + @MethodSource("provideKpiValueRanges") + void shouldSerializeKpiValueRange( + KpiValueRange kpiValueRange, Monitoring.KpiValueRange expectedKpiValueRange) { + final var serializedKpiValueRange = serializer.serialize(kpiValueRange); + + assertThat(serializedKpiValueRange.getKpiMinValue()) + .isEqualTo(expectedKpiValueRange.getKpiMinValue()); + assertThat(serializedKpiValueRange.getKpiMaxValue()) + .isEqualTo(expectedKpiValueRange.getKpiMaxValue()); + } + + @ParameterizedTest + @MethodSource("provideKpiValueRanges") + void shouldDeserializeKpiValueRange( + KpiValueRange expectedKpiValueRange, Monitoring.KpiValueRange serializedKpiValueRange) { + final var kpiValueRange = serializer.deserialize(serializedKpiValueRange); + + assertThat(kpiValueRange.getKpiMinValue()) + .usingRecursiveComparison() + .isEqualTo(expectedKpiValueRange.getKpiMinValue()); + assertThat(kpiValueRange.getKpiMaxValue()) + .usingRecursiveComparison() + .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 alarmId = "alarmId"; + final var alarmDescription = "alarmDescription"; + final var name = "name"; + final var kpiId = "kpiId"; + final double timestamp = 100.0; + final var kpiIds = List.of("kpiId1", "kpiId2"); + + final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800)); + final var kpiValueRanges = List.of(kpiValueRange); + + final var alarmDescriptor = + new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp); + + final var serializedalarmIdUuid = serializer.serializeUuid(alarmId); + final var serializedalarmId = AlarmID.newBuilder().setAlarmId(serializedalarmIdUuid).build(); + + final var serializedKpiIdUuid = serializer.serializeUuid("kpiId1"); + final var serializedKpiId1 = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); + final var serializedKpiId2 = KpiId.newBuilder().setKpiId(serializer.serializeUuid("kpiId2")); + final var serializedKpiValueRange = serializer.serialize(kpiValueRange); + final var serializedTimeStamp = + context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(timestamp); + + final var expectedAlarmDescriptor = + Monitoring.AlarmDescriptor.newBuilder() + .setAlarmId(serializedalarmId) + .setAlarmDescription(alarmDescription) + .setName(name) + .addKpiId(serializedKpiId1) + .addKpiId(serializedKpiId2) + .addKpiValueRange(serializedKpiValueRange) + .setTimestamp(serializedTimeStamp) + .build(); + + final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor); + + assertThat(serializedAlarmDescriptor).isEqualTo(expectedAlarmDescriptor); + } + + @Test + void shouldDeserializeAlarmDescriptor() { + final var alarmId = "alarmId"; + final var alarmDescription = "alarmDescription"; + final var name = "name"; + final var kpiId = "kpiId"; + final double timestamp = 100.0; + final var kpiIds = List.of("kpiId1", "kpiId2"); + + final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800)); + final var kpiValueRanges = List.of(kpiValueRange); + + final var expectedAlarmDescriptor = + new AlarmDescriptor(alarmId, alarmDescription, name, kpiIds, kpiValueRanges, timestamp); + + final var serializedalarmIdUuid = serializer.serializeUuid(alarmId); + final var serializedalarmId = AlarmID.newBuilder().setAlarmId(serializedalarmIdUuid).build(); + + final var serializedKpiIdUuid = serializer.serializeUuid("kpiId1"); + final var serializedKpiId1 = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); + final var serializedKpiId2 = KpiId.newBuilder().setKpiId(serializer.serializeUuid("kpiId2")); + + final var serializedKpiValueRange = serializer.serialize(kpiValueRange); + final var serializedTimeStamp = + context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(timestamp); + + final var serializedAlarmDescriptor = + Monitoring.AlarmDescriptor.newBuilder() + .setAlarmId(serializedalarmId) + .setAlarmDescription(alarmDescription) + .setName(name) + .addKpiId(serializedKpiId1) + .addKpiId(serializedKpiId2) + .addKpiValueRange(serializedKpiValueRange) + .setTimestamp(serializedTimeStamp) + .build(); + + final var alarmDescriptor = serializer.deserialize(serializedAlarmDescriptor); + + assertThat(alarmDescriptor).usingRecursiveComparison().isEqualTo(expectedAlarmDescriptor); + } + + @Test + void shouldSerializeAlarmResponse() { + final var alarmId = "alarmId"; + final var text = "text"; + final var kpiValue = new IntegerKpiValue(12); + + final var alarmResponse = new AlarmResponse(alarmId, text, kpiValue); + + final var serializedAlarmIdUuid = serializer.serializeUuid(alarmId); + final var serializedAlarmId = AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build(); + final var serializedKpiValue = serializer.serialize(kpiValue); + + final var expectedAlarmResponse = + Monitoring.AlarmResponse.newBuilder() + .setAlarmId(serializedAlarmId) + .setText(text) + .setKpiValue(serializedKpiValue) + .build(); + + final var serializedAlarmResponse = serializer.serialize(alarmResponse); + + assertThat(serializedAlarmResponse).isEqualTo(expectedAlarmResponse); + } + + @Test + void shouldDeserializeAlarmResponse() { + final var alarmId = "alarmId"; + final var text = "text"; + final var kpiValue = new IntegerKpiValue(12); + + final var expectedAlarmResponse = new AlarmResponse(alarmId, text, kpiValue); + + final var serializedAlarmIdUuid = serializer.serializeUuid(alarmId); + final var serializedAlarmId = AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build(); + final var serializedKpiValue = serializer.serialize(kpiValue); + + final var serializedAlarmResponse = + Monitoring.AlarmResponse.newBuilder() + .setAlarmId(serializedAlarmId) + .setText(text) + .setKpiValue(serializedKpiValue) + .build(); + + final var alarmResponse = serializer.deserialize(serializedAlarmResponse); + + assertThat(alarmResponse).usingRecursiveComparison().isEqualTo(expectedAlarmResponse); + } + + @Test + void shouldSerializeSubDescriptor() { + final var subscriptionId = "subscriptionId"; + final var kpiId = "kpiId"; + final var samplingDurationS = 10f; + final var samplingIntervalS = 45f; + final var startTimestamp = 1.0; + final var endTimestamp = 100.0; + + final var subDescriptor = + new SubsDescriptor( + subscriptionId, + kpiId, + samplingDurationS, + samplingIntervalS, + startTimestamp, + endTimestamp); + + final var serializedSubscriptionIdUuid = serializer.serializeUuid(subscriptionId); + final var serializedSubscriptionId = + monitoring.Monitoring.SubscriptionID.newBuilder() + .setSubsId(serializedSubscriptionIdUuid) + .build(); + final var serializedKpiIdUuid = serializer.serializeUuid(kpiId); + final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); + final var serializedStartTimestamp = + ContextOuterClass.Timestamp.newBuilder().setTimestamp(startTimestamp); + final var serializedEndTimestamp = + ContextOuterClass.Timestamp.newBuilder().setTimestamp(endTimestamp); + + final var expectedSubDescriptor = + Monitoring.SubsDescriptor.newBuilder() + .setSubsId(serializedSubscriptionId) + .setKpiId(serializedKpiId) + .setSamplingDurationS(samplingDurationS) + .setSamplingIntervalS(samplingIntervalS) + .setStartTimestamp(serializedStartTimestamp) + .setEndTimestamp(serializedEndTimestamp) + .build(); + + final var serializedSubDescriptor = serializer.serialize(subDescriptor); + + assertThat(serializedSubDescriptor).isEqualTo(expectedSubDescriptor); + } + + @Test + void shouldDeserializeSubDescriptor() { + final var subscriptionId = "subscriptionId"; + final var kpiId = "kpiId"; + final var samplingDurationS = 10f; + final var samplingIntervalS = 45f; + final var startTimestamp = 1.0; + final var endTimestamp = 100.0; + + final var expectedSubDescriptor = + new SubsDescriptor( + subscriptionId, + kpiId, + samplingDurationS, + samplingIntervalS, + startTimestamp, + endTimestamp); + + final var serializedSubscriptionIdUuid = serializer.serializeUuid(subscriptionId); + final var serializedSubscriptionId = + monitoring.Monitoring.SubscriptionID.newBuilder() + .setSubsId(serializedSubscriptionIdUuid) + .build(); + final var serializedKpiIdUuid = serializer.serializeUuid(kpiId); + final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); + final var serializedStartTimestamp = + ContextOuterClass.Timestamp.newBuilder().setTimestamp(startTimestamp); + final var serializedEndTimestamp = + ContextOuterClass.Timestamp.newBuilder().setTimestamp(endTimestamp); + + final var serializedSubDescriptor = + Monitoring.SubsDescriptor.newBuilder() + .setSubsId(serializedSubscriptionId) + .setKpiId(serializedKpiId) + .setSamplingDurationS(samplingDurationS) + .setSamplingIntervalS(samplingIntervalS) + .setStartTimestamp(serializedStartTimestamp) + .setEndTimestamp(serializedEndTimestamp) + .build(); + + final var subDescriptor = serializer.deserialize(serializedSubDescriptor); + + assertThat(subDescriptor).usingRecursiveComparison().isEqualTo(expectedSubDescriptor); + } + + @Test + void shouldDeserializePolicyRuleCondition() { + final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId"; + final var expectedPolicyRuleConditionNumericalOperator = + NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN; + final var expectedPolicyRuleConditionKpiValue = new IntegerKpiValue(34); + + final var expectedPolicyRuleCondition = + new PolicyRuleCondition( + expectedPolicyRuleConditionKpiId, + expectedPolicyRuleConditionNumericalOperator, + expectedPolicyRuleConditionKpiValue); + + final var serializedPolicyRuleCondition = serializer.serialize(expectedPolicyRuleCondition); + + final var policyRuleCondition = serializer.deserialize(serializedPolicyRuleCondition); + + assertThat(policyRuleCondition) + .usingRecursiveComparison() + .isEqualTo(expectedPolicyRuleCondition); + } + + private static Stream provideBooleanOperators() { + return Stream.of( + Arguments.of( + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, + PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND), + Arguments.of( + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR), + Arguments.of( + BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED, + PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideBooleanOperators") + void shouldSerializeBooleanOperator( + BooleanOperator booleanOperator, PolicyCondition.BooleanOperator expectedBooleanOperator) { + final var serializedBooleanOperator = serializer.serialize(booleanOperator); + + assertThat(serializedBooleanOperator).isEqualTo(expectedBooleanOperator); + } + + @ParameterizedTest + @MethodSource("provideBooleanOperators") + void shouldDeserializeBooleanOperator( + BooleanOperator expectedBooleanOperator, + PolicyCondition.BooleanOperator serializedBooleanOperator) { + final var booleanOperator = serializer.deserialize(serializedBooleanOperator); + + assertThat(booleanOperator).isEqualTo(expectedBooleanOperator); + } + + private static Stream providePolicyRuleActionEnum() { + return Stream.of( + Arguments.of( + PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, + PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_SET_DEVICE_STATUS), + Arguments.of( + PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, + PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE), + Arguments.of( + PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT, + PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT), + Arguments.of( + PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION, + PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION)); + } + + @ParameterizedTest + @MethodSource("providePolicyRuleActionEnum") + void shouldSerializePolicyRuleActionEnum( + PolicyRuleActionEnum policyRuleActionEnum, + PolicyAction.PolicyRuleActionEnum expectedPolicyRuleActionEnum) { + final var serializedPolicyRuleActionEnum = serializer.serialize(policyRuleActionEnum); + + assertThat(serializedPolicyRuleActionEnum).isEqualTo(expectedPolicyRuleActionEnum); + } + + @ParameterizedTest + @MethodSource("providePolicyRuleActionEnum") + void shouldDeserializePolicyRuleActionEnum( + PolicyRuleActionEnum expectedPolicyRuleActionEnum, + PolicyAction.PolicyRuleActionEnum serializedPolicyRuleActionEnum) { + final var policyRuleActionEnum = serializer.deserialize(serializedPolicyRuleActionEnum); + + assertThat(policyRuleActionEnum).isEqualTo(expectedPolicyRuleActionEnum); + } + + @Test + void shouldSerializePolicyRuleAction() { + final var expectedPolicyRuleActionEnum = + PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT; + final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2"); + final var policyRuleAction = + new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters); + + final var serializedPolicyRuleActionEnum = serializer.serialize(expectedPolicyRuleActionEnum); + + final var expectedPolicyRuleAction = + PolicyAction.PolicyRuleAction.newBuilder() + .setAction(serializedPolicyRuleActionEnum) + .addAllParameters(expectedPolicyRuleActionParameters) + .build(); + + final var serializedPolicyRuleAction = serializer.serialize(policyRuleAction); + + assertThat(serializedPolicyRuleAction) + .usingRecursiveComparison() + .isEqualTo(expectedPolicyRuleAction); + } + + @Test + void shouldDeserializePolicyRuleAction() { + final var expectedPolicyRuleActionEnum = PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION; + final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2"); + final var expectedPolicyRuleAction = + new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters); + + final var serializedPolicyRuleAction = serializer.serialize(expectedPolicyRuleAction); + + final var policyRuleAction = serializer.deserialize(serializedPolicyRuleAction); + + assertThat(policyRuleAction).usingRecursiveComparison().isEqualTo(expectedPolicyRuleAction); + } + + @Test + void shouldSerializePolicyRuleBasic() { + final var policyRuleBasic = createPolicyRuleBasic(); + + final var expectedPolicyRuleId = policyRuleBasic.getPolicyRuleId(); + final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState(); + final var expectedPriority = policyRuleBasic.getPriority(); + final var expectedPolicyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); + final var expectedBooleanOperator = policyRuleBasic.getBooleanOperator(); + final var expectedPolicyRuleActions = policyRuleBasic.getPolicyRuleActions(); + + final var serializedPolicyRuleId = serializer.serializePolicyRuleId(expectedPolicyRuleId); + final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState); + final var serializedPolicyRuleConditions = + expectedPolicyRuleConditions.stream() + .map(policyRuleCondition -> serializer.serialize(policyRuleCondition)) + .collect(Collectors.toList()); + final var serializedBooleanOperator = serializer.serialize(expectedBooleanOperator); + final var serializedPolicyRuleActions = + expectedPolicyRuleActions.stream() + .map(policyRuleAction -> serializer.serialize(policyRuleAction)) + .collect(Collectors.toList()); + + final var expectedPolicyRuleBasic = + Policy.PolicyRuleBasic.newBuilder() + .setPolicyRuleId(serializedPolicyRuleId) + .setPolicyRuleState(serializedPolicyRuleState) + .setPriority(expectedPriority) + .addAllConditionList(serializedPolicyRuleConditions) + .setBooleanOperator(serializedBooleanOperator) + .addAllActionList(serializedPolicyRuleActions) + .build(); + + final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); + + assertThat(serializedPolicyRuleBasic) + .usingRecursiveComparison() + .isEqualTo(expectedPolicyRuleBasic); + } + + @Test + void shouldDeserializePolicyRuleBasic() { + final var expectedPolicyRuleBasic = createPolicyRuleBasic(); + + final var expectedPolicyRuleId = expectedPolicyRuleBasic.getPolicyRuleId(); + final var expectedPolicyRuleState = expectedPolicyRuleBasic.getPolicyRuleState(); + final var expectedPriority = expectedPolicyRuleBasic.getPriority(); + final var expectedPolicyRuleConditions = expectedPolicyRuleBasic.getPolicyRuleConditions(); + final var expectedBooleanOperator = expectedPolicyRuleBasic.getBooleanOperator(); + final var expectedPolicyRuleActions = expectedPolicyRuleBasic.getPolicyRuleActions(); + + final var serializedPolicyRuleId = serializer.serializePolicyRuleId(expectedPolicyRuleId); + final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState); + final var serializedPolicyRuleConditions = + expectedPolicyRuleConditions.stream() + .map(policyRuleCondition -> serializer.serialize(policyRuleCondition)) + .collect(Collectors.toList()); + final var serializedBooleanOperator = serializer.serialize(expectedBooleanOperator); + final var serializedPolicyRuleActions = + expectedPolicyRuleActions.stream() + .map(policyRuleAction -> serializer.serialize(policyRuleAction)) + .collect(Collectors.toList()); + + final var serializedPolicyRuleBasic = + Policy.PolicyRuleBasic.newBuilder() + .setPolicyRuleId(serializedPolicyRuleId) + .setPolicyRuleState(serializedPolicyRuleState) + .setPriority(expectedPriority) + .addAllConditionList(serializedPolicyRuleConditions) + .setBooleanOperator(serializedBooleanOperator) + .addAllActionList(serializedPolicyRuleActions) + .build(); + + final var policyRuleBasic = serializer.deserialize(serializedPolicyRuleBasic); + + assertThat(policyRuleBasic).usingRecursiveComparison().isEqualTo(expectedPolicyRuleBasic); + } + + @Test + void shouldSerializePolicyRuleService() { + final var policyRuleBasic = createPolicyRuleBasic(); + final var serviceId = new ServiceId("contextId", "serviceId"); + final var deviceIds = List.of("deviceId1", "deviceId2"); + + final var policyRuleService = new PolicyRuleService(policyRuleBasic, serviceId, deviceIds); + + final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); + final var serializedPolicyRuleServiceId = serializer.serialize(serviceId); + final var serializedPolicyRuleDeviceIds = + deviceIds.stream() + .map(deviceId -> serializer.serializeDeviceId(deviceId)) + .collect(Collectors.toList()); + + final var expectedPolicyRuleService = + Policy.PolicyRuleService.newBuilder() + .setPolicyRuleBasic(serializedPolicyRuleBasic) + .setServiceId(serializedPolicyRuleServiceId) + .addAllDeviceList(serializedPolicyRuleDeviceIds) + .build(); + + final var serializedPolicyRuleService = serializer.serialize(policyRuleService); + + assertThat(serializedPolicyRuleService) + .usingRecursiveComparison() + .isEqualTo(expectedPolicyRuleService); + } + + @Test + void shouldDeserializePolicyRuleService() { + final var expectedPolicyRuleBasic = createPolicyRuleBasic(); + final var expectedServiceId = new ServiceId("contextId", "serviceId"); + final var expectedDeviceIds = List.of("deviceId1", "deviceId2"); + final var expectedPolicyRuleService = + new PolicyRuleService(expectedPolicyRuleBasic, expectedServiceId, expectedDeviceIds); + + final var serializedPolicyRuleBasic = serializer.serialize(expectedPolicyRuleBasic); + final var serializedPolicyRuleServiceId = serializer.serialize(expectedServiceId); + final var serializedPolicyRuleDeviceIds = + expectedDeviceIds.stream() + .map(deviceId -> serializer.serializeDeviceId(deviceId)) + .collect(Collectors.toList()); + + final var serializedPolicyRuleService = + Policy.PolicyRuleService.newBuilder() + .setPolicyRuleBasic(serializedPolicyRuleBasic) + .setServiceId(serializedPolicyRuleServiceId) + .addAllDeviceList(serializedPolicyRuleDeviceIds) + .build(); + + final var policyRuleService = serializer.deserialize(serializedPolicyRuleService); + + assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService); + } + + @Test + void shouldSerializePolicyRuleDevice() { + final var policyRuleBasic = createPolicyRuleBasic(); + final var deviceIds = List.of("deviceId1", "deviceId2"); + + final var policyRuleDevice = new PolicyRuleDevice(policyRuleBasic, deviceIds); + + final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic); + final var serializedPolicyRuleDeviceIds = + deviceIds.stream() + .map(deviceId -> serializer.serializeDeviceId(deviceId)) + .collect(Collectors.toList()); + + final var expectedPolicyRuleDevice = + Policy.PolicyRuleDevice.newBuilder() + .setPolicyRuleBasic(serializedPolicyRuleBasic) + .addAllDeviceList(serializedPolicyRuleDeviceIds) + .build(); + + final var serializedPolicyRuleDevice = serializer.serialize(policyRuleDevice); + + assertThat(serializedPolicyRuleDevice) + .usingRecursiveComparison() + .isEqualTo(expectedPolicyRuleDevice); + } + + @Test + void shouldDeserializePolicyRuleDevice() { + final var expectedPolicyRuleBasic = createPolicyRuleBasic(); + final var expectedDeviceIds = List.of("deviceId1", "deviceId2"); + final var expectedPolicyRuleDevice = + new PolicyRuleDevice(expectedPolicyRuleBasic, expectedDeviceIds); + + final var serializedPolicyRuleBasic = serializer.serialize(expectedPolicyRuleBasic); + final var serializedPolicyRuleDeviceIds = + expectedDeviceIds.stream() + .map(deviceId -> serializer.serializeDeviceId(deviceId)) + .collect(Collectors.toList()); + + final var serializedPolicyRuleDevice = + Policy.PolicyRuleDevice.newBuilder() + .setPolicyRuleBasic(serializedPolicyRuleBasic) + .addAllDeviceList(serializedPolicyRuleDeviceIds) + .build(); + + final var policyRuleDevice = serializer.deserialize(serializedPolicyRuleDevice); + + assertThat(policyRuleDevice).usingRecursiveComparison().isEqualTo(expectedPolicyRuleDevice); + } + + @Test + void shouldSerializeKpiId() { + final var kpiId = "kpiId"; + + final var kpiIdUuid = serializer.serializeUuid(kpiId); + + final var expectedKpiId = Monitoring.KpiId.newBuilder().setKpiId(kpiIdUuid).build(); + + final var serializedKpiId = serializer.serializeKpiId(kpiId); + + assertThat(serializedKpiId).usingRecursiveComparison().isEqualTo(expectedKpiId); + } + + @Test + void shouldDeserializeKpiId() { + final var expectedKpiId = "expectedKpiId"; + + final var serializedKpiIdUuid = serializer.serializeUuid(expectedKpiId); + final var serializedKpiId = Monitoring.KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build(); + + final var kpiId = serializer.deserialize(serializedKpiId); + + assertThat(kpiId).isEqualTo(expectedKpiId); + } + + @Test + void shouldSerializeKpi() { + final var expectedKpiId = "expectedKpiId"; + final var expectedTimestamp = 100.0; + final var expectedKpiValue = new FloatKpiValue(643.45f); + + final var kpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue); + + final var serializedKpiId = serializer.serializeKpiId(expectedKpiId); + final var serializedKpiValue = serializer.serialize(expectedKpiValue); + final var serializedexpectedTimestamp = + context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestamp); + + final var expectedKpi = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiId) + .setTimestamp(serializedexpectedTimestamp) + .setKpiValue(serializedKpiValue) + .build(); + + final var serializedKpi = serializer.serialize(kpi); + + assertThat(serializedKpi).usingRecursiveComparison().isEqualTo(expectedKpi); + } + + @Test + void shouldDeserializeKpi() { + final var expectedKpiId = "expectedKpiId"; + final var expectedTimestamp = 100.0; + final var expectedKpiValue = new BooleanKpiValue(true); + final var expectedKpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue); + + final var serializedKpi = serializer.serialize(expectedKpi); + + final var kpi = serializer.deserialize(serializedKpi); + + assertThat(kpi).usingRecursiveComparison().isEqualTo(expectedKpi); + } + + @Test + void shouldSerializeKpisList() { + final var expectedKpiIdA = "expectedKpiIdA"; + final var expectedTimestampA = 100.0; + final var expectedKpiValueA = new FloatKpiValue(643.45f); + final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA); + final var serializedexpectedTimestampA = + context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampA); + final var serializedKpiValueA = serializer.serialize(expectedKpiValueA); + final var kpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA); + + final var expectedKpiIdB = "expectedKpiIdB"; + final var expectedTimestampB = 100.0; + final var expectedKpiValueB = new IntegerKpiValue(32); + final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB); + final var serializedexpectedTimestampB = + context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampB); + 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(serializedexpectedTimestampA) + .setKpiValue(serializedKpiValueA) + .build(); + + final var expectedKpiB = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdB) + .setTimestamp(serializedexpectedTimestampB) + .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 = 100.0; + final var expectedKpiValueA = new FloatKpiValue(643.45f); + final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA); + final var serializedexpectedTimestampA = + context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampA); + final var serializedKpiValueA = serializer.serialize(expectedKpiValueA); + final var expectedKpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA); + + final var expectedKpiIdB = "expectedKpiIdB"; + final var expectedTimestampB = 200.0; + final var expectedKpiValueB = new IntegerKpiValue(32); + final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB); + final var serializedexpectedTimestampB = + context.ContextOuterClass.Timestamp.newBuilder().setTimestamp(expectedTimestampB); + 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(serializedexpectedTimestampA) + .setKpiValue(serializedKpiValueA) + .build(); + + final var serializedKpiB = + Monitoring.Kpi.newBuilder() + .setKpiId(serializedKpiIdB) + .setTimestamp(serializedexpectedTimestampB) + .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"; + final var expectedKpiSampleType = KpiSampleType.BYTES_RECEIVED; + final var expectedDeviceId = "expectedDeviceId"; + + final var expectedTopologyId = new TopologyId("contextId", "topologyId"); + final var expectedEndPointId = + new EndPointId(expectedTopologyId, expectedDeviceId, "endpointId"); + final var expectedServiceId = new ServiceId("contextId", "serviceId"); + final var expectedSliceId = new SliceId("contextId", "sliceId"); + + final var kpiDescriptor = + new KpiDescriptor( + expectedKpiDescription, + expectedKpiSampleType, + expectedDeviceId, + expectedEndPointId, + expectedServiceId, + expectedSliceId); + + final var serializedKpiSampleType = serializer.serialize(expectedKpiSampleType); + final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId); + final var serializedEndPointId = serializer.serialize(expectedEndPointId); + final var serializedServiceId = serializer.serialize(expectedServiceId); + final var serializedSliceId = serializer.serialize(expectedSliceId); + + final var expectedKpiDescriptor = + Monitoring.KpiDescriptor.newBuilder() + .setKpiDescription(expectedKpiDescription) + .setKpiSampleType(serializedKpiSampleType) + .setDeviceId(serializedDeviceId) + .setEndpointId(serializedEndPointId) + .setServiceId(serializedServiceId) + .setSliceId(serializedSliceId) + .build(); + + final var serializedKpiDescriptor = serializer.serialize(kpiDescriptor); + + assertThat(serializedKpiDescriptor).usingRecursiveComparison().isEqualTo(expectedKpiDescriptor); + } + + @Test + void shouldDeserializeKpiDescriptor() { + final var expectedKpiDescription = "expectedKpiDescription"; + final var expectedKpiSampleType = KpiSampleType.BYTES_RECEIVED; + final var expectedDeviceId = "expectedDeviceId"; + + final var expectedTopologyId = new TopologyId("contextId", "topologyId"); + final var expectedEndPointId = + new EndPointId(expectedTopologyId, expectedDeviceId, "endpointId"); + final var expectedServiceId = new ServiceId("contextId", "serviceId"); + final var expectedSliceId = new SliceId("contextId", "sliceId"); + + final var expectedKpiDescriptor = + new KpiDescriptor( + expectedKpiDescription, + expectedKpiSampleType, + expectedDeviceId, + expectedEndPointId, + expectedServiceId, + expectedSliceId); + + final var serializedKpiSampleType = serializer.serialize(expectedKpiSampleType); + final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId); + final var serializedEndPointId = serializer.serialize(expectedEndPointId); + final var serializedServiceId = serializer.serialize(expectedServiceId); + final var serializedSliceId = serializer.serialize(expectedSliceId); + + final var serializedKpiDescriptor = + Monitoring.KpiDescriptor.newBuilder() + .setKpiDescription(expectedKpiDescription) + .setKpiSampleType(serializedKpiSampleType) + .setDeviceId(serializedDeviceId) + .setEndpointId(serializedEndPointId) + .setServiceId(serializedServiceId) + .setSliceId(serializedSliceId) + .build(); + + final var kpiDescriptor = serializer.deserialize(serializedKpiDescriptor); + + assertThat(kpiDescriptor).usingRecursiveComparison().isEqualTo(expectedKpiDescriptor); + } + + @Test + void shouldSerializeDeviceConfig() { + final var expectedConfigRuleCustomA = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey("resourceKeyA") + .setResourceValue("resourceValueA") + .build(); + + final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); + + final var expectedConfigRuleCustomB = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey("resourceKeyB") + .setResourceValue("resourceValueB") + .build(); + + final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB"); + + final var expectedConfigRuleA = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) + .setCustom(expectedConfigRuleCustomA) + .build(); + final var expectedConfigRuleB = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) + .setCustom(expectedConfigRuleCustomB) + .build(); + + final var expectedDeviceConfig = + ContextOuterClass.DeviceConfig.newBuilder() + .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB)) + .build(); + + final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA); + final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB); + + final var configRuleA = new ConfigRule(ConfigActionEnum.SET, configRuleTypeA); + final var configRuleB = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeB); + + final var deviceConfig = new DeviceConfig(List.of(configRuleA, configRuleB)); + final var serializedDeviceConfig = serializer.serialize(deviceConfig); + + assertThat(serializedDeviceConfig).isEqualTo(expectedDeviceConfig); + } + + @Test + void shouldDeserializeDeviceConfig() { + final var expectedConfigRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); + final var expectedConfigRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB"); + + final var expectedConfigRuleTypeA = new ConfigRuleTypeCustom(expectedConfigRuleCustomA); + final var expectedConfigRuleTypeB = new ConfigRuleTypeCustom(expectedConfigRuleCustomB); + + final var expectedConfigRuleA = new ConfigRule(ConfigActionEnum.SET, expectedConfigRuleTypeA); + final var expectedConfigRuleB = + new ConfigRule(ConfigActionEnum.DELETE, expectedConfigRuleTypeB); + + final var expectedDeviceConfig = + new DeviceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB)); + + final var configRuleCustomA = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey("resourceKeyA") + .setResourceValue("resourceValueA") + .build(); + + final var configRuleCustomB = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey("resourceKeyB") + .setResourceValue("resourceValueB") + .build(); + + final var configRuleA = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) + .setCustom(configRuleCustomA) + .build(); + final var configRuleB = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) + .setCustom(configRuleCustomB) + .build(); + final var serializedDeviceConfig = + ContextOuterClass.DeviceConfig.newBuilder() + .addAllConfigRules(List.of(configRuleA, configRuleB)) + .build(); + final var deviceConfig = serializer.deserialize(serializedDeviceConfig); + + assertThat(deviceConfig).usingRecursiveComparison().isEqualTo(expectedDeviceConfig); + } + + private static Stream provideOperationalStatusEnum() { + return Stream.of( + Arguments.of( + DeviceOperationalStatus.ENABLED, + DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED), + Arguments.of( + DeviceOperationalStatus.DISABLED, + DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED), + Arguments.of( + DeviceOperationalStatus.UNDEFINED, + DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideOperationalStatusEnum") + void shouldSerializeOperationalStatusEnum( + DeviceOperationalStatus opStatus, + ContextOuterClass.DeviceOperationalStatusEnum expectedOpStatus) { + final var serializedOpStatus = serializer.serialize(opStatus); + assertThat(serializedOpStatus.getNumber()).isEqualTo(expectedOpStatus.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideOperationalStatusEnum") + void shouldDeserializeOperationalStatusEnum( + DeviceOperationalStatus expectedOpStatus, + ContextOuterClass.DeviceOperationalStatusEnum serializedOpStatus) { + final var operationalStatus = serializer.deserialize(serializedOpStatus); + assertThat(operationalStatus).isEqualTo(expectedOpStatus); + } + + private static Stream provideDeviceDriverEnum() { + return Stream.of( + Arguments.of( + DeviceDriverEnum.OPENCONFIG, + ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG), + Arguments.of( + DeviceDriverEnum.TRANSPORT_API, + ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API), + Arguments.of(DeviceDriverEnum.P4, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4), + Arguments.of( + DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, + ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY), + Arguments.of( + DeviceDriverEnum.ONF_TR_352, + ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352), + Arguments.of( + DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED)); + } + + @ParameterizedTest + @MethodSource("provideDeviceDriverEnum") + void shouldSerializeDeviceDriverEnum( + DeviceDriverEnum deviceDriverEnum, + ContextOuterClass.DeviceDriverEnum expectedDeviceDriverEnum) { + final var serializedDeviceDriverEnum = serializer.serialize(deviceDriverEnum); + + assertThat(serializedDeviceDriverEnum.getNumber()) + .isEqualTo(expectedDeviceDriverEnum.getNumber()); + } + + @ParameterizedTest + @MethodSource("provideDeviceDriverEnum") + void shouldDeserializeDeviceDriverEnum( + DeviceDriverEnum expectedDeviceDriverEnum, + ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) { + final var deviceDriverEnum = serializer.deserialize(serializedDeviceDriverEnum); + + assertThat(deviceDriverEnum).isEqualTo(expectedDeviceDriverEnum); + } + + @Test + void shouldSerializeEndPoint() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + final var endPointType = "endPointType"; + final var kpiSampleTypes = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + + final var locationTypeRegion = new LocationTypeRegion("ATH"); + final var location = new Location(locationTypeRegion); + final var endPoint = + new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build(); + + final var serializedEndPointId = serializer.serialize(endPointId); + final var serializedKpiSampleTypes = + kpiSampleTypes.stream() + .map(kpiSampleType -> serializer.serialize(kpiSampleType)) + .collect(Collectors.toList()); + final var serializedLocation = serializer.serialize(location); + + final var expectedEndPoint = + ContextOuterClass.EndPoint.newBuilder() + .setEndpointId(serializedEndPointId) + .setEndpointType(endPointType) + .addAllKpiSampleTypes(serializedKpiSampleTypes) + .setEndpointLocation(serializedLocation) + .build(); + + final var serializedEndPoint = serializer.serialize(endPoint); + + assertThat(serializedEndPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint); + } + + @Test + void shouldDeserializeEndPoint() { + final var expectedTopologyId = new TopologyId("contextId", "id"); + final var expectedDeviceId = "expectedDeviceId"; + final var expectedId = "expectedId"; + final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId); + final var expectedEndPointType = "expectedEndPointType"; + final var expectedKpiSampleTypes = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + + final var expectedLocationTypeRegion = new LocationTypeRegion("ATH"); + final var expectedLocation = new Location(expectedLocationTypeRegion); + + final var expectedEndPoint = + new EndPointBuilder(expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes) + .location(expectedLocation) + .build(); + + final var serializedEndPointId = serializer.serialize(expectedEndPointId); + final var serializedKpiSampleTypes = + expectedKpiSampleTypes.stream() + .map(kpiSampleType -> serializer.serialize(kpiSampleType)) + .collect(Collectors.toList()); + final var serializedLocation = serializer.serialize(expectedLocation); + + final var serializedEndPoint = + ContextOuterClass.EndPoint.newBuilder() + .setEndpointId(serializedEndPointId) + .setEndpointType(expectedEndPointType) + .addAllKpiSampleTypes(serializedKpiSampleTypes) + .setEndpointLocation(serializedLocation) + .build(); + + final var endPoint = serializer.deserialize(serializedEndPoint); + + assertThat(endPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint); + } + + @Test + void shouldSerializeDevice() { + final var expectedConfigRuleCustomA = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey("resourceKeyA") + .setResourceValue("resourceValueA") + .build(); + final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); + + final var expectedConfigRule = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) + .setCustom(expectedConfigRuleCustomA) + .build(); + + 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 expectedTopologyIdA = new TopologyId("contextIdA", "idA"); + final var expectedDeviceIdA = "expectedDeviceIdA"; + final var expectedIdA = "expectedIdA"; + final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA); + + final var endPointTypeA = "endPointTypeA"; + final var kpiSampleTypesA = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + final var locationTypeRegionA = new LocationTypeRegion("ATH"); + final var locationA = new Location(locationTypeRegionA); + final var endPointA = + new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA) + .location(locationA) + .build(); + + 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(endPointA, endPointB); + + final var expectedDeviceConfig = + ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(expectedConfigRule).build(); + + final var serializedDeviceId = serializer.serializeDeviceId("deviceId"); + final var serializedDrivers = + deviceDrivers.stream() + .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum)) + .collect(Collectors.toList()); + + final var serializedEndPoints = + endPoints.stream() + .map(endPoint -> serializer.serialize(endPoint)) + .collect(Collectors.toList()); + + final var deviceBuilder = ContextOuterClass.Device.newBuilder(); + + deviceBuilder.setDeviceId(serializedDeviceId); + deviceBuilder.setDeviceType("deviceType"); + deviceBuilder.setDeviceConfig(expectedDeviceConfig); + deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED)); + deviceBuilder.addAllDeviceDrivers(serializedDrivers); + deviceBuilder.addAllDeviceEndpoints(serializedEndPoints); + + final var expectedDevice = deviceBuilder.build(); + + final var device = + new Device( + "deviceId", + "deviceType", + deviceConfig, + DeviceOperationalStatus.ENABLED, + deviceDrivers, + endPoints); + final var serializedDevice = serializer.serialize(device); + + assertThat(serializedDevice).isEqualTo(expectedDevice); + } + + @Test + void shouldDeserializeDevice() { + final var configRuleCustom = new ConfigRuleCustom("resourceKeyA", "resourceValueA"); + final var expectedConfigRuleCustom = + ContextOuterClass.ConfigRule_Custom.newBuilder() + .setResourceKey("resourceKeyA") + .setResourceValue("resourceValueA") + .build(); + final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom); + + final var expectedConfig = + new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.DELETE, configRuleType))); + + final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4); + + final var expectedTopologyIdA = new TopologyId("contextIdA", "idA"); + final var expectedDeviceIdA = "expectedDeviceIdA"; + final var expectedIdA = "expectedIdA"; + final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA); + + final var endPointTypeA = "endPointTypeA"; + final var kpiSampleTypesA = + List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED); + final var locationTypeRegionA = new LocationTypeRegion("ATH"); + final var locationA = new Location(locationTypeRegionA); + final var endPointA = + new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA) + .location(locationA) + .build(); + + 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(endPointA, endPointB); + + final var expectedDevice = + new Device( + "deviceId", + "deviceType", + expectedConfig, + DeviceOperationalStatus.ENABLED, + deviceDrivers, + endPoints); + + final var configRule = + ContextOuterClass.ConfigRule.newBuilder() + .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE) + .setCustom(expectedConfigRuleCustom) + .build(); + final var deviceConfig = + ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(configRule).build(); + + final var serializedDeviceId = serializer.serializeDeviceId("deviceId"); + final var serializedDeviceOperationalStatus = + serializer.serialize(DeviceOperationalStatus.ENABLED); + + final var serializedDrivers = + deviceDrivers.stream() + .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum)) + .collect(Collectors.toList()); + + final var serializedEndPoints = + endPoints.stream() + .map(endPoint -> serializer.serialize(endPoint)) + .collect(Collectors.toList()); + + final var deviceBuilder = ContextOuterClass.Device.newBuilder(); + deviceBuilder.setDeviceId(serializedDeviceId); + deviceBuilder.setDeviceType("deviceType"); + deviceBuilder.setDeviceConfig(deviceConfig); + deviceBuilder.setDeviceOperationalStatus(serializedDeviceOperationalStatus); + deviceBuilder.addAllDeviceDrivers(serializedDrivers); + deviceBuilder.addAllDeviceEndpoints(serializedEndPoints); + + final var serializedDevice = deviceBuilder.build(); + final var device = serializer.deserialize(serializedDevice); + + 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"; + + final var serializeUuid = serializer.serializeUuid(expectedUuid); + + assertThat(serializeUuid.getUuid()).isEqualTo(expectedUuid); + } + + @Test + void shouldDeserializeUuid() { + final var expectedUuid = "uuid"; + + final var uuid = serializer.deserialize(Uuid.newBuilder().setUuid(expectedUuid).build()); + + assertThat(uuid).isEqualTo(expectedUuid); + } +} -- GitLab From 54f1f40cdf39e96111ec04c337f26a425ffde95e Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Mon, 26 Sep 2022 21:51:13 +0300 Subject: [PATCH 13/34] Fix tests --- .../eu/teraflow/policy/SerializerTest.java | 54 ++++++++++++------- 1 file changed, 36 insertions(+), 18 deletions(-) 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 fa0495217..f67cb998a 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java @@ -2505,97 +2505,113 @@ class SerializerTest { private static Stream provideKpiValueRanges() { return Stream.of( Arguments.of( - new KpiValueRange(new IntegerKpiValue(32), new IntegerKpiValue(42)), + new KpiValueRange( + new IntegerKpiValue(32), new IntegerKpiValue(42), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) .build()), Arguments.of( - new KpiValueRange(new IntegerKpiValue(32), new FloatKpiValue(42.2f)), + new KpiValueRange( + new IntegerKpiValue(32), new FloatKpiValue(42.2f), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) .build()), Arguments.of( - new KpiValueRange(new IntegerKpiValue(32), new BooleanKpiValue(true)), + new KpiValueRange( + new IntegerKpiValue(32), new BooleanKpiValue(true), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) .build()), Arguments.of( - new KpiValueRange(new IntegerKpiValue(32), new StringKpiValue("string")), + new KpiValueRange( + new IntegerKpiValue(32), new StringKpiValue("string"), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setInt32Val(32).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) .build()), Arguments.of( - new KpiValueRange(new FloatKpiValue(56.2f), new IntegerKpiValue(42)), + new KpiValueRange( + new FloatKpiValue(56.2f), new IntegerKpiValue(42), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) .build()), Arguments.of( - new KpiValueRange(new FloatKpiValue(56.2f), new FloatKpiValue(42.2f)), + new KpiValueRange( + new FloatKpiValue(56.2f), new FloatKpiValue(42.2f), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) .build()), Arguments.of( - new KpiValueRange(new FloatKpiValue(56.2f), new BooleanKpiValue(true)), + new KpiValueRange( + new FloatKpiValue(56.2f), new BooleanKpiValue(true), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) .build()), Arguments.of( - new KpiValueRange(new FloatKpiValue(56.2f), new StringKpiValue("string")), + new KpiValueRange( + new FloatKpiValue(56.2f), new StringKpiValue("string"), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) .build()), Arguments.of( - new KpiValueRange(new BooleanKpiValue(true), new IntegerKpiValue(42)), + new KpiValueRange( + new BooleanKpiValue(true), new IntegerKpiValue(42), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) .build()), Arguments.of( - new KpiValueRange(new BooleanKpiValue(false), new FloatKpiValue(42.2f)), + new KpiValueRange( + new BooleanKpiValue(false), new FloatKpiValue(42.2f), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) .build()), Arguments.of( - new KpiValueRange(new BooleanKpiValue(true), new BooleanKpiValue(true)), + new KpiValueRange( + new BooleanKpiValue(true), new BooleanKpiValue(true), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) .build()), Arguments.of( - new KpiValueRange(new BooleanKpiValue(false), new StringKpiValue("string")), + new KpiValueRange( + new BooleanKpiValue(false), new StringKpiValue("string"), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) .build()), Arguments.of( - new KpiValueRange(new StringKpiValue("string"), new IntegerKpiValue(42)), + new KpiValueRange( + new StringKpiValue("string"), new IntegerKpiValue(42), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setInt32Val(42).build()) .build()), Arguments.of( - new KpiValueRange(new StringKpiValue("string"), new FloatKpiValue(42.2f)), + new KpiValueRange( + new StringKpiValue("string"), new FloatKpiValue(42.2f), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build()) .build()), Arguments.of( - new KpiValueRange(new StringKpiValue("string"), new BooleanKpiValue(true)), + new KpiValueRange( + new StringKpiValue("string"), new BooleanKpiValue(true), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build()) .build()), Arguments.of( - new KpiValueRange(new StringKpiValue("string"), new StringKpiValue("string")), + new KpiValueRange( + new StringKpiValue("string"), new StringKpiValue("string"), false, false, false), Monitoring.KpiValueRange.newBuilder() .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build()) @@ -2663,7 +2679,8 @@ class SerializerTest { final double timestamp = 100.0; final var kpiIds = List.of("kpiId1", "kpiId2"); - final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800)); + final var kpiValueRange = + new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800), false, false, false); final var kpiValueRanges = List.of(kpiValueRange); final var alarmDescriptor = @@ -2704,7 +2721,8 @@ class SerializerTest { final double timestamp = 100.0; final var kpiIds = List.of("kpiId1", "kpiId2"); - final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800)); + final var kpiValueRange = + new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800), false, false, false); final var kpiValueRanges = List.of(kpiValueRange); final var expectedAlarmDescriptor = -- GitLab From 8fe29262340df3a16aee2a34a145c0f3265b8b56 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Tue, 27 Sep 2022 09:09:28 +0300 Subject: [PATCH 14/34] Add LongKpiValue --- .../java/eu/teraflow/policy/Serializer.java | 20 +++++ .../policy/monitoring/model/LongKpiValue.java | 36 ++++++++ src/policy/target/kubernetes/kubernetes.yml | 89 +++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 src/policy/src/main/java/eu/teraflow/policy/monitoring/model/LongKpiValue.java create mode 100644 src/policy/target/kubernetes/kubernetes.yml 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 aba0c1801..3af49b3d0 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java +++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java @@ -96,6 +96,7 @@ import eu.teraflow.policy.monitoring.model.Kpi; import eu.teraflow.policy.monitoring.model.KpiDescriptor; import eu.teraflow.policy.monitoring.model.KpiValue; import eu.teraflow.policy.monitoring.model.KpiValueRange; +import eu.teraflow.policy.monitoring.model.LongKpiValue; import eu.teraflow.policy.monitoring.model.StringKpiValue; import eu.teraflow.policy.monitoring.model.SubsDescriptor; import java.util.ArrayList; @@ -1476,6 +1477,12 @@ public class Serializer { return builder.setInt32Val(kpiValue.getValue()).build(); } + public Monitoring.KpiValue serializeLongKpiValue(KpiValue kpiValue) { + final var builder = Monitoring.KpiValue.newBuilder(); + + return builder.setInt64Val(kpiValue.getValue()).build(); + } + public int deserializeIntegerKpiValue(Monitoring.KpiValue serializedKpiValue) { return serializedKpiValue.getInt32Val(); @@ -1488,6 +1495,10 @@ public class Serializer { final var serializedIntegerKpiValue = serializeIntegerKpiValue((KpiValue) kpiValue); builder.setInt32Val(serializedIntegerKpiValue.getInt32Val()); } + if (kpiValue.getValue() instanceof Long) { + final var serializedIntegerKpiValue = serializeLongKpiValue((KpiValue) kpiValue); + builder.setInt64Val(serializedIntegerKpiValue.getInt64Val()); + } if (kpiValue.getValue() instanceof Float) { final var serializedFloatKpiValue = serializeFloatKpiValue((KpiValue) kpiValue); builder.setFloatVal(serializedFloatKpiValue.getFloatVal()); @@ -1512,6 +1523,15 @@ public class Serializer { case INT32VAL: final var intValue = deserializeIntegerKpiValue(serializedKpiValue); return new IntegerKpiValue(intValue); + case UINT32VAL: + final var uintValue = deserializeIntegerKpiValue(serializedKpiValue); + return new IntegerKpiValue(uintValue); + case INT64VAL: + final var longValue = deserializeIntegerKpiValue(serializedKpiValue); + return new LongKpiValue(longValue); + case UINT64VAL: + final var ulongValue = deserializeIntegerKpiValue(serializedKpiValue); + return new LongKpiValue(ulongValue); case BOOLVAL: final var booleanValue = deserializeBooleanKpiValue(serializedKpiValue); return new BooleanKpiValue(booleanValue); diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/LongKpiValue.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/LongKpiValue.java new file mode 100644 index 000000000..00752ca7d --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/LongKpiValue.java @@ -0,0 +1,36 @@ +/* +* 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.monitoring.model; + +public class LongKpiValue implements KpiValue { + + private final long value; + + public LongKpiValue(int value) { + this.value = value; + } + + @Override + public Long getValue() { + return this.value; + } + + @Override + public String toString() { + return String.format("%s:{value:\"%d\"}", getClass().getSimpleName(), value); + } +} diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml new file mode 100644 index 000000000..a5b807f83 --- /dev/null +++ b/src/policy/target/kubernetes/kubernetes.yml @@ -0,0 +1,89 @@ +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + app.quarkus.io/commit-id: 54f1f40cdf39e96111ec04c337f26a425ffde95e + app.quarkus.io/build-timestamp: 2022-09-27 - 06:07:50 +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 + selector: + app.kubernetes.io/name: policyservice + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + app.quarkus.io/commit-id: 54f1f40cdf39e96111ec04c337f26a425ffde95e + app.quarkus.io/build-timestamp: 2022-09-27 - 06:07:50 +0000 + labels: + app: policyservice + app.kubernetes.io/name: policyservice + name: policyservice +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: policyservice + template: + metadata: + annotations: + app.quarkus.io/commit-id: 54f1f40cdf39e96111ec04c337f26a425ffde95e + app.quarkus.io/build-timestamp: 2022-09-27 - 06:07:50 +0000 + labels: + app: policyservice + app.kubernetes.io/name: policyservice + spec: + containers: + - env: + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - 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: + failureThreshold: 3 + httpGet: + path: /q/health/live + port: 8080 + scheme: HTTP + initialDelaySeconds: 2 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 10 + name: policyservice + ports: + - containerPort: 8080 + name: http + protocol: TCP + - containerPort: 6060 + name: grpc + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /q/health/ready + port: 8080 + scheme: HTTP + initialDelaySeconds: 2 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 10 -- GitLab From 4467a807aa4d205a8ed2d035a488d8dcd7f330bd Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Tue, 27 Sep 2022 14:19:26 +0300 Subject: [PATCH 15/34] Add ADD_SERVICE_CONFIGRULE policy action --- .../eu/teraflow/policy/PolicyServiceImpl.java | 108 ++++++++++++------ .../policy/context/model/Service.java | 6 +- 2 files changed, 81 insertions(+), 33 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index 10820971d..b5617dec3 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -17,15 +17,19 @@ package eu.teraflow.policy; 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.Constraint; import eu.teraflow.policy.context.model.ConstraintCustom; import eu.teraflow.policy.context.model.ConstraintTypeCustom; import eu.teraflow.policy.context.model.DeviceOperationalStatus; +import eu.teraflow.policy.context.model.ServiceConfig; import eu.teraflow.policy.device.DeviceService; 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.PolicyRuleDevice; @@ -44,7 +48,6 @@ import java.time.Duration; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -108,6 +111,16 @@ public class PolicyServiceImpl implements PolicyService { this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter; } + private static String gen() { + Random r = new Random(System.currentTimeMillis()); + return String.valueOf((1 + r.nextInt(2)) * 10000 + r.nextInt(10000)); + } + + private static double getTimeStamp() { + long now = Instant.now().getEpochSecond(); + return Long.valueOf(now).doubleValue(); + } + private void provisionAlarm( PolicyRuleBasic policyRuleBasic, List alarmDescriptorList, @@ -179,22 +192,11 @@ public class PolicyServiceImpl implements PolicyService { } } - private List parsePolicyRuleAction(PolicyRuleAction policyRuleAction) { - if (policyRuleAction.getPolicyRuleActionEnum() - == PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT) { - List parameters = policyRuleAction.getPolicyRuleActionParameters(); - if (parameters.size() % 2 == 0) { - return parameters; - } - } - return Collections.emptyList(); - } - private void activateDevice(String alarmId) { PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId); PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); PolicyRuleBasic policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); - List actionParameters = parsePolicyRuleAction(policyRuleAction); + List actionParameters = policyRuleAction.getPolicyRuleActionParameters(); LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE); @@ -223,17 +225,49 @@ public class PolicyServiceImpl implements PolicyService { }); } - private void activateService(String alarmId) { - PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId); + private void addServiceConfigRule( + PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) { + + List actionParameters = policyRuleAction.getPolicyRuleActionParameters(); + List newConfigRules = new ArrayList<>(); + + for (int i = 0; i < actionParameters.size() - 3; i += 3) { + ConfigActionEnum configActionEnum; + if (actionParameters.get(i) == "SET") { + configActionEnum = ConfigActionEnum.SET; + } else if (actionParameters.get(0) == "DELETE") { + configActionEnum = ConfigActionEnum.DELETE; + } else { + configActionEnum = ConfigActionEnum.UNDEFINED; + break; + } + + ConfigRuleCustom configRuleCustom = + new ConfigRuleCustom(actionParameters.get(i + 1), actionParameters.get(i + 2)); + ConfigRuleTypeCustom configRuleType = new ConfigRuleTypeCustom(configRuleCustom); + ConfigRule configRule = new ConfigRule(configActionEnum, configRuleType); + newConfigRules.add(configRule); + } + + var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId()); + deserializedServiceUni + .subscribe() + .with( + deserializedService -> { + List configRules = + deserializedService.getServiceConfig().getConfigRules(); + configRules.addAll(newConfigRules); + deserializedService.setServiceConfig(new ServiceConfig(configRules)); + }); + } + + private void addServiceConstraint( + PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) { + PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); - PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); - List actionParameters = parsePolicyRuleAction(policyRuleAction); + List actionParameters = policyRuleAction.getPolicyRuleActionParameters(); List constraintList = new ArrayList<>(); - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); - policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE); - contextService.setPolicyRule(policyRuleBasic); - for (int i = 0; i < actionParameters.size() - 2; i += 2) { var constraintCustom = new ConstraintCustom(actionParameters.get(i), actionParameters.get(i + 1)); @@ -257,6 +291,26 @@ public class PolicyServiceImpl implements PolicyService { }); } + private void activateService(String alarmId) { + PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId); + PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); + PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); + + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); + policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE); + contextService.setPolicyRule(policyRuleBasic); + + switch (policyRuleAction.getPolicyRuleActionEnum()) { + case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT: + addServiceConstraint(policyRuleService, policyRuleAction); + case POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE: + addServiceConfigRule(policyRuleService, policyRuleAction); + default: + LOGGER.errorf(INVALID_MESSAGE, policyRuleAction.getPolicyRuleActionEnum()); + return; + } + } + private void validateDevice(PolicyRuleDevice policyRuleDevice) { final var deviceIds = policyRuleDevice.getDeviceIds(); final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); @@ -364,16 +418,6 @@ public class PolicyServiceImpl implements PolicyService { return List.of(); } - private static String gen() { - Random r = new Random(System.currentTimeMillis()); - return String.valueOf((1 + r.nextInt(2)) * 10000 + r.nextInt(10000)); - } - - private static double getTimeStamp() { - long now = Instant.now().getEpochSecond(); - return Long.valueOf(now).doubleValue(); - } - private List parsePolicyRuleConditionOr(PolicyRuleBasic policyRuleBasic) { List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions(); diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java index bf9cf6880..0ff697932 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java +++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java @@ -26,7 +26,7 @@ public class Service { private final List serviceEndPointIds; private final List serviceConstraints; private final ServiceStatus serviceStatus; - private final ServiceConfig serviceConfig; + private ServiceConfig serviceConfig; private final double timestamp; public Service( @@ -70,6 +70,10 @@ public class Service { return serviceStatus; } + public void setServiceConfig(ServiceConfig serviceConfig) { + this.serviceConfig = serviceConfig; + } + public ServiceConfig getServiceConfig() { return serviceConfig; } -- GitLab From 10af8bbbc06d0a2497c444a6f101497e8b119fb1 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Tue, 27 Sep 2022 16:31:00 +0300 Subject: [PATCH 16/34] Add functionality in device Active state --- .../eu/teraflow/policy/PolicyServiceImpl.java | 67 ++++++++++++++----- .../teraflow/policy/context/model/Device.java | 16 +++++ 2 files changed, 66 insertions(+), 17 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index b5617dec3..d7861ba12 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -24,12 +24,12 @@ import eu.teraflow.policy.context.model.ConfigRuleTypeCustom; import eu.teraflow.policy.context.model.Constraint; import eu.teraflow.policy.context.model.ConstraintCustom; import eu.teraflow.policy.context.model.ConstraintTypeCustom; -import eu.teraflow.policy.context.model.DeviceOperationalStatus; import eu.teraflow.policy.context.model.ServiceConfig; import eu.teraflow.policy.device.DeviceService; 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.PolicyRuleDevice; @@ -155,7 +155,7 @@ public class PolicyServiceImpl implements PolicyService { if (isService) { activateService(alarmResponse.getAlarmId()); } else { - activateDevice(alarmResponse.getAlarmId()); + activateDevices(alarmResponse.getAlarmId()); } }); @@ -186,42 +186,74 @@ public class PolicyServiceImpl implements PolicyService { if (isService) { activateService(alarmResponse.getAlarmId()); } else { - activateDevice(alarmResponse.getAlarmId()); + activateDevices(alarmResponse.getAlarmId()); } }); } } - private void activateDevice(String alarmId) { + private void activateDevices(String alarmId) { PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId); - PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); PolicyRuleBasic policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); - List actionParameters = policyRuleAction.getPolicyRuleActionParameters(); + + if (policyRuleActionMap.get(alarmId).getPolicyRuleActionEnum() + == PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS) { + // In case additional PolicyRuleAction for Devices will be added + } LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); - final var deserializedDeviceUni = - contextService.getDevice(policyRuleDevice.getDeviceIds().get(0)); + List deviceIds = policyRuleDevice.getDeviceIds(); + List actionParameters = + policyRuleActionMap.get(alarmId).getPolicyRuleActionParameters(); + + if (deviceIds.size() != 3 * actionParameters.size()) { + LOGGER.errorf( + INVALID_MESSAGE, + "The number of action parameters are not aligned with the number of devices"); + return; + } + + for (var i = 0; i < deviceIds.size(); i++) { + List deviceActions = actionParameters.subList(i, i + 2); + activateDevice(deviceIds.get(i), deviceActions); + } + + LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ENFORCED.toString()); + policyRuleBasic.setPolicyRuleState(ENFORCED_POLICYRULE_STATE); + contextService.setPolicyRule(policyRuleBasic); + } + + private void activateDevice(String deviceId, List actionParameters) { + + Boolean toBeEnabled; + if (actionParameters.get(0) == "ENABLED") { + toBeEnabled = true; + } else if (actionParameters.get(0) == "DISABLED") { + toBeEnabled = false; + } else { + LOGGER.errorf(INVALID_MESSAGE, actionParameters.get(0)); + return; + } + + final var deserializedDeviceUni = contextService.getDevice(deviceId); deserializedDeviceUni .subscribe() .with( device -> { - if (actionParameters.get(0) == "ENABLED") { - device.setDeviceOperationalStatus(DeviceOperationalStatus.ENABLED); - } else if (actionParameters.get(0) == "DISABLED") { - device.setDeviceOperationalStatus(DeviceOperationalStatus.DISABLED); + if (toBeEnabled && device.isDisabled()) { + device.enableDevice(); + } else if (!toBeEnabled && device.isEnabled()) { + device.disableDevice(); } else { - device.setDeviceOperationalStatus(DeviceOperationalStatus.UNDEFINED); + LOGGER.errorf(INVALID_MESSAGE, "Device is already in the desired state"); + return; } deviceService.configureDevice(device); - LOGGER.infof( - "Setting Policy Rule state to [%s]", RuleState.POLICY_ENFORCED.toString()); - policyRuleBasic.setPolicyRuleState(ENFORCED_POLICYRULE_STATE); - contextService.setPolicyRule(policyRuleBasic); }); } @@ -231,6 +263,7 @@ public class PolicyServiceImpl implements PolicyService { List actionParameters = policyRuleAction.getPolicyRuleActionParameters(); List newConfigRules = new ArrayList<>(); + // ConfigeRuleTypeCustom has 3 elements for (int i = 0; i < actionParameters.size() - 3; i += 3) { ConfigActionEnum configActionEnum; if (actionParameters.get(i) == "SET") { diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java index 0aba77041..8b36eaed1 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java +++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java @@ -44,6 +44,22 @@ public class Device { this.endPoints = endPoints; } + public boolean isEnabled() { + return deviceOperationalStatus == DeviceOperationalStatus.ENABLED; + } + + public void enableDevice() { + this.deviceOperationalStatus = DeviceOperationalStatus.ENABLED; + } + + public boolean isDisabled() { + return deviceOperationalStatus == DeviceOperationalStatus.DISABLED; + } + + public void disableDevice() { + this.deviceOperationalStatus = DeviceOperationalStatus.DISABLED; + } + public String getDeviceId() { return deviceId; } -- GitLab From 40d289d3431e3ec323f6916de6a93ccde6532457 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Tue, 27 Sep 2022 17:04:35 +0300 Subject: [PATCH 17/34] Rename enum RuleState to PolicyRuleStateEnum --- proto/policy.proto | 4 +- .../eu/teraflow/policy/PolicyGatewayImpl.java | 4 +- .../eu/teraflow/policy/PolicyServiceImpl.java | 42 ++--- .../java/eu/teraflow/policy/Serializer.java | 56 +++---- .../policy/model/PolicyRuleState.java | 45 ++---- ...uleState.java => PolicyRuleStateEnum.java} | 2 +- .../policy/PolicyRuleBasicValidationTest.java | 24 +-- .../PolicyRuleDeviceValidationTest.java | 8 +- .../PolicyRuleServiceValidationTest.java | 10 +- .../eu/teraflow/policy/PolicyServiceTest.java | 18 ++- .../eu/teraflow/policy/SerializerTest.java | 43 +++-- .../generated-sources/grpc/policy/Policy.java | 153 +++++++++--------- src/policy/target/kubernetes/kubernetes.yml | 89 ---------- 13 files changed, 200 insertions(+), 298 deletions(-) rename src/policy/src/main/java/eu/teraflow/policy/model/{RuleState.java => PolicyRuleStateEnum.java} (96%) delete mode 100644 src/policy/target/kubernetes/kubernetes.yml diff --git a/proto/policy.proto b/proto/policy.proto index 0879389bf..158ec1f39 100644 --- a/proto/policy.proto +++ b/proto/policy.proto @@ -30,7 +30,7 @@ service PolicyService { rpc GetPolicyByServiceId (context.ServiceId) returns (PolicyRuleServiceList) {} } -enum RuleState { +enum PolicyRuleStateEnum { POLICY_UNDEFINED = 0; // Undefined rule state POLICY_FAILED = 1; // Rule failed POLICY_INSERTED = 2; // Rule is just inserted @@ -49,7 +49,7 @@ message PolicyRuleId { } message PolicyRuleState { - RuleState policyRuleState = 1; + PolicyRuleStateEnum policyRuleState = 1; } // Basic policy rule attributes diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java index c76f8c8c4..d95f3a7be 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java @@ -27,7 +27,7 @@ import policy.Policy.PolicyRuleId; import policy.Policy.PolicyRuleService; import policy.Policy.PolicyRuleServiceList; import policy.Policy.PolicyRuleState; -import policy.Policy.RuleState; +import policy.Policy.PolicyRuleStateEnum; @GrpcService public class PolicyGatewayImpl implements PolicyGateway { @@ -89,7 +89,7 @@ public class PolicyGatewayImpl implements PolicyGateway { .item( () -> Policy.PolicyRuleState.newBuilder() - .setPolicyRuleState(RuleState.POLICY_REMOVED) + .setPolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED) .build()); } diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index d7861ba12..5a2c0c3a3 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -35,7 +35,7 @@ import eu.teraflow.policy.model.PolicyRuleCondition; import eu.teraflow.policy.model.PolicyRuleDevice; import eu.teraflow.policy.model.PolicyRuleService; import eu.teraflow.policy.model.PolicyRuleState; -import eu.teraflow.policy.model.RuleState; +import eu.teraflow.policy.model.PolicyRuleStateEnum; import eu.teraflow.policy.monitoring.MonitoringService; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; import eu.teraflow.policy.monitoring.model.AlarmResponse; @@ -66,21 +66,21 @@ public class PolicyServiceImpl implements PolicyService { private static final String INVALID_MESSAGE = "%s is invalid."; private static final String VALID_MESSAGE = "%s is valid."; private static final PolicyRuleState INSERTED_POLICYRULE_STATE = - new PolicyRuleState(RuleState.POLICY_INSERTED); + new PolicyRuleState(PolicyRuleStateEnum.POLICY_INSERTED); private static final PolicyRuleState VALIDATED_POLICYRULE_STATE = - new PolicyRuleState(RuleState.POLICY_VALIDATED); + new PolicyRuleState(PolicyRuleStateEnum.POLICY_VALIDATED); private static final PolicyRuleState FAILED_POLICYRULE_STATE = - new PolicyRuleState(RuleState.POLICY_FAILED); + new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED); private static final PolicyRuleState PROVISIONED_POLICYRULE_STATE = - new PolicyRuleState(RuleState.POLICY_PROVISIONED); + new PolicyRuleState(PolicyRuleStateEnum.POLICY_PROVISIONED); private static final PolicyRuleState ACTIVE_POLICYRULE_STATE = - new PolicyRuleState(RuleState.POLICY_ACTIVE); + new PolicyRuleState(PolicyRuleStateEnum.POLICY_ACTIVE); private static final PolicyRuleState ENFORCED_POLICYRULE_STATE = - new PolicyRuleState(RuleState.POLICY_ENFORCED); + new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED); private static final PolicyRuleState INEFFECTIVE_POLICYRULE_STATE = - new PolicyRuleState(RuleState.POLICY_INEFFECTIVE); + new PolicyRuleState(PolicyRuleStateEnum.POLICY_INEFFECTIVE); private static final PolicyRuleState EFFECTIVE_POLICYRULE_STATE = - new PolicyRuleState(RuleState.POLICY_EFFECTIVE); + new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); private final ContextService contextService; private final MonitoringService monitoringService; @@ -135,7 +135,7 @@ public class PolicyServiceImpl implements PolicyService { .with(alarmId -> alarmSubscriptionList.add(new AlarmSubscription(alarmId, 0, 0))); } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_PROVISIONED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", PROVISIONED_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(PROVISIONED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); @@ -170,11 +170,11 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof("Alarm [%s] has been deleted.\n", alarmDescriptor.getAlarmId())); } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_INEFFECTIVE.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", INEFFECTIVE_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(INEFFECTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); } else { - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_EFFECTIVE.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", EFFECTIVE_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(EFFECTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); @@ -201,7 +201,7 @@ public class PolicyServiceImpl implements PolicyService { // In case additional PolicyRuleAction for Devices will be added } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", ACTIVE_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); @@ -221,7 +221,7 @@ public class PolicyServiceImpl implements PolicyService { activateDevice(deviceIds.get(i), deviceActions); } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ENFORCED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", ENFORCED_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(ENFORCED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); } @@ -318,7 +318,7 @@ public class PolicyServiceImpl implements PolicyService { serviceService.updateService(deserializedService); LOGGER.infof( - "Setting Policy Rule state to [%s]", RuleState.POLICY_ENFORCED.toString()); + "Setting Policy Rule state to [%s]", ENFORCED_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(ENFORCED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); }); @@ -329,7 +329,7 @@ public class PolicyServiceImpl implements PolicyService { PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId); - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_ACTIVE.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", ACTIVE_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); @@ -350,7 +350,7 @@ public class PolicyServiceImpl implements PolicyService { final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds); if (!invalidDeviceIds.isEmpty()) { - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_FAILED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", FAILED_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); return; @@ -360,13 +360,13 @@ public class PolicyServiceImpl implements PolicyService { parsePolicyRuleCondition(policyRuleDevice.getPolicyRuleBasic()); if (alarmDescriptorList.isEmpty()) { - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_FAILED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", FAILED_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); return; } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_VALIDATED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", VALIDATED_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); @@ -423,12 +423,12 @@ public class PolicyServiceImpl implements PolicyService { parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic()); if (alarmDescriptorList.isEmpty()) { - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_FAILED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", FAILED_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); return; } - LOGGER.infof("Setting Policy Rule state to [%s]", RuleState.POLICY_VALIDATED.toString()); + LOGGER.infof("Setting Policy Rule state to [%s]", VALIDATED_POLICYRULE_STATE.toString()); policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE); contextService.setPolicyRule(policyRuleBasic); 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 3af49b3d0..385328730 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java +++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java @@ -85,7 +85,7 @@ import eu.teraflow.policy.model.PolicyRuleCondition; import eu.teraflow.policy.model.PolicyRuleDevice; import eu.teraflow.policy.model.PolicyRuleService; import eu.teraflow.policy.model.PolicyRuleState; -import eu.teraflow.policy.model.RuleState; +import eu.teraflow.policy.model.PolicyRuleStateEnum; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; import eu.teraflow.policy.monitoring.model.AlarmResponse; import eu.teraflow.policy.monitoring.model.AlarmSubscription; @@ -1317,61 +1317,61 @@ public class Serializer { } } - public Policy.RuleState serialize(RuleState rulestate) { - switch (rulestate) { + public Policy.PolicyRuleStateEnum serialize(PolicyRuleStateEnum policyRuleStateEnum) { + switch (policyRuleStateEnum) { case POLICY_FAILED: - return Policy.RuleState.POLICY_FAILED; + return Policy.PolicyRuleStateEnum.POLICY_FAILED; case POLICY_INSERTED: - return Policy.RuleState.POLICY_INSERTED; + return Policy.PolicyRuleStateEnum.POLICY_INSERTED; case POLICY_VALIDATED: - return Policy.RuleState.POLICY_VALIDATED; + return Policy.PolicyRuleStateEnum.POLICY_VALIDATED; case POLICY_PROVISIONED: - return Policy.RuleState.POLICY_PROVISIONED; + return Policy.PolicyRuleStateEnum.POLICY_PROVISIONED; case POLICY_ACTIVE: - return Policy.RuleState.POLICY_ACTIVE; + return Policy.PolicyRuleStateEnum.POLICY_ACTIVE; case POLICY_ENFORCED: - return Policy.RuleState.POLICY_ENFORCED; + return Policy.PolicyRuleStateEnum.POLICY_ENFORCED; case POLICY_INEFFECTIVE: - return Policy.RuleState.POLICY_INEFFECTIVE; + return Policy.PolicyRuleStateEnum.POLICY_INEFFECTIVE; case POLICY_EFFECTIVE: - return Policy.RuleState.POLICY_EFFECTIVE; + return Policy.PolicyRuleStateEnum.POLICY_EFFECTIVE; case POLICY_UPDATED: - return Policy.RuleState.POLICY_UPDATED; + return Policy.PolicyRuleStateEnum.POLICY_UPDATED; case POLICY_REMOVED: - return Policy.RuleState.POLICY_REMOVED; + return Policy.PolicyRuleStateEnum.POLICY_REMOVED; case POLICY_UNDEFINED: - return Policy.RuleState.POLICY_UNDEFINED; + return Policy.PolicyRuleStateEnum.POLICY_UNDEFINED; default: - return Policy.RuleState.UNRECOGNIZED; + return Policy.PolicyRuleStateEnum.UNRECOGNIZED; } } - public RuleState deserialize(Policy.RuleState serializedRuleState) { - switch (serializedRuleState) { + public PolicyRuleStateEnum deserialize(Policy.PolicyRuleStateEnum serializedPolicyRuleStateEnum) { + switch (serializedPolicyRuleStateEnum) { case POLICY_INSERTED: - return RuleState.POLICY_INSERTED; + return PolicyRuleStateEnum.POLICY_INSERTED; case POLICY_VALIDATED: - return RuleState.POLICY_VALIDATED; + return PolicyRuleStateEnum.POLICY_VALIDATED; case POLICY_PROVISIONED: - return RuleState.POLICY_PROVISIONED; + return PolicyRuleStateEnum.POLICY_PROVISIONED; case POLICY_ACTIVE: - return RuleState.POLICY_ACTIVE; + return PolicyRuleStateEnum.POLICY_ACTIVE; case POLICY_ENFORCED: - return RuleState.POLICY_ENFORCED; + return PolicyRuleStateEnum.POLICY_ENFORCED; case POLICY_INEFFECTIVE: - return RuleState.POLICY_INEFFECTIVE; + return PolicyRuleStateEnum.POLICY_INEFFECTIVE; case POLICY_EFFECTIVE: - return RuleState.POLICY_EFFECTIVE; + return PolicyRuleStateEnum.POLICY_EFFECTIVE; case POLICY_UPDATED: - return RuleState.POLICY_UPDATED; + return PolicyRuleStateEnum.POLICY_UPDATED; case POLICY_REMOVED: - return RuleState.POLICY_REMOVED; + return PolicyRuleStateEnum.POLICY_REMOVED; case POLICY_FAILED: - return RuleState.POLICY_FAILED; + return PolicyRuleStateEnum.POLICY_FAILED; case POLICY_UNDEFINED: case UNRECOGNIZED: default: - return RuleState.POLICY_UNDEFINED; + return PolicyRuleStateEnum.POLICY_UNDEFINED; } } diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java index 5226ffcd2..5b3d39f6e 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java @@ -18,50 +18,23 @@ package eu.teraflow.policy.model; public class PolicyRuleState { - private RuleState ruleState; + private PolicyRuleStateEnum policyRuleStateEnum; - public PolicyRuleState(RuleState ruleState) { - this.ruleState = ruleState; + public PolicyRuleState(PolicyRuleStateEnum policyRuleStateEnum) { + this.policyRuleStateEnum = policyRuleStateEnum; } - public void setRuleState(RuleState ruleState) { - this.ruleState = ruleState; + public void setRuleState(PolicyRuleStateEnum policyRuleStateEnum) { + this.policyRuleStateEnum = policyRuleStateEnum; } - public RuleState getRuleState() { - return ruleState; + public PolicyRuleStateEnum getRuleState() { + return policyRuleStateEnum; } @Override public String toString() { - return String.format("%s:{ruleState:\"%s\"}", getClass().getSimpleName(), ruleState.toString()); - } - - public RuleState nextState(RuleState currentState, boolean success) { - switch (currentState) { - case POLICY_UNDEFINED: - return RuleState.POLICY_INSERTED; - - case POLICY_INSERTED: - if (success == false) { - return RuleState.POLICY_FAILED; - } - return RuleState.POLICY_VALIDATED; - - case POLICY_VALIDATED: - return RuleState.POLICY_PROVISIONED; - - case POLICY_PROVISIONED: - return RuleState.POLICY_ACTIVE; - - case POLICY_ACTIVE: - if (success == false) { - return RuleState.POLICY_FAILED; - } - return RuleState.POLICY_ENFORCED; - - default: - return RuleState.POLICY_UNDEFINED; - } + return String.format( + "%s:{ruleState:\"%s\"}", getClass().getSimpleName(), policyRuleStateEnum.toString()); } } diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/RuleState.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleStateEnum.java similarity index 96% rename from src/policy/src/main/java/eu/teraflow/policy/model/RuleState.java rename to src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleStateEnum.java index 2d01a6b94..f447cf210 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/model/RuleState.java +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleStateEnum.java @@ -16,7 +16,7 @@ package eu.teraflow.policy.model; -public enum RuleState { +public enum PolicyRuleStateEnum { POLICY_UNDEFINED, POLICY_FAILED, POLICY_INSERTED, diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java index 53cddf6be..e79932fd2 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java @@ -26,7 +26,7 @@ import eu.teraflow.policy.model.PolicyRuleActionEnum; import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; import eu.teraflow.policy.model.PolicyRuleState; -import eu.teraflow.policy.model.RuleState; +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; @@ -81,7 +81,7 @@ class PolicyRuleBasicValidationTest { 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 policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); assertThatExceptionOfType(NullPointerException.class) .isThrownBy( @@ -107,7 +107,7 @@ class PolicyRuleBasicValidationTest { PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_ENFORCED); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED); assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy( @@ -133,7 +133,7 @@ class PolicyRuleBasicValidationTest { PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_ENFORCED); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED); assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy( @@ -159,7 +159,7 @@ class PolicyRuleBasicValidationTest { PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_INSERTED); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_INSERTED); final var policyRuleId = UUID.randomUUID().toString(); @@ -182,7 +182,7 @@ class PolicyRuleBasicValidationTest { PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_ENFORCED); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED); final var policyRuleId = UUID.randomUUID().toString(); @@ -206,7 +206,7 @@ class PolicyRuleBasicValidationTest { PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_REMOVED); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED); final var policyRuleId = UUID.randomUUID().toString(); @@ -234,7 +234,7 @@ class PolicyRuleBasicValidationTest { PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_VALIDATED); final var policyRuleId = UUID.randomUUID().toString(); @@ -258,7 +258,7 @@ class PolicyRuleBasicValidationTest { NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN, new IntegerKpiValue(3)); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_PROVISIONED); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_PROVISIONED); final var policyRuleId = UUID.randomUUID().toString(); @@ -283,7 +283,7 @@ class PolicyRuleBasicValidationTest { new IntegerKpiValue(3)); final var policyRuleActions = Collections.emptyList(); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_FAILED); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED); final var policyRuleId = UUID.randomUUID().toString(); @@ -302,7 +302,7 @@ class PolicyRuleBasicValidationTest { @Test void shouldCreatePolicyRuleBasicObject() { final var expectedPolicyRuleId = "expectedPolicyRuleId"; - final var expectedPolicyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); + final var expectedPolicyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var expectedPriority = 3; final var firstKpiValue = new IntegerKpiValue(22); @@ -343,7 +343,7 @@ class PolicyRuleBasicValidationTest { PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, List.of("parameter1", "parameter2")); - final var policyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); + final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java index 064cd7ee0..2ea0b2586 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java @@ -27,7 +27,7 @@ import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; import eu.teraflow.policy.model.PolicyRuleDevice; import eu.teraflow.policy.model.PolicyRuleState; -import eu.teraflow.policy.model.RuleState; +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; @@ -100,7 +100,7 @@ class PolicyRuleDeviceValidationTest { 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 policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( @@ -127,7 +127,7 @@ class PolicyRuleDeviceValidationTest { 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 policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( @@ -156,7 +156,7 @@ class PolicyRuleDeviceValidationTest { 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 policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( 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 b565b7e75..3e4dc4fa5 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java @@ -28,7 +28,7 @@ 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.model.PolicyRuleStateEnum; import eu.teraflow.policy.monitoring.model.IntegerKpiValue; import eu.teraflow.policy.monitoring.model.KpiValue; import io.quarkus.test.junit.QuarkusTest; @@ -106,7 +106,7 @@ class PolicyRuleServiceValidationTest { 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 policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var deviceIds = createDeviceIds(); @@ -137,7 +137,7 @@ class PolicyRuleServiceValidationTest { 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 policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( @@ -167,7 +167,7 @@ class PolicyRuleServiceValidationTest { 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 policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( @@ -201,7 +201,7 @@ class PolicyRuleServiceValidationTest { 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 policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var policyRuleBasic = createPolicyRuleBasic( diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java index c9c8e62aa..4b2f3d6bd 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java @@ -36,7 +36,7 @@ import org.jboss.logging.Logger; import org.junit.jupiter.api.Test; import policy.Policy; import policy.Policy.PolicyRuleBasic; -import policy.Policy.RuleState; +import policy.Policy.PolicyRuleStateEnum; import policy.PolicyAction; import policy.PolicyAction.PolicyRuleActionEnum; import policy.PolicyCondition; @@ -65,7 +65,9 @@ class PolicyServiceTest { Policy.PolicyRuleId.newBuilder().setUuid(expectedPolicyRuleIdUuid).build(); final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_INSERTED).build(); + Policy.PolicyRuleState.newBuilder() + .setPolicyRuleState(PolicyRuleStateEnum.POLICY_INSERTED) + .build(); final var expectedFirstKpiValue = new IntegerKpiValue(22); final var expectedSecondKpiValue = new FloatKpiValue(69.1f); @@ -180,7 +182,9 @@ class PolicyServiceTest { CompletableFuture message = new CompletableFuture<>(); final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_ENFORCED).build(); + Policy.PolicyRuleState.newBuilder() + .setPolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED) + .build(); final var policyRuleBasic = PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build(); @@ -202,7 +206,9 @@ class PolicyServiceTest { CompletableFuture message = new CompletableFuture<>(); final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_ENFORCED).build(); + Policy.PolicyRuleState.newBuilder() + .setPolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED) + .build(); final var policyRuleBasic = PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build(); @@ -229,7 +235,9 @@ class PolicyServiceTest { final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build(); final var expectedPolicyRuleState = - Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_REMOVED).build(); + Policy.PolicyRuleState.newBuilder() + .setPolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED) + .build(); client .policyDelete(policyRuleId) 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 f67cb998a..fa9ae4d3c 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java @@ -85,7 +85,7 @@ import eu.teraflow.policy.model.PolicyRuleCondition; import eu.teraflow.policy.model.PolicyRuleDevice; import eu.teraflow.policy.model.PolicyRuleService; import eu.teraflow.policy.model.PolicyRuleState; -import eu.teraflow.policy.model.RuleState; +import eu.teraflow.policy.model.PolicyRuleStateEnum; import eu.teraflow.policy.monitoring.model.AlarmDescriptor; import eu.teraflow.policy.monitoring.model.AlarmResponse; import eu.teraflow.policy.monitoring.model.BooleanKpiValue; @@ -146,7 +146,7 @@ class SerializerTest { private PolicyRuleBasic createPolicyRuleBasic() { final var expectedPolicyRuleId = "expectedPolicyRuleId"; - final var expectedPolicyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE); + final var expectedPolicyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE); final var expectedPriority = 3; final var firstKpiValue = new IntegerKpiValue(22); @@ -2234,22 +2234,31 @@ class SerializerTest { private static Stream provideRuleState() { return Stream.of( - Arguments.of(RuleState.POLICY_UNDEFINED, Policy.RuleState.POLICY_UNDEFINED), - Arguments.of(RuleState.POLICY_FAILED, Policy.RuleState.POLICY_FAILED), - Arguments.of(RuleState.POLICY_INSERTED, Policy.RuleState.POLICY_INSERTED), - Arguments.of(RuleState.POLICY_VALIDATED, Policy.RuleState.POLICY_VALIDATED), - Arguments.of(RuleState.POLICY_PROVISIONED, Policy.RuleState.POLICY_PROVISIONED), - Arguments.of(RuleState.POLICY_ACTIVE, Policy.RuleState.POLICY_ACTIVE), - Arguments.of(RuleState.POLICY_ENFORCED, Policy.RuleState.POLICY_ENFORCED), - Arguments.of(RuleState.POLICY_INEFFECTIVE, Policy.RuleState.POLICY_INEFFECTIVE), - Arguments.of(RuleState.POLICY_EFFECTIVE, Policy.RuleState.POLICY_EFFECTIVE), - Arguments.of(RuleState.POLICY_UPDATED, Policy.RuleState.POLICY_UPDATED), - Arguments.of(RuleState.POLICY_REMOVED, Policy.RuleState.POLICY_REMOVED)); + Arguments.of( + PolicyRuleStateEnum.POLICY_UNDEFINED, Policy.PolicyRuleStateEnum.POLICY_UNDEFINED), + Arguments.of(PolicyRuleStateEnum.POLICY_FAILED, Policy.PolicyRuleStateEnum.POLICY_FAILED), + Arguments.of( + PolicyRuleStateEnum.POLICY_INSERTED, Policy.PolicyRuleStateEnum.POLICY_INSERTED), + Arguments.of( + PolicyRuleStateEnum.POLICY_VALIDATED, Policy.PolicyRuleStateEnum.POLICY_VALIDATED), + Arguments.of( + PolicyRuleStateEnum.POLICY_PROVISIONED, Policy.PolicyRuleStateEnum.POLICY_PROVISIONED), + Arguments.of(PolicyRuleStateEnum.POLICY_ACTIVE, Policy.PolicyRuleStateEnum.POLICY_ACTIVE), + Arguments.of( + PolicyRuleStateEnum.POLICY_ENFORCED, Policy.PolicyRuleStateEnum.POLICY_ENFORCED), + Arguments.of( + PolicyRuleStateEnum.POLICY_INEFFECTIVE, Policy.PolicyRuleStateEnum.POLICY_INEFFECTIVE), + Arguments.of( + PolicyRuleStateEnum.POLICY_EFFECTIVE, Policy.PolicyRuleStateEnum.POLICY_EFFECTIVE), + Arguments.of(PolicyRuleStateEnum.POLICY_UPDATED, Policy.PolicyRuleStateEnum.POLICY_UPDATED), + Arguments.of( + PolicyRuleStateEnum.POLICY_REMOVED, Policy.PolicyRuleStateEnum.POLICY_REMOVED)); } @ParameterizedTest @MethodSource("provideRuleState") - void shouldSerializeRuleState(RuleState ruleState, Policy.RuleState expectedSerializedType) { + void shouldSerializeRuleState( + PolicyRuleStateEnum ruleState, Policy.PolicyRuleStateEnum expectedSerializedType) { final var serializedRuleState = serializer.serialize(ruleState); assertThat(serializedRuleState.getNumber()).isEqualTo(expectedSerializedType.getNumber()); @@ -2258,7 +2267,7 @@ class SerializerTest { @ParameterizedTest @MethodSource("provideRuleState") void shouldDeserializeRuleState( - RuleState expectedRuleState, Policy.RuleState serializedRuleState) { + PolicyRuleStateEnum expectedRuleState, Policy.PolicyRuleStateEnum serializedRuleState) { final var ruleState = serializer.deserialize(serializedRuleState); assertThat(ruleState).isEqualTo(expectedRuleState); @@ -2266,7 +2275,7 @@ class SerializerTest { @Test void shouldSerializePolicyRuleState() { - final var expectedRuleState = RuleState.POLICY_ACTIVE; + final var expectedRuleState = PolicyRuleStateEnum.POLICY_ACTIVE; final var policyRuleState = new PolicyRuleState(expectedRuleState); final var serializedRuleState = serializer.serialize(expectedRuleState); @@ -2283,7 +2292,7 @@ class SerializerTest { @Test void shouldDeserializePolicyRuleState() { - final var expectedRuleState = RuleState.POLICY_ENFORCED; + final var expectedRuleState = PolicyRuleStateEnum.POLICY_ENFORCED; final var expectedPolicyRuleState = new PolicyRuleState(expectedRuleState); final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState); diff --git a/src/policy/target/generated-sources/grpc/policy/Policy.java b/src/policy/target/generated-sources/grpc/policy/Policy.java index 08ce14ada..7c0a23452 100644 --- a/src/policy/target/generated-sources/grpc/policy/Policy.java +++ b/src/policy/target/generated-sources/grpc/policy/Policy.java @@ -15,9 +15,9 @@ public final class Policy { (com.google.protobuf.ExtensionRegistryLite) registry); } /** - * Protobuf enum {@code policy.RuleState} + * Protobuf enum {@code policy.PolicyRuleStateEnum} */ - public enum RuleState + public enum PolicyRuleStateEnum implements com.google.protobuf.ProtocolMessageEnum { /** *
@@ -214,7 +214,7 @@ public final class Policy {
      * @deprecated Use {@link #forNumber(int)} instead.
      */
     @java.lang.Deprecated
-    public static RuleState valueOf(int value) {
+    public static PolicyRuleStateEnum valueOf(int value) {
       return forNumber(value);
     }
 
@@ -222,7 +222,7 @@ public final class Policy {
      * @param value The numeric wire value of the corresponding enum entry.
      * @return The enum associated with the given numeric wire value.
      */
-    public static RuleState forNumber(int value) {
+    public static PolicyRuleStateEnum forNumber(int value) {
       switch (value) {
         case 0: return POLICY_UNDEFINED;
         case 1: return POLICY_FAILED;
@@ -239,15 +239,15 @@ public final class Policy {
       }
     }
 
-    public static com.google.protobuf.Internal.EnumLiteMap
+    public static com.google.protobuf.Internal.EnumLiteMap
         internalGetValueMap() {
       return internalValueMap;
     }
     private static final com.google.protobuf.Internal.EnumLiteMap<
-        RuleState> internalValueMap =
-          new com.google.protobuf.Internal.EnumLiteMap() {
-            public RuleState findValueByNumber(int number) {
-              return RuleState.forNumber(number);
+        PolicyRuleStateEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap() {
+            public PolicyRuleStateEnum findValueByNumber(int number) {
+              return PolicyRuleStateEnum.forNumber(number);
             }
           };
 
@@ -268,9 +268,9 @@ public final class Policy {
       return policy.Policy.getDescriptor().getEnumTypes().get(0);
     }
 
-    private static final RuleState[] VALUES = values();
+    private static final PolicyRuleStateEnum[] VALUES = values();
 
-    public static RuleState valueOf(
+    public static PolicyRuleStateEnum valueOf(
         com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
       if (desc.getType() != getDescriptor()) {
         throw new java.lang.IllegalArgumentException(
@@ -284,11 +284,11 @@ public final class Policy {
 
     private final int value;
 
-    private RuleState(int value) {
+    private PolicyRuleStateEnum(int value) {
       this.value = value;
     }
 
-    // @@protoc_insertion_point(enum_scope:policy.RuleState)
+    // @@protoc_insertion_point(enum_scope:policy.PolicyRuleStateEnum)
   }
 
   public interface PolicyRuleIdOrBuilder extends
@@ -917,15 +917,15 @@ public final class Policy {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * .policy.RuleState policyRuleState = 1;
+     * .policy.PolicyRuleStateEnum policyRuleState = 1;
      * @return The enum numeric value on the wire for policyRuleState.
      */
     int getPolicyRuleStateValue();
     /**
-     * .policy.RuleState policyRuleState = 1;
+     * .policy.PolicyRuleStateEnum policyRuleState = 1;
      * @return The policyRuleState.
      */
-    policy.Policy.RuleState getPolicyRuleState();
+    policy.Policy.PolicyRuleStateEnum getPolicyRuleState();
   }
   /**
    * Protobuf type {@code policy.PolicyRuleState}
@@ -1014,20 +1014,20 @@ public final class Policy {
     public static final int POLICYRULESTATE_FIELD_NUMBER = 1;
     private int policyRuleState_;
     /**
-     * .policy.RuleState policyRuleState = 1;
+     * .policy.PolicyRuleStateEnum policyRuleState = 1;
      * @return The enum numeric value on the wire for policyRuleState.
      */
     @java.lang.Override public int getPolicyRuleStateValue() {
       return policyRuleState_;
     }
     /**
-     * .policy.RuleState policyRuleState = 1;
+     * .policy.PolicyRuleStateEnum policyRuleState = 1;
      * @return The policyRuleState.
      */
-    @java.lang.Override public policy.Policy.RuleState getPolicyRuleState() {
+    @java.lang.Override public policy.Policy.PolicyRuleStateEnum getPolicyRuleState() {
       @SuppressWarnings("deprecation")
-      policy.Policy.RuleState result = policy.Policy.RuleState.valueOf(policyRuleState_);
-      return result == null ? policy.Policy.RuleState.UNRECOGNIZED : result;
+      policy.Policy.PolicyRuleStateEnum result = policy.Policy.PolicyRuleStateEnum.valueOf(policyRuleState_);
+      return result == null ? policy.Policy.PolicyRuleStateEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -1044,7 +1044,7 @@ public final class Policy {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (policyRuleState_ != policy.Policy.RuleState.POLICY_UNDEFINED.getNumber()) {
+      if (policyRuleState_ != policy.Policy.PolicyRuleStateEnum.POLICY_UNDEFINED.getNumber()) {
         output.writeEnum(1, policyRuleState_);
       }
       unknownFields.writeTo(output);
@@ -1056,7 +1056,7 @@ public final class Policy {
       if (size != -1) return size;
 
       size = 0;
-      if (policyRuleState_ != policy.Policy.RuleState.POLICY_UNDEFINED.getNumber()) {
+      if (policyRuleState_ != policy.Policy.PolicyRuleStateEnum.POLICY_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(1, policyRuleState_);
       }
@@ -1333,14 +1333,14 @@ public final class Policy {
 
       private int policyRuleState_ = 0;
       /**
-       * .policy.RuleState policyRuleState = 1;
+       * .policy.PolicyRuleStateEnum policyRuleState = 1;
        * @return The enum numeric value on the wire for policyRuleState.
        */
       @java.lang.Override public int getPolicyRuleStateValue() {
         return policyRuleState_;
       }
       /**
-       * .policy.RuleState policyRuleState = 1;
+       * .policy.PolicyRuleStateEnum policyRuleState = 1;
        * @param value The enum numeric value on the wire for policyRuleState to set.
        * @return This builder for chaining.
        */
@@ -1351,21 +1351,21 @@ public final class Policy {
         return this;
       }
       /**
-       * .policy.RuleState policyRuleState = 1;
+       * .policy.PolicyRuleStateEnum policyRuleState = 1;
        * @return The policyRuleState.
        */
       @java.lang.Override
-      public policy.Policy.RuleState getPolicyRuleState() {
+      public policy.Policy.PolicyRuleStateEnum getPolicyRuleState() {
         @SuppressWarnings("deprecation")
-        policy.Policy.RuleState result = policy.Policy.RuleState.valueOf(policyRuleState_);
-        return result == null ? policy.Policy.RuleState.UNRECOGNIZED : result;
+        policy.Policy.PolicyRuleStateEnum result = policy.Policy.PolicyRuleStateEnum.valueOf(policyRuleState_);
+        return result == null ? policy.Policy.PolicyRuleStateEnum.UNRECOGNIZED : result;
       }
       /**
-       * .policy.RuleState policyRuleState = 1;
+       * .policy.PolicyRuleStateEnum policyRuleState = 1;
        * @param value The policyRuleState to set.
        * @return This builder for chaining.
        */
-      public Builder setPolicyRuleState(policy.Policy.RuleState value) {
+      public Builder setPolicyRuleState(policy.Policy.PolicyRuleStateEnum value) {
         if (value == null) {
           throw new NullPointerException();
         }
@@ -1375,7 +1375,7 @@ public final class Policy {
         return this;
       }
       /**
-       * .policy.RuleState policyRuleState = 1;
+       * .policy.PolicyRuleStateEnum policyRuleState = 1;
        * @return This builder for chaining.
        */
       public Builder clearPolicyRuleState() {
@@ -9389,50 +9389,51 @@ public final class Policy {
       "\n\014policy.proto\022\006policy\032\rcontext.proto\032\026p" +
       "olicy_condition.proto\032\023policy_action.pro" +
       "to\"+\n\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.conte" +
-      "xt.Uuid\"=\n\017PolicyRuleState\022*\n\017policyRule" +
-      "State\030\001 \001(\0162\021.policy.RuleState\"\225\002\n\017Polic" +
-      "yRuleBasic\022*\n\014policyRuleId\030\001 \001(\0132\024.polic" +
-      "y.PolicyRuleId\0220\n\017policyRuleState\030\002 \001(\0132" +
-      "\027.policy.PolicyRuleState\022\020\n\010priority\030\003 \001" +
-      "(\r\0222\n\rconditionList\030\004 \003(\0132\033.policy.Polic" +
-      "yRuleCondition\0220\n\017booleanOperator\030\005 \001(\0162" +
-      "\027.policy.BooleanOperator\022,\n\nactionList\030\006" +
-      " \003(\0132\030.policy.PolicyRuleAction\"\223\001\n\021Polic" +
-      "yRuleService\0220\n\017policyRuleBasic\030\001 \001(\0132\027." +
-      "policy.PolicyRuleBasic\022%\n\tserviceId\030\002 \001(" +
-      "\0132\022.context.ServiceId\022%\n\ndeviceList\030\003 \003(" +
-      "\0132\021.context.DeviceId\"k\n\020PolicyRuleDevice" +
-      "\0220\n\017policyRuleBasic\030\001 \001(\0132\027.policy.Polic" +
-      "yRuleBasic\022%\n\ndeviceList\030\002 \003(\0132\021.context" +
-      ".DeviceId\"B\n\020PolicyRuleIdList\022.\n\020policyR" +
-      "uleIdList\030\001 \003(\0132\024.policy.PolicyRuleId\"Q\n" +
-      "\025PolicyRuleServiceList\0228\n\025policyRuleServ" +
-      "iceList\030\001 \003(\0132\031.policy.PolicyRuleService" +
-      "\"N\n\024PolicyRuleDeviceList\0226\n\024policyRuleDe" +
-      "viceList\030\001 \003(\0132\030.policy.PolicyRuleDevice" +
-      "\";\n\016PolicyRuleList\022)\n\013policyRules\030\001 \003(\0132" +
-      "\024.policy.PolicyRuleId*\365\001\n\tRuleState\022\024\n\020P" +
-      "OLICY_UNDEFINED\020\000\022\021\n\rPOLICY_FAILED\020\001\022\023\n\017" +
-      "POLICY_INSERTED\020\002\022\024\n\020POLICY_VALIDATED\020\003\022" +
-      "\026\n\022POLICY_PROVISIONED\020\004\022\021\n\rPOLICY_ACTIVE" +
-      "\020\005\022\023\n\017POLICY_ENFORCED\020\006\022\026\n\022POLICY_INEFFE" +
-      "CTIVE\020\007\022\024\n\020POLICY_EFFECTIVE\020\010\022\022\n\016POLICY_" +
-      "UPDATED\020\t\022\022\n\016POLICY_REMOVED\020\n2\323\004\n\rPolicy" +
-      "Service\022H\n\020PolicyAddService\022\031.policy.Pol" +
-      "icyRuleService\032\027.policy.PolicyRuleState\"" +
-      "\000\022F\n\017PolicyAddDevice\022\030.policy.PolicyRule" +
-      "Device\032\027.policy.PolicyRuleState\"\000\022K\n\023Pol" +
-      "icyUpdateService\022\031.policy.PolicyRuleServ" +
-      "ice\032\027.policy.PolicyRuleState\"\000\022I\n\022Policy" +
-      "UpdateDevice\022\030.policy.PolicyRuleDevice\032\027" +
-      ".policy.PolicyRuleState\"\000\022?\n\014PolicyDelet" +
-      "e\022\024.policy.PolicyRuleId\032\027.policy.PolicyR" +
-      "uleState\"\000\022E\n\020GetPolicyService\022\024.policy." +
-      "PolicyRuleId\032\031.policy.PolicyRuleService\"" +
-      "\000\022C\n\017GetPolicyDevice\022\024.policy.PolicyRule" +
-      "Id\032\030.policy.PolicyRuleDevice\"\000\022K\n\024GetPol" +
-      "icyByServiceId\022\022.context.ServiceId\032\035.pol" +
-      "icy.PolicyRuleServiceList\"\000b\006proto3"
+      "xt.Uuid\"G\n\017PolicyRuleState\0224\n\017policyRule" +
+      "State\030\001 \001(\0162\033.policy.PolicyRuleStateEnum" +
+      "\"\225\002\n\017PolicyRuleBasic\022*\n\014policyRuleId\030\001 \001" +
+      "(\0132\024.policy.PolicyRuleId\0220\n\017policyRuleSt" +
+      "ate\030\002 \001(\0132\027.policy.PolicyRuleState\022\020\n\010pr" +
+      "iority\030\003 \001(\r\0222\n\rconditionList\030\004 \003(\0132\033.po" +
+      "licy.PolicyRuleCondition\0220\n\017booleanOpera" +
+      "tor\030\005 \001(\0162\027.policy.BooleanOperator\022,\n\nac" +
+      "tionList\030\006 \003(\0132\030.policy.PolicyRuleAction" +
+      "\"\223\001\n\021PolicyRuleService\0220\n\017policyRuleBasi" +
+      "c\030\001 \001(\0132\027.policy.PolicyRuleBasic\022%\n\tserv" +
+      "iceId\030\002 \001(\0132\022.context.ServiceId\022%\n\ndevic" +
+      "eList\030\003 \003(\0132\021.context.DeviceId\"k\n\020Policy" +
+      "RuleDevice\0220\n\017policyRuleBasic\030\001 \001(\0132\027.po" +
+      "licy.PolicyRuleBasic\022%\n\ndeviceList\030\002 \003(\013" +
+      "2\021.context.DeviceId\"B\n\020PolicyRuleIdList\022" +
+      ".\n\020policyRuleIdList\030\001 \003(\0132\024.policy.Polic" +
+      "yRuleId\"Q\n\025PolicyRuleServiceList\0228\n\025poli" +
+      "cyRuleServiceList\030\001 \003(\0132\031.policy.PolicyR" +
+      "uleService\"N\n\024PolicyRuleDeviceList\0226\n\024po" +
+      "licyRuleDeviceList\030\001 \003(\0132\030.policy.Policy" +
+      "RuleDevice\";\n\016PolicyRuleList\022)\n\013policyRu" +
+      "les\030\001 \003(\0132\024.policy.PolicyRuleId*\377\001\n\023Poli" +
+      "cyRuleStateEnum\022\024\n\020POLICY_UNDEFINED\020\000\022\021\n" +
+      "\rPOLICY_FAILED\020\001\022\023\n\017POLICY_INSERTED\020\002\022\024\n" +
+      "\020POLICY_VALIDATED\020\003\022\026\n\022POLICY_PROVISIONE" +
+      "D\020\004\022\021\n\rPOLICY_ACTIVE\020\005\022\023\n\017POLICY_ENFORCE" +
+      "D\020\006\022\026\n\022POLICY_INEFFECTIVE\020\007\022\024\n\020POLICY_EF" +
+      "FECTIVE\020\010\022\022\n\016POLICY_UPDATED\020\t\022\022\n\016POLICY_" +
+      "REMOVED\020\n2\323\004\n\rPolicyService\022H\n\020PolicyAdd" +
+      "Service\022\031.policy.PolicyRuleService\032\027.pol" +
+      "icy.PolicyRuleState\"\000\022F\n\017PolicyAddDevice" +
+      "\022\030.policy.PolicyRuleDevice\032\027.policy.Poli" +
+      "cyRuleState\"\000\022K\n\023PolicyUpdateService\022\031.p" +
+      "olicy.PolicyRuleService\032\027.policy.PolicyR" +
+      "uleState\"\000\022I\n\022PolicyUpdateDevice\022\030.polic" +
+      "y.PolicyRuleDevice\032\027.policy.PolicyRuleSt" +
+      "ate\"\000\022?\n\014PolicyDelete\022\024.policy.PolicyRul" +
+      "eId\032\027.policy.PolicyRuleState\"\000\022E\n\020GetPol" +
+      "icyService\022\024.policy.PolicyRuleId\032\031.polic" +
+      "y.PolicyRuleService\"\000\022C\n\017GetPolicyDevice" +
+      "\022\024.policy.PolicyRuleId\032\030.policy.PolicyRu" +
+      "leDevice\"\000\022K\n\024GetPolicyByServiceId\022\022.con" +
+      "text.ServiceId\032\035.policy.PolicyRuleServic" +
+      "eList\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
deleted file mode 100644
index a5b807f83..000000000
--- a/src/policy/target/kubernetes/kubernetes.yml
+++ /dev/null
@@ -1,89 +0,0 @@
----
-apiVersion: v1
-kind: Service
-metadata:
-  annotations:
-    app.quarkus.io/commit-id: 54f1f40cdf39e96111ec04c337f26a425ffde95e
-    app.quarkus.io/build-timestamp: 2022-09-27 - 06:07:50 +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
-  selector:
-    app.kubernetes.io/name: policyservice
-  type: ClusterIP
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  annotations:
-    app.quarkus.io/commit-id: 54f1f40cdf39e96111ec04c337f26a425ffde95e
-    app.quarkus.io/build-timestamp: 2022-09-27 - 06:07:50 +0000
-  labels:
-    app: policyservice
-    app.kubernetes.io/name: policyservice
-  name: policyservice
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app.kubernetes.io/name: policyservice
-  template:
-    metadata:
-      annotations:
-        app.quarkus.io/commit-id: 54f1f40cdf39e96111ec04c337f26a425ffde95e
-        app.quarkus.io/build-timestamp: 2022-09-27 - 06:07:50 +0000
-      labels:
-        app: policyservice
-        app.kubernetes.io/name: policyservice
-    spec:
-      containers:
-        - env:
-            - name: KUBERNETES_NAMESPACE
-              valueFrom:
-                fieldRef:
-                  fieldPath: metadata.namespace
-            - 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:
-            failureThreshold: 3
-            httpGet:
-              path: /q/health/live
-              port: 8080
-              scheme: HTTP
-            initialDelaySeconds: 2
-            periodSeconds: 10
-            successThreshold: 1
-            timeoutSeconds: 10
-          name: policyservice
-          ports:
-            - containerPort: 8080
-              name: http
-              protocol: TCP
-            - containerPort: 6060
-              name: grpc
-              protocol: TCP
-          readinessProbe:
-            failureThreshold: 3
-            httpGet:
-              path: /q/health/ready
-              port: 8080
-              scheme: HTTP
-            initialDelaySeconds: 2
-            periodSeconds: 10
-            successThreshold: 1
-            timeoutSeconds: 10
-- 
GitLab


From 615038caea043d3f3b8cc13c2436c9296505be46 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Thu, 29 Sep 2022 14:58:10 +0300
Subject: [PATCH 18/34] Catch exceptions in PolicyRuleBasic constructor

---
 .../policy/model/PolicyRuleBasic.java         | 64 ++++++++++++++-----
 .../policy/PolicyRuleBasicValidationTest.java |  2 +-
 2 files changed, 49 insertions(+), 17 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
index 6f50dfca8..1157bc220 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
@@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import eu.teraflow.policy.common.Util;
+import java.util.ArrayList;
 import java.util.List;
 
 public class PolicyRuleBasic {
@@ -30,6 +31,7 @@ public class PolicyRuleBasic {
     private final List policyRuleConditions;
     private final BooleanOperator booleanOperator;
     private final List policyRuleActions;
+    private final Boolean isValid;
 
     public PolicyRuleBasic(
             String policyRuleId,
@@ -38,22 +40,52 @@ public class PolicyRuleBasic {
             List policyRuleConditions,
             BooleanOperator booleanOperator,
             List policyRuleActions) {
-        checkNotNull(policyRuleId, "Policy rule ID must not be null.");
-        checkArgument(!policyRuleId.isBlank(), "Policy rule ID must not be empty.");
-        this.policyRuleId = policyRuleId;
-        this.policyRuleState = policyRuleState;
-        checkArgument(priority >= 0, "Priority value must be greater or equal than zero.");
-        this.priority = priority;
-        checkNotNull(policyRuleConditions, "Policy Rule conditions cannot be null.");
-        checkArgument(!policyRuleConditions.isEmpty(), "Policy Rule conditions cannot be empty.");
-        this.policyRuleConditions = policyRuleConditions;
-        checkArgument(
-                booleanOperator != BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED,
-                "Boolean operator cannot be undefined");
-        this.booleanOperator = booleanOperator;
-        checkNotNull(policyRuleActions, "Policy Rule actions cannot be null.");
-        checkArgument(!policyRuleActions.isEmpty(), "Policy Rule actions cannot be empty.");
-        this.policyRuleActions = policyRuleActions;
+
+        String policyRuleId_val;
+        int priority_val;
+        List policyRuleConditions_val;
+        BooleanOperator booleanOperator_val;
+        List policyRuleActions_val;
+        Boolean isValid_val;
+
+        try {
+            checkNotNull(policyRuleId, "Policy rule ID must not be null.");
+            checkArgument(!policyRuleId.isBlank(), "Policy rule ID must not be empty.");
+            policyRuleId_val = policyRuleId;
+            this.policyRuleState = policyRuleState;
+            checkArgument(priority >= 0, "Priority value must be greater or equal than zero.");
+            priority_val = priority;
+            checkNotNull(policyRuleConditions, "Policy Rule conditions cannot be null.");
+            checkArgument(!policyRuleConditions.isEmpty(), "Policy Rule conditions cannot be empty.");
+            policyRuleConditions_val = policyRuleConditions;
+            checkArgument(
+                    booleanOperator != BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED,
+                    "Boolean operator cannot be undefined");
+            booleanOperator_val = booleanOperator;
+            checkNotNull(policyRuleActions, "Policy Rule actions cannot be null.");
+            checkArgument(!policyRuleActions.isEmpty(), "Policy Rule actions cannot be empty.");
+            policyRuleActions_val = policyRuleActions;
+            isValid_val = true;
+
+        } catch (Exception e) {
+            policyRuleId_val = "";
+            priority_val = 0;
+            policyRuleConditions_val = new ArrayList();
+            booleanOperator_val = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED;
+            policyRuleActions_val = new ArrayList();
+            isValid_val = false;
+        }
+
+        this.isValid = isValid_val;
+        this.policyRuleId = policyRuleId_val;
+        this.priority = priority_val;
+        this.policyRuleConditions = policyRuleConditions_val;
+        this.booleanOperator = booleanOperator_val;
+        this.policyRuleActions = policyRuleActions_val;
+    }
+
+    public boolean isValid() {
+        return isValid;
     }
 
     public String getPolicyRuleId() {
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
index e79932fd2..896c842d9 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
@@ -36,7 +36,7 @@ import java.util.UUID;
 import org.junit.jupiter.api.Test;
 
 @QuarkusTest
-class PolicyRuleBasicValidationTest {
+class PolicyRuleBasicValidationTestHelper {
 
     private PolicyRuleBasic createPolicyRuleBasic(
             String policyRuleId,
-- 
GitLab


From fa340e6febbf86672de4ee6539e12c70eaa5575a Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Thu, 29 Sep 2022 18:21:44 +0300
Subject: [PATCH 19/34] Add UpdatePolicyService grpc implementation

---
 .../eu/teraflow/policy/PolicyGatewayImpl.java |  21 ++--
 .../policy/PolicyRuleConditionValidator.java  |  29 +++++
 .../eu/teraflow/policy/PolicyService.java     |   2 +
 .../eu/teraflow/policy/PolicyServiceImpl.java | 111 ++++++++++++------
 .../policy/PolicyRuleBasicValidationTest.java |   2 +
 .../eu/teraflow/policy/PolicyServiceTest.java |   2 +-
 6 files changed, 120 insertions(+), 47 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
index d95f3a7be..fbcdbfa53 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
@@ -52,24 +52,23 @@ public class PolicyGatewayImpl implements PolicyGateway {
     }
 
     @Override
-    public Uni policyAddDevice(PolicyRuleDevice request) {
-        final var policyRuleDevice = serializer.deserialize(request);
+    public Uni policyUpdateService(PolicyRuleService request) {
+        final var policyRuleService = serializer.deserialize(request);
 
         return policyService
-                .addPolicyDevice(policyRuleDevice)
+                .updatePolicyService(policyRuleService)
                 .onItem()
                 .transform(serializer::serialize);
     }
 
     @Override
-    public Uni policyUpdateService(PolicyRuleService request) {
-        return Uni.createFrom()
-                .item(
-                        () ->
-                                Policy.PolicyRuleState.newBuilder()
-                                        .setPolicyRuleState(
-                                                request.getPolicyRuleBasic().getPolicyRuleState().getPolicyRuleState())
-                                        .build());
+    public Uni policyAddDevice(PolicyRuleDevice request) {
+        final var policyRuleDevice = serializer.deserialize(request);
+
+        return policyService
+                .addPolicyDevice(policyRuleDevice)
+                .onItem()
+                .transform(serializer::serialize);
     }
 
     @Override
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
index 0ca242dbb..3af4f3a8d 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
@@ -70,6 +70,21 @@ public class PolicyRuleConditionValidator {
         return isServiceIdValid;
     }
 
+    public Uni validateUpdatedPolicyRuleId(String updatedPolicyRuleId) {
+        final var isUpdatedPolicyRuleIdValid = isUpdatedPolicyRuleIdValid(updatedPolicyRuleId);
+
+        isUpdatedPolicyRuleIdValid
+                .subscribe()
+                .with(
+                        serviceIdBooleanValue -> {
+                            if (Boolean.FALSE.equals(serviceIdBooleanValue)) {
+                                LOGGER.errorf(INVALID_MESSAGE, updatedPolicyRuleId);
+                            }
+                        });
+
+        return isUpdatedPolicyRuleIdValid;
+    }
+
     private Uni isDeviceIdValid(String deviceId) {
         return contextService
                 .getDevice(deviceId)
@@ -98,4 +113,18 @@ public class PolicyRuleConditionValidator {
         return serviceServiceIdContextId.equals(serviceId.getContextId())
                 && serviceServiceIdId.equals(serviceId.getId());
     }
+
+    private Uni isUpdatedPolicyRuleIdValid(String updatedPolicyRuleId) {
+        return contextService
+                .getPolicyRule(updatedPolicyRuleId)
+                .onItem()
+                .ifNotNull()
+                .transform(
+                        id -> {
+                            return true;
+                        })
+                .onItem()
+                .ifNull()
+                .continueWith(false);
+    }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
index dcaf43b90..f7eda5681 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
@@ -25,5 +25,7 @@ public interface PolicyService {
 
     Uni addPolicyService(PolicyRuleService policyRuleService);
 
+    Uni updatePolicyService(PolicyRuleService policyRuleService);
+
     Uni addPolicyDevice(PolicyRuleDevice policyRuleDevice);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index 5a2c0c3a3..b7f060458 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -81,6 +81,8 @@ public class PolicyServiceImpl implements PolicyService {
             new PolicyRuleState(PolicyRuleStateEnum.POLICY_INEFFECTIVE);
     private static final PolicyRuleState EFFECTIVE_POLICYRULE_STATE =
             new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+    private static final PolicyRuleState UPDATED_POLICYRULE_STATE =
+            new PolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED);
 
     private final ContextService contextService;
     private final MonitoringService monitoringService;
@@ -121,6 +123,59 @@ public class PolicyServiceImpl implements PolicyService {
         return Long.valueOf(now).doubleValue();
     }
 
+    @Override
+    public Uni addPolicyService(PolicyRuleService policyRuleService) {
+        LOGGER.infof("Received %s", policyRuleService);
+
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
+
+        new Thread(
+                        () -> {
+                            validateService(policyRuleService);
+                        })
+                .start();
+
+        contextService.setPolicyRule(policyRuleBasic);
+
+        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+    }
+
+    @Override
+    public Uni updatePolicyService(PolicyRuleService policyRuleService) {
+        LOGGER.infof("Received %s", policyRuleService);
+
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+        policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
+
+        new Thread(
+                        () -> {
+                            validateUpdatedPolicyService(policyRuleService);
+                        })
+                .start();
+
+        contextService.setPolicyRule(policyRuleBasic);
+
+        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+    }
+
+    @Override
+    public Uni addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
+        LOGGER.infof("Received %s", policyRuleDevice);
+
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
+
+        new Thread(
+                        () -> {
+                            validateDevice(policyRuleDevice);
+                        })
+                .start();
+
+        contextService.setPolicyRule(policyRuleBasic);
+        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+    }
+
     private void provisionAlarm(
             PolicyRuleBasic policyRuleBasic,
             List alarmDescriptorList,
@@ -374,6 +429,27 @@ public class PolicyServiceImpl implements PolicyService {
         return;
     }
 
+    private void validateUpdatedPolicyService(PolicyRuleService policyRuleService) {
+
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+        final var isUpdatedPolicyRuleValid =
+                policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId());
+
+        isUpdatedPolicyRuleValid
+                .subscribe()
+                .with(
+                        policyRuleBoolean -> {
+                            if (Boolean.TRUE.equals(isUpdatedPolicyRuleValid)) {
+                                validateService(policyRuleService);
+                                return;
+                            } else {
+                                policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+                                contextService.setPolicyRule(policyRuleBasic);
+                                return;
+                            }
+                        });
+    }
+
     private void validateService(PolicyRuleService policyRuleService) {
         final var serviceId = policyRuleService.getServiceId();
         final var deviceIds = policyRuleService.getDeviceIds();
@@ -626,41 +702,6 @@ public class PolicyServiceImpl implements PolicyService {
                 getTimeStamp());
     }
 
-    @Override
-    public Uni addPolicyService(PolicyRuleService policyRuleService) {
-        LOGGER.infof("Received %s", policyRuleService);
-
-        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
-
-        new Thread(
-                        () -> {
-                            validateService(policyRuleService);
-                        })
-                .start();
-
-        contextService.setPolicyRule(policyRuleBasic);
-
-        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
-    }
-
-    @Override
-    public Uni addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
-        LOGGER.infof("Received %s", policyRuleDevice);
-
-        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
-
-        new Thread(
-                        () -> {
-                            validateDevice(policyRuleDevice);
-                        })
-                .start();
-
-        contextService.setPolicyRule(policyRuleBasic);
-        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
-    }
-
     private List returnInvalidDeviceIds(List deviceIds) {
         var invalidDeviceIds = new ArrayList();
 
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
index 896c842d9..43db1b00b 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
@@ -35,6 +35,8 @@ import java.util.List;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
 
+// TODO: Revisit PolicyRuleBasicValidationTest cases after handling exceptions in PolicyRuleBasic
+// constructor
 @QuarkusTest
 class PolicyRuleBasicValidationTestHelper {
 
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
index 4b2f3d6bd..65bea0d04 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -183,7 +183,7 @@ class PolicyServiceTest {
 
         final var expectedPolicyRuleState =
                 Policy.PolicyRuleState.newBuilder()
-                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED)
+                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED)
                         .build();
 
         final var policyRuleBasic =
-- 
GitLab


From 299a02e6ec28cee67d238b2e62a88e3eb4fb2e46 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Fri, 30 Sep 2022 13:03:01 +0300
Subject: [PATCH 20/34] Add UpdatePolicyDevice implementation

---
 .../eu/teraflow/policy/PolicyGatewayImpl.java | 13 +++----
 .../eu/teraflow/policy/PolicyService.java     |  2 +
 .../eu/teraflow/policy/PolicyServiceImpl.java | 39 +++++++++++++++++++
 .../eu/teraflow/policy/PolicyServiceTest.java | 14 ++++++-
 4 files changed, 59 insertions(+), 9 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
index fbcdbfa53..e83b1c63f 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
@@ -73,13 +73,12 @@ public class PolicyGatewayImpl implements PolicyGateway {
 
     @Override
     public Uni policyUpdateDevice(PolicyRuleDevice request) {
-        return Uni.createFrom()
-                .item(
-                        () ->
-                                Policy.PolicyRuleState.newBuilder()
-                                        .setPolicyRuleState(
-                                                request.getPolicyRuleBasic().getPolicyRuleState().getPolicyRuleState())
-                                        .build());
+        final var policyRuleDevice = serializer.deserialize(request);
+
+        return policyService
+                .updatePolicyDevice(policyRuleDevice)
+                .onItem()
+                .transform(serializer::serialize);
     }
 
     @Override
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
index f7eda5681..3be87b8ee 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
@@ -28,4 +28,6 @@ public interface PolicyService {
     Uni updatePolicyService(PolicyRuleService policyRuleService);
 
     Uni addPolicyDevice(PolicyRuleDevice policyRuleDevice);
+
+    Uni updatePolicyDevice(PolicyRuleDevice policyRuleDevice);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index b7f060458..aef909a13 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -176,6 +176,24 @@ public class PolicyServiceImpl implements PolicyService {
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
     }
 
+    @Override
+    public Uni updatePolicyDevice(PolicyRuleDevice policyRuleDevice) {
+        LOGGER.infof("Received %s", policyRuleDevice);
+
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
+
+        new Thread(
+                        () -> {
+                            validateUpdatedPolicyDevice(policyRuleDevice);
+                        })
+                .start();
+
+        contextService.setPolicyRule(policyRuleBasic);
+
+        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+    }
+
     private void provisionAlarm(
             PolicyRuleBasic policyRuleBasic,
             List alarmDescriptorList,
@@ -450,6 +468,27 @@ public class PolicyServiceImpl implements PolicyService {
                         });
     }
 
+    private void validateUpdatedPolicyDevice(PolicyRuleDevice policyRuleDevice) {
+
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        final var isUpdatedPolicyRuleValid =
+                policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId());
+
+        isUpdatedPolicyRuleValid
+                .subscribe()
+                .with(
+                        policyRuleBoolean -> {
+                            if (Boolean.TRUE.equals(isUpdatedPolicyRuleValid)) {
+                                validateDevice(policyRuleDevice);
+                                return;
+                            } else {
+                                policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+                                contextService.setPolicyRule(policyRuleBasic);
+                                return;
+                            }
+                        });
+    }
+
     private void validateService(PolicyRuleService policyRuleService) {
         final var serviceId = policyRuleService.getServiceId();
         final var deviceIds = policyRuleService.getDeviceIds();
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
index 65bea0d04..978837913 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -205,15 +205,25 @@ class PolicyServiceTest {
             throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture message = new CompletableFuture<>();
 
+        final var expectedDeviceIdUuid =
+                serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257");
+
+        final var expectedDeviceId =
+                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid).build();
+
         final var expectedPolicyRuleState =
                 Policy.PolicyRuleState.newBuilder()
-                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED)
+                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED)
                         .build();
 
         final var policyRuleBasic =
                 PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build();
+        final var deviceIds = List.of(expectedDeviceId);
         final var policyRuleDevice =
-                Policy.PolicyRuleDevice.newBuilder().setPolicyRuleBasic(policyRuleBasic).build();
+                Policy.PolicyRuleDevice.newBuilder()
+                        .setPolicyRuleBasic(policyRuleBasic)
+                        .addAllDeviceList(deviceIds)
+                        .build();
 
         client
                 .policyUpdateDevice(policyRuleDevice)
-- 
GitLab


From 9eee73648b828b9856f7a7036a8a9b34463ea675 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Fri, 30 Sep 2022 17:59:39 +0300
Subject: [PATCH 21/34] Implement PoliceDelete grpc call

---
 .../eu/teraflow/policy/PolicyGatewayImpl.java | 10 ++--
 .../eu/teraflow/policy/PolicyService.java     |  2 +
 .../eu/teraflow/policy/PolicyServiceImpl.java | 23 +++++++++
 .../policy/monitoring/MonitoringGateway.java  |  2 +
 .../monitoring/MonitoringGatewayImpl.java     | 10 ++++
 .../policy/monitoring/MonitoringService.java  |  2 +
 .../monitoring/MonitoringServiceImpl.java     |  5 ++
 .../eu/teraflow/policy/PolicyServiceTest.java | 50 ++++++++++---------
 8 files changed, 74 insertions(+), 30 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
index e83b1c63f..351b9b351 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
@@ -27,7 +27,6 @@ import policy.Policy.PolicyRuleId;
 import policy.Policy.PolicyRuleService;
 import policy.Policy.PolicyRuleServiceList;
 import policy.Policy.PolicyRuleState;
-import policy.Policy.PolicyRuleStateEnum;
 
 @GrpcService
 public class PolicyGatewayImpl implements PolicyGateway {
@@ -83,12 +82,9 @@ public class PolicyGatewayImpl implements PolicyGateway {
 
     @Override
     public Uni policyDelete(PolicyRuleId request) {
-        return Uni.createFrom()
-                .item(
-                        () ->
-                                Policy.PolicyRuleState.newBuilder()
-                                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED)
-                                        .build());
+        final var policyRuleId = serializer.deserialize(request);
+
+        return policyService.deletePolicy(policyRuleId).onItem().transform(serializer::serialize);
     }
 
     @Override
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
index 3be87b8ee..987b85d8c 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
@@ -30,4 +30,6 @@ public interface PolicyService {
     Uni addPolicyDevice(PolicyRuleDevice policyRuleDevice);
 
     Uni updatePolicyDevice(PolicyRuleDevice policyRuleDevice);
+
+    Uni deletePolicy(String policyRuleId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index aef909a13..5369b028d 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -83,6 +83,8 @@ public class PolicyServiceImpl implements PolicyService {
             new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
     private static final PolicyRuleState UPDATED_POLICYRULE_STATE =
             new PolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED);
+    private static final PolicyRuleState REMOVED_POLICYRULE_STATE =
+            new PolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED);
 
     private final ContextService contextService;
     private final MonitoringService monitoringService;
@@ -194,6 +196,27 @@ public class PolicyServiceImpl implements PolicyService {
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
     }
 
+    @Override
+    public Uni deletePolicy(String policyRuleId) {
+        LOGGER.infof("Received %s", policyRuleId);
+
+        PolicyRuleBasic policyRuleBasic =
+                contextService.getPolicyRule(policyRuleId).await().indefinitely();
+        List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
+
+        for (PolicyRuleCondition policy : policyRuleConditions) {
+            var empty = monitoringService.deleteKpi(policy.getKpiId());
+            empty
+                    .subscribe()
+                    .with(emptyMessage -> LOGGER.infof("Policy [%s] has been deleted.\n", policyRuleId));
+        }
+
+        policyRuleBasic.setPolicyRuleState(REMOVED_POLICYRULE_STATE);
+        contextService.setPolicyRule(policyRuleBasic);
+
+        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+    }
+
     private void provisionAlarm(
             PolicyRuleBasic policyRuleBasic,
             List alarmDescriptorList,
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java
index 43cfefc1e..48b976d8d 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java
@@ -44,4 +44,6 @@ public interface MonitoringGateway {
     Multi getAlarmResponseStream(AlarmSubscription alarmSubscription);
 
     Uni deleteAlarm(String deviceId);
+
+    Uni deleteKpi(String kpiId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java
index 82ddd4251..3a027fc6a 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java
@@ -124,4 +124,14 @@ public class MonitoringGatewayImpl implements MonitoringGateway {
                 .onItem()
                 .transform(serializer::deserializeEmpty);
     }
+
+    @Override
+    public Uni deleteKpi(String kpiId) {
+        final var serializedKpiId = serializer.serializeKpiId(kpiId);
+
+        return streamingDelegateMonitoring
+                .deleteKpi(serializedKpiId)
+                .onItem()
+                .transform(serializer::deserializeEmpty);
+    }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java
index 5417b429c..c4d251d1e 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java
@@ -44,4 +44,6 @@ public interface MonitoringService {
     Multi getAlarmResponseStream(AlarmSubscription alarmSubscription);
 
     Uni deleteAlarm(String deviceId);
+
+    Uni deleteKpi(String kpiId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java
index c45e57c12..480c3b724 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java
@@ -78,4 +78,9 @@ public class MonitoringServiceImpl implements MonitoringService {
     public Uni deleteAlarm(String alarmId) {
         return monitoringGateway.deleteAlarm(alarmId);
     }
+
+    @Override
+    public Uni deleteKpi(String kpiId) {
+        return monitoringGateway.deleteKpi(kpiId);
+    }
 }
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
index 978837913..1669966ab 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -234,29 +234,33 @@ class PolicyServiceTest {
                 .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString());
     }
 
-    @Test
-    void shouldDeletePolicy() throws ExecutionException, InterruptedException, TimeoutException {
-        CompletableFuture message = new CompletableFuture<>();
-
-        final var uuid =
-                ContextOuterClass.Uuid.newBuilder()
-                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
-                        .build();
-        final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build();
-
-        final var expectedPolicyRuleState =
-                Policy.PolicyRuleState.newBuilder()
-                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED)
-                        .build();
-
-        client
-                .policyDelete(policyRuleId)
-                .subscribe()
-                .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString()));
-
-        assertThat(message.get(5, TimeUnit.SECONDS))
-                .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString());
-    }
+    // TODO: Disable shouldDeletePolicy test until mock context service
+    //     @Test
+    //     void shouldDeletePolicy() throws ExecutionException, InterruptedException, TimeoutException
+    // {
+    //         CompletableFuture message = new CompletableFuture<>();
+
+    //         final var uuid =
+    //                 ContextOuterClass.Uuid.newBuilder()
+    //
+    // .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+    //                         .build();
+    //         final var policyRuleId = Policy.PolicyRuleId.newBuilder().setUuid(uuid).build();
+
+    //         final var expectedPolicyRuleState =
+    //                 Policy.PolicyRuleState.newBuilder()
+    //                         .setPolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED)
+    //                         .build();
+
+    //         client
+    //                 .policyDelete(policyRuleId)
+    //                 .subscribe()
+    //                 .with(policyRuleState ->
+    // message.complete(policyRuleState.getPolicyRuleState().toString()));
+
+    //         assertThat(message.get(5, TimeUnit.SECONDS))
+    //                 .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString());
+    //     }
 
     @Test
     void shouldGetPolicyService() throws ExecutionException, InterruptedException, TimeoutException {
-- 
GitLab


From 7f14c8c286eea36844cdba19f0620b2ebec29be8 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Mon, 3 Oct 2022 14:09:05 +0300
Subject: [PATCH 22/34] Rename functions that apply actions to service and
 devices

---
 .../java/eu/teraflow/policy/PolicyServiceImpl.java  | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index 5369b028d..ffc9aabf1 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -200,6 +200,7 @@ public class PolicyServiceImpl implements PolicyService {
     public Uni deletePolicy(String policyRuleId) {
         LOGGER.infof("Received %s", policyRuleId);
 
+        // TODO: Specify timeout in case of connectivity issue
         PolicyRuleBasic policyRuleBasic =
                 contextService.getPolicyRule(policyRuleId).await().indefinitely();
         List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
@@ -249,9 +250,9 @@ public class PolicyServiceImpl implements PolicyService {
                         alarmResponse -> {
                             LOGGER.info(alarmResponse);
                             if (isService) {
-                                activateService(alarmResponse.getAlarmId());
+                                applyActionService(alarmResponse.getAlarmId());
                             } else {
-                                activateDevices(alarmResponse.getAlarmId());
+                                applyActionDevice(alarmResponse.getAlarmId());
                             }
                         });
 
@@ -280,15 +281,15 @@ public class PolicyServiceImpl implements PolicyService {
                             alarmResponse -> {
                                 LOGGER.info(alarmResponse);
                                 if (isService) {
-                                    activateService(alarmResponse.getAlarmId());
+                                    applyActionService(alarmResponse.getAlarmId());
                                 } else {
-                                    activateDevices(alarmResponse.getAlarmId());
+                                    applyActionDevice(alarmResponse.getAlarmId());
                                 }
                             });
         }
     }
 
-    private void activateDevices(String alarmId) {
+    private void applyActionDevice(String alarmId) {
         PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId);
         PolicyRuleBasic policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
 
@@ -420,7 +421,7 @@ public class PolicyServiceImpl implements PolicyService {
                         });
     }
 
-    private void activateService(String alarmId) {
+    private void applyActionService(String alarmId) {
         PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId);
         PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId);
-- 
GitLab


From 134e371f12e923d24698daf9eb7414ae3ac20867 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Mon, 3 Oct 2022 14:48:25 +0300
Subject: [PATCH 23/34] Remove PolicyRule in case of PolicyDelete call

---
 .../java/eu/teraflow/policy/PolicyServiceImpl.java    |  7 ++++++-
 .../eu/teraflow/policy/context/ContextGateway.java    |  3 +++
 .../teraflow/policy/context/ContextGatewayImpl.java   | 11 +++++++++++
 .../eu/teraflow/policy/context/ContextService.java    |  3 +++
 .../teraflow/policy/context/ContextServiceImpl.java   |  6 ++++++
 5 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index ffc9aabf1..cc2bed0ee 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -209,9 +209,14 @@ public class PolicyServiceImpl implements PolicyService {
             var empty = monitoringService.deleteKpi(policy.getKpiId());
             empty
                     .subscribe()
-                    .with(emptyMessage -> LOGGER.infof("Policy [%s] has been deleted.\n", policyRuleId));
+                    .with(emptyMessage -> LOGGER.infof("Kpi [%s] has been deleted.\n", policyRuleId));
         }
 
+        var empty = contextService.removePolicyRule(policyRuleId);
+        empty
+                .subscribe()
+                .with(emptyMessage -> LOGGER.infof("Policy [%s] has been removed.\n", policyRuleId));
+
         policyRuleBasic.setPolicyRuleState(REMOVED_POLICYRULE_STATE);
         contextService.setPolicyRule(policyRuleBasic);
 
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
index 1f1c2446a..4e90fe7b6 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
@@ -17,6 +17,7 @@
 package eu.teraflow.policy.context;
 
 import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import eu.teraflow.policy.model.PolicyRuleBasic;
@@ -35,4 +36,6 @@ public interface ContextGateway {
     Uni getPolicyRule(String policyRuleId);
 
     Uni setPolicyRule(PolicyRuleBasic policyRuleBasic);
+
+    Uni removePolicyRule(String policyRuleId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
index 568ff449a..8b8f981d0 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
@@ -20,6 +20,7 @@ import context.MutinyContextServiceGrpc.MutinyContextServiceStub;
 import context_policy.MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub;
 import eu.teraflow.policy.Serializer;
 import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import eu.teraflow.policy.model.PolicyRuleBasic;
@@ -97,4 +98,14 @@ public class ContextGatewayImpl implements ContextGateway {
                 .onItem()
                 .transform(serializer::deserialize);
     }
+
+    @Override
+    public Uni removePolicyRule(String policyRuleId) {
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(policyRuleId);
+
+        return streamingDelegateContextPolicy
+                .removePolicyRule(serializedPolicyRuleId)
+                .onItem()
+                .transform(serializer::deserializeEmpty);
+    }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
index 133318a05..41290e52a 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
@@ -17,6 +17,7 @@
 package eu.teraflow.policy.context;
 
 import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import eu.teraflow.policy.model.PolicyRuleBasic;
@@ -33,4 +34,6 @@ public interface ContextService {
     Uni getPolicyRule(String policyRuleId);
 
     Uni setPolicyRule(PolicyRuleBasic policyRuleBasic);
+
+    Uni removePolicyRule(String policyRuleId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
index bb5c8d61b..b8ffc44a4 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
@@ -17,6 +17,7 @@
 package eu.teraflow.policy.context;
 
 import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import eu.teraflow.policy.model.PolicyRuleBasic;
@@ -58,4 +59,9 @@ public class ContextServiceImpl implements ContextService {
     public Uni setPolicyRule(PolicyRuleBasic policyRuleBasic) {
         return contextGateway.setPolicyRule(policyRuleBasic);
     }
+
+    @Override
+    public Uni removePolicyRule(String policyRuleId) {
+        return contextGateway.removePolicyRule(policyRuleId);
+    }
 }
-- 
GitLab


From 5bdee66a4cd8c8f9eea754f22826a6f10bbe798a Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Mon, 3 Oct 2022 16:39:46 +0300
Subject: [PATCH 24/34] Add policyRuleStateMessage field in PolicyRuleState

---
 proto/policy.proto                            |   1 +
 .../eu/teraflow/policy/PolicyServiceImpl.java |  93 +++++--
 .../java/eu/teraflow/policy/Serializer.java   |   5 +-
 .../policy/model/PolicyRuleState.java         |  12 +-
 .../policy/PolicyRuleBasicValidationTest.java |  23 +-
 .../PolicyRuleDeviceValidationTest.java       |   6 +-
 .../PolicyRuleServiceValidationTest.java      |   8 +-
 .../eu/teraflow/policy/SerializerTest.java    |   7 +-
 .../generated-sources/grpc/policy/Policy.java | 239 ++++++++++++++----
 9 files changed, 305 insertions(+), 89 deletions(-)

diff --git a/proto/policy.proto b/proto/policy.proto
index 158ec1f39..fb362e0d0 100644
--- a/proto/policy.proto
+++ b/proto/policy.proto
@@ -50,6 +50,7 @@ message PolicyRuleId {
 
 message PolicyRuleState {
   PolicyRuleStateEnum policyRuleState = 1;
+  string policyRuleStateMessage = 2;
 }
 
 // Basic policy rule attributes
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index cc2bed0ee..44959e3da 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -66,25 +66,35 @@ public class PolicyServiceImpl implements PolicyService {
     private static final String INVALID_MESSAGE = "%s is invalid.";
     private static final String VALID_MESSAGE = "%s is valid.";
     private static final PolicyRuleState INSERTED_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_INSERTED);
+            new PolicyRuleState(
+                    PolicyRuleStateEnum.POLICY_INSERTED, "Successfully set to INSERTED STATE");
     private static final PolicyRuleState VALIDATED_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_VALIDATED);
-    private static final PolicyRuleState FAILED_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED);
+            new PolicyRuleState(
+                    PolicyRuleStateEnum.POLICY_VALIDATED, "Successfully transitioned to VALIDATED STATE");
     private static final PolicyRuleState PROVISIONED_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_PROVISIONED);
+            new PolicyRuleState(
+                    PolicyRuleStateEnum.POLICY_PROVISIONED,
+                    "Successfully transitioned from VALIDATED to PROVISIONED STATE");
     private static final PolicyRuleState ACTIVE_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_ACTIVE);
+            new PolicyRuleState(
+                    PolicyRuleStateEnum.POLICY_ACTIVE,
+                    "Successfully transitioned from PROVISIONED to ACTIVE STATE");
     private static final PolicyRuleState ENFORCED_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED);
+            new PolicyRuleState(
+                    PolicyRuleStateEnum.POLICY_ENFORCED,
+                    "Successfully transitioned from ACTIVE to ENFORCED STATE");
     private static final PolicyRuleState INEFFECTIVE_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_INEFFECTIVE);
+            new PolicyRuleState(
+                    PolicyRuleStateEnum.POLICY_INEFFECTIVE,
+                    "Transitioned from ENFORCED to INEFFECTIVE state");
     private static final PolicyRuleState EFFECTIVE_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+            new PolicyRuleState(
+                    PolicyRuleStateEnum.POLICY_EFFECTIVE,
+                    "Successfully transitioned from ENFORCED to EFFECTIVE state");
     private static final PolicyRuleState UPDATED_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED);
+            new PolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED, "Successfully set to UPDATED STATE");
     private static final PolicyRuleState REMOVED_POLICYRULE_STATE =
-            new PolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED);
+            new PolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED, "Successfully set to REMOVED STATE");
 
     private final ContextService contextService;
     private final MonitoringService monitoringService;
@@ -115,6 +125,10 @@ public class PolicyServiceImpl implements PolicyService {
         this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter;
     }
 
+    private static PolicyRuleState createFailedPolicyRuleState(String message) {
+        return new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message);
+    }
+
     private static String gen() {
         Random r = new Random(System.currentTimeMillis());
         return String.valueOf((1 + r.nextInt(2)) * 10000 + r.nextInt(10000));
@@ -449,11 +463,15 @@ public class PolicyServiceImpl implements PolicyService {
     private void validateDevice(PolicyRuleDevice policyRuleDevice) {
         final var deviceIds = policyRuleDevice.getDeviceIds();
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        final var policyRuleId = policyRuleBasic.getPolicyRuleId();
 
         final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
         if (!invalidDeviceIds.isEmpty()) {
-            LOGGER.infof("Setting Policy Rule state to [%s]", FAILED_POLICYRULE_STATE.toString());
-            policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+            var policyRuleState =
+                    createFailedPolicyRuleState(
+                            "The Devices of PolicyRuleDevice " + policyRuleId + " are not valid");
+            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+            policyRuleBasic.setPolicyRuleState(policyRuleState);
             contextService.setPolicyRule(policyRuleBasic);
             return;
         }
@@ -462,8 +480,11 @@ public class PolicyServiceImpl implements PolicyService {
                 parsePolicyRuleCondition(policyRuleDevice.getPolicyRuleBasic());
 
         if (alarmDescriptorList.isEmpty()) {
-            LOGGER.infof("Setting Policy Rule state to [%s]", FAILED_POLICYRULE_STATE.toString());
-            policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+            var policyRuleState =
+                    createFailedPolicyRuleState(
+                            "The PolicyRuleConditions of PolicyRuleDevice " + policyRuleId + " are not valid");
+            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+            policyRuleBasic.setPolicyRuleState(policyRuleState);
             contextService.setPolicyRule(policyRuleBasic);
             return;
         }
@@ -490,7 +511,13 @@ public class PolicyServiceImpl implements PolicyService {
                                 validateService(policyRuleService);
                                 return;
                             } else {
-                                policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+                                var policyRuleState =
+                                        createFailedPolicyRuleState(
+                                                "The requested PolicyRuleService to update: "
+                                                        + policyRuleBasic.getPolicyRuleId()
+                                                        + " is not valid");
+                                LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+                                policyRuleBasic.setPolicyRuleState(policyRuleState);
                                 contextService.setPolicyRule(policyRuleBasic);
                                 return;
                             }
@@ -511,7 +538,13 @@ public class PolicyServiceImpl implements PolicyService {
                                 validateDevice(policyRuleDevice);
                                 return;
                             } else {
-                                policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+                                var policyRuleState =
+                                        createFailedPolicyRuleState(
+                                                "The requested PolicyRuleDevice to update: "
+                                                        + policyRuleBasic.getPolicyRuleId()
+                                                        + " is not valid");
+                                LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+                                policyRuleBasic.setPolicyRuleState(policyRuleState);
                                 contextService.setPolicyRule(policyRuleBasic);
                                 return;
                             }
@@ -536,8 +569,13 @@ public class PolicyServiceImpl implements PolicyService {
                                 if (invalidDeviceIds.isEmpty()) {
                                     LOGGER.info("All Device Ids are valid.");
                                 }
-
-                                policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+                                var policyRuleState =
+                                        createFailedPolicyRuleState(
+                                                "The Service of PolicyRuleService "
+                                                        + policyRuleBasic.getPolicyRuleId()
+                                                        + " is not valid");
+                                LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+                                policyRuleBasic.setPolicyRuleState(policyRuleState);
                                 contextService.setPolicyRule(policyRuleBasic);
                                 return;
                             } else {
@@ -546,7 +584,13 @@ public class PolicyServiceImpl implements PolicyService {
                                 final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
 
                                 if (!invalidDeviceIds.isEmpty()) {
-                                    policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+                                    var policyRuleState =
+                                            createFailedPolicyRuleState(
+                                                    "The Devices of PolicyRuleService "
+                                                            + policyRuleBasic.getPolicyRuleId()
+                                                            + " are not valid");
+                                    LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+                                    policyRuleBasic.setPolicyRuleState(policyRuleState);
                                     contextService.setPolicyRule(policyRuleBasic);
                                     return;
                                 } else {
@@ -567,8 +611,13 @@ public class PolicyServiceImpl implements PolicyService {
                 parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic());
 
         if (alarmDescriptorList.isEmpty()) {
-            LOGGER.infof("Setting Policy Rule state to [%s]", FAILED_POLICYRULE_STATE.toString());
-            policyRuleBasic.setPolicyRuleState(FAILED_POLICYRULE_STATE);
+            var policyRuleState =
+                    createFailedPolicyRuleState(
+                            "The PolicyRuleConditions of PolicyRuleDevice "
+                                    + policyRuleBasic.getPolicyRuleId()
+                                    + " are not valid");
+            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+            policyRuleBasic.setPolicyRuleState(policyRuleState);
             contextService.setPolicyRule(policyRuleBasic);
             return;
         }
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 385328730..3fc25ff1c 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -1379,20 +1379,23 @@ public class Serializer {
         final var builder = Policy.PolicyRuleState.newBuilder();
 
         final var ruleState = policyRuleState.getRuleState();
+        final var policyRuleStateMessage = policyRuleState.getPolicyRuleStateMessage();
 
         final var serializedRuleState = serialize(ruleState);
 
         builder.setPolicyRuleState(serializedRuleState);
+        builder.setPolicyRuleStateMessage(policyRuleStateMessage);
 
         return builder.build();
     }
 
     public PolicyRuleState deserialize(Policy.PolicyRuleState serializedPolicyRuleState) {
         final var serializedRuleState = serializedPolicyRuleState.getPolicyRuleState();
+        final var serializedRuleStateMessage = serializedPolicyRuleState.getPolicyRuleStateMessage();
 
         final var ruleState = deserialize(serializedRuleState);
 
-        return new PolicyRuleState(ruleState);
+        return new PolicyRuleState(ruleState, serializedRuleStateMessage);
     }
 
     public PolicyCondition.NumericalOperator serialize(NumericalOperator numericalOperator) {
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java
index 5b3d39f6e..29911fec8 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleState.java
@@ -19,9 +19,11 @@ package eu.teraflow.policy.model;
 public class PolicyRuleState {
 
     private PolicyRuleStateEnum policyRuleStateEnum;
+    private String policyRuleStateMessage;
 
-    public PolicyRuleState(PolicyRuleStateEnum policyRuleStateEnum) {
+    public PolicyRuleState(PolicyRuleStateEnum policyRuleStateEnum, String policyRuleStateMessage) {
         this.policyRuleStateEnum = policyRuleStateEnum;
+        this.policyRuleStateMessage = policyRuleStateMessage;
     }
 
     public void setRuleState(PolicyRuleStateEnum policyRuleStateEnum) {
@@ -32,6 +34,14 @@ public class PolicyRuleState {
         return policyRuleStateEnum;
     }
 
+    public void setPolicyRuleStateMessage(String policyRuleStateMessage) {
+        this.policyRuleStateMessage = policyRuleStateMessage;
+    }
+
+    public String getPolicyRuleStateMessage() {
+        return this.policyRuleStateMessage;
+    }
+
     @Override
     public String toString() {
         return String.format(
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
index 43db1b00b..e4c9f1698 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java
@@ -83,7 +83,7 @@ class PolicyRuleBasicValidationTestHelper {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         assertThatExceptionOfType(NullPointerException.class)
                 .isThrownBy(
@@ -109,7 +109,7 @@ class PolicyRuleBasicValidationTestHelper {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED, "1");
 
         assertThatExceptionOfType(IllegalArgumentException.class)
                 .isThrownBy(
@@ -135,7 +135,7 @@ class PolicyRuleBasicValidationTestHelper {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED, "1");
 
         assertThatExceptionOfType(IllegalArgumentException.class)
                 .isThrownBy(
@@ -161,7 +161,7 @@ class PolicyRuleBasicValidationTestHelper {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_INSERTED);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_INSERTED, "1");
 
         final var policyRuleId = UUID.randomUUID().toString();
 
@@ -184,7 +184,7 @@ class PolicyRuleBasicValidationTestHelper {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED, "1");
 
         final var policyRuleId = UUID.randomUUID().toString();
 
@@ -208,7 +208,7 @@ class PolicyRuleBasicValidationTestHelper {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED, "1");
 
         final var policyRuleId = UUID.randomUUID().toString();
 
@@ -236,7 +236,7 @@ class PolicyRuleBasicValidationTestHelper {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_VALIDATED);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_VALIDATED, "1");
 
         final var policyRuleId = UUID.randomUUID().toString();
 
@@ -260,7 +260,7 @@ class PolicyRuleBasicValidationTestHelper {
                         NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN,
                         new IntegerKpiValue(3));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_PROVISIONED);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_PROVISIONED, "1");
 
         final var policyRuleId = UUID.randomUUID().toString();
 
@@ -285,7 +285,7 @@ class PolicyRuleBasicValidationTestHelper {
                         new IntegerKpiValue(3));
         final var policyRuleActions = Collections.emptyList();
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, "1");
 
         final var policyRuleId = UUID.randomUUID().toString();
 
@@ -304,7 +304,8 @@ class PolicyRuleBasicValidationTestHelper {
     @Test
     void shouldCreatePolicyRuleBasicObject() {
         final var expectedPolicyRuleId = "expectedPolicyRuleId";
-        final var expectedPolicyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var expectedPolicyRuleState =
+                new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
         final var expectedPriority = 3;
 
         final var firstKpiValue = new IntegerKpiValue(22);
@@ -345,7 +346,7 @@ class PolicyRuleBasicValidationTestHelper {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
                         List.of("parameter1", "parameter2"));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         final var policyRuleBasic =
                 createPolicyRuleBasic(
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java
index 2ea0b2586..191383045 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java
@@ -100,7 +100,7 @@ class PolicyRuleDeviceValidationTest {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         final var policyRuleBasic =
                 createPolicyRuleBasic(
@@ -127,7 +127,7 @@ class PolicyRuleDeviceValidationTest {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         final var policyRuleBasic =
                 createPolicyRuleBasic(
@@ -156,7 +156,7 @@ class PolicyRuleDeviceValidationTest {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         final var policyRuleBasic =
                 createPolicyRuleBasic(
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 3e4dc4fa5..ffa14b2d0 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java
@@ -106,7 +106,7 @@ class PolicyRuleServiceValidationTest {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         final var deviceIds = createDeviceIds();
 
@@ -137,7 +137,7 @@ class PolicyRuleServiceValidationTest {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         final var policyRuleBasic =
                 createPolicyRuleBasic(
@@ -167,7 +167,7 @@ class PolicyRuleServiceValidationTest {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         final var policyRuleBasic =
                 createPolicyRuleBasic(
@@ -201,7 +201,7 @@ class PolicyRuleServiceValidationTest {
                         PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
                         List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString()));
 
-        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1");
 
         final var policyRuleBasic =
                 createPolicyRuleBasic(
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 fa9ae4d3c..f82914647 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -146,7 +146,8 @@ class SerializerTest {
 
     private PolicyRuleBasic createPolicyRuleBasic() {
         final var expectedPolicyRuleId = "expectedPolicyRuleId";
-        final var expectedPolicyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE);
+        final var expectedPolicyRuleState =
+                new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "Policy was effective");
         final var expectedPriority = 3;
 
         final var firstKpiValue = new IntegerKpiValue(22);
@@ -2276,7 +2277,7 @@ class SerializerTest {
     @Test
     void shouldSerializePolicyRuleState() {
         final var expectedRuleState = PolicyRuleStateEnum.POLICY_ACTIVE;
-        final var policyRuleState = new PolicyRuleState(expectedRuleState);
+        final var policyRuleState = new PolicyRuleState(expectedRuleState, "");
 
         final var serializedRuleState = serializer.serialize(expectedRuleState);
 
@@ -2293,7 +2294,7 @@ class SerializerTest {
     @Test
     void shouldDeserializePolicyRuleState() {
         final var expectedRuleState = PolicyRuleStateEnum.POLICY_ENFORCED;
-        final var expectedPolicyRuleState = new PolicyRuleState(expectedRuleState);
+        final var expectedPolicyRuleState = new PolicyRuleState(expectedRuleState, "");
 
         final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState);
 
diff --git a/src/policy/target/generated-sources/grpc/policy/Policy.java b/src/policy/target/generated-sources/grpc/policy/Policy.java
index 7c0a23452..267ef0082 100644
--- a/src/policy/target/generated-sources/grpc/policy/Policy.java
+++ b/src/policy/target/generated-sources/grpc/policy/Policy.java
@@ -926,6 +926,18 @@ public final class Policy {
      * @return The policyRuleState.
      */
     policy.Policy.PolicyRuleStateEnum getPolicyRuleState();
+
+    /**
+     * string policyRuleStateMessage = 2;
+     * @return The policyRuleStateMessage.
+     */
+    java.lang.String getPolicyRuleStateMessage();
+    /**
+     * string policyRuleStateMessage = 2;
+     * @return The bytes for policyRuleStateMessage.
+     */
+    com.google.protobuf.ByteString
+        getPolicyRuleStateMessageBytes();
   }
   /**
    * Protobuf type {@code policy.PolicyRuleState}
@@ -941,6 +953,7 @@ public final class Policy {
     }
     private PolicyRuleState() {
       policyRuleState_ = 0;
+      policyRuleStateMessage_ = "";
     }
 
     @java.lang.Override
@@ -979,6 +992,12 @@ public final class Policy {
               policyRuleState_ = rawValue;
               break;
             }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              policyRuleStateMessage_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -1030,6 +1049,44 @@ public final class Policy {
       return result == null ? policy.Policy.PolicyRuleStateEnum.UNRECOGNIZED : result;
     }
 
+    public static final int POLICYRULESTATEMESSAGE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object policyRuleStateMessage_;
+    /**
+     * string policyRuleStateMessage = 2;
+     * @return The policyRuleStateMessage.
+     */
+    @java.lang.Override
+    public java.lang.String getPolicyRuleStateMessage() {
+      java.lang.Object ref = policyRuleStateMessage_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        policyRuleStateMessage_ = s;
+        return s;
+      }
+    }
+    /**
+     * string policyRuleStateMessage = 2;
+     * @return The bytes for policyRuleStateMessage.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getPolicyRuleStateMessageBytes() {
+      java.lang.Object ref = policyRuleStateMessage_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        policyRuleStateMessage_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -1047,6 +1104,9 @@ public final class Policy {
       if (policyRuleState_ != policy.Policy.PolicyRuleStateEnum.POLICY_UNDEFINED.getNumber()) {
         output.writeEnum(1, policyRuleState_);
       }
+      if (!getPolicyRuleStateMessageBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, policyRuleStateMessage_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -1060,6 +1120,9 @@ public final class Policy {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(1, policyRuleState_);
       }
+      if (!getPolicyRuleStateMessageBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, policyRuleStateMessage_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -1076,6 +1139,8 @@ public final class Policy {
       policy.Policy.PolicyRuleState other = (policy.Policy.PolicyRuleState) obj;
 
       if (policyRuleState_ != other.policyRuleState_) return false;
+      if (!getPolicyRuleStateMessage()
+          .equals(other.getPolicyRuleStateMessage())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -1089,6 +1154,8 @@ public final class Policy {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + POLICYRULESTATE_FIELD_NUMBER;
       hash = (53 * hash) + policyRuleState_;
+      hash = (37 * hash) + POLICYRULESTATEMESSAGE_FIELD_NUMBER;
+      hash = (53 * hash) + getPolicyRuleStateMessage().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -1224,6 +1291,8 @@ public final class Policy {
         super.clear();
         policyRuleState_ = 0;
 
+        policyRuleStateMessage_ = "";
+
         return this;
       }
 
@@ -1251,6 +1320,7 @@ public final class Policy {
       public policy.Policy.PolicyRuleState buildPartial() {
         policy.Policy.PolicyRuleState result = new policy.Policy.PolicyRuleState(this);
         result.policyRuleState_ = policyRuleState_;
+        result.policyRuleStateMessage_ = policyRuleStateMessage_;
         onBuilt();
         return result;
       }
@@ -1302,6 +1372,10 @@ public final class Policy {
         if (other.policyRuleState_ != 0) {
           setPolicyRuleStateValue(other.getPolicyRuleStateValue());
         }
+        if (!other.getPolicyRuleStateMessage().isEmpty()) {
+          policyRuleStateMessage_ = other.policyRuleStateMessage_;
+          onChanged();
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -1384,6 +1458,82 @@ public final class Policy {
         onChanged();
         return this;
       }
+
+      private java.lang.Object policyRuleStateMessage_ = "";
+      /**
+       * string policyRuleStateMessage = 2;
+       * @return The policyRuleStateMessage.
+       */
+      public java.lang.String getPolicyRuleStateMessage() {
+        java.lang.Object ref = policyRuleStateMessage_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          policyRuleStateMessage_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * string policyRuleStateMessage = 2;
+       * @return The bytes for policyRuleStateMessage.
+       */
+      public com.google.protobuf.ByteString
+          getPolicyRuleStateMessageBytes() {
+        java.lang.Object ref = policyRuleStateMessage_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          policyRuleStateMessage_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * string policyRuleStateMessage = 2;
+       * @param value The policyRuleStateMessage to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleStateMessage(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        policyRuleStateMessage_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * string policyRuleStateMessage = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPolicyRuleStateMessage() {
+        
+        policyRuleStateMessage_ = getDefaultInstance().getPolicyRuleStateMessage();
+        onChanged();
+        return this;
+      }
+      /**
+       * string policyRuleStateMessage = 2;
+       * @param value The bytes for policyRuleStateMessage to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPolicyRuleStateMessageBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        policyRuleStateMessage_ = value;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -9389,51 +9539,52 @@ public final class Policy {
       "\n\014policy.proto\022\006policy\032\rcontext.proto\032\026p" +
       "olicy_condition.proto\032\023policy_action.pro" +
       "to\"+\n\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.conte" +
-      "xt.Uuid\"G\n\017PolicyRuleState\0224\n\017policyRule" +
+      "xt.Uuid\"g\n\017PolicyRuleState\0224\n\017policyRule" +
       "State\030\001 \001(\0162\033.policy.PolicyRuleStateEnum" +
-      "\"\225\002\n\017PolicyRuleBasic\022*\n\014policyRuleId\030\001 \001" +
-      "(\0132\024.policy.PolicyRuleId\0220\n\017policyRuleSt" +
-      "ate\030\002 \001(\0132\027.policy.PolicyRuleState\022\020\n\010pr" +
-      "iority\030\003 \001(\r\0222\n\rconditionList\030\004 \003(\0132\033.po" +
-      "licy.PolicyRuleCondition\0220\n\017booleanOpera" +
-      "tor\030\005 \001(\0162\027.policy.BooleanOperator\022,\n\nac" +
-      "tionList\030\006 \003(\0132\030.policy.PolicyRuleAction" +
-      "\"\223\001\n\021PolicyRuleService\0220\n\017policyRuleBasi" +
-      "c\030\001 \001(\0132\027.policy.PolicyRuleBasic\022%\n\tserv" +
-      "iceId\030\002 \001(\0132\022.context.ServiceId\022%\n\ndevic" +
-      "eList\030\003 \003(\0132\021.context.DeviceId\"k\n\020Policy" +
-      "RuleDevice\0220\n\017policyRuleBasic\030\001 \001(\0132\027.po" +
-      "licy.PolicyRuleBasic\022%\n\ndeviceList\030\002 \003(\013" +
-      "2\021.context.DeviceId\"B\n\020PolicyRuleIdList\022" +
-      ".\n\020policyRuleIdList\030\001 \003(\0132\024.policy.Polic" +
-      "yRuleId\"Q\n\025PolicyRuleServiceList\0228\n\025poli" +
-      "cyRuleServiceList\030\001 \003(\0132\031.policy.PolicyR" +
-      "uleService\"N\n\024PolicyRuleDeviceList\0226\n\024po" +
-      "licyRuleDeviceList\030\001 \003(\0132\030.policy.Policy" +
-      "RuleDevice\";\n\016PolicyRuleList\022)\n\013policyRu" +
-      "les\030\001 \003(\0132\024.policy.PolicyRuleId*\377\001\n\023Poli" +
-      "cyRuleStateEnum\022\024\n\020POLICY_UNDEFINED\020\000\022\021\n" +
-      "\rPOLICY_FAILED\020\001\022\023\n\017POLICY_INSERTED\020\002\022\024\n" +
-      "\020POLICY_VALIDATED\020\003\022\026\n\022POLICY_PROVISIONE" +
-      "D\020\004\022\021\n\rPOLICY_ACTIVE\020\005\022\023\n\017POLICY_ENFORCE" +
-      "D\020\006\022\026\n\022POLICY_INEFFECTIVE\020\007\022\024\n\020POLICY_EF" +
-      "FECTIVE\020\010\022\022\n\016POLICY_UPDATED\020\t\022\022\n\016POLICY_" +
-      "REMOVED\020\n2\323\004\n\rPolicyService\022H\n\020PolicyAdd" +
-      "Service\022\031.policy.PolicyRuleService\032\027.pol" +
-      "icy.PolicyRuleState\"\000\022F\n\017PolicyAddDevice" +
-      "\022\030.policy.PolicyRuleDevice\032\027.policy.Poli" +
-      "cyRuleState\"\000\022K\n\023PolicyUpdateService\022\031.p" +
-      "olicy.PolicyRuleService\032\027.policy.PolicyR" +
-      "uleState\"\000\022I\n\022PolicyUpdateDevice\022\030.polic" +
+      "\022\036\n\026policyRuleStateMessage\030\002 \001(\t\"\225\002\n\017Pol" +
+      "icyRuleBasic\022*\n\014policyRuleId\030\001 \001(\0132\024.pol" +
+      "icy.PolicyRuleId\0220\n\017policyRuleState\030\002 \001(" +
+      "\0132\027.policy.PolicyRuleState\022\020\n\010priority\030\003" +
+      " \001(\r\0222\n\rconditionList\030\004 \003(\0132\033.policy.Pol" +
+      "icyRuleCondition\0220\n\017booleanOperator\030\005 \001(" +
+      "\0162\027.policy.BooleanOperator\022,\n\nactionList" +
+      "\030\006 \003(\0132\030.policy.PolicyRuleAction\"\223\001\n\021Pol" +
+      "icyRuleService\0220\n\017policyRuleBasic\030\001 \001(\0132" +
+      "\027.policy.PolicyRuleBasic\022%\n\tserviceId\030\002 " +
+      "\001(\0132\022.context.ServiceId\022%\n\ndeviceList\030\003 " +
+      "\003(\0132\021.context.DeviceId\"k\n\020PolicyRuleDevi" +
+      "ce\0220\n\017policyRuleBasic\030\001 \001(\0132\027.policy.Pol" +
+      "icyRuleBasic\022%\n\ndeviceList\030\002 \003(\0132\021.conte" +
+      "xt.DeviceId\"B\n\020PolicyRuleIdList\022.\n\020polic" +
+      "yRuleIdList\030\001 \003(\0132\024.policy.PolicyRuleId\"" +
+      "Q\n\025PolicyRuleServiceList\0228\n\025policyRuleSe" +
+      "rviceList\030\001 \003(\0132\031.policy.PolicyRuleServi" +
+      "ce\"N\n\024PolicyRuleDeviceList\0226\n\024policyRule" +
+      "DeviceList\030\001 \003(\0132\030.policy.PolicyRuleDevi" +
+      "ce\";\n\016PolicyRuleList\022)\n\013policyRules\030\001 \003(" +
+      "\0132\024.policy.PolicyRuleId*\377\001\n\023PolicyRuleSt" +
+      "ateEnum\022\024\n\020POLICY_UNDEFINED\020\000\022\021\n\rPOLICY_" +
+      "FAILED\020\001\022\023\n\017POLICY_INSERTED\020\002\022\024\n\020POLICY_" +
+      "VALIDATED\020\003\022\026\n\022POLICY_PROVISIONED\020\004\022\021\n\rP" +
+      "OLICY_ACTIVE\020\005\022\023\n\017POLICY_ENFORCED\020\006\022\026\n\022P" +
+      "OLICY_INEFFECTIVE\020\007\022\024\n\020POLICY_EFFECTIVE\020" +
+      "\010\022\022\n\016POLICY_UPDATED\020\t\022\022\n\016POLICY_REMOVED\020" +
+      "\n2\323\004\n\rPolicyService\022H\n\020PolicyAddService\022" +
+      "\031.policy.PolicyRuleService\032\027.policy.Poli" +
+      "cyRuleState\"\000\022F\n\017PolicyAddDevice\022\030.polic" +
       "y.PolicyRuleDevice\032\027.policy.PolicyRuleSt" +
-      "ate\"\000\022?\n\014PolicyDelete\022\024.policy.PolicyRul" +
-      "eId\032\027.policy.PolicyRuleState\"\000\022E\n\020GetPol" +
-      "icyService\022\024.policy.PolicyRuleId\032\031.polic" +
-      "y.PolicyRuleService\"\000\022C\n\017GetPolicyDevice" +
-      "\022\024.policy.PolicyRuleId\032\030.policy.PolicyRu" +
-      "leDevice\"\000\022K\n\024GetPolicyByServiceId\022\022.con" +
-      "text.ServiceId\032\035.policy.PolicyRuleServic" +
-      "eList\"\000b\006proto3"
+      "ate\"\000\022K\n\023PolicyUpdateService\022\031.policy.Po" +
+      "licyRuleService\032\027.policy.PolicyRuleState" +
+      "\"\000\022I\n\022PolicyUpdateDevice\022\030.policy.Policy" +
+      "RuleDevice\032\027.policy.PolicyRuleState\"\000\022?\n" +
+      "\014PolicyDelete\022\024.policy.PolicyRuleId\032\027.po" +
+      "licy.PolicyRuleState\"\000\022E\n\020GetPolicyServi" +
+      "ce\022\024.policy.PolicyRuleId\032\031.policy.Policy" +
+      "RuleService\"\000\022C\n\017GetPolicyDevice\022\024.polic" +
+      "y.PolicyRuleId\032\030.policy.PolicyRuleDevice" +
+      "\"\000\022K\n\024GetPolicyByServiceId\022\022.context.Ser" +
+      "viceId\032\035.policy.PolicyRuleServiceList\"\000b" +
+      "\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -9453,7 +9604,7 @@ public final class Policy {
     internal_static_policy_PolicyRuleState_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleState_descriptor,
-        new java.lang.String[] { "PolicyRuleState", });
+        new java.lang.String[] { "PolicyRuleState", "PolicyRuleStateMessage", });
     internal_static_policy_PolicyRuleBasic_descriptor =
       getDescriptor().getMessageTypes().get(2);
     internal_static_policy_PolicyRuleBasic_fieldAccessorTable = new
-- 
GitLab


From 74fd3aa7b5d0c5fd10a1f66ef77f1442d941ef8f Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Mon, 3 Oct 2022 16:59:24 +0300
Subject: [PATCH 25/34] Refactor validateUpdatedPolicyService and
 validateUpdatedPolicyDevice

---
 .../java/eu/teraflow/policy/PolicyServiceImpl.java  | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index 44959e3da..45e11d880 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -507,10 +507,7 @@ public class PolicyServiceImpl implements PolicyService {
                 .subscribe()
                 .with(
                         policyRuleBoolean -> {
-                            if (Boolean.TRUE.equals(isUpdatedPolicyRuleValid)) {
-                                validateService(policyRuleService);
-                                return;
-                            } else {
+                            if (Boolean.FALSE.equals(isUpdatedPolicyRuleValid)) {
                                 var policyRuleState =
                                         createFailedPolicyRuleState(
                                                 "The requested PolicyRuleService to update: "
@@ -521,6 +518,8 @@ public class PolicyServiceImpl implements PolicyService {
                                 contextService.setPolicyRule(policyRuleBasic);
                                 return;
                             }
+
+                            validateService(policyRuleService);
                         });
     }
 
@@ -534,10 +533,7 @@ public class PolicyServiceImpl implements PolicyService {
                 .subscribe()
                 .with(
                         policyRuleBoolean -> {
-                            if (Boolean.TRUE.equals(isUpdatedPolicyRuleValid)) {
-                                validateDevice(policyRuleDevice);
-                                return;
-                            } else {
+                            if (Boolean.FALSE.equals(isUpdatedPolicyRuleValid)) {
                                 var policyRuleState =
                                         createFailedPolicyRuleState(
                                                 "The requested PolicyRuleDevice to update: "
@@ -548,6 +544,7 @@ public class PolicyServiceImpl implements PolicyService {
                                 contextService.setPolicyRule(policyRuleBasic);
                                 return;
                             }
+                            validateDevice(policyRuleDevice);
                         });
     }
 
-- 
GitLab


From b449507d1bc9336c13ef1dc6feb8c90f9566eee1 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Mon, 3 Oct 2022 17:59:30 +0300
Subject: [PATCH 26/34] Add subcriber callback instead of thread

---
 .../eu/teraflow/policy/PolicyServiceImpl.java | 44 +++++++------------
 1 file changed, 16 insertions(+), 28 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index 45e11d880..a45a4bc28 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -146,13 +146,10 @@ public class PolicyServiceImpl implements PolicyService {
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
 
-        new Thread(
-                        () -> {
-                            validateService(policyRuleService);
-                        })
-                .start();
-
-        contextService.setPolicyRule(policyRuleBasic);
+        contextService
+                .setPolicyRule(policyRuleBasic)
+                .subscribe()
+                .with(id -> validateService(policyRuleService));
 
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
     }
@@ -164,13 +161,10 @@ public class PolicyServiceImpl implements PolicyService {
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
 
-        new Thread(
-                        () -> {
-                            validateUpdatedPolicyService(policyRuleService);
-                        })
-                .start();
-
-        contextService.setPolicyRule(policyRuleBasic);
+        contextService
+                .setPolicyRule(policyRuleBasic)
+                .subscribe()
+                .with(id -> validateUpdatedPolicyService(policyRuleService));
 
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
     }
@@ -182,13 +176,10 @@ public class PolicyServiceImpl implements PolicyService {
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
         policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
 
-        new Thread(
-                        () -> {
-                            validateDevice(policyRuleDevice);
-                        })
-                .start();
-
-        contextService.setPolicyRule(policyRuleBasic);
+        contextService
+                .setPolicyRule(policyRuleBasic)
+                .subscribe()
+                .with(id -> validateDevice(policyRuleDevice));
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
     }
 
@@ -199,13 +190,10 @@ public class PolicyServiceImpl implements PolicyService {
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
         policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
 
-        new Thread(
-                        () -> {
-                            validateUpdatedPolicyDevice(policyRuleDevice);
-                        })
-                .start();
-
-        contextService.setPolicyRule(policyRuleBasic);
+        contextService
+                .setPolicyRule(policyRuleBasic)
+                .subscribe()
+                .with(id -> validateUpdatedPolicyDevice(policyRuleDevice));
 
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
     }
-- 
GitLab


From 41c9b7d8652ada3857d9a95d3da9e2e0640e4785 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Tue, 4 Oct 2022 14:11:57 +0300
Subject: [PATCH 27/34] Refactor validateService method

---
 .../policy/PolicyRuleConditionValidator.java  | 19 +++++
 .../eu/teraflow/policy/PolicyServiceImpl.java | 83 +++++++++----------
 2 files changed, 56 insertions(+), 46 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
index 3af4f3a8d..c7172554d 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
@@ -18,9 +18,12 @@ package eu.teraflow.policy;
 
 import eu.teraflow.policy.context.ContextService;
 import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.EndPointId;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import io.smallrye.mutiny.Uni;
+import java.util.ArrayList;
+import java.util.List;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import org.jboss.logging.Logger;
@@ -114,6 +117,22 @@ public class PolicyRuleConditionValidator {
                 && serviceServiceIdId.equals(serviceId.getId());
     }
 
+    public Uni isServicesDeviceIdsValid(ServiceId serviceId, List deviceIds) {
+        return contextService
+                .getService(serviceId)
+                .onItem()
+                .transform(service -> checkIfServicesDeviceIdsExist(service, deviceIds));
+    }
+
+    private boolean checkIfServicesDeviceIdsExist(Service service, List deviceIds) {
+        List serviceDeviceIds = new ArrayList<>();
+        for (EndPointId serviceEndPointId : service.getServiceEndPointIds()) {
+            serviceDeviceIds.add(serviceEndPointId.getDeviceId());
+        }
+
+        return deviceIds.containsAll(serviceDeviceIds);
+    }
+
     private Uni isUpdatedPolicyRuleIdValid(String updatedPolicyRuleId) {
         return contextService
                 .getPolicyRule(updatedPolicyRuleId)
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index a45a4bc28..b2da70d89 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -541,57 +541,48 @@ public class PolicyServiceImpl implements PolicyService {
         final var deviceIds = policyRuleService.getDeviceIds();
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
 
-        final var isServiceIdValid = policyRuleConditionValidator.validateServiceId(serviceId);
-
-        isServiceIdValid
-                .subscribe()
-                .with(
-                        serviceIdBooleanValue -> {
-                            if (Boolean.FALSE.equals(serviceIdBooleanValue)) {
-                                LOGGER.errorf(INVALID_MESSAGE, serviceId);
-                                final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
-
-                                if (invalidDeviceIds.isEmpty()) {
-                                    LOGGER.info("All Device Ids are valid.");
-                                }
-                                var policyRuleState =
-                                        createFailedPolicyRuleState(
-                                                "The Service of PolicyRuleService "
-                                                        + policyRuleBasic.getPolicyRuleId()
-                                                        + " is not valid");
-                                LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-                                policyRuleBasic.setPolicyRuleState(policyRuleState);
-                                contextService.setPolicyRule(policyRuleBasic);
-                                return;
-                            } else {
-                                LOGGER.infof(VALID_MESSAGE, serviceId);
-
-                                final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
-
-                                if (!invalidDeviceIds.isEmpty()) {
-                                    var policyRuleState =
-                                            createFailedPolicyRuleState(
-                                                    "The Devices of PolicyRuleService "
-                                                            + policyRuleBasic.getPolicyRuleId()
-                                                            + " are not valid");
-                                    LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-                                    policyRuleBasic.setPolicyRuleState(policyRuleState);
-                                    contextService.setPolicyRule(policyRuleBasic);
-                                    return;
-                                } else {
-                                    LOGGER.infof("All deviceIds are valid");
-                                }
+        Boolean isServiceIdValid =
+                policyRuleConditionValidator.validateServiceId(serviceId).await().indefinitely();
+        if (!isServiceIdValid) {
+            LOGGER.errorf(INVALID_MESSAGE, serviceId);
+            var policyRuleState =
+                    createFailedPolicyRuleState(
+                            "The Service of PolicyRuleService "
+                                    + policyRuleBasic.getPolicyRuleId()
+                                    + " is not valid");
+            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+            policyRuleBasic.setPolicyRuleState(policyRuleState);
+            contextService.setPolicyRule(policyRuleBasic);
+            return;
+        }
 
-                                policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
-                                contextService.setPolicyRule(policyRuleBasic);
-                                return;
-                            }
-                        });
+        Boolean isServicesDeviceIdsValid =
+                policyRuleConditionValidator
+                        .isServicesDeviceIdsValid(serviceId, deviceIds)
+                        .await()
+                        .indefinitely();
 
-        if (policyRuleBasic.getPolicyRuleState() != VALIDATED_POLICYRULE_STATE) {
+        if (!isServicesDeviceIdsValid) {
+            var policyRuleState =
+                    createFailedPolicyRuleState(
+                            "The Devices of PolicyRuleService "
+                                    + policyRuleBasic.getPolicyRuleId()
+                                    + " are not valid");
+            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+            policyRuleBasic.setPolicyRuleState(policyRuleState);
+            contextService.setPolicyRule(policyRuleBasic);
             return;
         }
 
+        policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
+        contextService.setPolicyRule(policyRuleBasic);
+        
+        createAlarmDescriptors(policyRuleService);
+    }
+
+    private void createAlarmDescriptors(PolicyRuleService policyRuleService) {
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+
         List alarmDescriptorList =
                 parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic());
 
-- 
GitLab


From ee2d064ce85150e540dd8ef19da7e311b176e1c7 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Tue, 4 Oct 2022 16:55:02 +0300
Subject: [PATCH 28/34] Refactor where PolicyRuleCondition is parsed and
 AlarmDescriptor is created

---
 .../eu/teraflow/policy/PolicyServiceImpl.java | 226 ++++++++++--------
 1 file changed, 132 insertions(+), 94 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index b2da70d89..6c57e6a1b 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -65,6 +65,11 @@ public class PolicyServiceImpl implements PolicyService {
     private static final Logger LOGGER = Logger.getLogger(PolicyServiceImpl.class);
     private static final String INVALID_MESSAGE = "%s is invalid.";
     private static final String VALID_MESSAGE = "%s is valid.";
+    private static final int POLICY_EVALUATION_TIMEOUT = 5;
+    private static final int ACCEPTABLE_NUMBER_OF_ALARMS = 3;
+    private static final int NUMBER_OF_CONSTRAINT_CUSTOM_FIELDS = 2;
+    private static final int NUMBER_OF_CONFIGRULE_CUSTOM_FIELDS = 3;
+
     private static final PolicyRuleState INSERTED_POLICYRULE_STATE =
             new PolicyRuleState(
                     PolicyRuleStateEnum.POLICY_INSERTED, "Successfully set to INSERTED STATE");
@@ -243,6 +248,15 @@ public class PolicyServiceImpl implements PolicyService {
         policyRuleBasic.setPolicyRuleState(PROVISIONED_POLICYRULE_STATE);
         contextService.setPolicyRule(policyRuleBasic);
 
+        getAlarmResponseStream(policyRuleBasic, alarmDescriptorList, alarmSubscriptionList, isService);
+    }
+
+    private void getAlarmResponseStream(
+            PolicyRuleBasic policyRuleBasic,
+            List alarmDescriptorList,
+            List alarmSubscriptionList,
+            Boolean isService) {
+
         List> alarmResponseStreamList = new ArrayList<>();
         for (AlarmSubscription alarmSubscription : alarmSubscriptionList) {
             alarmResponseStreamList.add(monitoringService.getAlarmResponseStream(alarmSubscription));
@@ -263,8 +277,14 @@ public class PolicyServiceImpl implements PolicyService {
                             }
                         });
 
-        Long count = multi.collect().with(Collectors.counting()).await().atMost(Duration.ofMinutes(5));
-        if (count > 3) {
+        Long count =
+                multi
+                        .collect()
+                        .with(Collectors.counting())
+                        .await()
+                        .atMost(Duration.ofMinutes(POLICY_EVALUATION_TIMEOUT));
+
+        if (count > ACCEPTABLE_NUMBER_OF_ALARMS) {
             for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
                 monitoringService
                         .deleteAlarm(alarmDescriptor.getAlarmId())
@@ -368,7 +388,8 @@ public class PolicyServiceImpl implements PolicyService {
         List newConfigRules = new ArrayList<>();
 
         // ConfigeRuleTypeCustom has 3 elements
-        for (int i = 0; i < actionParameters.size() - 3; i += 3) {
+        int fieldsNumber = NUMBER_OF_CONFIGRULE_CUSTOM_FIELDS;
+        for (int i = 0; i < actionParameters.size() - fieldsNumber; i += fieldsNumber) {
             ConfigActionEnum configActionEnum;
             if (actionParameters.get(i) == "SET") {
                 configActionEnum = ConfigActionEnum.SET;
@@ -405,7 +426,8 @@ public class PolicyServiceImpl implements PolicyService {
         List actionParameters = policyRuleAction.getPolicyRuleActionParameters();
         List constraintList = new ArrayList<>();
 
-        for (int i = 0; i < actionParameters.size() - 2; i += 2) {
+        int fieldsNumber = NUMBER_OF_CONSTRAINT_CUSTOM_FIELDS;
+        for (int i = 0; i < actionParameters.size() - fieldsNumber; i += fieldsNumber) {
             var constraintCustom =
                     new ConstraintCustom(actionParameters.get(i), actionParameters.get(i + 1));
             var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
@@ -451,26 +473,35 @@ public class PolicyServiceImpl implements PolicyService {
     private void validateDevice(PolicyRuleDevice policyRuleDevice) {
         final var deviceIds = policyRuleDevice.getDeviceIds();
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-        final var policyRuleId = policyRuleBasic.getPolicyRuleId();
 
         final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
         if (!invalidDeviceIds.isEmpty()) {
             var policyRuleState =
                     createFailedPolicyRuleState(
-                            "The Devices of PolicyRuleDevice " + policyRuleId + " are not valid");
+                            "The Devices of PolicyRuleDevice "
+                                    + policyRuleBasic.getPolicyRuleId()
+                                    + " are not valid");
             LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
             policyRuleBasic.setPolicyRuleState(policyRuleState);
             contextService.setPolicyRule(policyRuleBasic);
             return;
         }
 
+        createAlarmDescriptorsForDevices(policyRuleDevice);
+    }
+
+    private void createAlarmDescriptorsForDevices(PolicyRuleDevice policyRuleDevice) {
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+
         List alarmDescriptorList =
                 parsePolicyRuleCondition(policyRuleDevice.getPolicyRuleBasic());
 
         if (alarmDescriptorList.isEmpty()) {
             var policyRuleState =
                     createFailedPolicyRuleState(
-                            "The PolicyRuleConditions of PolicyRuleDevice " + policyRuleId + " are not valid");
+                            "The PolicyRuleConditions of PolicyRuleDevice "
+                                    + policyRuleBasic.getPolicyRuleId()
+                                    + " are not valid");
             LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
             policyRuleBasic.setPolicyRuleState(policyRuleState);
             contextService.setPolicyRule(policyRuleBasic);
@@ -481,6 +512,10 @@ public class PolicyServiceImpl implements PolicyService {
         policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
         contextService.setPolicyRule(policyRuleBasic);
 
+        for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
+            alarmPolicyRuleDeviceMap.put(alarmDescriptor.getAlarmId(), policyRuleDevice);
+        }
+
         provisionAlarm(policyRuleBasic, alarmDescriptorList, false);
         return;
     }
@@ -576,11 +611,11 @@ public class PolicyServiceImpl implements PolicyService {
 
         policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
         contextService.setPolicyRule(policyRuleBasic);
-        
-        createAlarmDescriptors(policyRuleService);
+
+        createAlarmDescriptorsForService(policyRuleService);
     }
 
-    private void createAlarmDescriptors(PolicyRuleService policyRuleService) {
+    private void createAlarmDescriptorsForService(PolicyRuleService policyRuleService) {
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
 
         List alarmDescriptorList =
@@ -653,37 +688,6 @@ public class PolicyServiceImpl implements PolicyService {
         return alarmDescriptorList;
     }
 
-    private KpiValueRange convertPolicyRuleConditionToAlarmDescriptor(
-            PolicyRuleCondition policyRuleCondition) {
-
-        switch (policyRuleCondition.getNumericalOperator()) {
-            case POLICY_RULE_CONDITION_NUMERICAL_EQUAL:
-                return new KpiValueRange(
-                        policyRuleCondition.getKpiValue(), policyRuleCondition.getKpiValue(), true, true, true);
-            case POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL:
-                return new KpiValueRange(
-                        policyRuleCondition.getKpiValue(),
-                        policyRuleCondition.getKpiValue(),
-                        true,
-                        false,
-                        false);
-
-            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN:
-                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, false, false);
-
-            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
-                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, true, false);
-
-            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN:
-                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, false);
-
-            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
-                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, true);
-            default:
-                return null;
-        }
-    }
-
     private AlarmDescriptor parsePolicyRuleConditionAnd(PolicyRuleBasic policyRuleBasic) {
 
         List policyRuleConditionList = policyRuleBasic.getPolicyRuleConditions();
@@ -695,23 +699,35 @@ public class PolicyServiceImpl implements PolicyService {
         Set kpisSet = new HashSet(kpisList);
 
         if (kpisSet.size() == kpisList.size()) {
-            List kpiIdList = new ArrayList<>();
-            List kpiValueRangeList = new ArrayList<>();
-            for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) {
+            return createAlarmDescriptorWithoutRange(policyRuleConditionList, kpisList);
+        }
 
-                kpisList.add(policyRuleCondition.getKpiId());
-                kpiValueRangeList.add(convertPolicyRuleConditionToAlarmDescriptor(policyRuleCondition));
-            }
+        return createAlarmDescriptorWithRange(policyRuleConditionList, kpisList);
+    }
+
+    private AlarmDescriptor createAlarmDescriptorWithoutRange(
+            List policyRuleConditionList, List kpisList) {
 
-            return new AlarmDescriptor(
-                    "alarmId-" + gen(),
-                    "alarmDescription",
-                    "alarmName-" + gen(),
-                    kpiIdList,
-                    kpiValueRangeList,
-                    getTimeStamp());
+        List kpiIdList = new ArrayList<>();
+        List kpiValueRangeList = new ArrayList<>();
+
+        for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) {
+            kpisList.add(policyRuleCondition.getKpiId());
+            kpiValueRangeList.add(convertPolicyRuleConditionToAlarmDescriptor(policyRuleCondition));
         }
 
+        return new AlarmDescriptor(
+                "alarmId-" + gen(),
+                "alarmDescription",
+                "alarmName-" + gen(),
+                kpiIdList,
+                kpiValueRangeList,
+                getTimeStamp());
+    }
+
+    private AlarmDescriptor createAlarmDescriptorWithRange(
+            List policyRuleConditionList, List kpisList) {
+
         HashMap KpiValueRangeMap = new HashMap<>();
         for (PolicyRuleCondition policyRuleCondition : policyRuleConditionList) {
 
@@ -719,66 +735,57 @@ public class PolicyServiceImpl implements PolicyService {
                 var kpiValueRange = KpiValueRangeMap.get(policyRuleCondition.getKpiId());
 
                 if (kpiValueRange.getInRange() == true) {
-                    LOGGER.errorf("Received %s", policyRuleBasic);
+                    // LOGGER.errorf("Received %s", policyRuleBasic);
                     return null;
                 }
 
                 if ((kpiValueRange.getKpiMaxValue() != null) && (kpiValueRange.getKpiMinValue() != null)) {
-                    LOGGER.errorf("Received %s", policyRuleBasic);
+                    // LOGGER.errorf("Received %s", policyRuleBasic);
                     return null;
                 }
 
+                var kpiMinValue = kpiValueRange.getKpiMinValue();
+                var kpiMaxValue = kpiValueRange.getKpiMaxValue();
+                boolean inRange = false;
+                boolean includeMinValue = kpiValueRange.getIncludeMinValue();
+                boolean includeMaxValue = kpiValueRange.getIncludeMaxValue();
+
                 if (policyRuleCondition.getNumericalOperator()
                                 == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN
                         && kpiValueRange.getKpiMinValue() == null) {
-                    KpiValueRangeMap.put(
-                            policyRuleCondition.getKpiId(),
-                            new KpiValueRange(
-                                    policyRuleCondition.getKpiValue(),
-                                    kpiValueRange.getKpiMaxValue(),
-                                    true,
-                                    false,
-                                    kpiValueRange.getIncludeMaxValue()));
-                }
 
-                if (policyRuleCondition.getNumericalOperator()
+                    kpiMinValue = policyRuleCondition.getKpiValue();
+                    inRange = true;
+                    includeMinValue = false;
+
+                } else if (policyRuleCondition.getNumericalOperator()
                                 == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL
                         && kpiValueRange.getKpiMinValue() == null) {
-                    KpiValueRangeMap.put(
-                            policyRuleCondition.getKpiId(),
-                            new KpiValueRange(
-                                    policyRuleCondition.getKpiValue(),
-                                    kpiValueRange.getKpiMaxValue(),
-                                    true,
-                                    true,
-                                    kpiValueRange.getIncludeMaxValue()));
-                }
 
-                if (policyRuleCondition.getNumericalOperator()
+                    kpiMinValue = policyRuleCondition.getKpiValue();
+                    inRange = true;
+                    includeMinValue = true;
+                } else if (policyRuleCondition.getNumericalOperator()
                                 == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN
                         && kpiValueRange.getKpiMaxValue() == null) {
-                    KpiValueRangeMap.put(
-                            policyRuleCondition.getKpiId(),
-                            new KpiValueRange(
-                                    kpiValueRange.getKpiMinValue(),
-                                    policyRuleCondition.getKpiValue(),
-                                    true,
-                                    kpiValueRange.getIncludeMinValue(),
-                                    false));
-                }
 
-                if (policyRuleCondition.getNumericalOperator()
+                    kpiMaxValue = policyRuleCondition.getKpiValue();
+                    inRange = true;
+                    includeMaxValue = false;
+                } else if (policyRuleCondition.getNumericalOperator()
                                 == NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL
                         && kpiValueRange.getKpiMaxValue() == null) {
-                    KpiValueRangeMap.put(
-                            policyRuleCondition.getKpiId(),
-                            new KpiValueRange(
-                                    kpiValueRange.getKpiMinValue(),
-                                    policyRuleCondition.getKpiValue(),
-                                    true,
-                                    kpiValueRange.getIncludeMinValue(),
-                                    true));
+
+                    kpiMaxValue = policyRuleCondition.getKpiValue();
+                    inRange = true;
+                    includeMaxValue = true;
+                } else {
+                    return null;
                 }
+
+                KpiValueRangeMap.put(
+                        policyRuleCondition.getKpiId(),
+                        new KpiValueRange(kpiMinValue, kpiMaxValue, inRange, includeMinValue, includeMaxValue));
             }
         }
 
@@ -795,6 +802,37 @@ public class PolicyServiceImpl implements PolicyService {
                 getTimeStamp());
     }
 
+    private KpiValueRange convertPolicyRuleConditionToAlarmDescriptor(
+            PolicyRuleCondition policyRuleCondition) {
+
+        switch (policyRuleCondition.getNumericalOperator()) {
+            case POLICY_RULE_CONDITION_NUMERICAL_EQUAL:
+                return new KpiValueRange(
+                        policyRuleCondition.getKpiValue(), policyRuleCondition.getKpiValue(), true, true, true);
+            case POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL:
+                return new KpiValueRange(
+                        policyRuleCondition.getKpiValue(),
+                        policyRuleCondition.getKpiValue(),
+                        true,
+                        false,
+                        false);
+
+            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN:
+                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, false, false);
+
+            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
+                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, true, false);
+
+            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN:
+                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, false);
+
+            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
+                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, true);
+            default:
+                return null;
+        }
+    }
+
     private List returnInvalidDeviceIds(List deviceIds) {
         var invalidDeviceIds = new ArrayList();
 
-- 
GitLab


From 9dd92558c2ef64e6722445c2a799a6a2de0f23ca Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Tue, 4 Oct 2022 17:41:38 +0300
Subject: [PATCH 29/34] Log and setPolicyRule in one method

---
 .../eu/teraflow/policy/PolicyServiceImpl.java | 150 +++++++-----------
 1 file changed, 59 insertions(+), 91 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index 6c57e6a1b..a40fc88db 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -130,10 +130,6 @@ public class PolicyServiceImpl implements PolicyService {
         this.policyRuleConditionFieldsGetter = policyRuleConditionFieldsGetter;
     }
 
-    private static PolicyRuleState createFailedPolicyRuleState(String message) {
-        return new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message);
-    }
-
     private static String gen() {
         Random r = new Random(System.currentTimeMillis());
         return String.valueOf((1 + r.nextInt(2)) * 10000 + r.nextInt(10000));
@@ -244,10 +240,7 @@ public class PolicyServiceImpl implements PolicyService {
                     .with(alarmId -> alarmSubscriptionList.add(new AlarmSubscription(alarmId, 0, 0)));
         }
 
-        LOGGER.infof("Setting Policy Rule state to [%s]", PROVISIONED_POLICYRULE_STATE.toString());
-        policyRuleBasic.setPolicyRuleState(PROVISIONED_POLICYRULE_STATE);
-        contextService.setPolicyRule(policyRuleBasic);
-
+        setState(policyRuleBasic, PROVISIONED_POLICYRULE_STATE);
         getAlarmResponseStream(policyRuleBasic, alarmDescriptorList, alarmSubscriptionList, isService);
     }
 
@@ -294,13 +287,11 @@ public class PolicyServiceImpl implements PolicyService {
                                         LOGGER.infof("Alarm [%s] has been deleted.\n", alarmDescriptor.getAlarmId()));
             }
 
-            LOGGER.infof("Setting Policy Rule state to [%s]", INEFFECTIVE_POLICYRULE_STATE.toString());
-            policyRuleBasic.setPolicyRuleState(INEFFECTIVE_POLICYRULE_STATE);
-            contextService.setPolicyRule(policyRuleBasic);
+            setState(policyRuleBasic, INEFFECTIVE_POLICYRULE_STATE);
+
         } else {
-            LOGGER.infof("Setting Policy Rule state to [%s]", EFFECTIVE_POLICYRULE_STATE.toString());
-            policyRuleBasic.setPolicyRuleState(EFFECTIVE_POLICYRULE_STATE);
-            contextService.setPolicyRule(policyRuleBasic);
+
+            setState(policyRuleBasic, EFFECTIVE_POLICYRULE_STATE);
 
             multi
                     .subscribe()
@@ -325,9 +316,7 @@ public class PolicyServiceImpl implements PolicyService {
             // In case additional PolicyRuleAction for Devices will be added
         }
 
-        LOGGER.infof("Setting Policy Rule state to [%s]", ACTIVE_POLICYRULE_STATE.toString());
-        policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE);
-        contextService.setPolicyRule(policyRuleBasic);
+        setState(policyRuleBasic, ACTIVE_POLICYRULE_STATE);
 
         List deviceIds = policyRuleDevice.getDeviceIds();
         List actionParameters =
@@ -345,9 +334,7 @@ public class PolicyServiceImpl implements PolicyService {
             activateDevice(deviceIds.get(i), deviceActions);
         }
 
-        LOGGER.infof("Setting Policy Rule state to [%s]", ENFORCED_POLICYRULE_STATE.toString());
-        policyRuleBasic.setPolicyRuleState(ENFORCED_POLICYRULE_STATE);
-        contextService.setPolicyRule(policyRuleBasic);
+        setState(policyRuleBasic, ENFORCED_POLICYRULE_STATE);
     }
 
     private void activateDevice(String deviceId, List actionParameters) {
@@ -442,11 +429,7 @@ public class PolicyServiceImpl implements PolicyService {
                         deserializedService -> {
                             deserializedService.appendServiceConstraints(constraintList);
                             serviceService.updateService(deserializedService);
-
-                            LOGGER.infof(
-                                    "Setting Policy Rule state to [%s]", ENFORCED_POLICYRULE_STATE.toString());
-                            policyRuleBasic.setPolicyRuleState(ENFORCED_POLICYRULE_STATE);
-                            contextService.setPolicyRule(policyRuleBasic);
+                            setState(policyRuleBasic, ENFORCED_POLICYRULE_STATE);
                         });
     }
 
@@ -455,9 +438,7 @@ public class PolicyServiceImpl implements PolicyService {
         PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId);
 
-        LOGGER.infof("Setting Policy Rule state to [%s]", ACTIVE_POLICYRULE_STATE.toString());
-        policyRuleBasic.setPolicyRuleState(ACTIVE_POLICYRULE_STATE);
-        contextService.setPolicyRule(policyRuleBasic);
+        setState(policyRuleBasic, ACTIVE_POLICYRULE_STATE);
 
         switch (policyRuleAction.getPolicyRuleActionEnum()) {
             case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT:
@@ -476,20 +457,22 @@ public class PolicyServiceImpl implements PolicyService {
 
         final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
         if (!invalidDeviceIds.isEmpty()) {
-            var policyRuleState =
-                    createFailedPolicyRuleState(
-                            "The Devices of PolicyRuleDevice "
-                                    + policyRuleBasic.getPolicyRuleId()
-                                    + " are not valid");
-            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-            policyRuleBasic.setPolicyRuleState(policyRuleState);
-            contextService.setPolicyRule(policyRuleBasic);
+            String message =
+                    String.format(
+                            "he Devices of PolicyRuleDevice %s are not valid", policyRuleBasic.getPolicyRuleId());
+            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
         createAlarmDescriptorsForDevices(policyRuleDevice);
     }
 
+    private void setState(PolicyRuleBasic policyRuleBasic, PolicyRuleState policyRuleState) {
+        LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+        policyRuleBasic.setPolicyRuleState(policyRuleState);
+        contextService.setPolicyRule(policyRuleBasic);
+    }
+
     private void createAlarmDescriptorsForDevices(PolicyRuleDevice policyRuleDevice) {
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
 
@@ -497,21 +480,15 @@ public class PolicyServiceImpl implements PolicyService {
                 parsePolicyRuleCondition(policyRuleDevice.getPolicyRuleBasic());
 
         if (alarmDescriptorList.isEmpty()) {
-            var policyRuleState =
-                    createFailedPolicyRuleState(
-                            "The PolicyRuleConditions of PolicyRuleDevice "
-                                    + policyRuleBasic.getPolicyRuleId()
-                                    + " are not valid");
-            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-            policyRuleBasic.setPolicyRuleState(policyRuleState);
-            contextService.setPolicyRule(policyRuleBasic);
+            String message =
+                    String.format(
+                            "The Devices of PolicyRuleDevice %s are not valid",
+                            policyRuleBasic.getPolicyRuleId());
+            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
-        LOGGER.infof("Setting Policy Rule state to [%s]", VALIDATED_POLICYRULE_STATE.toString());
-        policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
-        contextService.setPolicyRule(policyRuleBasic);
-
+        setState(policyRuleBasic, VALIDATED_POLICYRULE_STATE);
         for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
             alarmPolicyRuleDeviceMap.put(alarmDescriptor.getAlarmId(), policyRuleDevice);
         }
@@ -531,14 +508,14 @@ public class PolicyServiceImpl implements PolicyService {
                 .with(
                         policyRuleBoolean -> {
                             if (Boolean.FALSE.equals(isUpdatedPolicyRuleValid)) {
-                                var policyRuleState =
-                                        createFailedPolicyRuleState(
-                                                "The requested PolicyRuleService to update: "
-                                                        + policyRuleBasic.getPolicyRuleId()
-                                                        + " is not valid");
-                                LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-                                policyRuleBasic.setPolicyRuleState(policyRuleState);
-                                contextService.setPolicyRule(policyRuleBasic);
+
+                                String message =
+                                        String.format(
+                                                "The requested PolicyRuleService to update: %s is not valid",
+                                                policyRuleBasic.getPolicyRuleId());
+                                setState(
+                                        policyRuleBasic,
+                                        new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
                                 return;
                             }
 
@@ -557,14 +534,13 @@ public class PolicyServiceImpl implements PolicyService {
                 .with(
                         policyRuleBoolean -> {
                             if (Boolean.FALSE.equals(isUpdatedPolicyRuleValid)) {
-                                var policyRuleState =
-                                        createFailedPolicyRuleState(
-                                                "The requested PolicyRuleDevice to update: "
-                                                        + policyRuleBasic.getPolicyRuleId()
-                                                        + " is not valid");
-                                LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-                                policyRuleBasic.setPolicyRuleState(policyRuleState);
-                                contextService.setPolicyRule(policyRuleBasic);
+                                String message =
+                                        String.format(
+                                                "The requested PolicyRuleDevice to update: %s is not valid",
+                                                policyRuleBasic.getPolicyRuleId());
+                                setState(
+                                        policyRuleBasic,
+                                        new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
                                 return;
                             }
                             validateDevice(policyRuleDevice);
@@ -580,14 +556,12 @@ public class PolicyServiceImpl implements PolicyService {
                 policyRuleConditionValidator.validateServiceId(serviceId).await().indefinitely();
         if (!isServiceIdValid) {
             LOGGER.errorf(INVALID_MESSAGE, serviceId);
-            var policyRuleState =
-                    createFailedPolicyRuleState(
-                            "The Service of PolicyRuleService "
-                                    + policyRuleBasic.getPolicyRuleId()
-                                    + " is not valid");
-            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-            policyRuleBasic.setPolicyRuleState(policyRuleState);
-            contextService.setPolicyRule(policyRuleBasic);
+
+            String message =
+                    String.format(
+                            "The Service of PolicyRuleService %s is not valid",
+                            policyRuleBasic.getPolicyRuleId());
+            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
@@ -598,14 +572,12 @@ public class PolicyServiceImpl implements PolicyService {
                         .indefinitely();
 
         if (!isServicesDeviceIdsValid) {
-            var policyRuleState =
-                    createFailedPolicyRuleState(
-                            "The Devices of PolicyRuleService "
-                                    + policyRuleBasic.getPolicyRuleId()
-                                    + " are not valid");
-            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-            policyRuleBasic.setPolicyRuleState(policyRuleState);
-            contextService.setPolicyRule(policyRuleBasic);
+
+            String message =
+                    String.format(
+                            "he Devices of PolicyRuleService %s are not valid",
+                            policyRuleBasic.getPolicyRuleId());
+            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
@@ -622,19 +594,15 @@ public class PolicyServiceImpl implements PolicyService {
                 parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic());
 
         if (alarmDescriptorList.isEmpty()) {
-            var policyRuleState =
-                    createFailedPolicyRuleState(
-                            "The PolicyRuleConditions of PolicyRuleDevice "
-                                    + policyRuleBasic.getPolicyRuleId()
-                                    + " are not valid");
-            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-            policyRuleBasic.setPolicyRuleState(policyRuleState);
-            contextService.setPolicyRule(policyRuleBasic);
+            String message =
+                    String.format(
+                            "The PolicyRuleConditions of PolicyRuleDevice %s are not valid",
+                            policyRuleBasic.getPolicyRuleId());
+            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
-        LOGGER.infof("Setting Policy Rule state to [%s]", VALIDATED_POLICYRULE_STATE.toString());
-        policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
-        contextService.setPolicyRule(policyRuleBasic);
+
+        setState(policyRuleBasic, VALIDATED_POLICYRULE_STATE);
 
         for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
             alarmPolicyRuleServiceMap.put(alarmDescriptor.getAlarmId(), policyRuleService);
-- 
GitLab


From 83d036d8b8e5671ceb18b12face4b5b75706a170 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Tue, 4 Oct 2022 18:36:47 +0300
Subject: [PATCH 30/34] Handle exception in PolicyRuleBasic constructor

---
 .../eu/teraflow/policy/PolicyServiceImpl.java | 58 ++++++++++++++-----
 .../policy/model/PolicyRuleBasic.java         | 17 ++++--
 .../eu/teraflow/policy/PolicyServiceTest.java |  4 +-
 3 files changed, 56 insertions(+), 23 deletions(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index a40fc88db..b9fb351c8 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -145,8 +145,15 @@ public class PolicyServiceImpl implements PolicyService {
         LOGGER.infof("Received %s", policyRuleService);
 
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
+        if (!policyRuleBasic.areArgumentsValid()) {
+            setState(
+                    policyRuleBasic,
+                    new PolicyRuleState(
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
+            return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+        }
 
+        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
         contextService
                 .setPolicyRule(policyRuleBasic)
                 .subscribe()
@@ -160,8 +167,15 @@ public class PolicyServiceImpl implements PolicyService {
         LOGGER.infof("Received %s", policyRuleService);
 
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-        policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
+        if (!policyRuleBasic.areArgumentsValid()) {
+            setState(
+                    policyRuleBasic,
+                    new PolicyRuleState(
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
+            return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+        }
 
+        policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
         contextService
                 .setPolicyRule(policyRuleBasic)
                 .subscribe()
@@ -175,8 +189,15 @@ public class PolicyServiceImpl implements PolicyService {
         LOGGER.infof("Received %s", policyRuleDevice);
 
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
+        if (!policyRuleBasic.areArgumentsValid()) {
+            setState(
+                    policyRuleBasic,
+                    new PolicyRuleState(
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
+            return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+        }
 
+        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
         contextService
                 .setPolicyRule(policyRuleBasic)
                 .subscribe()
@@ -189,8 +210,15 @@ public class PolicyServiceImpl implements PolicyService {
         LOGGER.infof("Received %s", policyRuleDevice);
 
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-        policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
+        if (!policyRuleBasic.areArgumentsValid()) {
+            setState(
+                    policyRuleBasic,
+                    new PolicyRuleState(
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
+            return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+        }
 
+        policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
         contextService
                 .setPolicyRule(policyRuleBasic)
                 .subscribe()
@@ -203,7 +231,6 @@ public class PolicyServiceImpl implements PolicyService {
     public Uni deletePolicy(String policyRuleId) {
         LOGGER.infof("Received %s", policyRuleId);
 
-        // TODO: Specify timeout in case of connectivity issue
         PolicyRuleBasic policyRuleBasic =
                 contextService.getPolicyRule(policyRuleId).await().indefinitely();
         List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
@@ -220,8 +247,7 @@ public class PolicyServiceImpl implements PolicyService {
                 .subscribe()
                 .with(emptyMessage -> LOGGER.infof("Policy [%s] has been removed.\n", policyRuleId));
 
-        policyRuleBasic.setPolicyRuleState(REMOVED_POLICYRULE_STATE);
-        contextService.setPolicyRule(policyRuleBasic);
+        setState(policyRuleBasic, REMOVED_POLICYRULE_STATE);
 
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
     }
@@ -459,7 +485,8 @@ public class PolicyServiceImpl implements PolicyService {
         if (!invalidDeviceIds.isEmpty()) {
             String message =
                     String.format(
-                            "he Devices of PolicyRuleDevice %s are not valid", policyRuleBasic.getPolicyRuleId());
+                            "The Devices of PolicyRuleDevice %s are not valid",
+                            policyRuleBasic.getPolicyRuleId());
             setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
@@ -467,12 +494,6 @@ public class PolicyServiceImpl implements PolicyService {
         createAlarmDescriptorsForDevices(policyRuleDevice);
     }
 
-    private void setState(PolicyRuleBasic policyRuleBasic, PolicyRuleState policyRuleState) {
-        LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-        policyRuleBasic.setPolicyRuleState(policyRuleState);
-        contextService.setPolicyRule(policyRuleBasic);
-    }
-
     private void createAlarmDescriptorsForDevices(PolicyRuleDevice policyRuleDevice) {
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
 
@@ -581,8 +602,7 @@ public class PolicyServiceImpl implements PolicyService {
             return;
         }
 
-        policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
-        contextService.setPolicyRule(policyRuleBasic);
+        setState(policyRuleBasic, VALIDATED_POLICYRULE_STATE);
 
         createAlarmDescriptorsForService(policyRuleService);
     }
@@ -825,4 +845,10 @@ public class PolicyServiceImpl implements PolicyService {
 
         return invalidDeviceIds;
     }
+
+    private void setState(PolicyRuleBasic policyRuleBasic, PolicyRuleState policyRuleState) {
+        LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+        policyRuleBasic.setPolicyRuleState(policyRuleState);
+        contextService.setPolicyRule(policyRuleBasic);
+    }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
index 1157bc220..2fc1c5c26 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java
@@ -17,7 +17,6 @@
 package eu.teraflow.policy.model;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
 
 import eu.teraflow.policy.common.Util;
 import java.util.ArrayList;
@@ -32,6 +31,7 @@ public class PolicyRuleBasic {
     private final BooleanOperator booleanOperator;
     private final List policyRuleActions;
     private final Boolean isValid;
+    private final String exceptionMessage;
 
     public PolicyRuleBasic(
             String policyRuleId,
@@ -47,22 +47,23 @@ public class PolicyRuleBasic {
         BooleanOperator booleanOperator_val;
         List policyRuleActions_val;
         Boolean isValid_val;
+        String exceptionMessage_val = "";
 
         try {
-            checkNotNull(policyRuleId, "Policy rule ID must not be null.");
+            // checkNotNull(policyRuleId, "Policy rule ID must not be null.");
             checkArgument(!policyRuleId.isBlank(), "Policy rule ID must not be empty.");
             policyRuleId_val = policyRuleId;
             this.policyRuleState = policyRuleState;
             checkArgument(priority >= 0, "Priority value must be greater or equal than zero.");
             priority_val = priority;
-            checkNotNull(policyRuleConditions, "Policy Rule conditions cannot be null.");
+            // checkNotNull(policyRuleConditions, "Policy Rule conditions cannot be null.");
             checkArgument(!policyRuleConditions.isEmpty(), "Policy Rule conditions cannot be empty.");
             policyRuleConditions_val = policyRuleConditions;
             checkArgument(
                     booleanOperator != BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED,
                     "Boolean operator cannot be undefined");
             booleanOperator_val = booleanOperator;
-            checkNotNull(policyRuleActions, "Policy Rule actions cannot be null.");
+            // checkNotNull(policyRuleActions, "Policy Rule actions cannot be null.");
             checkArgument(!policyRuleActions.isEmpty(), "Policy Rule actions cannot be empty.");
             policyRuleActions_val = policyRuleActions;
             isValid_val = true;
@@ -74,6 +75,7 @@ public class PolicyRuleBasic {
             booleanOperator_val = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED;
             policyRuleActions_val = new ArrayList();
             isValid_val = false;
+            exceptionMessage_val = e.toString();
         }
 
         this.isValid = isValid_val;
@@ -82,12 +84,17 @@ public class PolicyRuleBasic {
         this.policyRuleConditions = policyRuleConditions_val;
         this.booleanOperator = booleanOperator_val;
         this.policyRuleActions = policyRuleActions_val;
+        this.exceptionMessage = exceptionMessage_val;
     }
 
-    public boolean isValid() {
+    public boolean areArgumentsValid() {
         return isValid;
     }
 
+    public String getExeceptionMessage() {
+        return exceptionMessage;
+    }
+
     public String getPolicyRuleId() {
         return policyRuleId;
     }
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
index 1669966ab..53b0f4719 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -183,7 +183,7 @@ class PolicyServiceTest {
 
         final var expectedPolicyRuleState =
                 Policy.PolicyRuleState.newBuilder()
-                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED)
+                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED)
                         .build();
 
         final var policyRuleBasic =
@@ -213,7 +213,7 @@ class PolicyServiceTest {
 
         final var expectedPolicyRuleState =
                 Policy.PolicyRuleState.newBuilder()
-                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED)
+                        .setPolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED)
                         .build();
 
         final var policyRuleBasic =
-- 
GitLab


From 08fca7f8155374f318d6207f9f1e2761ee0de852 Mon Sep 17 00:00:00 2001
From: Vasileios Katopodis 
Date: Wed, 5 Oct 2022 16:30:57 +0300
Subject: [PATCH 31/34] Insert PolicyRule message as oneof PolicyRuleService,
 PolicyRuleDevice

---
 proto/context_policy.proto                    |    4 +-
 proto/policy.proto                            |    8 +
 .../eu/teraflow/policy/PolicyServiceImpl.java |  157 ++-
 .../java/eu/teraflow/policy/Serializer.java   |   53 +-
 .../policy/context/ContextGateway.java        |    6 +-
 .../policy/context/ContextGatewayImpl.java    |    8 +-
 .../policy/context/ContextService.java        |    6 +-
 .../policy/context/ContextServiceImpl.java    |    8 +-
 .../eu/teraflow/policy/model/PolicyRule.java  |   36 +
 .../policy/model/PolicyRuleDevice.java        |    6 +-
 .../policy/model/PolicyRuleService.java       |    6 +-
 .../teraflow/policy/model/PolicyRuleType.java |   24 +
 .../policy/model/PolicyRuleTypeDevice.java    |   41 +
 .../policy/model/PolicyRuleTypeService.java   |   41 +
 .../eu/teraflow/policy/PolicyServiceTest.java |    4 +-
 .../grpc/context_policy/ContextPolicy.java    |   14 +-
 .../context_policy/ContextPolicyService.java  |    4 +-
 .../ContextPolicyServiceBean.java             |    4 +-
 .../ContextPolicyServiceClient.java           |    4 +-
 .../ContextPolicyServiceGrpc.java             |   48 +-
 .../MutinyContextPolicyServiceGrpc.java       |   16 +-
 .../generated-sources/grpc/policy/Policy.java | 1037 ++++++++++++++++-
 22 files changed, 1376 insertions(+), 159 deletions(-)
 create mode 100644 src/policy/src/main/java/eu/teraflow/policy/model/PolicyRule.java
 create mode 100644 src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleType.java
 create mode 100644 src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleTypeDevice.java
 create mode 100644 src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleTypeService.java

diff --git a/proto/context_policy.proto b/proto/context_policy.proto
index 9fe25dec5..efad68df6 100644
--- a/proto/context_policy.proto
+++ b/proto/context_policy.proto
@@ -22,7 +22,7 @@ import "policy.proto";
 service ContextPolicyService {
   rpc ListPolicyRuleIds(context.Empty         ) returns (policy.PolicyRuleIdList) {}
   rpc ListPolicyRules  (context.Empty         ) returns (policy.PolicyRuleList  ) {}
-  rpc GetPolicyRule    (policy.PolicyRuleId   ) returns (policy.PolicyRuleBasic ) {}
-  rpc SetPolicyRule    (policy.PolicyRuleBasic) returns (policy.PolicyRuleId    ) {}
+  rpc GetPolicyRule    (policy.PolicyRuleId   ) returns (policy.PolicyRule      ) {}
+  rpc SetPolicyRule    (policy.PolicyRule     ) returns (policy.PolicyRuleId    ) {}
   rpc RemovePolicyRule (policy.PolicyRuleId   ) returns (context.Empty          ) {}
 }
diff --git a/proto/policy.proto b/proto/policy.proto
index fb362e0d0..d8e51caea 100644
--- a/proto/policy.proto
+++ b/proto/policy.proto
@@ -84,6 +84,14 @@ message PolicyRuleDevice {
   repeated context.DeviceId deviceList = 2;
 }
 
+// Wrapper policy rule object
+message PolicyRule {
+  oneof policy_rule {
+    PolicyRuleService service = 1;
+    PolicyRuleDevice device = 2;
+  }
+}
+
 // A list of policy rule IDs
 message PolicyRuleIdList {
   repeated PolicyRuleId policyRuleIdList = 1;
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index b9fb351c8..6b165aaaa 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -28,6 +28,7 @@ import eu.teraflow.policy.context.model.ServiceConfig;
 import eu.teraflow.policy.device.DeviceService;
 import eu.teraflow.policy.model.BooleanOperator;
 import eu.teraflow.policy.model.NumericalOperator;
+import eu.teraflow.policy.model.PolicyRule;
 import eu.teraflow.policy.model.PolicyRuleAction;
 import eu.teraflow.policy.model.PolicyRuleActionEnum;
 import eu.teraflow.policy.model.PolicyRuleBasic;
@@ -36,6 +37,8 @@ import eu.teraflow.policy.model.PolicyRuleDevice;
 import eu.teraflow.policy.model.PolicyRuleService;
 import eu.teraflow.policy.model.PolicyRuleState;
 import eu.teraflow.policy.model.PolicyRuleStateEnum;
+import eu.teraflow.policy.model.PolicyRuleTypeDevice;
+import eu.teraflow.policy.model.PolicyRuleTypeService;
 import eu.teraflow.policy.monitoring.MonitoringService;
 import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
 import eu.teraflow.policy.monitoring.model.AlarmResponse;
@@ -146,16 +149,20 @@ public class PolicyServiceImpl implements PolicyService {
 
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            setState(
-                    policyRuleBasic,
+            setPolicyRuleServiceToContext(
+                    policyRuleService,
                     new PolicyRuleState(
                             PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
             return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
         }
 
         policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
+        policyRuleService.setPolicyRuleBasic(policyRuleBasic);
+        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+
         contextService
-                .setPolicyRule(policyRuleBasic)
+                .setPolicyRule(policyRule)
                 .subscribe()
                 .with(id -> validateService(policyRuleService));
 
@@ -168,16 +175,20 @@ public class PolicyServiceImpl implements PolicyService {
 
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            setState(
-                    policyRuleBasic,
+            setPolicyRuleServiceToContext(
+                    policyRuleService,
                     new PolicyRuleState(
                             PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
             return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
         }
 
         policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
+        policyRuleService.setPolicyRuleBasic(policyRuleBasic);
+        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+
         contextService
-                .setPolicyRule(policyRuleBasic)
+                .setPolicyRule(policyRule)
                 .subscribe()
                 .with(id -> validateUpdatedPolicyService(policyRuleService));
 
@@ -190,16 +201,20 @@ public class PolicyServiceImpl implements PolicyService {
 
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            setState(
-                    policyRuleBasic,
+            setPolicyRuleDeviceToContext(
+                    policyRuleDevice,
                     new PolicyRuleState(
                             PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
             return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
         }
 
         policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
+        policyRuleDevice.setPolicyRuleBasic(policyRuleBasic);
+        final var policyRuleTypeDevice = new PolicyRuleTypeDevice(policyRuleDevice);
+        final var policyRule = new PolicyRule(policyRuleTypeDevice);
+
         contextService
-                .setPolicyRule(policyRuleBasic)
+                .setPolicyRule(policyRule)
                 .subscribe()
                 .with(id -> validateDevice(policyRuleDevice));
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
@@ -211,16 +226,20 @@ public class PolicyServiceImpl implements PolicyService {
 
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            setState(
-                    policyRuleBasic,
+            setPolicyRuleDeviceToContext(
+                    policyRuleDevice,
                     new PolicyRuleState(
                             PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
             return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
         }
 
         policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
+        policyRuleDevice.setPolicyRuleBasic(policyRuleBasic);
+        final var policyRuleTypeDevice = new PolicyRuleTypeDevice(policyRuleDevice);
+        final var policyRule = new PolicyRule(policyRuleTypeDevice);
+
         contextService
-                .setPolicyRule(policyRuleBasic)
+                .setPolicyRule(policyRule)
                 .subscribe()
                 .with(id -> validateUpdatedPolicyDevice(policyRuleDevice));
 
@@ -231,8 +250,9 @@ public class PolicyServiceImpl implements PolicyService {
     public Uni deletePolicy(String policyRuleId) {
         LOGGER.infof("Received %s", policyRuleId);
 
-        PolicyRuleBasic policyRuleBasic =
-                contextService.getPolicyRule(policyRuleId).await().indefinitely();
+        PolicyRule policyRule = contextService.getPolicyRule(policyRuleId).await().indefinitely();
+
+        final var policyRuleBasic = policyRule.getPolicyRuleType().getPolicyRuleBasic();
         List policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
 
         for (PolicyRuleCondition policy : policyRuleConditions) {
@@ -247,15 +267,12 @@ public class PolicyServiceImpl implements PolicyService {
                 .subscribe()
                 .with(emptyMessage -> LOGGER.infof("Policy [%s] has been removed.\n", policyRuleId));
 
-        setState(policyRuleBasic, REMOVED_POLICYRULE_STATE);
-
+        setPolicyRuleToContext(policyRule, REMOVED_POLICYRULE_STATE);
         return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
     }
 
     private void provisionAlarm(
-            PolicyRuleBasic policyRuleBasic,
-            List alarmDescriptorList,
-            Boolean isService) {
+            PolicyRule policyRule, List alarmDescriptorList, Boolean isService) {
 
         List alarmSubscriptionList = new ArrayList<>();
 
@@ -266,12 +283,13 @@ public class PolicyServiceImpl implements PolicyService {
                     .with(alarmId -> alarmSubscriptionList.add(new AlarmSubscription(alarmId, 0, 0)));
         }
 
-        setState(policyRuleBasic, PROVISIONED_POLICYRULE_STATE);
-        getAlarmResponseStream(policyRuleBasic, alarmDescriptorList, alarmSubscriptionList, isService);
+        setPolicyRuleToContext(policyRule, PROVISIONED_POLICYRULE_STATE);
+
+        getAlarmResponseStream(policyRule, alarmDescriptorList, alarmSubscriptionList, isService);
     }
 
     private void getAlarmResponseStream(
-            PolicyRuleBasic policyRuleBasic,
+            PolicyRule policyRule,
             List alarmDescriptorList,
             List alarmSubscriptionList,
             Boolean isService) {
@@ -313,11 +331,10 @@ public class PolicyServiceImpl implements PolicyService {
                                         LOGGER.infof("Alarm [%s] has been deleted.\n", alarmDescriptor.getAlarmId()));
             }
 
-            setState(policyRuleBasic, INEFFECTIVE_POLICYRULE_STATE);
+            setPolicyRuleToContext(policyRule, INEFFECTIVE_POLICYRULE_STATE);
 
         } else {
-
-            setState(policyRuleBasic, EFFECTIVE_POLICYRULE_STATE);
+            setPolicyRuleToContext(policyRule, EFFECTIVE_POLICYRULE_STATE);
 
             multi
                     .subscribe()
@@ -342,7 +359,7 @@ public class PolicyServiceImpl implements PolicyService {
             // In case additional PolicyRuleAction for Devices will be added
         }
 
-        setState(policyRuleBasic, ACTIVE_POLICYRULE_STATE);
+        setPolicyRuleDeviceToContext(policyRuleDevice, ACTIVE_POLICYRULE_STATE);
 
         List deviceIds = policyRuleDevice.getDeviceIds();
         List actionParameters =
@@ -360,7 +377,7 @@ public class PolicyServiceImpl implements PolicyService {
             activateDevice(deviceIds.get(i), deviceActions);
         }
 
-        setState(policyRuleBasic, ENFORCED_POLICYRULE_STATE);
+        setPolicyRuleDeviceToContext(policyRuleDevice, ENFORCED_POLICYRULE_STATE);
     }
 
     private void activateDevice(String deviceId, List actionParameters) {
@@ -455,16 +472,15 @@ public class PolicyServiceImpl implements PolicyService {
                         deserializedService -> {
                             deserializedService.appendServiceConstraints(constraintList);
                             serviceService.updateService(deserializedService);
-                            setState(policyRuleBasic, ENFORCED_POLICYRULE_STATE);
+                            setPolicyRuleServiceToContext(policyRuleService, ENFORCED_POLICYRULE_STATE);
                         });
     }
 
     private void applyActionService(String alarmId) {
         PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId);
-        PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId);
 
-        setState(policyRuleBasic, ACTIVE_POLICYRULE_STATE);
+        setPolicyRuleServiceToContext(policyRuleService, ACTIVE_POLICYRULE_STATE);
 
         switch (policyRuleAction.getPolicyRuleActionEnum()) {
             case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT:
@@ -479,15 +495,15 @@ public class PolicyServiceImpl implements PolicyService {
 
     private void validateDevice(PolicyRuleDevice policyRuleDevice) {
         final var deviceIds = policyRuleDevice.getDeviceIds();
-        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        final var policyRuleId = policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId();
 
         final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
         if (!invalidDeviceIds.isEmpty()) {
             String message =
-                    String.format(
-                            "The Devices of PolicyRuleDevice %s are not valid",
-                            policyRuleBasic.getPolicyRuleId());
-            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
+                    String.format("The Devices of PolicyRuleDevice %s are not valid", policyRuleId);
+
+            setPolicyRuleDeviceToContext(
+                    policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
@@ -505,16 +521,19 @@ public class PolicyServiceImpl implements PolicyService {
                     String.format(
                             "The Devices of PolicyRuleDevice %s are not valid",
                             policyRuleBasic.getPolicyRuleId());
-            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
+            setPolicyRuleDeviceToContext(
+                    policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
-        setState(policyRuleBasic, VALIDATED_POLICYRULE_STATE);
+        setPolicyRuleDeviceToContext(policyRuleDevice, VALIDATED_POLICYRULE_STATE);
         for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
             alarmPolicyRuleDeviceMap.put(alarmDescriptor.getAlarmId(), policyRuleDevice);
         }
 
-        provisionAlarm(policyRuleBasic, alarmDescriptorList, false);
+        final var policyRuleTypeService = new PolicyRuleTypeDevice(policyRuleDevice);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+        provisionAlarm(policyRule, alarmDescriptorList, false);
         return;
     }
 
@@ -534,8 +553,8 @@ public class PolicyServiceImpl implements PolicyService {
                                         String.format(
                                                 "The requested PolicyRuleService to update: %s is not valid",
                                                 policyRuleBasic.getPolicyRuleId());
-                                setState(
-                                        policyRuleBasic,
+                                setPolicyRuleServiceToContext(
+                                        policyRuleService,
                                         new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
                                 return;
                             }
@@ -559,8 +578,8 @@ public class PolicyServiceImpl implements PolicyService {
                                         String.format(
                                                 "The requested PolicyRuleDevice to update: %s is not valid",
                                                 policyRuleBasic.getPolicyRuleId());
-                                setState(
-                                        policyRuleBasic,
+                                setPolicyRuleDeviceToContext(
+                                        policyRuleDevice,
                                         new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
                                 return;
                             }
@@ -582,7 +601,8 @@ public class PolicyServiceImpl implements PolicyService {
                     String.format(
                             "The Service of PolicyRuleService %s is not valid",
                             policyRuleBasic.getPolicyRuleId());
-            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
+            setPolicyRuleServiceToContext(
+                    policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
@@ -598,11 +618,12 @@ public class PolicyServiceImpl implements PolicyService {
                     String.format(
                             "he Devices of PolicyRuleService %s are not valid",
                             policyRuleBasic.getPolicyRuleId());
-            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
+            setPolicyRuleServiceToContext(
+                    policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
-        setState(policyRuleBasic, VALIDATED_POLICYRULE_STATE);
+        setPolicyRuleServiceToContext(policyRuleService, VALIDATED_POLICYRULE_STATE);
 
         createAlarmDescriptorsForService(policyRuleService);
     }
@@ -618,17 +639,20 @@ public class PolicyServiceImpl implements PolicyService {
                     String.format(
                             "The PolicyRuleConditions of PolicyRuleDevice %s are not valid",
                             policyRuleBasic.getPolicyRuleId());
-            setState(policyRuleBasic, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
+            setPolicyRuleServiceToContext(
+                    policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
             return;
         }
 
-        setState(policyRuleBasic, VALIDATED_POLICYRULE_STATE);
+        setPolicyRuleServiceToContext(policyRuleService, VALIDATED_POLICYRULE_STATE);
 
         for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
             alarmPolicyRuleServiceMap.put(alarmDescriptor.getAlarmId(), policyRuleService);
         }
 
-        provisionAlarm(policyRuleBasic, alarmDescriptorList, true);
+        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+        provisionAlarm(policyRule, alarmDescriptorList, true);
         return;
     }
 
@@ -846,9 +870,42 @@ public class PolicyServiceImpl implements PolicyService {
         return invalidDeviceIds;
     }
 
-    private void setState(PolicyRuleBasic policyRuleBasic, PolicyRuleState policyRuleState) {
+    private void setPolicyRuleToContext(PolicyRule policyRule, PolicyRuleState policyRuleState) {
+        final var policyRuleType = policyRule.getPolicyRuleType();
+        final var policyRuleTypeSpecificType = policyRuleType.getPolicyRuleType();
+
+        if (policyRuleTypeSpecificType instanceof PolicyRuleService) {
+            setPolicyRuleServiceToContext(
+                    (PolicyRuleService) policyRuleTypeSpecificType, policyRuleState);
+        }
+        if (policyRuleTypeSpecificType instanceof PolicyRuleDevice) {
+            setPolicyRuleDeviceToContext((PolicyRuleDevice) policyRuleTypeSpecificType, policyRuleState);
+        }
+    }
+
+    private void setPolicyRuleServiceToContext(
+            PolicyRuleService policyRuleService, PolicyRuleState policyRuleState) {
         LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         policyRuleBasic.setPolicyRuleState(policyRuleState);
-        contextService.setPolicyRule(policyRuleBasic);
+        policyRuleService.setPolicyRuleBasic(policyRuleBasic);
+
+        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+        contextService.setPolicyRule(policyRule);
+    }
+
+    private void setPolicyRuleDeviceToContext(
+            PolicyRuleDevice policyRuleDevice, PolicyRuleState policyRuleState) {
+        LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        policyRuleBasic.setPolicyRuleState(policyRuleState);
+        policyRuleDevice.setPolicyRuleBasic(policyRuleBasic);
+
+        final var policyRuleTypeService = new PolicyRuleTypeDevice(policyRuleDevice);
+        final var policyRule = new PolicyRule(policyRuleTypeService);
+        contextService.setPolicyRule(policyRule);
     }
 }
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 3fc25ff1c..760bd5125 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -76,16 +76,7 @@ import eu.teraflow.policy.context.model.ServiceTypeEnum;
 import eu.teraflow.policy.context.model.SliceId;
 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;
-import eu.teraflow.policy.model.PolicyRuleActionEnum;
-import eu.teraflow.policy.model.PolicyRuleBasic;
-import eu.teraflow.policy.model.PolicyRuleCondition;
-import eu.teraflow.policy.model.PolicyRuleDevice;
-import eu.teraflow.policy.model.PolicyRuleService;
-import eu.teraflow.policy.model.PolicyRuleState;
-import eu.teraflow.policy.model.PolicyRuleStateEnum;
+import eu.teraflow.policy.model.*;
 import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
 import eu.teraflow.policy.monitoring.model.AlarmResponse;
 import eu.teraflow.policy.monitoring.model.AlarmSubscription;
@@ -1915,6 +1906,25 @@ public class Serializer {
         return builder.build();
     }
 
+    public Policy.PolicyRule serialize(PolicyRule policyRule) {
+        final var builder = Policy.PolicyRule.newBuilder();
+
+        final var policyRuleType = policyRule.getPolicyRuleType();
+        final var policyRuleTypeSpecificType = policyRuleType.getPolicyRuleType();
+
+        if (policyRuleTypeSpecificType instanceof PolicyRuleService) {
+            final var policyRuleService = serialize((PolicyRuleService) policyRuleTypeSpecificType);
+            builder.setService(policyRuleService).build();
+        }
+
+        if (policyRuleTypeSpecificType instanceof PolicyRuleDevice) {
+            final var policyRuleDevice = serialize((PolicyRuleDevice) policyRuleTypeSpecificType);
+            builder.setDevice(policyRuleDevice).build();
+        }
+
+        return builder.build();
+    }
+
     public PolicyRuleService deserialize(Policy.PolicyRuleService serializedPolicyRuleService) {
         final var serializedPolicyRuleBasic = serializedPolicyRuleService.getPolicyRuleBasic();
         final var serializedPolicyRuleServiceId = serializedPolicyRuleService.getServiceId();
@@ -1928,6 +1938,29 @@ public class Serializer {
         return new PolicyRuleService(policyRuleBasic, policyRuleServiceId, policyRuleDeviceIds);
     }
 
+    public PolicyRule deserialize(Policy.PolicyRule serializedPolicyRule) {
+
+        final var typeOfPolicyRule = serializedPolicyRule.getPolicyRuleCase();
+
+        switch (typeOfPolicyRule) {
+            case SERVICE:
+                final var serializedPolicyRuleService = serializedPolicyRule.getService();
+                final var policyRuleService = deserialize(serializedPolicyRuleService);
+                final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
+
+                return new PolicyRule(policyRuleTypeService);
+            case DEVICE:
+                final var serializedPolicyRuleDevice = serializedPolicyRule.getDevice();
+                final var policyRuleDevice = deserialize(serializedPolicyRuleDevice);
+                final var policyRuleTypeDevice = new PolicyRuleTypeDevice(policyRuleDevice);
+
+                return new PolicyRule(policyRuleTypeDevice);
+            default:
+            case POLICYRULE_NOT_SET:
+                throw new IllegalStateException("Policy Rule not set");
+        }
+    }
+
     public Policy.PolicyRuleDevice serialize(PolicyRuleDevice policyRuleDevice) {
         final var builder = Policy.PolicyRuleDevice.newBuilder();
 
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
index 4e90fe7b6..cc33227ef 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
@@ -20,7 +20,7 @@ import eu.teraflow.policy.context.model.Device;
 import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
-import eu.teraflow.policy.model.PolicyRuleBasic;
+import eu.teraflow.policy.model.PolicyRule;
 import io.smallrye.mutiny.Uni;
 
 public interface ContextGateway {
@@ -33,9 +33,9 @@ public interface ContextGateway {
     Uni getDevice(String deviceId);
 
     // Context-policy related methods
-    Uni getPolicyRule(String policyRuleId);
+    Uni getPolicyRule(String policyRuleId);
 
-    Uni setPolicyRule(PolicyRuleBasic policyRuleBasic);
+    Uni setPolicyRule(PolicyRule policyRule);
 
     Uni removePolicyRule(String policyRuleId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
index 8b8f981d0..bd3eef2a9 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
@@ -23,7 +23,7 @@ import eu.teraflow.policy.context.model.Device;
 import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
-import eu.teraflow.policy.model.PolicyRuleBasic;
+import eu.teraflow.policy.model.PolicyRule;
 import io.quarkus.grpc.GrpcClient;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
@@ -79,7 +79,7 @@ public class ContextGatewayImpl implements ContextGateway {
     }
 
     @Override
-    public Uni getPolicyRule(String policyRuleId) {
+    public Uni getPolicyRule(String policyRuleId) {
         final var serializedPolicyRuleId = serializer.serializePolicyRuleId(policyRuleId);
 
         return streamingDelegateContextPolicy
@@ -89,9 +89,9 @@ public class ContextGatewayImpl implements ContextGateway {
     }
 
     @Override
-    public Uni setPolicyRule(PolicyRuleBasic policyRuleBasic) {
+    public Uni setPolicyRule(PolicyRule policyRule) {
         // return Uni.createFrom().item("571eabc1-0f59-48da-b608-c45876c3fa8a");
-        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRule);
 
         return streamingDelegateContextPolicy
                 .setPolicyRule(serializedPolicyRuleBasic)
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
index 41290e52a..0da218b43 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
@@ -20,7 +20,7 @@ import eu.teraflow.policy.context.model.Device;
 import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
-import eu.teraflow.policy.model.PolicyRuleBasic;
+import eu.teraflow.policy.model.PolicyRule;
 import io.smallrye.mutiny.Uni;
 
 public interface ContextService {
@@ -31,9 +31,9 @@ public interface ContextService {
 
     Uni getDevice(String deviceId);
 
-    Uni getPolicyRule(String policyRuleId);
+    Uni getPolicyRule(String policyRuleId);
 
-    Uni setPolicyRule(PolicyRuleBasic policyRuleBasic);
+    Uni setPolicyRule(PolicyRule policyRule);
 
     Uni removePolicyRule(String policyRuleId);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
index b8ffc44a4..e54f14ca8 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
@@ -20,7 +20,7 @@ import eu.teraflow.policy.context.model.Device;
 import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
-import eu.teraflow.policy.model.PolicyRuleBasic;
+import eu.teraflow.policy.model.PolicyRule;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
@@ -51,13 +51,13 @@ public class ContextServiceImpl implements ContextService {
     }
 
     @Override
-    public Uni getPolicyRule(String policyRuleId) {
+    public Uni getPolicyRule(String policyRuleId) {
         return contextGateway.getPolicyRule(policyRuleId);
     }
 
     @Override
-    public Uni setPolicyRule(PolicyRuleBasic policyRuleBasic) {
-        return contextGateway.setPolicyRule(policyRuleBasic);
+    public Uni setPolicyRule(PolicyRule policyRule) {
+        return contextGateway.setPolicyRule(policyRule);
     }
 
     @Override
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRule.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRule.java
new file mode 100644
index 000000000..7f135fdf8
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRule.java
@@ -0,0 +1,36 @@
+/*
+* 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.model;
+
+public class PolicyRule {
+
+    private final PolicyRuleType policyRuleType;
+
+    public PolicyRule(PolicyRuleType policyRuleType) {
+        this.policyRuleType = policyRuleType;
+    }
+
+    public PolicyRuleType getPolicyRuleType() {
+        return policyRuleType;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{configActionEnum:\"%s\", %s}", getClass().getSimpleName(), policyRuleType);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java
index 6dbbe2e00..8a4e3ac7f 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java
@@ -24,7 +24,7 @@ import java.util.List;
 
 public class PolicyRuleDevice {
 
-    private final PolicyRuleBasic policyRuleBasic;
+    private PolicyRuleBasic policyRuleBasic;
     private final List deviceIds;
 
     public PolicyRuleDevice(PolicyRuleBasic policyRuleBasic, List deviceIds) {
@@ -39,6 +39,10 @@ public class PolicyRuleDevice {
         return policyRuleBasic;
     }
 
+    public void setPolicyRuleBasic(PolicyRuleBasic policyRuleBasic) {
+        this.policyRuleBasic = policyRuleBasic;
+    }
+
     public List getDeviceIds() {
         return deviceIds;
     }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java
index fcdfffdb6..51ebc2ede 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java
@@ -24,7 +24,7 @@ import java.util.List;
 
 public class PolicyRuleService {
 
-    private final PolicyRuleBasic policyRuleBasic;
+    private PolicyRuleBasic policyRuleBasic;
     private final ServiceId serviceId;
     private final List deviceIds;
 
@@ -42,6 +42,10 @@ public class PolicyRuleService {
         return policyRuleBasic;
     }
 
+    public void setPolicyRuleBasic(PolicyRuleBasic policyRuleBasic) {
+        this.policyRuleBasic = policyRuleBasic;
+    }
+
     public ServiceId getServiceId() {
         return serviceId;
     }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleType.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleType.java
new file mode 100644
index 000000000..93886aab4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleType.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.model;
+
+public interface PolicyRuleType {
+
+    public T getPolicyRuleType();
+
+    public PolicyRuleBasic getPolicyRuleBasic();
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleTypeDevice.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleTypeDevice.java
new file mode 100644
index 000000000..c987a5c4c
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleTypeDevice.java
@@ -0,0 +1,41 @@
+/*
+* 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.model;
+
+public class PolicyRuleTypeDevice implements PolicyRuleType {
+
+    private final PolicyRuleDevice policyRuleDevice;
+
+    public PolicyRuleTypeDevice(PolicyRuleDevice policyRuleDevice) {
+        this.policyRuleDevice = policyRuleDevice;
+    }
+
+    @Override
+    public PolicyRuleDevice getPolicyRuleType() {
+        return this.policyRuleDevice;
+    }
+
+    @Override
+    public PolicyRuleBasic getPolicyRuleBasic() {
+        return policyRuleDevice.getPolicyRuleBasic();
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), policyRuleDevice);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleTypeService.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleTypeService.java
new file mode 100644
index 000000000..2b1db9ffb
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleTypeService.java
@@ -0,0 +1,41 @@
+/*
+* 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.model;
+
+public class PolicyRuleTypeService implements PolicyRuleType {
+
+    private final PolicyRuleService policyRuleService;
+
+    public PolicyRuleTypeService(PolicyRuleService policyRuleService) {
+        this.policyRuleService = policyRuleService;
+    }
+
+    @Override
+    public PolicyRuleService getPolicyRuleType() {
+        return this.policyRuleService;
+    }
+
+    @Override
+    public PolicyRuleBasic getPolicyRuleBasic() {
+        return policyRuleService.getPolicyRuleBasic();
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), policyRuleService);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
index 53b0f4719..d507ce33a 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -177,7 +177,7 @@ class PolicyServiceTest {
     }
 
     @Test
-    void shouldUpdatePolicyService()
+    void shouldUpdatePolicyServiceReturnFailedState()
             throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture message = new CompletableFuture<>();
 
@@ -201,7 +201,7 @@ class PolicyServiceTest {
     }
 
     @Test
-    void shouldUpdatePolicyDevice()
+    void shouldUpdatePolicyDeviceReturnFailedState()
             throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture message = new CompletableFuture<>();
 
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java
index 455aef779..a9733c32d 100644
--- a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java
@@ -24,16 +24,16 @@ public final class ContextPolicy {
   static {
     java.lang.String[] descriptorData = {
       "\n\024context_policy.proto\022\016context_policy\032\r" +
-      "context.proto\032\014policy.proto2\324\002\n\024ContextP" +
+      "context.proto\032\014policy.proto2\312\002\n\024ContextP" +
       "olicyService\022?\n\021ListPolicyRuleIds\022\016.cont" +
       "ext.Empty\032\030.policy.PolicyRuleIdList\"\000\022;\n" +
       "\017ListPolicyRules\022\016.context.Empty\032\026.polic" +
-      "y.PolicyRuleList\"\000\022@\n\rGetPolicyRule\022\024.po" +
-      "licy.PolicyRuleId\032\027.policy.PolicyRuleBas" +
-      "ic\"\000\022@\n\rSetPolicyRule\022\027.policy.PolicyRul" +
-      "eBasic\032\024.policy.PolicyRuleId\"\000\022:\n\020Remove" +
-      "PolicyRule\022\024.policy.PolicyRuleId\032\016.conte" +
-      "xt.Empty\"\000b\006proto3"
+      "y.PolicyRuleList\"\000\022;\n\rGetPolicyRule\022\024.po" +
+      "licy.PolicyRuleId\032\022.policy.PolicyRule\"\000\022" +
+      ";\n\rSetPolicyRule\022\022.policy.PolicyRule\032\024.p" +
+      "olicy.PolicyRuleId\"\000\022:\n\020RemovePolicyRule" +
+      "\022\024.policy.PolicyRuleId\032\016.context.Empty\"\000" +
+      "b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java
index 7ace0b9dc..7db1a4053 100644
--- a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java
@@ -12,9 +12,9 @@ public interface ContextPolicyService extends MutinyService {
     
     io.smallrye.mutiny.Uni listPolicyRules(context.ContextOuterClass.Empty request);
     
-    io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request);
+    io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request);
     
-    io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRuleBasic request);
+    io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRule request);
     
     io.smallrye.mutiny.Uni removePolicyRule(policy.Policy.PolicyRuleId request);
     
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java
index a08761c67..81b170e15 100644
--- a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java
@@ -32,7 +32,7 @@ public class ContextPolicyServiceBean extends MutinyContextPolicyServiceGrpc.Con
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request) {
+    public io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request) {
        try {
          return delegate.getPolicyRule(request);
        } catch (UnsupportedOperationException e) {
@@ -40,7 +40,7 @@ public class ContextPolicyServiceBean extends MutinyContextPolicyServiceGrpc.Con
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+    public io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRule request) {
        try {
          return delegate.setPolicyRule(request);
        } catch (UnsupportedOperationException e) {
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java
index 98e57eeff..4404d4ec7 100644
--- a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java
@@ -29,11 +29,11 @@ public class ContextPolicyServiceClient implements ContextPolicyService, MutinyC
        return stub.listPolicyRules(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request) {
+    public io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request) {
        return stub.getPolicyRule(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+    public io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRule request) {
        return stub.setPolicyRule(request);
     }
     @Override
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java
index fa859ecff..0f5619bde 100644
--- a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java
@@ -80,28 +80,28 @@ public final class ContextPolicyServiceGrpc {
   }
 
   private static volatile io.grpc.MethodDescriptor getGetPolicyRuleMethod;
+      policy.Policy.PolicyRule> getGetPolicyRuleMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "GetPolicyRule",
       requestType = policy.Policy.PolicyRuleId.class,
-      responseType = policy.Policy.PolicyRuleBasic.class,
+      responseType = policy.Policy.PolicyRule.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor getGetPolicyRuleMethod() {
-    io.grpc.MethodDescriptor getGetPolicyRuleMethod;
+      policy.Policy.PolicyRule> getGetPolicyRuleMethod() {
+    io.grpc.MethodDescriptor getGetPolicyRuleMethod;
     if ((getGetPolicyRuleMethod = ContextPolicyServiceGrpc.getGetPolicyRuleMethod) == null) {
       synchronized (ContextPolicyServiceGrpc.class) {
         if ((getGetPolicyRuleMethod = ContextPolicyServiceGrpc.getGetPolicyRuleMethod) == null) {
           ContextPolicyServiceGrpc.getGetPolicyRuleMethod = getGetPolicyRuleMethod =
-              io.grpc.MethodDescriptor.newBuilder()
+              io.grpc.MethodDescriptor.newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetPolicyRule"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   policy.Policy.PolicyRuleId.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  policy.Policy.PolicyRuleBasic.getDefaultInstance()))
+                  policy.Policy.PolicyRule.getDefaultInstance()))
               .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("GetPolicyRule"))
               .build();
         }
@@ -110,27 +110,27 @@ public final class ContextPolicyServiceGrpc {
     return getGetPolicyRuleMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor getSetPolicyRuleMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "SetPolicyRule",
-      requestType = policy.Policy.PolicyRuleBasic.class,
+      requestType = policy.Policy.PolicyRule.class,
       responseType = policy.Policy.PolicyRuleId.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor getSetPolicyRuleMethod() {
-    io.grpc.MethodDescriptor getSetPolicyRuleMethod;
+    io.grpc.MethodDescriptor getSetPolicyRuleMethod;
     if ((getSetPolicyRuleMethod = ContextPolicyServiceGrpc.getSetPolicyRuleMethod) == null) {
       synchronized (ContextPolicyServiceGrpc.class) {
         if ((getSetPolicyRuleMethod = ContextPolicyServiceGrpc.getSetPolicyRuleMethod) == null) {
           ContextPolicyServiceGrpc.getSetPolicyRuleMethod = getSetPolicyRuleMethod =
-              io.grpc.MethodDescriptor.newBuilder()
+              io.grpc.MethodDescriptor.newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetPolicyRule"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  policy.Policy.PolicyRuleBasic.getDefaultInstance()))
+                  policy.Policy.PolicyRule.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   policy.Policy.PolicyRuleId.getDefaultInstance()))
               .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("SetPolicyRule"))
@@ -240,13 +240,13 @@ public final class ContextPolicyServiceGrpc {
     /**
      */
     public void getPolicyRule(policy.Policy.PolicyRuleId request,
-        io.grpc.stub.StreamObserver responseObserver) {
+        io.grpc.stub.StreamObserver responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetPolicyRuleMethod(), responseObserver);
     }
 
     /**
      */
-    public void setPolicyRule(policy.Policy.PolicyRuleBasic request,
+    public void setPolicyRule(policy.Policy.PolicyRule request,
         io.grpc.stub.StreamObserver responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetPolicyRuleMethod(), responseObserver);
     }
@@ -279,13 +279,13 @@ public final class ContextPolicyServiceGrpc {
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 policy.Policy.PolicyRuleId,
-                policy.Policy.PolicyRuleBasic>(
+                policy.Policy.PolicyRule>(
                   this, METHODID_GET_POLICY_RULE)))
           .addMethod(
             getSetPolicyRuleMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                policy.Policy.PolicyRuleBasic,
+                policy.Policy.PolicyRule,
                 policy.Policy.PolicyRuleId>(
                   this, METHODID_SET_POLICY_RULE)))
           .addMethod(
@@ -335,14 +335,14 @@ public final class ContextPolicyServiceGrpc {
     /**
      */
     public void getPolicyRule(policy.Policy.PolicyRuleId request,
-        io.grpc.stub.StreamObserver responseObserver) {
+        io.grpc.stub.StreamObserver responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
           getChannel().newCall(getGetPolicyRuleMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void setPolicyRule(policy.Policy.PolicyRuleBasic request,
+    public void setPolicyRule(policy.Policy.PolicyRule request,
         io.grpc.stub.StreamObserver responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
           getChannel().newCall(getSetPolicyRuleMethod(), getCallOptions()), request, responseObserver);
@@ -390,14 +390,14 @@ public final class ContextPolicyServiceGrpc {
 
     /**
      */
-    public policy.Policy.PolicyRuleBasic getPolicyRule(policy.Policy.PolicyRuleId request) {
+    public policy.Policy.PolicyRule getPolicyRule(policy.Policy.PolicyRuleId request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
           getChannel(), getGetPolicyRuleMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public policy.Policy.PolicyRuleId setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+    public policy.Policy.PolicyRuleId setPolicyRule(policy.Policy.PolicyRule request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
           getChannel(), getSetPolicyRuleMethod(), getCallOptions(), request);
     }
@@ -445,7 +445,7 @@ public final class ContextPolicyServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture getPolicyRule(
+    public com.google.common.util.concurrent.ListenableFuture getPolicyRule(
         policy.Policy.PolicyRuleId request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getGetPolicyRuleMethod(), getCallOptions()), request);
@@ -454,7 +454,7 @@ public final class ContextPolicyServiceGrpc {
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture setPolicyRule(
-        policy.Policy.PolicyRuleBasic request) {
+        policy.Policy.PolicyRule request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getSetPolicyRuleMethod(), getCallOptions()), request);
     }
@@ -501,10 +501,10 @@ public final class ContextPolicyServiceGrpc {
           break;
         case METHODID_GET_POLICY_RULE:
           serviceImpl.getPolicyRule((policy.Policy.PolicyRuleId) request,
-              (io.grpc.stub.StreamObserver) responseObserver);
+              (io.grpc.stub.StreamObserver) responseObserver);
           break;
         case METHODID_SET_POLICY_RULE:
-          serviceImpl.setPolicyRule((policy.Policy.PolicyRuleBasic) request,
+          serviceImpl.setPolicyRule((policy.Policy.PolicyRule) request,
               (io.grpc.stub.StreamObserver) responseObserver);
           break;
         case METHODID_REMOVE_POLICY_RULE:
diff --git a/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java b/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java
index d9ff3b64c..5ead19433 100644
--- a/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java
@@ -50,12 +50,12 @@ public final class MutinyContextPolicyServiceGrpc implements io.quarkus.grpc.run
         }
 
         
-        public io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request) {
+        public io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getPolicyRule);
         }
 
         
-        public io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+        public io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRule request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setPolicyRule);
         }
 
@@ -96,12 +96,12 @@ public final class MutinyContextPolicyServiceGrpc implements io.quarkus.grpc.run
         }
 
         
-        public io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request) {
+        public io.smallrye.mutiny.Uni getPolicyRule(policy.Policy.PolicyRuleId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+        public io.smallrye.mutiny.Uni setPolicyRule(policy.Policy.PolicyRule request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -131,13 +131,13 @@ public final class MutinyContextPolicyServiceGrpc implements io.quarkus.grpc.run
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             policy.Policy.PolicyRuleId,
-                                            policy.Policy.PolicyRuleBasic>(
+                                            policy.Policy.PolicyRule>(
                                             this, METHODID_GET_POLICY_RULE, compression)))
                     .addMethod(
                             context_policy.ContextPolicyServiceGrpc.getSetPolicyRuleMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            policy.Policy.PolicyRuleBasic,
+                                            policy.Policy.PolicyRule,
                                             policy.Policy.PolicyRuleId>(
                                             this, METHODID_SET_POLICY_RULE, compression)))
                     .addMethod(
@@ -190,12 +190,12 @@ public final class MutinyContextPolicyServiceGrpc implements io.quarkus.grpc.run
                     break;
                 case METHODID_GET_POLICY_RULE:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleId) request,
-                            (io.grpc.stub.StreamObserver) responseObserver,
+                            (io.grpc.stub.StreamObserver) responseObserver,
                             compression,
                             serviceImpl::getPolicyRule);
                     break;
                 case METHODID_SET_POLICY_RULE:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleBasic) request,
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRule) request,
                             (io.grpc.stub.StreamObserver) responseObserver,
                             compression,
                             serviceImpl::setPolicyRule);
diff --git a/src/policy/target/generated-sources/grpc/policy/Policy.java b/src/policy/target/generated-sources/grpc/policy/Policy.java
index 267ef0082..0fb9c004a 100644
--- a/src/policy/target/generated-sources/grpc/policy/Policy.java
+++ b/src/policy/target/generated-sources/grpc/policy/Policy.java
@@ -6278,6 +6278,961 @@ public final class Policy {
 
   }
 
+  public interface PolicyRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRule)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * .policy.PolicyRuleService service = 1;
+     * @return Whether the service field is set.
+     */
+    boolean hasService();
+    /**
+     * .policy.PolicyRuleService service = 1;
+     * @return The service.
+     */
+    policy.Policy.PolicyRuleService getService();
+    /**
+     * .policy.PolicyRuleService service = 1;
+     */
+    policy.Policy.PolicyRuleServiceOrBuilder getServiceOrBuilder();
+
+    /**
+     * .policy.PolicyRuleDevice device = 2;
+     * @return Whether the device field is set.
+     */
+    boolean hasDevice();
+    /**
+     * .policy.PolicyRuleDevice device = 2;
+     * @return The device.
+     */
+    policy.Policy.PolicyRuleDevice getDevice();
+    /**
+     * .policy.PolicyRuleDevice device = 2;
+     */
+    policy.Policy.PolicyRuleDeviceOrBuilder getDeviceOrBuilder();
+
+    public policy.Policy.PolicyRule.PolicyRuleCase getPolicyRuleCase();
+  }
+  /**
+   * 
+   * Wrapper policy rule object
+   * 
+ * + * Protobuf type {@code policy.PolicyRule} + */ + public static final class PolicyRule extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:policy.PolicyRule) + PolicyRuleOrBuilder { + private static final long serialVersionUID = 0L; + // Use PolicyRule.newBuilder() to construct. + private PolicyRule(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private PolicyRule() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new PolicyRule(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private PolicyRule( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + policy.Policy.PolicyRuleService.Builder subBuilder = null; + if (policyRuleCase_ == 1) { + subBuilder = ((policy.Policy.PolicyRuleService) policyRule_).toBuilder(); + } + policyRule_ = + input.readMessage(policy.Policy.PolicyRuleService.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((policy.Policy.PolicyRuleService) policyRule_); + policyRule_ = subBuilder.buildPartial(); + } + policyRuleCase_ = 1; + break; + } + case 18: { + policy.Policy.PolicyRuleDevice.Builder subBuilder = null; + if (policyRuleCase_ == 2) { + subBuilder = ((policy.Policy.PolicyRuleDevice) policyRule_).toBuilder(); + } + policyRule_ = + input.readMessage(policy.Policy.PolicyRuleDevice.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((policy.Policy.PolicyRuleDevice) policyRule_); + policyRule_ = subBuilder.buildPartial(); + } + policyRuleCase_ = 2; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return policy.Policy.internal_static_policy_PolicyRule_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return policy.Policy.internal_static_policy_PolicyRule_fieldAccessorTable + .ensureFieldAccessorsInitialized( + policy.Policy.PolicyRule.class, policy.Policy.PolicyRule.Builder.class); + } + + private int policyRuleCase_ = 0; + private java.lang.Object policyRule_; + public enum PolicyRuleCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SERVICE(1), + DEVICE(2), + POLICYRULE_NOT_SET(0); + private final int value; + private PolicyRuleCase(int value) { + this.value = value; + } + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static PolicyRuleCase valueOf(int value) { + return forNumber(value); + } + + public static PolicyRuleCase forNumber(int value) { + switch (value) { + case 1: return SERVICE; + case 2: return DEVICE; + case 0: return POLICYRULE_NOT_SET; + default: return null; + } + } + public int getNumber() { + return this.value; + } + }; + + public PolicyRuleCase + getPolicyRuleCase() { + return PolicyRuleCase.forNumber( + policyRuleCase_); + } + + public static final int SERVICE_FIELD_NUMBER = 1; + /** + * .policy.PolicyRuleService service = 1; + * @return Whether the service field is set. + */ + @java.lang.Override + public boolean hasService() { + return policyRuleCase_ == 1; + } + /** + * .policy.PolicyRuleService service = 1; + * @return The service. + */ + @java.lang.Override + public policy.Policy.PolicyRuleService getService() { + if (policyRuleCase_ == 1) { + return (policy.Policy.PolicyRuleService) policyRule_; + } + return policy.Policy.PolicyRuleService.getDefaultInstance(); + } + /** + * .policy.PolicyRuleService service = 1; + */ + @java.lang.Override + public policy.Policy.PolicyRuleServiceOrBuilder getServiceOrBuilder() { + if (policyRuleCase_ == 1) { + return (policy.Policy.PolicyRuleService) policyRule_; + } + return policy.Policy.PolicyRuleService.getDefaultInstance(); + } + + public static final int DEVICE_FIELD_NUMBER = 2; + /** + * .policy.PolicyRuleDevice device = 2; + * @return Whether the device field is set. + */ + @java.lang.Override + public boolean hasDevice() { + return policyRuleCase_ == 2; + } + /** + * .policy.PolicyRuleDevice device = 2; + * @return The device. + */ + @java.lang.Override + public policy.Policy.PolicyRuleDevice getDevice() { + if (policyRuleCase_ == 2) { + return (policy.Policy.PolicyRuleDevice) policyRule_; + } + return policy.Policy.PolicyRuleDevice.getDefaultInstance(); + } + /** + * .policy.PolicyRuleDevice device = 2; + */ + @java.lang.Override + public policy.Policy.PolicyRuleDeviceOrBuilder getDeviceOrBuilder() { + if (policyRuleCase_ == 2) { + return (policy.Policy.PolicyRuleDevice) policyRule_; + } + return policy.Policy.PolicyRuleDevice.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (policyRuleCase_ == 1) { + output.writeMessage(1, (policy.Policy.PolicyRuleService) policyRule_); + } + if (policyRuleCase_ == 2) { + output.writeMessage(2, (policy.Policy.PolicyRuleDevice) policyRule_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (policyRuleCase_ == 1) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, (policy.Policy.PolicyRuleService) policyRule_); + } + if (policyRuleCase_ == 2) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, (policy.Policy.PolicyRuleDevice) policyRule_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof policy.Policy.PolicyRule)) { + return super.equals(obj); + } + policy.Policy.PolicyRule other = (policy.Policy.PolicyRule) obj; + + if (!getPolicyRuleCase().equals(other.getPolicyRuleCase())) return false; + switch (policyRuleCase_) { + case 1: + if (!getService() + .equals(other.getService())) return false; + break; + case 2: + if (!getDevice() + .equals(other.getDevice())) return false; + break; + case 0: + default: + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + switch (policyRuleCase_) { + case 1: + hash = (37 * hash) + SERVICE_FIELD_NUMBER; + hash = (53 * hash) + getService().hashCode(); + break; + case 2: + hash = (37 * hash) + DEVICE_FIELD_NUMBER; + hash = (53 * hash) + getDevice().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static policy.Policy.PolicyRule parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static policy.Policy.PolicyRule parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static policy.Policy.PolicyRule parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static policy.Policy.PolicyRule parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static policy.Policy.PolicyRule parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static policy.Policy.PolicyRule parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static policy.Policy.PolicyRule parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static policy.Policy.PolicyRule parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static policy.Policy.PolicyRule parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static policy.Policy.PolicyRule parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static policy.Policy.PolicyRule parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static policy.Policy.PolicyRule parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(policy.Policy.PolicyRule prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Wrapper policy rule object
+     * 
+ * + * Protobuf type {@code policy.PolicyRule} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:policy.PolicyRule) + policy.Policy.PolicyRuleOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return policy.Policy.internal_static_policy_PolicyRule_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return policy.Policy.internal_static_policy_PolicyRule_fieldAccessorTable + .ensureFieldAccessorsInitialized( + policy.Policy.PolicyRule.class, policy.Policy.PolicyRule.Builder.class); + } + + // Construct using policy.Policy.PolicyRule.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + policyRuleCase_ = 0; + policyRule_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return policy.Policy.internal_static_policy_PolicyRule_descriptor; + } + + @java.lang.Override + public policy.Policy.PolicyRule getDefaultInstanceForType() { + return policy.Policy.PolicyRule.getDefaultInstance(); + } + + @java.lang.Override + public policy.Policy.PolicyRule build() { + policy.Policy.PolicyRule result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public policy.Policy.PolicyRule buildPartial() { + policy.Policy.PolicyRule result = new policy.Policy.PolicyRule(this); + if (policyRuleCase_ == 1) { + if (serviceBuilder_ == null) { + result.policyRule_ = policyRule_; + } else { + result.policyRule_ = serviceBuilder_.build(); + } + } + if (policyRuleCase_ == 2) { + if (deviceBuilder_ == null) { + result.policyRule_ = policyRule_; + } else { + result.policyRule_ = deviceBuilder_.build(); + } + } + result.policyRuleCase_ = policyRuleCase_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof policy.Policy.PolicyRule) { + return mergeFrom((policy.Policy.PolicyRule)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(policy.Policy.PolicyRule other) { + if (other == policy.Policy.PolicyRule.getDefaultInstance()) return this; + switch (other.getPolicyRuleCase()) { + case SERVICE: { + mergeService(other.getService()); + break; + } + case DEVICE: { + mergeDevice(other.getDevice()); + break; + } + case POLICYRULE_NOT_SET: { + break; + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + policy.Policy.PolicyRule parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (policy.Policy.PolicyRule) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int policyRuleCase_ = 0; + private java.lang.Object policyRule_; + public PolicyRuleCase + getPolicyRuleCase() { + return PolicyRuleCase.forNumber( + policyRuleCase_); + } + + public Builder clearPolicyRule() { + policyRuleCase_ = 0; + policyRule_ = null; + onChanged(); + return this; + } + + + private com.google.protobuf.SingleFieldBuilderV3< + policy.Policy.PolicyRuleService, policy.Policy.PolicyRuleService.Builder, policy.Policy.PolicyRuleServiceOrBuilder> serviceBuilder_; + /** + * .policy.PolicyRuleService service = 1; + * @return Whether the service field is set. + */ + @java.lang.Override + public boolean hasService() { + return policyRuleCase_ == 1; + } + /** + * .policy.PolicyRuleService service = 1; + * @return The service. + */ + @java.lang.Override + public policy.Policy.PolicyRuleService getService() { + if (serviceBuilder_ == null) { + if (policyRuleCase_ == 1) { + return (policy.Policy.PolicyRuleService) policyRule_; + } + return policy.Policy.PolicyRuleService.getDefaultInstance(); + } else { + if (policyRuleCase_ == 1) { + return serviceBuilder_.getMessage(); + } + return policy.Policy.PolicyRuleService.getDefaultInstance(); + } + } + /** + * .policy.PolicyRuleService service = 1; + */ + public Builder setService(policy.Policy.PolicyRuleService value) { + if (serviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + policyRule_ = value; + onChanged(); + } else { + serviceBuilder_.setMessage(value); + } + policyRuleCase_ = 1; + return this; + } + /** + * .policy.PolicyRuleService service = 1; + */ + public Builder setService( + policy.Policy.PolicyRuleService.Builder builderForValue) { + if (serviceBuilder_ == null) { + policyRule_ = builderForValue.build(); + onChanged(); + } else { + serviceBuilder_.setMessage(builderForValue.build()); + } + policyRuleCase_ = 1; + return this; + } + /** + * .policy.PolicyRuleService service = 1; + */ + public Builder mergeService(policy.Policy.PolicyRuleService value) { + if (serviceBuilder_ == null) { + if (policyRuleCase_ == 1 && + policyRule_ != policy.Policy.PolicyRuleService.getDefaultInstance()) { + policyRule_ = policy.Policy.PolicyRuleService.newBuilder((policy.Policy.PolicyRuleService) policyRule_) + .mergeFrom(value).buildPartial(); + } else { + policyRule_ = value; + } + onChanged(); + } else { + if (policyRuleCase_ == 1) { + serviceBuilder_.mergeFrom(value); + } + serviceBuilder_.setMessage(value); + } + policyRuleCase_ = 1; + return this; + } + /** + * .policy.PolicyRuleService service = 1; + */ + public Builder clearService() { + if (serviceBuilder_ == null) { + if (policyRuleCase_ == 1) { + policyRuleCase_ = 0; + policyRule_ = null; + onChanged(); + } + } else { + if (policyRuleCase_ == 1) { + policyRuleCase_ = 0; + policyRule_ = null; + } + serviceBuilder_.clear(); + } + return this; + } + /** + * .policy.PolicyRuleService service = 1; + */ + public policy.Policy.PolicyRuleService.Builder getServiceBuilder() { + return getServiceFieldBuilder().getBuilder(); + } + /** + * .policy.PolicyRuleService service = 1; + */ + @java.lang.Override + public policy.Policy.PolicyRuleServiceOrBuilder getServiceOrBuilder() { + if ((policyRuleCase_ == 1) && (serviceBuilder_ != null)) { + return serviceBuilder_.getMessageOrBuilder(); + } else { + if (policyRuleCase_ == 1) { + return (policy.Policy.PolicyRuleService) policyRule_; + } + return policy.Policy.PolicyRuleService.getDefaultInstance(); + } + } + /** + * .policy.PolicyRuleService service = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + policy.Policy.PolicyRuleService, policy.Policy.PolicyRuleService.Builder, policy.Policy.PolicyRuleServiceOrBuilder> + getServiceFieldBuilder() { + if (serviceBuilder_ == null) { + if (!(policyRuleCase_ == 1)) { + policyRule_ = policy.Policy.PolicyRuleService.getDefaultInstance(); + } + serviceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + policy.Policy.PolicyRuleService, policy.Policy.PolicyRuleService.Builder, policy.Policy.PolicyRuleServiceOrBuilder>( + (policy.Policy.PolicyRuleService) policyRule_, + getParentForChildren(), + isClean()); + policyRule_ = null; + } + policyRuleCase_ = 1; + onChanged();; + return serviceBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + policy.Policy.PolicyRuleDevice, policy.Policy.PolicyRuleDevice.Builder, policy.Policy.PolicyRuleDeviceOrBuilder> deviceBuilder_; + /** + * .policy.PolicyRuleDevice device = 2; + * @return Whether the device field is set. + */ + @java.lang.Override + public boolean hasDevice() { + return policyRuleCase_ == 2; + } + /** + * .policy.PolicyRuleDevice device = 2; + * @return The device. + */ + @java.lang.Override + public policy.Policy.PolicyRuleDevice getDevice() { + if (deviceBuilder_ == null) { + if (policyRuleCase_ == 2) { + return (policy.Policy.PolicyRuleDevice) policyRule_; + } + return policy.Policy.PolicyRuleDevice.getDefaultInstance(); + } else { + if (policyRuleCase_ == 2) { + return deviceBuilder_.getMessage(); + } + return policy.Policy.PolicyRuleDevice.getDefaultInstance(); + } + } + /** + * .policy.PolicyRuleDevice device = 2; + */ + public Builder setDevice(policy.Policy.PolicyRuleDevice value) { + if (deviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + policyRule_ = value; + onChanged(); + } else { + deviceBuilder_.setMessage(value); + } + policyRuleCase_ = 2; + return this; + } + /** + * .policy.PolicyRuleDevice device = 2; + */ + public Builder setDevice( + policy.Policy.PolicyRuleDevice.Builder builderForValue) { + if (deviceBuilder_ == null) { + policyRule_ = builderForValue.build(); + onChanged(); + } else { + deviceBuilder_.setMessage(builderForValue.build()); + } + policyRuleCase_ = 2; + return this; + } + /** + * .policy.PolicyRuleDevice device = 2; + */ + public Builder mergeDevice(policy.Policy.PolicyRuleDevice value) { + if (deviceBuilder_ == null) { + if (policyRuleCase_ == 2 && + policyRule_ != policy.Policy.PolicyRuleDevice.getDefaultInstance()) { + policyRule_ = policy.Policy.PolicyRuleDevice.newBuilder((policy.Policy.PolicyRuleDevice) policyRule_) + .mergeFrom(value).buildPartial(); + } else { + policyRule_ = value; + } + onChanged(); + } else { + if (policyRuleCase_ == 2) { + deviceBuilder_.mergeFrom(value); + } + deviceBuilder_.setMessage(value); + } + policyRuleCase_ = 2; + return this; + } + /** + * .policy.PolicyRuleDevice device = 2; + */ + public Builder clearDevice() { + if (deviceBuilder_ == null) { + if (policyRuleCase_ == 2) { + policyRuleCase_ = 0; + policyRule_ = null; + onChanged(); + } + } else { + if (policyRuleCase_ == 2) { + policyRuleCase_ = 0; + policyRule_ = null; + } + deviceBuilder_.clear(); + } + return this; + } + /** + * .policy.PolicyRuleDevice device = 2; + */ + public policy.Policy.PolicyRuleDevice.Builder getDeviceBuilder() { + return getDeviceFieldBuilder().getBuilder(); + } + /** + * .policy.PolicyRuleDevice device = 2; + */ + @java.lang.Override + public policy.Policy.PolicyRuleDeviceOrBuilder getDeviceOrBuilder() { + if ((policyRuleCase_ == 2) && (deviceBuilder_ != null)) { + return deviceBuilder_.getMessageOrBuilder(); + } else { + if (policyRuleCase_ == 2) { + return (policy.Policy.PolicyRuleDevice) policyRule_; + } + return policy.Policy.PolicyRuleDevice.getDefaultInstance(); + } + } + /** + * .policy.PolicyRuleDevice device = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + policy.Policy.PolicyRuleDevice, policy.Policy.PolicyRuleDevice.Builder, policy.Policy.PolicyRuleDeviceOrBuilder> + getDeviceFieldBuilder() { + if (deviceBuilder_ == null) { + if (!(policyRuleCase_ == 2)) { + policyRule_ = policy.Policy.PolicyRuleDevice.getDefaultInstance(); + } + deviceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + policy.Policy.PolicyRuleDevice, policy.Policy.PolicyRuleDevice.Builder, policy.Policy.PolicyRuleDeviceOrBuilder>( + (policy.Policy.PolicyRuleDevice) policyRule_, + getParentForChildren(), + isClean()); + policyRule_ = null; + } + policyRuleCase_ = 2; + onChanged();; + return deviceBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:policy.PolicyRule) + } + + // @@protoc_insertion_point(class_scope:policy.PolicyRule) + private static final policy.Policy.PolicyRule DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new policy.Policy.PolicyRule(); + } + + public static policy.Policy.PolicyRule getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PolicyRule parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new PolicyRule(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public policy.Policy.PolicyRule getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + public interface PolicyRuleIdListOrBuilder extends // @@protoc_insertion_point(interface_extends:policy.PolicyRuleIdList) com.google.protobuf.MessageOrBuilder { @@ -9507,6 +10462,11 @@ public final class Policy { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_policy_PolicyRuleDevice_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_policy_PolicyRule_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_policy_PolicyRule_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_policy_PolicyRuleIdList_descriptor; private static final @@ -9555,36 +10515,39 @@ public final class Policy { "\003(\0132\021.context.DeviceId\"k\n\020PolicyRuleDevi" + "ce\0220\n\017policyRuleBasic\030\001 \001(\0132\027.policy.Pol" + "icyRuleBasic\022%\n\ndeviceList\030\002 \003(\0132\021.conte" + - "xt.DeviceId\"B\n\020PolicyRuleIdList\022.\n\020polic" + - "yRuleIdList\030\001 \003(\0132\024.policy.PolicyRuleId\"" + - "Q\n\025PolicyRuleServiceList\0228\n\025policyRuleSe" + - "rviceList\030\001 \003(\0132\031.policy.PolicyRuleServi" + - "ce\"N\n\024PolicyRuleDeviceList\0226\n\024policyRule" + - "DeviceList\030\001 \003(\0132\030.policy.PolicyRuleDevi" + - "ce\";\n\016PolicyRuleList\022)\n\013policyRules\030\001 \003(" + - "\0132\024.policy.PolicyRuleId*\377\001\n\023PolicyRuleSt" + - "ateEnum\022\024\n\020POLICY_UNDEFINED\020\000\022\021\n\rPOLICY_" + - "FAILED\020\001\022\023\n\017POLICY_INSERTED\020\002\022\024\n\020POLICY_" + - "VALIDATED\020\003\022\026\n\022POLICY_PROVISIONED\020\004\022\021\n\rP" + - "OLICY_ACTIVE\020\005\022\023\n\017POLICY_ENFORCED\020\006\022\026\n\022P" + - "OLICY_INEFFECTIVE\020\007\022\024\n\020POLICY_EFFECTIVE\020" + - "\010\022\022\n\016POLICY_UPDATED\020\t\022\022\n\016POLICY_REMOVED\020" + - "\n2\323\004\n\rPolicyService\022H\n\020PolicyAddService\022" + - "\031.policy.PolicyRuleService\032\027.policy.Poli" + - "cyRuleState\"\000\022F\n\017PolicyAddDevice\022\030.polic" + - "y.PolicyRuleDevice\032\027.policy.PolicyRuleSt" + - "ate\"\000\022K\n\023PolicyUpdateService\022\031.policy.Po" + - "licyRuleService\032\027.policy.PolicyRuleState" + - "\"\000\022I\n\022PolicyUpdateDevice\022\030.policy.Policy" + - "RuleDevice\032\027.policy.PolicyRuleState\"\000\022?\n" + - "\014PolicyDelete\022\024.policy.PolicyRuleId\032\027.po" + - "licy.PolicyRuleState\"\000\022E\n\020GetPolicyServi" + - "ce\022\024.policy.PolicyRuleId\032\031.policy.Policy" + - "RuleService\"\000\022C\n\017GetPolicyDevice\022\024.polic" + - "y.PolicyRuleId\032\030.policy.PolicyRuleDevice" + - "\"\000\022K\n\024GetPolicyByServiceId\022\022.context.Ser" + - "viceId\032\035.policy.PolicyRuleServiceList\"\000b" + - "\006proto3" + "xt.DeviceId\"u\n\nPolicyRule\022,\n\007service\030\001 \001" + + "(\0132\031.policy.PolicyRuleServiceH\000\022*\n\006devic" + + "e\030\002 \001(\0132\030.policy.PolicyRuleDeviceH\000B\r\n\013p" + + "olicy_rule\"B\n\020PolicyRuleIdList\022.\n\020policy" + + "RuleIdList\030\001 \003(\0132\024.policy.PolicyRuleId\"Q" + + "\n\025PolicyRuleServiceList\0228\n\025policyRuleSer" + + "viceList\030\001 \003(\0132\031.policy.PolicyRuleServic" + + "e\"N\n\024PolicyRuleDeviceList\0226\n\024policyRuleD" + + "eviceList\030\001 \003(\0132\030.policy.PolicyRuleDevic" + + "e\";\n\016PolicyRuleList\022)\n\013policyRules\030\001 \003(\013" + + "2\024.policy.PolicyRuleId*\377\001\n\023PolicyRuleSta" + + "teEnum\022\024\n\020POLICY_UNDEFINED\020\000\022\021\n\rPOLICY_F" + + "AILED\020\001\022\023\n\017POLICY_INSERTED\020\002\022\024\n\020POLICY_V" + + "ALIDATED\020\003\022\026\n\022POLICY_PROVISIONED\020\004\022\021\n\rPO" + + "LICY_ACTIVE\020\005\022\023\n\017POLICY_ENFORCED\020\006\022\026\n\022PO" + + "LICY_INEFFECTIVE\020\007\022\024\n\020POLICY_EFFECTIVE\020\010" + + "\022\022\n\016POLICY_UPDATED\020\t\022\022\n\016POLICY_REMOVED\020\n" + + "2\323\004\n\rPolicyService\022H\n\020PolicyAddService\022\031" + + ".policy.PolicyRuleService\032\027.policy.Polic" + + "yRuleState\"\000\022F\n\017PolicyAddDevice\022\030.policy" + + ".PolicyRuleDevice\032\027.policy.PolicyRuleSta" + + "te\"\000\022K\n\023PolicyUpdateService\022\031.policy.Pol" + + "icyRuleService\032\027.policy.PolicyRuleState\"" + + "\000\022I\n\022PolicyUpdateDevice\022\030.policy.PolicyR" + + "uleDevice\032\027.policy.PolicyRuleState\"\000\022?\n\014" + + "PolicyDelete\022\024.policy.PolicyRuleId\032\027.pol" + + "icy.PolicyRuleState\"\000\022E\n\020GetPolicyServic" + + "e\022\024.policy.PolicyRuleId\032\031.policy.PolicyR" + + "uleService\"\000\022C\n\017GetPolicyDevice\022\024.policy" + + ".PolicyRuleId\032\030.policy.PolicyRuleDevice\"" + + "\000\022K\n\024GetPolicyByServiceId\022\022.context.Serv" + + "iceId\032\035.policy.PolicyRuleServiceList\"\000b\006" + + "proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -9623,26 +10586,32 @@ public final class Policy { com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_policy_PolicyRuleDevice_descriptor, new java.lang.String[] { "PolicyRuleBasic", "DeviceList", }); - internal_static_policy_PolicyRuleIdList_descriptor = + internal_static_policy_PolicyRule_descriptor = getDescriptor().getMessageTypes().get(5); + internal_static_policy_PolicyRule_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_policy_PolicyRule_descriptor, + new java.lang.String[] { "Service", "Device", "PolicyRule", }); + internal_static_policy_PolicyRuleIdList_descriptor = + getDescriptor().getMessageTypes().get(6); internal_static_policy_PolicyRuleIdList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_policy_PolicyRuleIdList_descriptor, new java.lang.String[] { "PolicyRuleIdList", }); internal_static_policy_PolicyRuleServiceList_descriptor = - getDescriptor().getMessageTypes().get(6); + getDescriptor().getMessageTypes().get(7); internal_static_policy_PolicyRuleServiceList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_policy_PolicyRuleServiceList_descriptor, new java.lang.String[] { "PolicyRuleServiceList", }); internal_static_policy_PolicyRuleDeviceList_descriptor = - getDescriptor().getMessageTypes().get(7); + getDescriptor().getMessageTypes().get(8); internal_static_policy_PolicyRuleDeviceList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_policy_PolicyRuleDeviceList_descriptor, new java.lang.String[] { "PolicyRuleDeviceList", }); internal_static_policy_PolicyRuleList_descriptor = - getDescriptor().getMessageTypes().get(8); + getDescriptor().getMessageTypes().get(9); internal_static_policy_PolicyRuleList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_policy_PolicyRuleList_descriptor, -- GitLab From 71c03b4d2168eef04ac39f227817f2a7362c9602 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Wed, 5 Oct 2022 18:48:35 +0300 Subject: [PATCH 32/34] Handle exceptions in PolicyRuleService and PolicyRuleDevice constructors --- .../eu/teraflow/policy/PolicyServiceImpl.java | 8 +- .../policy/model/PolicyRuleBasic.java | 59 +++----- .../policy/model/PolicyRuleDevice.java | 31 +++- .../policy/model/PolicyRuleService.java | 41 ++++-- .../PolicyRuleDeviceValidationTest.java | 130 ++++++++--------- .../PolicyRuleServiceValidationTest.java | 135 +++++++++--------- .../eu/teraflow/policy/PolicyServiceTest.java | 29 +++- 7 files changed, 241 insertions(+), 192 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index 6b165aaaa..abf1544eb 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -148,7 +148,7 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof("Received %s", policyRuleService); final var policyRuleBasic = policyRuleService.getPolicyRuleBasic(); - if (!policyRuleBasic.areArgumentsValid()) { + if (!policyRuleBasic.areArgumentsValid() || !policyRuleService.areArgumentsValid()) { setPolicyRuleServiceToContext( policyRuleService, new PolicyRuleState( @@ -174,7 +174,7 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof("Received %s", policyRuleService); final var policyRuleBasic = policyRuleService.getPolicyRuleBasic(); - if (!policyRuleBasic.areArgumentsValid()) { + if (!policyRuleBasic.areArgumentsValid() || !policyRuleService.areArgumentsValid()) { setPolicyRuleServiceToContext( policyRuleService, new PolicyRuleState( @@ -200,7 +200,7 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof("Received %s", policyRuleDevice); final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); - if (!policyRuleBasic.areArgumentsValid()) { + if (!policyRuleBasic.areArgumentsValid() || !policyRuleDevice.areArgumentsValid()) { setPolicyRuleDeviceToContext( policyRuleDevice, new PolicyRuleState( @@ -225,7 +225,7 @@ public class PolicyServiceImpl implements PolicyService { LOGGER.infof("Received %s", policyRuleDevice); final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); - if (!policyRuleBasic.areArgumentsValid()) { + if (!policyRuleBasic.areArgumentsValid() || !policyRuleDevice.areArgumentsValid()) { setPolicyRuleDeviceToContext( policyRuleDevice, new PolicyRuleState( diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java index 2fc1c5c26..ff0273ebd 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleBasic.java @@ -24,14 +24,14 @@ import java.util.List; public class PolicyRuleBasic { - private final String policyRuleId; + private String policyRuleId; private PolicyRuleState policyRuleState; - private final int priority; - private final List policyRuleConditions; - private final BooleanOperator booleanOperator; - private final List policyRuleActions; - private final Boolean isValid; - private final String exceptionMessage; + private int priority; + private List policyRuleConditions; + private BooleanOperator booleanOperator; + private List policyRuleActions; + private Boolean isValid; + private String exceptionMessage; public PolicyRuleBasic( String policyRuleId, @@ -41,50 +41,31 @@ public class PolicyRuleBasic { BooleanOperator booleanOperator, List policyRuleActions) { - String policyRuleId_val; - int priority_val; - List policyRuleConditions_val; - BooleanOperator booleanOperator_val; - List policyRuleActions_val; - Boolean isValid_val; - String exceptionMessage_val = ""; - try { - // checkNotNull(policyRuleId, "Policy rule ID must not be null."); checkArgument(!policyRuleId.isBlank(), "Policy rule ID must not be empty."); - policyRuleId_val = policyRuleId; + this.policyRuleId = policyRuleId; this.policyRuleState = policyRuleState; checkArgument(priority >= 0, "Priority value must be greater or equal than zero."); - priority_val = priority; - // checkNotNull(policyRuleConditions, "Policy Rule conditions cannot be null."); + this.priority = priority; checkArgument(!policyRuleConditions.isEmpty(), "Policy Rule conditions cannot be empty."); - policyRuleConditions_val = policyRuleConditions; + this.policyRuleConditions = policyRuleConditions; checkArgument( booleanOperator != BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED, "Boolean operator cannot be undefined"); - booleanOperator_val = booleanOperator; - // checkNotNull(policyRuleActions, "Policy Rule actions cannot be null."); + this.booleanOperator = booleanOperator; checkArgument(!policyRuleActions.isEmpty(), "Policy Rule actions cannot be empty."); - policyRuleActions_val = policyRuleActions; - isValid_val = true; + this.policyRuleActions = policyRuleActions; + this.isValid = true; } catch (Exception e) { - policyRuleId_val = ""; - priority_val = 0; - policyRuleConditions_val = new ArrayList(); - booleanOperator_val = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED; - policyRuleActions_val = new ArrayList(); - isValid_val = false; - exceptionMessage_val = e.toString(); + this.policyRuleId = ""; + this.priority = 0; + this.policyRuleConditions = new ArrayList(); + this.booleanOperator = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED; + this.policyRuleActions = new ArrayList(); + this.isValid = false; + this.exceptionMessage = e.toString(); } - - this.isValid = isValid_val; - this.policyRuleId = policyRuleId_val; - this.priority = priority_val; - this.policyRuleConditions = policyRuleConditions_val; - this.booleanOperator = booleanOperator_val; - this.policyRuleActions = policyRuleActions_val; - this.exceptionMessage = exceptionMessage_val; } public boolean areArgumentsValid() { diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java index 8a4e3ac7f..fdc32549b 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleDevice.java @@ -17,22 +17,39 @@ package eu.teraflow.policy.model; import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; import eu.teraflow.policy.common.Util; +import java.util.ArrayList; import java.util.List; public class PolicyRuleDevice { private PolicyRuleBasic policyRuleBasic; - private final List deviceIds; + private List deviceIds; + private Boolean isValid; + private String exceptionMessage; public PolicyRuleDevice(PolicyRuleBasic policyRuleBasic, List deviceIds) { - checkNotNull(policyRuleBasic, "PolicyRuleBasic must not be null."); - this.policyRuleBasic = policyRuleBasic; - checkNotNull(deviceIds, "Device Ids must not be null."); - checkArgument(!deviceIds.isEmpty(), "Device Ids must not be empty."); - this.deviceIds = deviceIds; + + try { + this.policyRuleBasic = policyRuleBasic; + checkArgument(!deviceIds.isEmpty(), "Device Ids must not be empty."); + this.deviceIds = deviceIds; + this.isValid = true; + } catch (Exception e) { + this.policyRuleBasic = policyRuleBasic; + this.deviceIds = new ArrayList(); + this.isValid = false; + this.exceptionMessage = e.toString(); + } + } + + public boolean areArgumentsValid() { + return isValid; + } + + public String getExeceptionMessage() { + return exceptionMessage; } public PolicyRuleBasic getPolicyRuleBasic() { diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java index 51ebc2ede..71b7fc5e5 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleService.java @@ -16,26 +16,49 @@ package eu.teraflow.policy.model; -import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkArgument; import eu.teraflow.policy.common.Util; import eu.teraflow.policy.context.model.ServiceId; +import java.util.ArrayList; import java.util.List; public class PolicyRuleService { private PolicyRuleBasic policyRuleBasic; - private final ServiceId serviceId; - private final List deviceIds; + private ServiceId serviceId; + private List deviceIds; + private Boolean isValid; + private String exceptionMessage; public PolicyRuleService( PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List 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; + + try { + this.policyRuleBasic = policyRuleBasic; + checkArgument( + !serviceId.getContextId().isBlank(), "Context Id of Service Id must not be empty."); + checkArgument(!serviceId.getId().isBlank(), "Service Id must not be empty."); + this.serviceId = serviceId; + checkArgument(!deviceIds.isEmpty(), "Device Ids must not be empty."); + this.deviceIds = deviceIds; + this.isValid = true; + this.exceptionMessage = ""; + } catch (Exception e) { + this.policyRuleBasic = policyRuleBasic; + this.serviceId = new ServiceId("", ""); + this.deviceIds = new ArrayList(); + this.isValid = false; + this.exceptionMessage = e.toString(); + } + } + + public boolean areArgumentsValid() { + return isValid; + } + + public String getExeceptionMessage() { + return exceptionMessage; } public PolicyRuleBasic getPolicyRuleBasic() { diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java index 191383045..464f2acf9 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java @@ -17,7 +17,6 @@ package eu.teraflow.policy; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; @@ -31,7 +30,6 @@ 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 java.util.Collections; import java.util.List; import java.util.UUID; import org.junit.jupiter.api.Test; @@ -80,69 +78,71 @@ class PolicyRuleDeviceValidationTest { return List.of("deviceId1", "deviceId2"); } - @Test - void shouldThrowNullPointerExceptionGivenNullPolicyRuleBasic() { - final var deviceIds = createDeviceIds(); - - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy(() -> createPolicyRuleDevice(null, deviceIds)); - } - - @Test - void shouldThrowNullPointerExceptionGivenNullDeviceIds() { - 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(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); - - final var policyRuleBasic = - createPolicyRuleBasic( - "policyRuleId", - 3, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, - policyRuleConditions, - policyRuleActions); - - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, null)); - } - - @Test - void shouldThrowIllegalArgumentExceptionGivenEmptyDeviceIds() { - 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_CONFIGRULE, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); - - final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); - - final var policyRuleBasic = - createPolicyRuleBasic( - "policyRuleId1", - 213, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, - policyRuleConditions, - policyRuleActions); - - final var deviceIds = Collections.emptyList(); - - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, deviceIds)); - } + // @Test + // void shouldThrowNullPointerExceptionGivenNullPolicyRuleBasic() { + // final var deviceIds = createDeviceIds(); + + // assertThatExceptionOfType(NullPointerException.class) + // .isThrownBy(() -> createPolicyRuleDevice(null, deviceIds)); + // } + + // @Test + // void shouldThrowNullPointerExceptionGivenNullDeviceIds() { + // 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(PolicyRuleStateEnum.POLICY_EFFECTIVE, + // "1"); + + // final var policyRuleBasic = + // createPolicyRuleBasic( + // "policyRuleId", + // 3, + // policyRuleState, + // BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR, + // policyRuleConditions, + // policyRuleActions); + + // assertThatExceptionOfType(NullPointerException.class) + // .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, null)); + // } + + // @Test + // void shouldThrowIllegalArgumentExceptionGivenEmptyDeviceIds() { + // 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_CONFIGRULE, + // List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + + // final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, + // "1"); + + // final var policyRuleBasic = + // createPolicyRuleBasic( + // "policyRuleId1", + // 213, + // policyRuleState, + // BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, + // policyRuleConditions, + // policyRuleActions); + + // final var deviceIds = Collections.emptyList(); + + // assertThatExceptionOfType(IllegalArgumentException.class) + // .isThrownBy(() -> createPolicyRuleDevice(policyRuleBasic, deviceIds)); + // } @Test void shouldCreatePolicyRuleDeviceObject() { 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 ffa14b2d0..e220fe95d 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java @@ -17,7 +17,6 @@ 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; @@ -85,72 +84,74 @@ class PolicyRuleServiceValidationTest { 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(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); - - 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(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); - - final var policyRuleBasic = - createPolicyRuleBasic( - "policyRuleId2", - 2, - policyRuleState, - BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND, - policyRuleConditions, - policyRuleActions); - - assertThatExceptionOfType(NullPointerException.class) - .isThrownBy(() -> createPolicyRuleService(policyRuleBasic, serviceId, null)); - } + // @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(PolicyRuleStateEnum.POLICY_EFFECTIVE, + // "1"); + + // 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(PolicyRuleStateEnum.POLICY_EFFECTIVE, + // "1"); + + // 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() { diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java index d507ce33a..812e72bee 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java @@ -57,6 +57,20 @@ class PolicyServiceTest { this.serializer = serializer; } + private context.ContextOuterClass.ServiceId createContextServiceId() { + final var contextIdUuid = serializer.serializeUuid("571eabc1-0f59-48da-b608-c45876c3fa8a"); + + final var serviceIdUuid = serializer.serializeUuid("123456789"); + + context.ContextOuterClass.ContextId contextId = + context.ContextOuterClass.ContextId.newBuilder().setContextUuid(contextIdUuid).build(); + + return context.ContextOuterClass.ServiceId.newBuilder() + .setContextId(contextId) + .setServiceUuid(serviceIdUuid) + .build(); + } + private PolicyRuleBasic createPolicyRuleBasic() { final var expectedPolicyRuleIdUuid = serializer.serializeUuid("571eabc1-0f59-48da-b608-c45876c3fa8a"); @@ -130,8 +144,21 @@ class PolicyServiceTest { final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState(); + final var serviceId = createContextServiceId(); + + final var expectedDeviceIdUuid1 = + serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257"); + + final var expectedDeviceId1 = + ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid1).build(); + + final var deviceIds = List.of(expectedDeviceId1); final var policyRuleService = - Policy.PolicyRuleService.newBuilder().setPolicyRuleBasic(policyRuleBasic).build(); + Policy.PolicyRuleService.newBuilder() + .setPolicyRuleBasic(policyRuleBasic) + .setServiceId(serviceId) + .addAllDeviceList(deviceIds) + .build(); client .policyAddService(policyRuleService) -- GitLab From ea8da107a03c7e504b4a4b931b57b20abfdabac2 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Thu, 6 Oct 2022 15:49:31 +0300 Subject: [PATCH 33/34] Add PolicyRuleActionConfig type --- proto/policy_action.proto | 13 +- .../eu/teraflow/policy/PolicyServiceImpl.java | 75 +- .../java/eu/teraflow/policy/Serializer.java | 36 +- .../policy/model/PolicyRuleAction.java | 16 +- .../policy/model/PolicyRuleActionConfig.java | 27 + .../policy/PolicyRuleBasicValidationTest.java | 35 +- .../PolicyRuleDeviceValidationTest.java | 7 +- .../PolicyRuleServiceValidationTest.java | 11 +- .../eu/teraflow/policy/PolicyServiceTest.java | 14 +- .../eu/teraflow/policy/SerializerTest.java | 21 +- .../grpc/policy/PolicyAction.java | 1245 ++++++++++++++--- 11 files changed, 1251 insertions(+), 249 deletions(-) create mode 100644 src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleActionConfig.java diff --git a/proto/policy_action.proto b/proto/policy_action.proto index 374b59751..8f681adf3 100644 --- a/proto/policy_action.proto +++ b/proto/policy_action.proto @@ -18,7 +18,7 @@ package policy; // Action message PolicyRuleAction { PolicyRuleActionEnum action = 1; - repeated string parameters = 2; + repeated PolicyRuleActionConfig action_config = 2; } enum PolicyRuleActionEnum { @@ -27,3 +27,14 @@ enum PolicyRuleActionEnum { POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE = 2; POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3; } + +// Action configuration +message PolicyRuleActionConfig { + string action_key = 1; + string action_value = 2; +} + +// message PolicyRuleAction { +// PolicyRuleActionEnum action = 1; +// repeated string parameters = 2; +// } \ No newline at end of file diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index abf1544eb..96707cf7a 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -30,6 +30,7 @@ import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; import eu.teraflow.policy.model.PolicyRule; import eu.teraflow.policy.model.PolicyRuleAction; +import eu.teraflow.policy.model.PolicyRuleActionConfig; import eu.teraflow.policy.model.PolicyRuleActionEnum; import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; @@ -75,22 +76,22 @@ public class PolicyServiceImpl implements PolicyService { private static final PolicyRuleState INSERTED_POLICYRULE_STATE = new PolicyRuleState( - PolicyRuleStateEnum.POLICY_INSERTED, "Successfully set to INSERTED STATE"); + PolicyRuleStateEnum.POLICY_INSERTED, "Successfully entered to INSERTED state"); private static final PolicyRuleState VALIDATED_POLICYRULE_STATE = new PolicyRuleState( - PolicyRuleStateEnum.POLICY_VALIDATED, "Successfully transitioned to VALIDATED STATE"); + PolicyRuleStateEnum.POLICY_VALIDATED, "Successfully transitioned to VALIDATED state"); private static final PolicyRuleState PROVISIONED_POLICYRULE_STATE = new PolicyRuleState( PolicyRuleStateEnum.POLICY_PROVISIONED, - "Successfully transitioned from VALIDATED to PROVISIONED STATE"); + "Successfully transitioned from VALIDATED to PROVISIONED state"); private static final PolicyRuleState ACTIVE_POLICYRULE_STATE = new PolicyRuleState( PolicyRuleStateEnum.POLICY_ACTIVE, - "Successfully transitioned from PROVISIONED to ACTIVE STATE"); + "Successfully transitioned from PROVISIONED to ACTIVE state"); private static final PolicyRuleState ENFORCED_POLICYRULE_STATE = new PolicyRuleState( PolicyRuleStateEnum.POLICY_ENFORCED, - "Successfully transitioned from ACTIVE to ENFORCED STATE"); + "Successfully transitioned from ACTIVE to ENFORCED state"); private static final PolicyRuleState INEFFECTIVE_POLICYRULE_STATE = new PolicyRuleState( PolicyRuleStateEnum.POLICY_INEFFECTIVE, @@ -100,9 +101,11 @@ public class PolicyServiceImpl implements PolicyService { PolicyRuleStateEnum.POLICY_EFFECTIVE, "Successfully transitioned from ENFORCED to EFFECTIVE state"); private static final PolicyRuleState UPDATED_POLICYRULE_STATE = - new PolicyRuleState(PolicyRuleStateEnum.POLICY_UPDATED, "Successfully set to UPDATED STATE"); + new PolicyRuleState( + PolicyRuleStateEnum.POLICY_UPDATED, "Successfully entered to UPDATED state"); private static final PolicyRuleState REMOVED_POLICYRULE_STATE = - new PolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED, "Successfully set to REMOVED STATE"); + new PolicyRuleState( + PolicyRuleStateEnum.POLICY_REMOVED, "Successfully entered to REMOVED state"); private final ContextService contextService; private final MonitoringService monitoringService; @@ -352,7 +355,6 @@ public class PolicyServiceImpl implements PolicyService { private void applyActionDevice(String alarmId) { PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId); - PolicyRuleBasic policyRuleBasic = policyRuleDevice.getPolicyRuleBasic(); if (policyRuleActionMap.get(alarmId).getPolicyRuleActionEnum() == PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS) { @@ -362,33 +364,34 @@ public class PolicyServiceImpl implements PolicyService { setPolicyRuleDeviceToContext(policyRuleDevice, ACTIVE_POLICYRULE_STATE); List deviceIds = policyRuleDevice.getDeviceIds(); - List actionParameters = - policyRuleActionMap.get(alarmId).getPolicyRuleActionParameters(); + List actionConfigs = + policyRuleActionMap.get(alarmId).getPolicyRuleActionConfigs(); - if (deviceIds.size() != 3 * actionParameters.size()) { + // TODO: Add FAILED state + if (deviceIds.size() != actionConfigs.size()) { LOGGER.errorf( INVALID_MESSAGE, - "The number of action parameters are not aligned with the number of devices"); + "The number of action parameters is not aligned with the number of devices"); return; } for (var i = 0; i < deviceIds.size(); i++) { - List deviceActions = actionParameters.subList(i, i + 2); - activateDevice(deviceIds.get(i), deviceActions); + // List deviceActions = actionConfigs.subList(i, i + 2); + activateDevice(deviceIds.get(i), actionConfigs.get(i)); } setPolicyRuleDeviceToContext(policyRuleDevice, ENFORCED_POLICYRULE_STATE); } - private void activateDevice(String deviceId, List actionParameters) { + private void activateDevice(String deviceId, PolicyRuleActionConfig actionConfig) { Boolean toBeEnabled; - if (actionParameters.get(0) == "ENABLED") { + if (actionConfig.getActionKey() == "ENABLED") { toBeEnabled = true; - } else if (actionParameters.get(0) == "DISABLED") { + } else if (actionConfig.getActionKey() == "DISABLED") { toBeEnabled = false; } else { - LOGGER.errorf(INVALID_MESSAGE, actionParameters.get(0)); + LOGGER.errorf(INVALID_MESSAGE, actionConfig.getActionKey()); return; } @@ -414,24 +417,13 @@ public class PolicyServiceImpl implements PolicyService { private void addServiceConfigRule( PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) { - List actionParameters = policyRuleAction.getPolicyRuleActionParameters(); + ConfigActionEnum configActionEnum = ConfigActionEnum.SET; + List actionConfigs = policyRuleAction.getPolicyRuleActionConfigs(); List newConfigRules = new ArrayList<>(); - // ConfigeRuleTypeCustom has 3 elements - int fieldsNumber = NUMBER_OF_CONFIGRULE_CUSTOM_FIELDS; - for (int i = 0; i < actionParameters.size() - fieldsNumber; i += fieldsNumber) { - ConfigActionEnum configActionEnum; - if (actionParameters.get(i) == "SET") { - configActionEnum = ConfigActionEnum.SET; - } else if (actionParameters.get(0) == "DELETE") { - configActionEnum = ConfigActionEnum.DELETE; - } else { - configActionEnum = ConfigActionEnum.UNDEFINED; - break; - } - + for (PolicyRuleActionConfig actionConfig : actionConfigs) { ConfigRuleCustom configRuleCustom = - new ConfigRuleCustom(actionParameters.get(i + 1), actionParameters.get(i + 2)); + new ConfigRuleCustom(actionConfig.getActionKey(), actionConfig.getActionValue()); ConfigRuleTypeCustom configRuleType = new ConfigRuleTypeCustom(configRuleCustom); ConfigRule configRule = new ConfigRule(configActionEnum, configRuleType); newConfigRules.add(configRule); @@ -452,14 +444,12 @@ public class PolicyServiceImpl implements PolicyService { private void addServiceConstraint( PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) { - PolicyRuleBasic policyRuleBasic = policyRuleService.getPolicyRuleBasic(); - List actionParameters = policyRuleAction.getPolicyRuleActionParameters(); + List actionConfigs = policyRuleAction.getPolicyRuleActionConfigs(); List constraintList = new ArrayList<>(); - int fieldsNumber = NUMBER_OF_CONSTRAINT_CUSTOM_FIELDS; - for (int i = 0; i < actionParameters.size() - fieldsNumber; i += fieldsNumber) { + for (PolicyRuleActionConfig actionConfig : actionConfigs) { var constraintCustom = - new ConstraintCustom(actionParameters.get(i), actionParameters.get(i + 1)); + new ConstraintCustom(actionConfig.getActionKey(), actionConfig.getActionValue()); var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom); constraintList.add(new Constraint(constraintTypeCustom)); } @@ -497,6 +487,7 @@ public class PolicyServiceImpl implements PolicyService { final var deviceIds = policyRuleDevice.getDeviceIds(); final var policyRuleId = policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId(); + // TODO: The following devices in PolicyRuleDevice with ID are not valid: deviceids final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds); if (!invalidDeviceIds.isEmpty()) { String message = @@ -516,6 +507,7 @@ public class PolicyServiceImpl implements PolicyService { List alarmDescriptorList = parsePolicyRuleCondition(policyRuleDevice.getPolicyRuleBasic()); + // TODO: The following devices in PolicyRuleDevice with ID are not valid: deviceids if (alarmDescriptorList.isEmpty()) { String message = String.format( @@ -543,6 +535,7 @@ public class PolicyServiceImpl implements PolicyService { final var isUpdatedPolicyRuleValid = policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId()); + // TODO: PolicyRule with ID not found. PolicyUpdateService failed. isUpdatedPolicyRuleValid .subscribe() .with( @@ -551,7 +544,7 @@ public class PolicyServiceImpl implements PolicyService { String message = String.format( - "The requested PolicyRuleService to update: %s is not valid", + "The requested PolicyRuleService to be updated: %s is not valid", policyRuleBasic.getPolicyRuleId()); setPolicyRuleServiceToContext( policyRuleService, @@ -569,6 +562,7 @@ public class PolicyServiceImpl implements PolicyService { final var isUpdatedPolicyRuleValid = policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId()); + // TODO: PolicyRule with ID not found. PolicyUpdateDevice failed. isUpdatedPolicyRuleValid .subscribe() .with( @@ -597,6 +591,7 @@ public class PolicyServiceImpl implements PolicyService { if (!isServiceIdValid) { LOGGER.errorf(INVALID_MESSAGE, serviceId); + // TODO: Cannot provision/update a PolicyRule with invalid service ID: %s String message = String.format( "The Service of PolicyRuleService %s is not valid", @@ -612,6 +607,7 @@ public class PolicyServiceImpl implements PolicyService { .await() .indefinitely(); + // TODO: Cannot provision/update a PolicyRule with invalid service ID: %s if (!isServicesDeviceIdsValid) { String message = @@ -634,6 +630,7 @@ public class PolicyServiceImpl implements PolicyService { List alarmDescriptorList = parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic()); + // TODO: Invalid PolicyRuleConditions in PolicyRule with ID: %s if (alarmDescriptorList.isEmpty()) { String message = String.format( 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 760bd5125..8f118a625 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java +++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java @@ -1785,27 +1785,55 @@ public class Serializer { } } + public PolicyAction.PolicyRuleActionConfig serialize( + PolicyRuleActionConfig policyRuleActionConfig) { + final var builder = PolicyAction.PolicyRuleActionConfig.newBuilder(); + + final var actionKey = policyRuleActionConfig.getActionKey(); + final var actionValue = policyRuleActionConfig.getActionValue(); + + builder.setActionKey(actionKey); + builder.setActionValue(actionValue); + + return builder.build(); + } + + public PolicyRuleActionConfig deserialize( + PolicyAction.PolicyRuleActionConfig serializedPolicyRuleActionConfig) { + final var serializedActionKey = serializedPolicyRuleActionConfig.getActionKey(); + final var serializedActionValue = serializedPolicyRuleActionConfig.getActionValue(); + + return new PolicyRuleActionConfig(serializedActionKey, serializedActionValue); + } + public PolicyAction.PolicyRuleAction serialize(PolicyRuleAction policyRuleAction) { final var builder = PolicyAction.PolicyRuleAction.newBuilder(); final var policyRuleActionEnum = policyRuleAction.getPolicyRuleActionEnum(); - final var policyRuleActionParameters = policyRuleAction.getPolicyRuleActionParameters(); + final var policyRuleActionConfigList = policyRuleAction.getPolicyRuleActionConfigs(); final var serializedPolicyRuleActionEnum = serialize(policyRuleActionEnum); + final var serializedPolicyRuleActionConfigList = + policyRuleActionConfigList.stream().map(this::serialize).collect(Collectors.toList()); builder.setAction(serializedPolicyRuleActionEnum); - builder.addAllParameters(policyRuleActionParameters); + builder.addAllActionConfig(serializedPolicyRuleActionConfigList); return builder.build(); } public PolicyRuleAction deserialize(PolicyAction.PolicyRuleAction serializedPolicyRuleAction) { final var serializedPolicyRuleActionEnum = serializedPolicyRuleAction.getAction(); - final var policyRuleActionParameters = serializedPolicyRuleAction.getParametersList(); + final var serializedPolicyRuleActionActionConfigs = + serializedPolicyRuleAction.getActionConfigList(); final var policyRuleActionEnum = deserialize(serializedPolicyRuleActionEnum); + final var policyRuleActionActionConfigs = + serializedPolicyRuleActionActionConfigs.stream() + .map(this::deserialize) + .collect(Collectors.toList()); - return new PolicyRuleAction(policyRuleActionEnum, policyRuleActionParameters); + return new PolicyRuleAction(policyRuleActionEnum, policyRuleActionActionConfigs); } public PolicyCondition.BooleanOperator serialize(BooleanOperator booleanOperator) { diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleAction.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleAction.java index baa19cb8d..2a22538a4 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleAction.java +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleAction.java @@ -22,27 +22,31 @@ import java.util.stream.Collectors; public class PolicyRuleAction { private final PolicyRuleActionEnum policyRuleActionEnum; - private final List parameters; + private final List policyRuleActionConfigs; - public PolicyRuleAction(PolicyRuleActionEnum policyRuleActionEnum, List parameters) { + public PolicyRuleAction( + PolicyRuleActionEnum policyRuleActionEnum, + List policyRuleActionConfigs) { this.policyRuleActionEnum = policyRuleActionEnum; - this.parameters = parameters; + this.policyRuleActionConfigs = policyRuleActionConfigs; } public PolicyRuleActionEnum getPolicyRuleActionEnum() { return policyRuleActionEnum; } - public List getPolicyRuleActionParameters() { - return parameters; + public List getPolicyRuleActionConfigs() { + return policyRuleActionConfigs; } @Override public String toString() { return String.format( "%s:{policyRuleActionEnum:\"%s\", [%s]}", - getClass().getSimpleName(), policyRuleActionEnum.toString(), toString(parameters)); + getClass().getSimpleName(), + policyRuleActionEnum.toString(), + toString(policyRuleActionConfigs)); } private String toString(List list) { diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleActionConfig.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleActionConfig.java new file mode 100644 index 000000000..1c8651038 --- /dev/null +++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleActionConfig.java @@ -0,0 +1,27 @@ +package eu.teraflow.policy.model; + +public class PolicyRuleActionConfig { + + private final String actionKey; + private final String actionValue; + + public PolicyRuleActionConfig(String actionKey, String actionValue) { + this.actionKey = actionKey; + this.actionValue = actionValue; + } + + public String getActionKey() { + return actionKey; + } + + public String getActionValue() { + return actionValue; + } + + @Override + public String toString() { + return String.format( + "%s:{resourceKey:\"%s\", resourceValue:\"%s\"}", + getClass().getSimpleName(), actionKey, actionValue); + } +} diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java index e4c9f1698..d73a5ad37 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleBasicValidationTest.java @@ -22,6 +22,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; import eu.teraflow.policy.model.PolicyRuleAction; +import eu.teraflow.policy.model.PolicyRuleActionConfig; import eu.teraflow.policy.model.PolicyRuleActionEnum; import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; @@ -65,7 +66,7 @@ class PolicyRuleBasicValidationTestHelper { } private List createPolicyRuleActions( - PolicyRuleActionEnum policyRuleActionEnum, List parameters) { + PolicyRuleActionEnum policyRuleActionEnum, List parameters) { final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); return List.of(policyRuleAction); @@ -81,7 +82,9 @@ class PolicyRuleBasicValidationTestHelper { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); @@ -107,7 +110,9 @@ class PolicyRuleBasicValidationTestHelper { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED, "1"); @@ -133,7 +138,9 @@ class PolicyRuleBasicValidationTestHelper { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED, "1"); @@ -159,7 +166,9 @@ class PolicyRuleBasicValidationTestHelper { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_INSERTED, "1"); @@ -182,7 +191,9 @@ class PolicyRuleBasicValidationTestHelper { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_ENFORCED, "1"); @@ -206,7 +217,9 @@ class PolicyRuleBasicValidationTestHelper { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_REMOVED, "1"); @@ -234,7 +247,9 @@ class PolicyRuleBasicValidationTestHelper { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_VALIDATED, "1"); @@ -323,7 +338,7 @@ class PolicyRuleBasicValidationTestHelper { final var firstExpectedPolicyRuleAction = new PolicyRuleAction( PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of("parameter1", "parameter2")); + List.of(new PolicyRuleActionConfig("parameter1", "parameter2"))); final var expectedPolicyRuleActions = List.of(firstExpectedPolicyRuleAction); @@ -344,7 +359,7 @@ class PolicyRuleBasicValidationTestHelper { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of("parameter1", "parameter2")); + List.of(new PolicyRuleActionConfig("parameter1", "parameter2"))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java index 464f2acf9..e2687945a 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleDeviceValidationTest.java @@ -21,6 +21,7 @@ import static org.assertj.core.api.Assertions.assertThat; import eu.teraflow.policy.model.BooleanOperator; import eu.teraflow.policy.model.NumericalOperator; import eu.teraflow.policy.model.PolicyRuleAction; +import eu.teraflow.policy.model.PolicyRuleActionConfig; import eu.teraflow.policy.model.PolicyRuleActionEnum; import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; @@ -62,7 +63,7 @@ class PolicyRuleDeviceValidationTest { } private List createPolicyRuleActions( - PolicyRuleActionEnum policyRuleActionEnum, List parameters) { + PolicyRuleActionEnum policyRuleActionEnum, List parameters) { final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); return List.of(policyRuleAction); @@ -154,7 +155,9 @@ class PolicyRuleDeviceValidationTest { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); 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 e220fe95d..ba0fd174d 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java @@ -22,6 +22,7 @@ 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.PolicyRuleActionConfig; import eu.teraflow.policy.model.PolicyRuleActionEnum; import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; @@ -47,7 +48,7 @@ class PolicyRuleServiceValidationTest { } private List createPolicyRuleActions( - PolicyRuleActionEnum policyRuleActionEnum, List parameters) { + PolicyRuleActionEnum policyRuleActionEnum, List parameters) { final var policyRuleAction = new PolicyRuleAction(policyRuleActionEnum, parameters); return List.of(policyRuleAction); @@ -166,7 +167,9 @@ class PolicyRuleServiceValidationTest { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); @@ -200,7 +203,9 @@ class PolicyRuleServiceValidationTest { final var policyRuleActions = createPolicyRuleActions( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT, - List.of(UUID.randomUUID().toString(), UUID.randomUUID().toString())); + List.of( + new PolicyRuleActionConfig( + UUID.randomUUID().toString(), UUID.randomUUID().toString()))); final var policyRuleState = new PolicyRuleState(PolicyRuleStateEnum.POLICY_EFFECTIVE, "1"); diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java index 812e72bee..9334ca422 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java @@ -112,16 +112,26 @@ class PolicyServiceTest { final var expectedPolicyRuleConditions = List.of(firstExpectedPolicyRuleCondition, secondExpectedPolicyRuleCondition); + eu.teraflow.policy.model.PolicyRuleActionConfig policyRuleActionConfig_1 = + new eu.teraflow.policy.model.PolicyRuleActionConfig("paramater1", "parameter2"); + final var serializedPolicyRuleActionConfigList_1 = + serializer.serialize(policyRuleActionConfig_1); + + eu.teraflow.policy.model.PolicyRuleActionConfig policyRuleActionConfig_2 = + new eu.teraflow.policy.model.PolicyRuleActionConfig("paramater3", "parameter4"); + final var serializedPolicyRuleActionConfigList_2 = + serializer.serialize(policyRuleActionConfig_2); + final var firstExpectedPolicyRuleAction = PolicyAction.PolicyRuleAction.newBuilder() .setAction(PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE) - .addAllParameters(List.of("parameter1", "parameter2")) + .addActionConfig(serializedPolicyRuleActionConfigList_1) .build(); final var secondExpectedPolicyRuleAction = PolicyAction.PolicyRuleAction.newBuilder() .setAction(PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT) - .addAllParameters(List.of("parameter3", "parameter4")) + .addActionConfig(serializedPolicyRuleActionConfigList_2) .build(); final var expectedPolicyRuleActions = 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 f82914647..fcde02704 100644 --- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java +++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java @@ -79,6 +79,7 @@ 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; +import eu.teraflow.policy.model.PolicyRuleActionConfig; import eu.teraflow.policy.model.PolicyRuleActionEnum; import eu.teraflow.policy.model.PolicyRuleBasic; import eu.teraflow.policy.model.PolicyRuleCondition; @@ -172,12 +173,12 @@ class SerializerTest { final var firstExpectedPolicyRuleAction = new PolicyRuleAction( PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS, - List.of("parameter1", "parameter2")); + List.of(new PolicyRuleActionConfig("parameter1", "parameter2"))); final var secondExpectedPolicyRuleAction = new PolicyRuleAction( PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE, - List.of("parameter3", "parameter4")); + List.of(new PolicyRuleActionConfig("parameter3", "parameter4"))); final var expectedPolicyRuleActions = List.of(firstExpectedPolicyRuleAction, secondExpectedPolicyRuleAction); @@ -2997,16 +2998,21 @@ class SerializerTest { void shouldSerializePolicyRuleAction() { final var expectedPolicyRuleActionEnum = PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT; - final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2"); + final var expectedPolicyRuleActionConfigs = + List.of(new PolicyRuleActionConfig("parameter1", "parameter2")); final var policyRuleAction = - new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters); + new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionConfigs); final var serializedPolicyRuleActionEnum = serializer.serialize(expectedPolicyRuleActionEnum); + final var serializedPolicyRuleActionConfigList = + expectedPolicyRuleActionConfigs.stream() + .map(id -> serializer.serialize(id)) + .collect(Collectors.toList()); final var expectedPolicyRuleAction = PolicyAction.PolicyRuleAction.newBuilder() .setAction(serializedPolicyRuleActionEnum) - .addAllParameters(expectedPolicyRuleActionParameters) + .addAllActionConfig(serializedPolicyRuleActionConfigList) .build(); final var serializedPolicyRuleAction = serializer.serialize(policyRuleAction); @@ -3019,9 +3025,10 @@ class SerializerTest { @Test void shouldDeserializePolicyRuleAction() { final var expectedPolicyRuleActionEnum = PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION; - final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2"); + final var expectedPolicyRuleActionConfigs = + List.of(new PolicyRuleActionConfig("parameter1", "parameter2")); final var expectedPolicyRuleAction = - new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters); + new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionConfigs); final var serializedPolicyRuleAction = serializer.serialize(expectedPolicyRuleAction); diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyAction.java b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java index ea6ee17d0..f7d7c71cd 100644 --- a/src/policy/target/generated-sources/grpc/policy/PolicyAction.java +++ b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java @@ -156,29 +156,28 @@ public final class PolicyAction { policy.PolicyAction.PolicyRuleActionEnum getAction(); /** - * repeated string parameters = 2; - * @return A list containing the parameters. + * repeated .policy.PolicyRuleActionConfig action_config = 2; */ - java.util.List - getParametersList(); + java.util.List + getActionConfigList(); /** - * repeated string parameters = 2; - * @return The count of parameters. + * repeated .policy.PolicyRuleActionConfig action_config = 2; */ - int getParametersCount(); + policy.PolicyAction.PolicyRuleActionConfig getActionConfig(int index); /** - * repeated string parameters = 2; - * @param index The index of the element to return. - * @return The parameters at the given index. + * repeated .policy.PolicyRuleActionConfig action_config = 2; */ - java.lang.String getParameters(int index); + int getActionConfigCount(); /** - * repeated string parameters = 2; - * @param index The index of the value to return. - * @return The bytes of the parameters at the given index. + * repeated .policy.PolicyRuleActionConfig action_config = 2; */ - com.google.protobuf.ByteString - getParametersBytes(int index); + java.util.List + getActionConfigOrBuilderList(); + /** + * repeated .policy.PolicyRuleActionConfig action_config = 2; + */ + policy.PolicyAction.PolicyRuleActionConfigOrBuilder getActionConfigOrBuilder( + int index); } /** *
@@ -198,7 +197,7 @@ public final class PolicyAction {
     }
     private PolicyRuleAction() {
       action_ = 0;
-      parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      actionConfig_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
@@ -239,12 +238,12 @@ public final class PolicyAction {
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                parameters_ = new com.google.protobuf.LazyStringArrayList();
+                actionConfig_ = new java.util.ArrayList();
                 mutable_bitField0_ |= 0x00000001;
               }
-              parameters_.add(s);
+              actionConfig_.add(
+                  input.readMessage(policy.PolicyAction.PolicyRuleActionConfig.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -263,7 +262,7 @@ public final class PolicyAction {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          parameters_ = parameters_.getUnmodifiableView();
+          actionConfig_ = java.util.Collections.unmodifiableList(actionConfig_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -301,39 +300,44 @@ public final class PolicyAction {
       return result == null ? policy.PolicyAction.PolicyRuleActionEnum.UNRECOGNIZED : result;
     }
 
-    public static final int PARAMETERS_FIELD_NUMBER = 2;
-    private com.google.protobuf.LazyStringList parameters_;
+    public static final int ACTION_CONFIG_FIELD_NUMBER = 2;
+    private java.util.List actionConfig_;
     /**
-     * repeated string parameters = 2;
-     * @return A list containing the parameters.
+     * repeated .policy.PolicyRuleActionConfig action_config = 2;
      */
-    public com.google.protobuf.ProtocolStringList
-        getParametersList() {
-      return parameters_;
+    @java.lang.Override
+    public java.util.List getActionConfigList() {
+      return actionConfig_;
     }
     /**
-     * repeated string parameters = 2;
-     * @return The count of parameters.
+     * repeated .policy.PolicyRuleActionConfig action_config = 2;
      */
-    public int getParametersCount() {
-      return parameters_.size();
+    @java.lang.Override
+    public java.util.List 
+        getActionConfigOrBuilderList() {
+      return actionConfig_;
     }
     /**
-     * repeated string parameters = 2;
-     * @param index The index of the element to return.
-     * @return The parameters at the given index.
+     * repeated .policy.PolicyRuleActionConfig action_config = 2;
      */
-    public java.lang.String getParameters(int index) {
-      return parameters_.get(index);
+    @java.lang.Override
+    public int getActionConfigCount() {
+      return actionConfig_.size();
     }
     /**
-     * repeated string parameters = 2;
-     * @param index The index of the value to return.
-     * @return The bytes of the parameters at the given index.
+     * repeated .policy.PolicyRuleActionConfig action_config = 2;
      */
-    public com.google.protobuf.ByteString
-        getParametersBytes(int index) {
-      return parameters_.getByteString(index);
+    @java.lang.Override
+    public policy.PolicyAction.PolicyRuleActionConfig getActionConfig(int index) {
+      return actionConfig_.get(index);
+    }
+    /**
+     * repeated .policy.PolicyRuleActionConfig action_config = 2;
+     */
+    @java.lang.Override
+    public policy.PolicyAction.PolicyRuleActionConfigOrBuilder getActionConfigOrBuilder(
+        int index) {
+      return actionConfig_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -353,8 +357,8 @@ public final class PolicyAction {
       if (action_ != policy.PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION.getNumber()) {
         output.writeEnum(1, action_);
       }
-      for (int i = 0; i < parameters_.size(); i++) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, parameters_.getRaw(i));
+      for (int i = 0; i < actionConfig_.size(); i++) {
+        output.writeMessage(2, actionConfig_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -369,13 +373,9 @@ public final class PolicyAction {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(1, action_);
       }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < parameters_.size(); i++) {
-          dataSize += computeStringSizeNoTag(parameters_.getRaw(i));
-        }
-        size += dataSize;
-        size += 1 * getParametersList().size();
+      for (int i = 0; i < actionConfig_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, actionConfig_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -393,8 +393,8 @@ public final class PolicyAction {
       policy.PolicyAction.PolicyRuleAction other = (policy.PolicyAction.PolicyRuleAction) obj;
 
       if (action_ != other.action_) return false;
-      if (!getParametersList()
-          .equals(other.getParametersList())) return false;
+      if (!getActionConfigList()
+          .equals(other.getActionConfigList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -408,9 +408,9 @@ public final class PolicyAction {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + ACTION_FIELD_NUMBER;
       hash = (53 * hash) + action_;
-      if (getParametersCount() > 0) {
-        hash = (37 * hash) + PARAMETERS_FIELD_NUMBER;
-        hash = (53 * hash) + getParametersList().hashCode();
+      if (getActionConfigCount() > 0) {
+        hash = (37 * hash) + ACTION_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getActionConfigList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
@@ -544,6 +544,7 @@ public final class PolicyAction {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getActionConfigFieldBuilder();
         }
       }
       @java.lang.Override
@@ -551,8 +552,12 @@ public final class PolicyAction {
         super.clear();
         action_ = 0;
 
-        parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
+        if (actionConfigBuilder_ == null) {
+          actionConfig_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          actionConfigBuilder_.clear();
+        }
         return this;
       }
 
@@ -581,11 +586,15 @@ public final class PolicyAction {
         policy.PolicyAction.PolicyRuleAction result = new policy.PolicyAction.PolicyRuleAction(this);
         int from_bitField0_ = bitField0_;
         result.action_ = action_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          parameters_ = parameters_.getUnmodifiableView();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (actionConfigBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            actionConfig_ = java.util.Collections.unmodifiableList(actionConfig_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.actionConfig_ = actionConfig_;
+        } else {
+          result.actionConfig_ = actionConfigBuilder_.build();
         }
-        result.parameters_ = parameters_;
         onBuilt();
         return result;
       }
@@ -637,15 +646,31 @@ public final class PolicyAction {
         if (other.action_ != 0) {
           setActionValue(other.getActionValue());
         }
-        if (!other.parameters_.isEmpty()) {
-          if (parameters_.isEmpty()) {
-            parameters_ = other.parameters_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureParametersIsMutable();
-            parameters_.addAll(other.parameters_);
+        if (actionConfigBuilder_ == null) {
+          if (!other.actionConfig_.isEmpty()) {
+            if (actionConfig_.isEmpty()) {
+              actionConfig_ = other.actionConfig_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureActionConfigIsMutable();
+              actionConfig_.addAll(other.actionConfig_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.actionConfig_.isEmpty()) {
+            if (actionConfigBuilder_.isEmpty()) {
+              actionConfigBuilder_.dispose();
+              actionConfigBuilder_ = null;
+              actionConfig_ = other.actionConfig_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              actionConfigBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getActionConfigFieldBuilder() : null;
+            } else {
+              actionConfigBuilder_.addAllMessages(other.actionConfig_);
+            }
           }
-          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -731,115 +756,245 @@ public final class PolicyAction {
         return this;
       }
 
-      private com.google.protobuf.LazyStringList parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensureParametersIsMutable() {
+      private java.util.List actionConfig_ =
+        java.util.Collections.emptyList();
+      private void ensureActionConfigIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          parameters_ = new com.google.protobuf.LazyStringArrayList(parameters_);
+          actionConfig_ = new java.util.ArrayList(actionConfig_);
           bitField0_ |= 0x00000001;
          }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          policy.PolicyAction.PolicyRuleActionConfig, policy.PolicyAction.PolicyRuleActionConfig.Builder, policy.PolicyAction.PolicyRuleActionConfigOrBuilder> actionConfigBuilder_;
+
       /**
-       * repeated string parameters = 2;
-       * @return A list containing the parameters.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public com.google.protobuf.ProtocolStringList
-          getParametersList() {
-        return parameters_.getUnmodifiableView();
+      public java.util.List getActionConfigList() {
+        if (actionConfigBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(actionConfig_);
+        } else {
+          return actionConfigBuilder_.getMessageList();
+        }
       }
       /**
-       * repeated string parameters = 2;
-       * @return The count of parameters.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public int getParametersCount() {
-        return parameters_.size();
+      public int getActionConfigCount() {
+        if (actionConfigBuilder_ == null) {
+          return actionConfig_.size();
+        } else {
+          return actionConfigBuilder_.getCount();
+        }
       }
       /**
-       * repeated string parameters = 2;
-       * @param index The index of the element to return.
-       * @return The parameters at the given index.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public java.lang.String getParameters(int index) {
-        return parameters_.get(index);
+      public policy.PolicyAction.PolicyRuleActionConfig getActionConfig(int index) {
+        if (actionConfigBuilder_ == null) {
+          return actionConfig_.get(index);
+        } else {
+          return actionConfigBuilder_.getMessage(index);
+        }
       }
       /**
-       * repeated string parameters = 2;
-       * @param index The index of the value to return.
-       * @return The bytes of the parameters at the given index.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public com.google.protobuf.ByteString
-          getParametersBytes(int index) {
-        return parameters_.getByteString(index);
+      public Builder setActionConfig(
+          int index, policy.PolicyAction.PolicyRuleActionConfig value) {
+        if (actionConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureActionConfigIsMutable();
+          actionConfig_.set(index, value);
+          onChanged();
+        } else {
+          actionConfigBuilder_.setMessage(index, value);
+        }
+        return this;
       }
       /**
-       * repeated string parameters = 2;
-       * @param index The index to set the value at.
-       * @param value The parameters to set.
-       * @return This builder for chaining.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public Builder setParameters(
-          int index, java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureParametersIsMutable();
-        parameters_.set(index, value);
-        onChanged();
+      public Builder setActionConfig(
+          int index, policy.PolicyAction.PolicyRuleActionConfig.Builder builderForValue) {
+        if (actionConfigBuilder_ == null) {
+          ensureActionConfigIsMutable();
+          actionConfig_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          actionConfigBuilder_.setMessage(index, builderForValue.build());
+        }
         return this;
       }
       /**
-       * repeated string parameters = 2;
-       * @param value The parameters to add.
-       * @return This builder for chaining.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public Builder addParameters(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureParametersIsMutable();
-        parameters_.add(value);
-        onChanged();
+      public Builder addActionConfig(policy.PolicyAction.PolicyRuleActionConfig value) {
+        if (actionConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureActionConfigIsMutable();
+          actionConfig_.add(value);
+          onChanged();
+        } else {
+          actionConfigBuilder_.addMessage(value);
+        }
         return this;
       }
       /**
-       * repeated string parameters = 2;
-       * @param values The parameters to add.
-       * @return This builder for chaining.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public Builder addAllParameters(
-          java.lang.Iterable values) {
-        ensureParametersIsMutable();
-        com.google.protobuf.AbstractMessageLite.Builder.addAll(
-            values, parameters_);
-        onChanged();
+      public Builder addActionConfig(
+          int index, policy.PolicyAction.PolicyRuleActionConfig value) {
+        if (actionConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureActionConfigIsMutable();
+          actionConfig_.add(index, value);
+          onChanged();
+        } else {
+          actionConfigBuilder_.addMessage(index, value);
+        }
         return this;
       }
       /**
-       * repeated string parameters = 2;
-       * @return This builder for chaining.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public Builder clearParameters() {
-        parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
+      public Builder addActionConfig(
+          policy.PolicyAction.PolicyRuleActionConfig.Builder builderForValue) {
+        if (actionConfigBuilder_ == null) {
+          ensureActionConfigIsMutable();
+          actionConfig_.add(builderForValue.build());
+          onChanged();
+        } else {
+          actionConfigBuilder_.addMessage(builderForValue.build());
+        }
         return this;
       }
       /**
-       * repeated string parameters = 2;
-       * @param value The bytes of the parameters to add.
-       * @return This builder for chaining.
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
        */
-      public Builder addParametersBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        ensureParametersIsMutable();
-        parameters_.add(value);
-        onChanged();
+      public Builder addActionConfig(
+          int index, policy.PolicyAction.PolicyRuleActionConfig.Builder builderForValue) {
+        if (actionConfigBuilder_ == null) {
+          ensureActionConfigIsMutable();
+          actionConfig_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          actionConfigBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public Builder addAllActionConfig(
+          java.lang.Iterable values) {
+        if (actionConfigBuilder_ == null) {
+          ensureActionConfigIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, actionConfig_);
+          onChanged();
+        } else {
+          actionConfigBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public Builder clearActionConfig() {
+        if (actionConfigBuilder_ == null) {
+          actionConfig_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          actionConfigBuilder_.clear();
+        }
         return this;
       }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public Builder removeActionConfig(int index) {
+        if (actionConfigBuilder_ == null) {
+          ensureActionConfigIsMutable();
+          actionConfig_.remove(index);
+          onChanged();
+        } else {
+          actionConfigBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public policy.PolicyAction.PolicyRuleActionConfig.Builder getActionConfigBuilder(
+          int index) {
+        return getActionConfigFieldBuilder().getBuilder(index);
+      }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public policy.PolicyAction.PolicyRuleActionConfigOrBuilder getActionConfigOrBuilder(
+          int index) {
+        if (actionConfigBuilder_ == null) {
+          return actionConfig_.get(index);  } else {
+          return actionConfigBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public java.util.List 
+           getActionConfigOrBuilderList() {
+        if (actionConfigBuilder_ != null) {
+          return actionConfigBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(actionConfig_);
+        }
+      }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public policy.PolicyAction.PolicyRuleActionConfig.Builder addActionConfigBuilder() {
+        return getActionConfigFieldBuilder().addBuilder(
+            policy.PolicyAction.PolicyRuleActionConfig.getDefaultInstance());
+      }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public policy.PolicyAction.PolicyRuleActionConfig.Builder addActionConfigBuilder(
+          int index) {
+        return getActionConfigFieldBuilder().addBuilder(
+            index, policy.PolicyAction.PolicyRuleActionConfig.getDefaultInstance());
+      }
+      /**
+       * repeated .policy.PolicyRuleActionConfig action_config = 2;
+       */
+      public java.util.List 
+           getActionConfigBuilderList() {
+        return getActionConfigFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          policy.PolicyAction.PolicyRuleActionConfig, policy.PolicyAction.PolicyRuleActionConfig.Builder, policy.PolicyAction.PolicyRuleActionConfigOrBuilder> 
+          getActionConfigFieldBuilder() {
+        if (actionConfigBuilder_ == null) {
+          actionConfigBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              policy.PolicyAction.PolicyRuleActionConfig, policy.PolicyAction.PolicyRuleActionConfig.Builder, policy.PolicyAction.PolicyRuleActionConfigOrBuilder>(
+                  actionConfig_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          actionConfig_ = null;
+        }
+        return actionConfigBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -893,39 +1048,779 @@ public final class PolicyAction {
 
   }
 
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleAction_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleAction_fieldAccessorTable;
+  public interface PolicyRuleActionConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleActionConfig)
+      com.google.protobuf.MessageOrBuilder {
 
-  public static com.google.protobuf.Descriptors.FileDescriptor
-      getDescriptor() {
-    return descriptor;
+    /**
+     * string action_key = 1;
+     * @return The actionKey.
+     */
+    java.lang.String getActionKey();
+    /**
+     * string action_key = 1;
+     * @return The bytes for actionKey.
+     */
+    com.google.protobuf.ByteString
+        getActionKeyBytes();
+
+    /**
+     * string action_value = 2;
+     * @return The actionValue.
+     */
+    java.lang.String getActionValue();
+    /**
+     * string action_value = 2;
+     * @return The bytes for actionValue.
+     */
+    com.google.protobuf.ByteString
+        getActionValueBytes();
   }
-  private static  com.google.protobuf.Descriptors.FileDescriptor
-      descriptor;
-  static {
-    java.lang.String[] descriptorData = {
-      "\n\023policy_action.proto\022\006policy\"T\n\020PolicyR" +
-      "uleAction\022,\n\006action\030\001 \001(\0162\034.policy.Polic" +
-      "yRuleActionEnum\022\022\n\nparameters\030\002 \003(\t*\274\001\n\024" +
-      "PolicyRuleActionEnum\022\037\n\033POLICYRULE_ACTIO" +
-      "N_NO_ACTION\020\000\022\'\n#POLICYRULE_ACTION_SET_D" +
-      "EVICE_STATUS\020\001\022,\n(POLICYRULE_ACTION_ADD_" +
-      "SERVICE_CONFIGRULE\020\002\022,\n(POLICYRULE_ACTIO" +
-      "N_ADD_SERVICE_CONSTRAINT\020\003b\006proto3"
-    };
-    descriptor = com.google.protobuf.Descriptors.FileDescriptor
-      .internalBuildGeneratedFileFrom(descriptorData,
-        new com.google.protobuf.Descriptors.FileDescriptor[] {
-        });
-    internal_static_policy_PolicyRuleAction_descriptor =
-      getDescriptor().getMessageTypes().get(0);
-    internal_static_policy_PolicyRuleAction_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleAction_descriptor,
-        new java.lang.String[] { "Action", "Parameters", });
+  /**
+   * 
+   * Action configuration
+   * 
+ * + * Protobuf type {@code policy.PolicyRuleActionConfig} + */ + public static final class PolicyRuleActionConfig extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:policy.PolicyRuleActionConfig) + PolicyRuleActionConfigOrBuilder { + private static final long serialVersionUID = 0L; + // Use PolicyRuleActionConfig.newBuilder() to construct. + private PolicyRuleActionConfig(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private PolicyRuleActionConfig() { + actionKey_ = ""; + actionValue_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new PolicyRuleActionConfig(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private PolicyRuleActionConfig( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + actionKey_ = s; + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + actionValue_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return policy.PolicyAction.internal_static_policy_PolicyRuleActionConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return policy.PolicyAction.internal_static_policy_PolicyRuleActionConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + policy.PolicyAction.PolicyRuleActionConfig.class, policy.PolicyAction.PolicyRuleActionConfig.Builder.class); + } + + public static final int ACTION_KEY_FIELD_NUMBER = 1; + private volatile java.lang.Object actionKey_; + /** + * string action_key = 1; + * @return The actionKey. + */ + @java.lang.Override + public java.lang.String getActionKey() { + java.lang.Object ref = actionKey_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + actionKey_ = s; + return s; + } + } + /** + * string action_key = 1; + * @return The bytes for actionKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getActionKeyBytes() { + java.lang.Object ref = actionKey_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + actionKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ACTION_VALUE_FIELD_NUMBER = 2; + private volatile java.lang.Object actionValue_; + /** + * string action_value = 2; + * @return The actionValue. + */ + @java.lang.Override + public java.lang.String getActionValue() { + java.lang.Object ref = actionValue_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + actionValue_ = s; + return s; + } + } + /** + * string action_value = 2; + * @return The bytes for actionValue. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getActionValueBytes() { + java.lang.Object ref = actionValue_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + actionValue_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getActionKeyBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, actionKey_); + } + if (!getActionValueBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, actionValue_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getActionKeyBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, actionKey_); + } + if (!getActionValueBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, actionValue_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof policy.PolicyAction.PolicyRuleActionConfig)) { + return super.equals(obj); + } + policy.PolicyAction.PolicyRuleActionConfig other = (policy.PolicyAction.PolicyRuleActionConfig) obj; + + if (!getActionKey() + .equals(other.getActionKey())) return false; + if (!getActionValue() + .equals(other.getActionValue())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ACTION_KEY_FIELD_NUMBER; + hash = (53 * hash) + getActionKey().hashCode(); + hash = (37 * hash) + ACTION_VALUE_FIELD_NUMBER; + hash = (53 * hash) + getActionValue().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static policy.PolicyAction.PolicyRuleActionConfig parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(policy.PolicyAction.PolicyRuleActionConfig prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Action configuration
+     * 
+ * + * Protobuf type {@code policy.PolicyRuleActionConfig} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:policy.PolicyRuleActionConfig) + policy.PolicyAction.PolicyRuleActionConfigOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return policy.PolicyAction.internal_static_policy_PolicyRuleActionConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return policy.PolicyAction.internal_static_policy_PolicyRuleActionConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + policy.PolicyAction.PolicyRuleActionConfig.class, policy.PolicyAction.PolicyRuleActionConfig.Builder.class); + } + + // Construct using policy.PolicyAction.PolicyRuleActionConfig.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + actionKey_ = ""; + + actionValue_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return policy.PolicyAction.internal_static_policy_PolicyRuleActionConfig_descriptor; + } + + @java.lang.Override + public policy.PolicyAction.PolicyRuleActionConfig getDefaultInstanceForType() { + return policy.PolicyAction.PolicyRuleActionConfig.getDefaultInstance(); + } + + @java.lang.Override + public policy.PolicyAction.PolicyRuleActionConfig build() { + policy.PolicyAction.PolicyRuleActionConfig result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public policy.PolicyAction.PolicyRuleActionConfig buildPartial() { + policy.PolicyAction.PolicyRuleActionConfig result = new policy.PolicyAction.PolicyRuleActionConfig(this); + result.actionKey_ = actionKey_; + result.actionValue_ = actionValue_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof policy.PolicyAction.PolicyRuleActionConfig) { + return mergeFrom((policy.PolicyAction.PolicyRuleActionConfig)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(policy.PolicyAction.PolicyRuleActionConfig other) { + if (other == policy.PolicyAction.PolicyRuleActionConfig.getDefaultInstance()) return this; + if (!other.getActionKey().isEmpty()) { + actionKey_ = other.actionKey_; + onChanged(); + } + if (!other.getActionValue().isEmpty()) { + actionValue_ = other.actionValue_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + policy.PolicyAction.PolicyRuleActionConfig parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (policy.PolicyAction.PolicyRuleActionConfig) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object actionKey_ = ""; + /** + * string action_key = 1; + * @return The actionKey. + */ + public java.lang.String getActionKey() { + java.lang.Object ref = actionKey_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + actionKey_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string action_key = 1; + * @return The bytes for actionKey. + */ + public com.google.protobuf.ByteString + getActionKeyBytes() { + java.lang.Object ref = actionKey_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + actionKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string action_key = 1; + * @param value The actionKey to set. + * @return This builder for chaining. + */ + public Builder setActionKey( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + actionKey_ = value; + onChanged(); + return this; + } + /** + * string action_key = 1; + * @return This builder for chaining. + */ + public Builder clearActionKey() { + + actionKey_ = getDefaultInstance().getActionKey(); + onChanged(); + return this; + } + /** + * string action_key = 1; + * @param value The bytes for actionKey to set. + * @return This builder for chaining. + */ + public Builder setActionKeyBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + actionKey_ = value; + onChanged(); + return this; + } + + private java.lang.Object actionValue_ = ""; + /** + * string action_value = 2; + * @return The actionValue. + */ + public java.lang.String getActionValue() { + java.lang.Object ref = actionValue_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + actionValue_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string action_value = 2; + * @return The bytes for actionValue. + */ + public com.google.protobuf.ByteString + getActionValueBytes() { + java.lang.Object ref = actionValue_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + actionValue_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string action_value = 2; + * @param value The actionValue to set. + * @return This builder for chaining. + */ + public Builder setActionValue( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + actionValue_ = value; + onChanged(); + return this; + } + /** + * string action_value = 2; + * @return This builder for chaining. + */ + public Builder clearActionValue() { + + actionValue_ = getDefaultInstance().getActionValue(); + onChanged(); + return this; + } + /** + * string action_value = 2; + * @param value The bytes for actionValue to set. + * @return This builder for chaining. + */ + public Builder setActionValueBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + actionValue_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:policy.PolicyRuleActionConfig) + } + + // @@protoc_insertion_point(class_scope:policy.PolicyRuleActionConfig) + private static final policy.PolicyAction.PolicyRuleActionConfig DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new policy.PolicyAction.PolicyRuleActionConfig(); + } + + public static policy.PolicyAction.PolicyRuleActionConfig getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PolicyRuleActionConfig parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new PolicyRuleActionConfig(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public policy.PolicyAction.PolicyRuleActionConfig getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_policy_PolicyRuleAction_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_policy_PolicyRuleAction_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_policy_PolicyRuleActionConfig_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_policy_PolicyRuleActionConfig_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\023policy_action.proto\022\006policy\"w\n\020PolicyR" + + "uleAction\022,\n\006action\030\001 \001(\0162\034.policy.Polic" + + "yRuleActionEnum\0225\n\raction_config\030\002 \003(\0132\036" + + ".policy.PolicyRuleActionConfig\"B\n\026Policy" + + "RuleActionConfig\022\022\n\naction_key\030\001 \001(\t\022\024\n\014" + + "action_value\030\002 \001(\t*\274\001\n\024PolicyRuleActionE" + + "num\022\037\n\033POLICYRULE_ACTION_NO_ACTION\020\000\022\'\n#" + + "POLICYRULE_ACTION_SET_DEVICE_STATUS\020\001\022,\n" + + "(POLICYRULE_ACTION_ADD_SERVICE_CONFIGRUL" + + "E\020\002\022,\n(POLICYRULE_ACTION_ADD_SERVICE_CON" + + "STRAINT\020\003b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_policy_PolicyRuleAction_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_policy_PolicyRuleAction_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_policy_PolicyRuleAction_descriptor, + new java.lang.String[] { "Action", "ActionConfig", }); + internal_static_policy_PolicyRuleActionConfig_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_policy_PolicyRuleActionConfig_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_policy_PolicyRuleActionConfig_descriptor, + new java.lang.String[] { "ActionKey", "ActionValue", }); } // @@protoc_insertion_point(outer_class_scope) -- GitLab From 3ddc464aa99bb7aa7edc29c8fe81b156d62b5803 Mon Sep 17 00:00:00 2001 From: Vasileios Katopodis Date: Thu, 6 Oct 2022 16:14:21 +0300 Subject: [PATCH 34/34] Edit context error messages --- .../eu/teraflow/policy/PolicyServiceImpl.java | 50 +++++++++---------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java index 96707cf7a..62c39cde6 100644 --- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java +++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java @@ -71,8 +71,6 @@ public class PolicyServiceImpl implements PolicyService { private static final String VALID_MESSAGE = "%s is valid."; private static final int POLICY_EVALUATION_TIMEOUT = 5; private static final int ACCEPTABLE_NUMBER_OF_ALARMS = 3; - private static final int NUMBER_OF_CONSTRAINT_CUSTOM_FIELDS = 2; - private static final int NUMBER_OF_CONFIGRULE_CUSTOM_FIELDS = 3; private static final PolicyRuleState INSERTED_POLICYRULE_STATE = new PolicyRuleState( @@ -367,16 +365,17 @@ public class PolicyServiceImpl implements PolicyService { List actionConfigs = policyRuleActionMap.get(alarmId).getPolicyRuleActionConfigs(); - // TODO: Add FAILED state if (deviceIds.size() != actionConfigs.size()) { - LOGGER.errorf( - INVALID_MESSAGE, - "The number of action parameters is not aligned with the number of devices"); + String message = + String.format( + "The number of action parameters in PolicyRuleDevice with ID: %s, is not aligned with the number of devices.", + policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId()); + setPolicyRuleDeviceToContext( + policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message)); return; } for (var i = 0; i < deviceIds.size(); i++) { - // List deviceActions = actionConfigs.subList(i, i + 2); activateDevice(deviceIds.get(i), actionConfigs.get(i)); } @@ -487,12 +486,17 @@ public class PolicyServiceImpl implements PolicyService { final var deviceIds = policyRuleDevice.getDeviceIds(); final var policyRuleId = policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId(); - // TODO: The following devices in PolicyRuleDevice with ID are not valid: deviceids final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds); if (!invalidDeviceIds.isEmpty()) { - String message = - String.format("The Devices of PolicyRuleDevice %s are not valid", policyRuleId); + String ids = ""; + for (String id : invalidDeviceIds) { + ids += " ," + id; + } + String message = + String.format( + "The following devices in PolicyRuleDevice with ID: %s are not valid: %s", + policyRuleId, ids); setPolicyRuleDeviceToContext( policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message)); return; @@ -507,11 +511,10 @@ public class PolicyServiceImpl implements PolicyService { List alarmDescriptorList = parsePolicyRuleCondition(policyRuleDevice.getPolicyRuleBasic()); - // TODO: The following devices in PolicyRuleDevice with ID are not valid: deviceids if (alarmDescriptorList.isEmpty()) { String message = String.format( - "The Devices of PolicyRuleDevice %s are not valid", + "The devices of PolicyRuleDevice with ID: %s are not valid", policyRuleBasic.getPolicyRuleId()); setPolicyRuleDeviceToContext( policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message)); @@ -535,7 +538,6 @@ public class PolicyServiceImpl implements PolicyService { final var isUpdatedPolicyRuleValid = policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId()); - // TODO: PolicyRule with ID not found. PolicyUpdateService failed. isUpdatedPolicyRuleValid .subscribe() .with( @@ -544,7 +546,7 @@ public class PolicyServiceImpl implements PolicyService { String message = String.format( - "The requested PolicyRuleService to be updated: %s is not valid", + "The PolicyRule with ID: %s was not found. PolicyUpdateService failed.", policyRuleBasic.getPolicyRuleId()); setPolicyRuleServiceToContext( policyRuleService, @@ -562,7 +564,6 @@ public class PolicyServiceImpl implements PolicyService { final var isUpdatedPolicyRuleValid = policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId()); - // TODO: PolicyRule with ID not found. PolicyUpdateDevice failed. isUpdatedPolicyRuleValid .subscribe() .with( @@ -570,7 +571,7 @@ public class PolicyServiceImpl implements PolicyService { if (Boolean.FALSE.equals(isUpdatedPolicyRuleValid)) { String message = String.format( - "The requested PolicyRuleDevice to update: %s is not valid", + "PolicyRule with ID: %s was not found. PolicyUpdateDevice failed", policyRuleBasic.getPolicyRuleId()); setPolicyRuleDeviceToContext( policyRuleDevice, @@ -588,13 +589,11 @@ public class PolicyServiceImpl implements PolicyService { Boolean isServiceIdValid = policyRuleConditionValidator.validateServiceId(serviceId).await().indefinitely(); - if (!isServiceIdValid) { - LOGGER.errorf(INVALID_MESSAGE, serviceId); - // TODO: Cannot provision/update a PolicyRule with invalid service ID: %s + if (!isServiceIdValid) { String message = String.format( - "The Service of PolicyRuleService %s is not valid", + "Cannot provision/update a PolicyRule with invalid service ID: %s", policyRuleBasic.getPolicyRuleId()); setPolicyRuleServiceToContext( policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message)); @@ -607,12 +606,11 @@ public class PolicyServiceImpl implements PolicyService { .await() .indefinitely(); - // TODO: Cannot provision/update a PolicyRule with invalid service ID: %s if (!isServicesDeviceIdsValid) { String message = String.format( - "he Devices of PolicyRuleService %s are not valid", + "Cannot provision/update a PolicyRule with invalid service ID: %s", policyRuleBasic.getPolicyRuleId()); setPolicyRuleServiceToContext( policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message)); @@ -630,11 +628,10 @@ public class PolicyServiceImpl implements PolicyService { List alarmDescriptorList = parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic()); - // TODO: Invalid PolicyRuleConditions in PolicyRule with ID: %s if (alarmDescriptorList.isEmpty()) { String message = String.format( - "The PolicyRuleConditions of PolicyRuleDevice %s are not valid", + "Invalid PolicyRuleConditions in PolicyRule with ID: %s", policyRuleBasic.getPolicyRuleId()); setPolicyRuleServiceToContext( policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message)); @@ -744,12 +741,13 @@ public class PolicyServiceImpl implements PolicyService { var kpiValueRange = KpiValueRangeMap.get(policyRuleCondition.getKpiId()); if (kpiValueRange.getInRange() == true) { - // LOGGER.errorf("Received %s", policyRuleBasic); + LOGGER.errorf("KpiId: %s, has already range values", policyRuleCondition.getKpiId()); return null; } if ((kpiValueRange.getKpiMaxValue() != null) && (kpiValueRange.getKpiMinValue() != null)) { - // LOGGER.errorf("Received %s", policyRuleBasic); + LOGGER.errorf( + "KpiId: %s, has already min and max values", policyRuleCondition.getKpiId()); return null; } -- GitLab