From 6b8f9f2da77e118e3020afd465844147f807a177 Mon Sep 17 00:00:00 2001 From: "guillaume.lambert" Date: Wed, 6 May 2020 12:41:13 +0200 Subject: [PATCH] Enforce SpotBugs in Service handler and fix ServiceHandler SLF4J SpotBugs issues. By the way: - rename ServiceHandlerCompliancyCheck class for coherence - clean ModelMappingUtils.java and ServicehandlerImpl.java - review how messages and logs are handled - improve Junit tests JIRA: TRNSPRTPCE-214 TRNSPRTPCE-246 TRNSPRTPCE-265 Signed-off-by: guillaume.lambert Change-Id: I82e1ac784bb66acbdcf62004da6da6eb3701434b --- servicehandler/pom.xml | 6 - .../servicehandler/ModelMappingUtils.java | 363 ++++++----- .../impl/ServicehandlerImpl.java | 565 ++++++++++-------- .../ServiceDataStoreOperationsImpl.java | 254 ++++---- .../validation/ServiceCreateValidation.java | 6 +- .../checks/ComplianceCheckResult.java | 9 + .../checks/ServicehandlerComplianceCheck.java | 107 ++++ .../checks/ServicehandlerCompliancyCheck.java | 96 --- .../checks/ServicehandlerTxRxCheck.java | 156 +++-- .../impl/ServicehandlerImplTest.java | 4 +- .../ServiceDataStoreOperationsImplTest.java | 11 +- ...=> ServicehandlerComplianceCheckTest.java} | 42 +- .../checks/ServicehandlerTxRxCheckTest.java | 114 ++-- 13 files changed, 964 insertions(+), 769 deletions(-) create mode 100644 servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheck.java delete mode 100644 servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerCompliancyCheck.java rename servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/{ServicehandlerCompliancyCheckTest.java => ServicehandlerComplianceCheckTest.java} (64%) diff --git a/servicehandler/pom.xml b/servicehandler/pom.xml index 9b90f9596..cc3c95419 100644 --- a/servicehandler/pom.xml +++ b/servicehandler/pom.xml @@ -45,10 +45,4 @@ Author: Martial Coulibaly on behalf of Orange - - - - false - - diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/ModelMappingUtils.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/ModelMappingUtils.java index 8561321a7..46d1ccacd 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/ModelMappingUtils.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/ModelMappingUtils.java @@ -63,14 +63,61 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public final class ModelMappingUtils { + private static final Logger LOG = LoggerFactory.getLogger(ModelMappingUtils.class); + private ModelMappingUtils() { } public static ServiceImplementationRequestInput createServiceImplementationRequest(ServiceInput input, PathDescription pathDescription) { + + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .service.implementation.request.input.ServiceAEndBuilder serviceAEnd = + new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .service.implementation.request.input.ServiceAEndBuilder() + .setServiceFormat(input.getServiceAEnd().getServiceFormat()) + .setServiceRate(input.getServiceAEnd().getServiceRate()) + .setClli(input.getServiceAEnd().getClli()) + .setNodeId(new NodeIdType(input.getServiceAEnd().getNodeId().getValue()).getValue()) + .setTxDirection(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder() + .setPort(input.getServiceAEnd().getTxDirection().getPort()) + .build()) + .setRxDirection(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder() + .setPort(input.getServiceAEnd().getRxDirection().getPort()) + .build()); + + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .service.implementation.request.input.ServiceZEndBuilder serviceZEnd = + new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .service.implementation.request.input.ServiceZEndBuilder() + .setServiceFormat(input.getServiceZEnd().getServiceFormat()) + .setServiceRate(input.getServiceZEnd().getServiceRate()) + .setClli(input.getServiceZEnd().getClli()) + .setNodeId(new NodeIdType(input.getServiceZEnd().getNodeId().getValue()).getValue()) + .setTxDirection(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder() + .setPort(input.getServiceZEnd().getTxDirection().getPort()) + .build()) + .setRxDirection(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder() + .setPort(input.getServiceZEnd().getRxDirection().getPort()) + .build()); + + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .service.implementation.request.input.PathDescriptionBuilder pathDescBuilder = + new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .service.implementation.request.input.PathDescriptionBuilder() + .setAToZDirection(pathDescription.getAToZDirection()) + .setZToADirection(pathDescription.getZToADirection()); + ServiceImplementationRequestInputBuilder serviceImplementationRequestInputBuilder = new ServiceImplementationRequestInputBuilder(); if (input.isServiceReconfigure()) { @@ -78,182 +125,171 @@ public final class ModelMappingUtils { } else { serviceImplementationRequestInputBuilder.setServiceName(input.getServiceName()); } - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.service.implementation - .request.input.ServiceAEndBuilder serviceAEnd = new org.opendaylight.yang.gen.v1.http.org.opendaylight - .transportpce.renderer.rev171017.service.implementation.request.input.ServiceAEndBuilder(); - serviceAEnd.setServiceFormat(input.getServiceAEnd().getServiceFormat()) - .setServiceRate(input.getServiceAEnd().getServiceRate()).setClli(input.getServiceAEnd().getClli()) - .setNodeId(new NodeIdType(input.getServiceAEnd().getNodeId().getValue()).getValue()) - .setTxDirection(new org.opendaylight.yang.gen.v1.http.org - .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder() - .setPort(input.getServiceAEnd().getTxDirection().getPort()).build()) - .setRxDirection(new org.opendaylight.yang.gen.v1.http.org - .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder() - .setPort(input.getServiceAEnd().getRxDirection().getPort()).build()); - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.service.implementation - .request.input.ServiceZEndBuilder serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.opendaylight - .transportpce.renderer.rev171017.service.implementation.request.input.ServiceZEndBuilder(); - serviceZEnd.setServiceFormat(input.getServiceZEnd().getServiceFormat()) - .setServiceRate(input.getServiceZEnd().getServiceRate()).setClli(input.getServiceZEnd().getClli()) - .setNodeId(new NodeIdType(input.getServiceZEnd().getNodeId().getValue()).getValue()) - .setTxDirection(new org.opendaylight.yang.gen.v1.http.org - .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder() - .setPort(input.getServiceZEnd().getTxDirection().getPort()).build()) - .setRxDirection(new org.opendaylight.yang.gen.v1.http.org - .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder() - .setPort(input.getServiceZEnd().getRxDirection().getPort()).build()); - serviceImplementationRequestInputBuilder - .setServiceAEnd(serviceAEnd.build()) - .setServiceZEnd(serviceZEnd.build()) - .setServiceHandlerHeader( - new ServiceHandlerHeaderBuilder().setRequestId(input.getSdncRequestHeader().getRequestId()).build()); - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.service.implementation - .request.input.PathDescriptionBuilder pathDescBuilder = new org.opendaylight.yang.gen.v1.http.org - .opendaylight.transportpce.renderer.rev171017.service.implementation.request.input - .PathDescriptionBuilder(); - pathDescBuilder - .setAToZDirection(pathDescription.getAToZDirection()) - .setZToADirection(pathDescription.getZToADirection()); - serviceImplementationRequestInputBuilder.setPathDescription(pathDescBuilder.build()); - return serviceImplementationRequestInputBuilder.build(); + + return serviceImplementationRequestInputBuilder + .setServiceAEnd(serviceAEnd.build()) + .setServiceZEnd(serviceZEnd.build()) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder() + .setRequestId(input.getSdncRequestHeader().getRequestId()) + .build()) + .setPathDescription(pathDescBuilder.build()) + .build(); } public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteInput createServiceDeleteInput(ServiceInput serviceInput) { - ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder() - .setServiceName(serviceInput.getServiceName()) - .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder() - .setRequestId(serviceInput.getSdncRequestHeader().getRequestId()).build()); - return builder.build(); + .ServiceDeleteInput createServiceDeleteInput(ServiceInput serviceInput) { + return new ServiceDeleteInputBuilder() + .setServiceName(serviceInput.getServiceName()) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder() + .setRequestId(serviceInput.getSdncRequestHeader().getRequestId()) + .build()) + .build(); } public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteInput createServiceDeleteInput(ServiceRerouteInput serviceRerouteinput, Services services) { - ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder() - .setServiceName(serviceRerouteinput.getServiceName()) - .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId( - services.getSdncRequestHeader().getRequestId()).build()); - return builder.build(); + .ServiceDeleteInput createServiceDeleteInput(ServiceRerouteInput serviceRerouteinput, Services services) { + return new ServiceDeleteInputBuilder() + .setServiceName(serviceRerouteinput.getServiceName()) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder() + .setRequestId(services.getSdncRequestHeader().getRequestId()) + .build()) + .build(); } public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteInput createServiceDeleteInput(ServiceRestorationInput serviceRestorationInput, + .ServiceDeleteInput createServiceDeleteInput(ServiceRestorationInput serviceRestorationInput, Services services) { - ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder() - .setServiceName(serviceRestorationInput.getServiceName()) - .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId( - services.getSdncRequestHeader().getRequestId()).build()); - return builder.build(); + return new ServiceDeleteInputBuilder() + .setServiceName(serviceRestorationInput.getServiceName()) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder() + .setRequestId(services.getSdncRequestHeader().getRequestId()) + .build()) + .build(); } public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.ServiceDeleteInput createServiceDeleteInput(ServiceReconfigureInput serviceReconfigureInput) { - String serviceName = serviceReconfigureInput.getServiceName(); - ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder() - .setServiceName(serviceReconfigureInput.getServiceName()) - .setServiceHandlerHeader( - new ServiceHandlerHeaderBuilder().setRequestId(serviceName + "-reconfigure").build()); - return builder.build(); + return new ServiceDeleteInputBuilder() + .setServiceName(serviceReconfigureInput.getServiceName()) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder() + .setRequestId(serviceReconfigureInput.getServiceName() + "-reconfigure") + .build()) + .build(); } - public static ServiceAEnd createServiceAEnd(org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types - .rev190531.ServiceEndpoint serviceAEnd) { - ServiceAEndBuilder serviceAEndBuilder = new ServiceAEndBuilder() - .setClli(serviceAEnd.getClli()) - .setNodeId(serviceAEnd.getNodeId().getValue()) - .setRxDirection(createRxDirection(serviceAEnd.getRxDirection())) - .setServiceFormat(serviceAEnd.getServiceFormat()) - .setServiceRate(serviceAEnd.getServiceRate()) - .setTxDirection(createTxDirection(serviceAEnd.getTxDirection())); - return serviceAEndBuilder.build(); + public static ServiceAEnd createServiceAEnd(org.opendaylight.yang.gen.v1.http + .org.openroadm.common.service.types.rev190531.ServiceEndpoint serviceAEnd) { + return new ServiceAEndBuilder() + .setClli(serviceAEnd.getClli()) + .setNodeId(serviceAEnd.getNodeId().getValue()) + .setRxDirection(createRxDirection(serviceAEnd.getRxDirection())) + .setServiceFormat(serviceAEnd.getServiceFormat()) + .setServiceRate(serviceAEnd.getServiceRate()) + .setTxDirection(createTxDirection(serviceAEnd.getTxDirection())) + .build(); } - public static ServiceZEnd createServiceZEnd(org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types - .rev190531.ServiceEndpoint serviceZEnd) { - ServiceZEndBuilder serviceZEndBuilder = new ServiceZEndBuilder() - .setClli(serviceZEnd.getClli()) - .setNodeId(serviceZEnd.getNodeId().getValue()) - .setRxDirection(createRxDirection(serviceZEnd.getRxDirection())) - .setServiceFormat(serviceZEnd.getServiceFormat()) - .setServiceRate(serviceZEnd.getServiceRate()) - .setTxDirection(createTxDirection(serviceZEnd.getTxDirection())); - return serviceZEndBuilder.build(); + public static ServiceZEnd createServiceZEnd(org.opendaylight.yang.gen.v1.http + .org.openroadm.common.service.types.rev190531.ServiceEndpoint serviceZEnd) { + return new ServiceZEndBuilder() + .setClli(serviceZEnd.getClli()) + .setNodeId(serviceZEnd.getNodeId().getValue()) + .setRxDirection(createRxDirection(serviceZEnd.getRxDirection())) + .setServiceFormat(serviceZEnd.getServiceFormat()) + .setServiceRate(serviceZEnd.getServiceRate()) + .setTxDirection(createTxDirection(serviceZEnd.getTxDirection())) + .build(); } public static RxDirection createRxDirection(org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types .rev190531.service.endpoint.RxDirection rxDirection) { - RxDirectionBuilder rxDirectionBuilder = new RxDirectionBuilder().setPort(rxDirection.getPort()); - return rxDirectionBuilder.build(); + return new RxDirectionBuilder() + .setPort(rxDirection.getPort()) + .build(); } public static TxDirection createTxDirection(org.opendaylight.yang.gen.v1.http.org.openroadm.common.service .types.rev190531.service.endpoint.TxDirection txDirection) { - TxDirectionBuilder txDirectionBuilder = new TxDirectionBuilder().setPort(txDirection.getPort()); - return txDirectionBuilder.build(); + return new TxDirectionBuilder() + .setPort(txDirection.getPort()) + .build(); } public static ListenableFuture> createDeleteServiceReply(ServiceDeleteInput input, String finalAck, String message, String responseCode) { + LOG.debug("createDeleteServiceReply : {}", message); ConfigurationResponseCommonBuilder builder = new ConfigurationResponseCommonBuilder() - .setAckFinalIndicator(finalAck).setResponseMessage(message).setResponseCode(responseCode); + .setAckFinalIndicator(finalAck) + .setResponseMessage(message) + .setResponseCode(responseCode); if (input.getSdncRequestHeader() != null) { builder.setRequestId(input.getSdncRequestHeader().getRequestId()); } else { builder.setRequestId(null); } ConfigurationResponseCommon configurationResponseCommon = builder.build(); - ServiceDeleteOutput output = - new ServiceDeleteOutputBuilder().setConfigurationResponseCommon(configurationResponseCommon).build(); + ServiceDeleteOutput output = new ServiceDeleteOutputBuilder() + .setConfigurationResponseCommon(configurationResponseCommon) + .build(); return RpcResultBuilder.success(output).buildFuture(); } public static ListenableFuture> createDeleteServiceReply( TempServiceDeleteInput input, String finalAck, String message, String responseCode) { - ConfigurationResponseCommonBuilder builder = new ConfigurationResponseCommonBuilder() + LOG.debug("createDeleteServiceReply : {}", message); + ConfigurationResponseCommonBuilder configurationResponseCommon = + new ConfigurationResponseCommonBuilder() .setAckFinalIndicator(finalAck) .setResponseMessage(message) .setResponseCode(responseCode) .setRequestId(null); - ConfigurationResponseCommon configurationResponseCommon = builder.build(); TempServiceDeleteOutput output = new TempServiceDeleteOutputBuilder() - .setConfigurationResponseCommon(configurationResponseCommon).build(); + .setConfigurationResponseCommon(configurationResponseCommon.build()) + .build(); return RpcResultBuilder.success(output).buildFuture(); } public static ListenableFuture> createCreateServiceReply(ServiceCreateInput input, String finalAck, String message, String responseCode) { + LOG.debug("createCreateServiceReply : {}", message); ResponseParametersBuilder responseParameters = new ResponseParametersBuilder(); ConfigurationResponseCommonBuilder configurationResponseCommon = new ConfigurationResponseCommonBuilder() - .setAckFinalIndicator(finalAck).setResponseMessage(message).setResponseCode(responseCode); + .setAckFinalIndicator(finalAck) + .setResponseMessage(message) + .setResponseCode(responseCode); if (input.getSdncRequestHeader() != null) { configurationResponseCommon.setRequestId(input.getSdncRequestHeader().getRequestId()); } else { configurationResponseCommon.setRequestId(null); } - ServiceCreateOutputBuilder output = - new ServiceCreateOutputBuilder().setConfigurationResponseCommon(configurationResponseCommon.build()) - .setResponseParameters(responseParameters.build()); + ServiceCreateOutputBuilder output = new ServiceCreateOutputBuilder() + .setConfigurationResponseCommon(configurationResponseCommon.build()) + .setResponseParameters(responseParameters.build()); return RpcResultBuilder.success(output.build()).buildFuture(); } public static ListenableFuture> createCreateServiceReply( TempServiceCreateInput input, String finalAck, String message, String responseCode) { - ResponseParametersBuilder responseParameters = new ResponseParametersBuilder(); - ConfigurationResponseCommonBuilder configurationResponseCommon = new ConfigurationResponseCommonBuilder() - .setAckFinalIndicator(finalAck).setResponseMessage(message).setResponseCode(responseCode); + LOG.debug("createCreateServiceReply : {}", message); + ConfigurationResponseCommonBuilder configurationResponseCommon = + new ConfigurationResponseCommonBuilder() + .setAckFinalIndicator(finalAck) + .setResponseMessage(message) + .setResponseCode(responseCode); if (input.getSdncRequestHeader() != null) { configurationResponseCommon.setRequestId(input.getSdncRequestHeader().getRequestId()); } else { configurationResponseCommon.setRequestId(null); } - TempServiceCreateOutputBuilder output = - new TempServiceCreateOutputBuilder().setConfigurationResponseCommon(configurationResponseCommon.build()) - .setResponseParameters(responseParameters.build()); + TempServiceCreateOutputBuilder output = new TempServiceCreateOutputBuilder() + .setConfigurationResponseCommon(configurationResponseCommon.build()) + .setResponseParameters(new ResponseParametersBuilder().build()); return RpcResultBuilder.success(output.build()).buildFuture(); } public static ListenableFuture> createCreateServiceReply( ServiceFeasibilityCheckInput input, String finalAck, String message, String responseCode) { + LOG.debug("createCreateServiceReply : {}", message); ResponseParametersBuilder responseParameters = new ResponseParametersBuilder(); ConfigurationResponseCommonBuilder configurationResponseCommon = new ConfigurationResponseCommonBuilder() .setAckFinalIndicator(finalAck).setResponseMessage(message).setResponseCode(responseCode); @@ -270,6 +306,7 @@ public final class ModelMappingUtils { public static ListenableFuture> createCreateServiceReply( ServiceReconfigureInput input, String message, RpcStatus rpcStatus) { + LOG.debug("createCreateServiceReply : {}", message); ServiceReconfigureOutputBuilder output = new ServiceReconfigureOutputBuilder() .setStatus(rpcStatus) .setStatusMessage(message); @@ -278,6 +315,7 @@ public final class ModelMappingUtils { public static ListenableFuture> createRerouteServiceReply(ServiceRerouteInput input, String finalAckYes, String message, RpcStatus status) { + LOG.debug("createRerouteServiceReply : {}", message); ServiceRerouteOutputBuilder output = new ServiceRerouteOutputBuilder() .setHardConstraints(null) .setSoftConstraints(null) @@ -288,6 +326,7 @@ public final class ModelMappingUtils { public static ListenableFuture> createRestoreServiceReply(String message, RpcStatus status) { + LOG.debug("createRestoreServiceReply : {}", message); ServiceRestorationOutputBuilder output = new ServiceRestorationOutputBuilder() .setStatus(status) .setStatusMessage(message); @@ -355,61 +394,79 @@ public final class ModelMappingUtils { } public static ServicePaths mappingServicePaths(ServiceInput serviceInput, PathComputationRequestOutput output) { - ServicePathsBuilder servicePathBuilder = new ServicePathsBuilder(); - if (serviceInput != null) { - org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128 + if (serviceInput == null) { + return new ServicePathsBuilder().build(); + } + + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128 .service.path.ServiceAEndBuilder serviceAEnd = - new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128 - .service.path.ServiceAEndBuilder(); - serviceAEnd.setServiceFormat(serviceInput.getServiceAEnd().getServiceFormat()) - .setServiceRate(serviceInput.getServiceAEnd().getServiceRate()) - .setClli(serviceInput.getServiceAEnd().getClli()) - .setNodeId(new NodeIdType(serviceInput.getServiceAEnd().getNodeId()).getValue()) - .setTxDirection(new org.opendaylight.yang.gen.v1.http.org - .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder() - .setPort(serviceInput.getServiceAEnd().getTxDirection().getPort()).build()) - .setRxDirection(new org.opendaylight.yang.gen.v1.http.org - .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder() - .setPort(serviceInput.getServiceAEnd().getRxDirection().getPort()).build()); - org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128 + new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128 + .service.path.ServiceAEndBuilder() + .setServiceFormat(serviceInput.getServiceAEnd().getServiceFormat()) + .setServiceRate(serviceInput.getServiceAEnd().getServiceRate()) + .setClli(serviceInput.getServiceAEnd().getClli()) + .setNodeId(new NodeIdType(serviceInput.getServiceAEnd().getNodeId()).getValue()) + .setTxDirection(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.service.types.rev200128 + .service.endpoint.sp.TxDirectionBuilder() + .setPort(serviceInput.getServiceAEnd().getTxDirection().getPort()) + .build()) + .setRxDirection(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.service.types.rev200128 + .service.endpoint.sp.RxDirectionBuilder() + .setPort(serviceInput.getServiceAEnd().getRxDirection().getPort()) + .build()); + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128 .service.path.ServiceZEndBuilder serviceZEnd = - new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128 - .service.path.ServiceZEndBuilder(); - serviceZEnd.setServiceFormat(serviceInput.getServiceZEnd().getServiceFormat()) - .setServiceRate(serviceInput.getServiceZEnd().getServiceRate()) - .setClli(serviceInput.getServiceZEnd().getClli()) - .setNodeId(new NodeIdType(serviceInput.getServiceZEnd().getNodeId()).getValue()) - .setTxDirection(new org.opendaylight.yang.gen.v1.http.org - .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder() - .setPort(serviceInput.getServiceZEnd().getTxDirection().getPort()).build()) - .setRxDirection(new org.opendaylight.yang.gen.v1.http.org - .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder() - .setPort(serviceInput.getServiceZEnd().getRxDirection().getPort()).build()); - servicePathBuilder.setServiceAEnd(serviceAEnd.build()); - servicePathBuilder.setServiceZEnd(serviceZEnd.build()); - MappingConstraints mapConstraints = new MappingConstraints(serviceInput.getHardConstraints(), - serviceInput.getSoftConstraints()); - mapConstraints.serviceToServicePathConstarints(); - if (mapConstraints.getServicePathHardConstraints() != null) { - HardConstraintsBuilder hardConstraintBuilder = new HardConstraintsBuilder() + new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128 + .service.path.ServiceZEndBuilder() + .setServiceFormat(serviceInput.getServiceZEnd().getServiceFormat()) + .setServiceRate(serviceInput.getServiceZEnd().getServiceRate()) + .setClli(serviceInput.getServiceZEnd().getClli()) + .setNodeId(new NodeIdType(serviceInput.getServiceZEnd().getNodeId()).getValue()) + .setTxDirection(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.service.types.rev200128 + .service.endpoint.sp.TxDirectionBuilder() + .setPort(serviceInput.getServiceZEnd().getTxDirection().getPort()) + .build()) + .setRxDirection(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.service.types.rev200128 + .service.endpoint.sp.RxDirectionBuilder() + .setPort(serviceInput.getServiceZEnd().getRxDirection().getPort()) + .build()); + ServicePathsBuilder servicePathBuilder = new ServicePathsBuilder() + .setServiceAEnd(serviceAEnd.build()) + .setServiceZEnd(serviceZEnd.build()); + MappingConstraints mapConstraints = new MappingConstraints( + serviceInput.getHardConstraints(), + serviceInput.getSoftConstraints() + ); + mapConstraints.serviceToServicePathConstarints(); + if (mapConstraints.getServicePathHardConstraints() != null) { + servicePathBuilder.setHardConstraints( + new HardConstraintsBuilder() .setCustomerCode(serviceInput.getHardConstraints().getCustomerCode()) - .setCoRoutingOrGeneral(mapConstraints.getServicePathHardConstraints().getCoRoutingOrGeneral()); - servicePathBuilder.setHardConstraints(hardConstraintBuilder.build()); - } - if (mapConstraints.getServicePathSoftConstraints() != null) { - SoftConstraintsBuilder softConstraintBuilder = new SoftConstraintsBuilder() + .setCoRoutingOrGeneral(mapConstraints.getServicePathHardConstraints().getCoRoutingOrGeneral()) + .build() + ); + } + if (mapConstraints.getServicePathSoftConstraints() != null) { + servicePathBuilder.setSoftConstraints( + new SoftConstraintsBuilder() .setCustomerCode(mapConstraints.getServicePathSoftConstraints().getCustomerCode()) - .setCoRoutingOrGeneral(mapConstraints.getServicePathSoftConstraints().getCoRoutingOrGeneral()); - servicePathBuilder.setSoftConstraints(softConstraintBuilder.build()); - } - servicePathBuilder.setServicePathName(serviceInput.getServiceName()); - servicePathBuilder.setServiceHandlerHeader(new ServiceHandlerHeaderBuilder() - .setRequestId(serviceInput.getSdncRequestHeader().getRequestId()).build()); - if (output.getResponseParameters().getPathDescription() != null) { - PathDescriptionBuilder pathDescBuilder = - new PathDescriptionBuilder(output.getResponseParameters().getPathDescription()); - servicePathBuilder.setPathDescription(pathDescBuilder.build()); - } + .setCoRoutingOrGeneral(mapConstraints.getServicePathSoftConstraints().getCoRoutingOrGeneral()) + .build() + ); + } + servicePathBuilder + .setServicePathName(serviceInput.getServiceName()) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder() + .setRequestId(serviceInput.getSdncRequestHeader().getRequestId()) + .build()); + if (output.getResponseParameters().getPathDescription() != null) { + servicePathBuilder.setPathDescription( + new PathDescriptionBuilder(output.getResponseParameters().getPathDescription()).build() + ); } return servicePathBuilder.build(); diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java index 731ce9cff..9d4482b5b 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java @@ -30,7 +30,7 @@ import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOper import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl; import org.opendaylight.transportpce.servicehandler.validation.ServiceCreateValidation; import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult; -import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerCompliancyCheck; +import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestOutput; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.RpcActions; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ServiceNotificationTypes; @@ -116,16 +116,51 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { this.rendererListenerImpl = rendererListenerImpl; } + + // This is class is public so that these messages can be accessed from Junit (avoid duplications). + public static final class LogMessages { + + public static final String PCE_CALLING; + public static final String ABORT_PCE_FAILED; + public static final String PCE_FAILED; + public static final String ABORT_SERVICE_NON_COMPLIANT; + public static final String SERVICE_NON_COMPLIANT; + public static final String RENDERER_DELETE_FAILED; + public static final String ABORT_VALID_FAILED; + + // Static blocks are generated once and spare memory. + static { + PCE_CALLING = "Calling PCE"; + ABORT_PCE_FAILED = "Aborting: PCE calculation failed "; + PCE_FAILED = "PCE calculation failed"; + ABORT_SERVICE_NON_COMPLIANT = "Aborting: non-compliant service "; + SERVICE_NON_COMPLIANT = "non-compliant service"; + RENDERER_DELETE_FAILED = "Renderer service delete failed"; + ABORT_VALID_FAILED = "Aborting: validation of service create request failed"; + } + + public static String serviceNotInDS(String serviceName) { + return "Service '" + serviceName + "' does not exist in datastore"; + } + + public static String serviceInService(String serviceName) { + return "Service '" + serviceName + "' is in 'inService' state"; + } + + private LogMessages() { + } + } + @Override public ListenableFuture> serviceCreate(ServiceCreateInput input) { - LOG.info("RPC service creation received"); + LOG.info("RPC serviceCreate received"); // Validation OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest( new ServiceInput(input), RpcActions.ServiceCreate); if (! validationResult.isSuccess()) { - LOG.warn("Aborting service create because validation of service create request failed: {}", - validationResult.getResultMessage()); - return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES, + LOG.warn("serviceCreate: {}", LogMessages.ABORT_VALID_FAILED); + return ModelMappingUtils.createCreateServiceReply( + input, ResponseCodes.FINAL_ACK_YES, validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED); } this.pceListenerImpl.setInput(new ServiceInput(input)); @@ -133,95 +168,95 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations); this.rendererListenerImpl.setServiceInput(new ServiceInput(input)); - LOG.info("Commencing PCE"); + LOG.debug("serviceCreate: {}", LogMessages.PCE_CALLING); PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true); - if (output != null) { - LOG.info("Service compliant, serviceCreate in progress..."); - ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); - return ModelMappingUtils.createCreateServiceReply(input, common.getAckFinalIndicator(), - common.getResponseMessage(), common.getResponseCode()); - } else { + if (output == null) { + LOG.warn("serviceCreate: {}", LogMessages.ABORT_PCE_FAILED); return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES, - "PCE calculation failed", ResponseCodes.RESPONSE_FAILED); + LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED); } + LOG.info("RPC serviceCreate in progress..."); + ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); + return ModelMappingUtils.createCreateServiceReply( + input, common.getAckFinalIndicator(), + common.getResponseMessage(), common.getResponseCode()); } @Override public ListenableFuture> serviceDelete(ServiceDeleteInput input) { - LOG.info("RPC serviceDelete request received for {}", input.getServiceDeleteReqInfo().getServiceName()); - String message = ""; + String serviceName = input.getServiceDeleteReqInfo().getServiceName(); + LOG.info("RPC serviceDelete request received for {}", serviceName); /* * Upon receipt of service-deleteService RPC, service header and sdnc-request - * header compliancy are verified. + * header compliance are verified. */ - LOG.info("checking Service Compliancy ..."); ComplianceCheckResult serviceHandlerCheckResult = - ServicehandlerCompliancyCheck.check( + ServicehandlerComplianceCheck.check( input.getServiceDeleteReqInfo().getServiceName(), input.getSdncRequestHeader(), null, RpcActions.ServiceDelete, false, true); - if (serviceHandlerCheckResult.hasPassed()) { - LOG.info("Service compliant !"); - } else { - LOG.info("Service is not compliant !"); - return ModelMappingUtils - .createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, - "Service not compliant !", ResponseCodes.RESPONSE_FAILED); + if (!serviceHandlerCheckResult.hasPassed()) { + LOG.warn("serviceDelete: {}", LogMessages.ABORT_SERVICE_NON_COMPLIANT); + return ModelMappingUtils.createDeleteServiceReply( + input, ResponseCodes.FINAL_ACK_YES, + LogMessages.SERVICE_NON_COMPLIANT, ResponseCodes.RESPONSE_FAILED); } //Check presence of service to be deleted - String serviceName = input.getServiceDeleteReqInfo().getServiceName(); - LOG.info("serviceName : {}", serviceName); - try { - Optional service = this.serviceDataStoreOperations.getService(serviceName); - if (!service.isPresent()) { - message = "Service '" + serviceName + "' does not exist in datastore"; - LOG.error(message); - return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, - message, ResponseCodes.RESPONSE_FAILED); - } - } catch (NullPointerException e) { - LOG.error("failed to get service '{}' from datastore : ", serviceName, e); - message = "Service '" + serviceName + "' does not exist in datastore"; - LOG.error(message); - return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, message, - ResponseCodes.RESPONSE_FAILED); +//TODO check if an expected bug was justifying this NPE handling +// try { + Optional service = this.serviceDataStoreOperations.getService(serviceName); +// } catch (NullPointerException e) { +// LOG.error("Something wrong when retrieving service '{}' from datastore : ", serviceName, e); +// return ModelMappingUtils.createDeleteServiceReply( +// input, ResponseCodes.FINAL_ACK_YES, +// LogMessages.serviceNotInDS(serviceName), ResponseCodes.RESPONSE_FAILED); +// } + if (!service.isPresent()) { + LOG.warn("serviceDelete: {}", LogMessages.serviceNotInDS(serviceName)); + return ModelMappingUtils.createDeleteServiceReply( + input, ResponseCodes.FINAL_ACK_YES, + LogMessages.serviceNotInDS(serviceName), ResponseCodes.RESPONSE_FAILED); } - LOG.info("Service '{}' present in datastore !", serviceName); + LOG.debug("serviceDelete: Service '{}' found in datastore", serviceName); this.pceListenerImpl.setInput(new ServiceInput(input)); this.pceListenerImpl.setServiceReconfigure(false); this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations); this.rendererListenerImpl.setServiceInput(new ServiceInput(input)); org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput( - new ServiceInput(input)); + .ServiceDeleteInput serviceDeleteInput = + ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input)); org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.ServiceDeleteOutput output = - this.rendererServiceWrapper.performRenderer(serviceDeleteInput, - ServiceNotificationTypes.ServiceDeleteResult); - if (output != null) { - LOG.info("Service present in datastore, service-delete in progress..."); - ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); - return ModelMappingUtils.createDeleteServiceReply(input, common.getAckFinalIndicator(), - common.getResponseMessage(), common.getResponseCode()); - } else { - return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, - "Renderer service delete failed !", ResponseCodes.RESPONSE_FAILED); + this.rendererServiceWrapper.performRenderer( + serviceDeleteInput, ServiceNotificationTypes.ServiceDeleteResult); + + if (output == null) { + LOG.error("serviceDelete: {}", LogMessages.RENDERER_DELETE_FAILED); + return ModelMappingUtils.createDeleteServiceReply( + input, ResponseCodes.FINAL_ACK_YES, + LogMessages.RENDERER_DELETE_FAILED, ResponseCodes.RESPONSE_FAILED); } + + LOG.debug("RPC serviceDelete in progress..."); + ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); + return ModelMappingUtils.createDeleteServiceReply( + input, common.getAckFinalIndicator(), + common.getResponseMessage(), common.getResponseCode()); } @Override public ListenableFuture> serviceFeasibilityCheck( ServiceFeasibilityCheckInput input) { - LOG.info("RPC service feasibility check received"); + LOG.info("RPC serviceFeasibilityCheck received"); // Validation ServiceInput serviceInput = new ServiceInput(input); OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(serviceInput, RpcActions.ServiceFeasibilityCheck); if (! validationResult.isSuccess()) { - LOG.warn("Aborting service feasibility check because validation of service create request failed: {}", - validationResult.getResultMessage()); - return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES, + LOG.warn("serviceFeasabilityCheck: {}", LogMessages.ABORT_VALID_FAILED); + return ModelMappingUtils.createCreateServiceReply( + input, ResponseCodes.FINAL_ACK_YES, validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED); } this.pceListenerImpl.setInput(new ServiceInput(input)); @@ -230,134 +265,141 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations); this.rendererListenerImpl.setServiceInput(new ServiceInput(input)); - LOG.info("Commencing PCE"); + LOG.debug("serviceFeasabilityCheck: {}", LogMessages.PCE_CALLING); PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true); - if (output != null) { - LOG.info("Service compliant, serviceFeasibilityCheck in progress..."); - ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); - return ModelMappingUtils.createCreateServiceReply(input, common.getAckFinalIndicator(), - common.getResponseMessage(), common.getResponseCode()); - } else { + if (output == null) { + LOG.warn("serviceFeasabilityCheck: {}", LogMessages.ABORT_PCE_FAILED); return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES, - "PCE calculation failed", ResponseCodes.RESPONSE_FAILED); + LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED); } + LOG.info("RPC serviceFeasibilityCheck in progress..."); + ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); + return ModelMappingUtils.createCreateServiceReply( + input, common.getAckFinalIndicator(), + common.getResponseMessage(), common.getResponseCode()); } @Override public ListenableFuture> serviceReconfigure(ServiceReconfigureInput input) { - LOG.info("RPC service reconfigure received"); - String message = ""; - Optional servicesObject = this.serviceDataStoreOperations.getService(input.getServiceName()); - if (servicesObject.isPresent()) { - LOG.info("Service '{}' is present", input.getServiceName()); - OperationResult validationResult = ServiceCreateValidation - .validateServiceCreateRequest(new ServiceInput(input), RpcActions.ServiceReconfigure); - if (!validationResult.isSuccess()) { - LOG.warn("Aborting service reconfigure because validation of service create request failed: {}", - validationResult.getResultMessage()); - return ModelMappingUtils.createCreateServiceReply(input, validationResult.getResultMessage(), - RpcStatus.Failed); - } - this.pceListenerImpl.setInput(new ServiceInput(input)); - this.pceListenerImpl.setServiceReconfigure(true); - this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); - this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations); - this.rendererListenerImpl.setServiceInput(new ServiceInput(input)); - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteInput serviceDeleteInput = - ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input)); - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput, - ServiceNotificationTypes.ServiceDeleteResult); - if (output != null) { - LOG.info("Service compliant, service reconfigure in progress..."); - ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); - return ModelMappingUtils.createCreateServiceReply(input, common.getResponseMessage(), - RpcStatus.Successful); - } else { - return ModelMappingUtils.createCreateServiceReply(input, "Renderer service delete failed !", - RpcStatus.Successful); - } - } else { - LOG.error("Service '{}' is not present", input.getServiceName()); - message = "Service '" + input.getServiceName() + "' is not present"; - return ModelMappingUtils.createCreateServiceReply(input, message, RpcStatus.Failed); + String serviceName = input.getServiceName(); + LOG.info("RPC serviceReconfigure received for {}", serviceName); + Optional servicesObject = this.serviceDataStoreOperations.getService(serviceName); + if (!servicesObject.isPresent()) { + LOG.warn("serviceReconfigure: {}", LogMessages.serviceNotInDS(serviceName)); + return ModelMappingUtils.createCreateServiceReply( + input, + LogMessages.serviceNotInDS(serviceName), RpcStatus.Failed); + } + LOG.debug("Service '{}' found in datastore", serviceName); + OperationResult validationResult = ServiceCreateValidation + .validateServiceCreateRequest(new ServiceInput(input), RpcActions.ServiceReconfigure); + if (!validationResult.isSuccess()) { + LOG.warn("serviceReconfigure: {}", LogMessages.ABORT_VALID_FAILED); + return ModelMappingUtils.createCreateServiceReply( + input, + validationResult.getResultMessage(), RpcStatus.Failed); } + this.pceListenerImpl.setInput(new ServiceInput(input)); + this.pceListenerImpl.setServiceReconfigure(true); + this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); + this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations); + this.rendererListenerImpl.setServiceInput(new ServiceInput(input)); + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .ServiceDeleteInput serviceDeleteInput = + ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input)); + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput, + ServiceNotificationTypes.ServiceDeleteResult); + if (output == null) { + LOG.error("serviceReconfigure: {}", LogMessages.RENDERER_DELETE_FAILED); + return ModelMappingUtils.createCreateServiceReply( + input, + LogMessages.RENDERER_DELETE_FAILED, RpcStatus.Successful); + //TODO check if RpcStatus.Successful is really expected here + } + LOG.info("RPC serviceReconfigure in progress..."); + ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); + return ModelMappingUtils.createCreateServiceReply( + input, + common.getResponseMessage(), RpcStatus.Successful); } @Override public ListenableFuture> serviceRestoration(ServiceRestorationInput input) { - LOG.info("RPC service restoration received"); - String message = ""; String serviceName = input.getServiceName(); + LOG.info("RPC serviceRestoration received for {}", serviceName); Optional servicesObject = this.serviceDataStoreOperations.getService(serviceName); - if (servicesObject.isPresent()) { - Services service = servicesObject.get(); - State state = service.getOperationalState(); - if (state != State.InService) { - ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder(); - DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx"); - OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC); - DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime)); - deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder() - .setServiceName(serviceName).setDueDate(datetime) - .setTailRetention(TailRetention.No).build()); - SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder() - .setNotificationUrl(service.getSdncRequestHeader().getNotificationUrl()) - .setRequestId(service.getSdncRequestHeader().getRequestId()) - .setRequestSystemId(service.getSdncRequestHeader().getRequestSystemId()) - .setRpcAction(RpcActions.ServiceDelete); - deleteInputBldr.setSdncRequestHeader(sdncBuilder.build()); - ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build()); - serviceInput.setServiceAEnd(service.getServiceAEnd()); - serviceInput.setServiceZEnd(service.getServiceZEnd()); - serviceInput.setConnectionType(service.getConnectionType()); - HardConstraints hardConstraints = service.getHardConstraints(); - if (hardConstraints != null) { - SoftConstraints softConstraints = service.getSoftConstraints(); - if (softConstraints != null) { - LOG.info("converting hard constraints to soft constraints ..."); - serviceInput.setSoftConstraints( - DowngradeConstraints.updateSoftConstraints(hardConstraints, softConstraints)); - serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints)); - } else { - LOG.warn("service '{}' SoftConstraints is not set !", serviceName); - serviceInput.setSoftConstraints(DowngradeConstraints.convertToSoftConstraints(hardConstraints)); - serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints)); - } - } else { - LOG.warn("service '{}' HardConstraints is not set !", serviceName); - } - this.pceListenerImpl.setInput(serviceInput); - this.pceListenerImpl.setServiceReconfigure(true); - this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); - this.rendererListenerImpl.setServiceInput(serviceInput); - this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput( - new ServiceInput(deleteInputBldr.build())); - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput, - ServiceNotificationTypes.ServiceDeleteResult); - if (output != null) { - LOG.info("Service present in datastore, service-restore in progress..."); - ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); - return ModelMappingUtils.createRestoreServiceReply(common.getResponseMessage(), - RpcStatus.Successful); - } else { - return ModelMappingUtils.createRestoreServiceReply("Renderer service delete failed !", - RpcStatus.Failed); - } + + if (!servicesObject.isPresent()) { + LOG.warn("serviceRestoration: {}", LogMessages.serviceNotInDS(serviceName)); + return ModelMappingUtils.createRestoreServiceReply( + LogMessages.serviceNotInDS(serviceName), RpcStatus.Failed); + } + + Services service = servicesObject.get(); + State state = service.getOperationalState(); + + if (state == State.InService) { + LOG.error("serviceRestoration: {}", LogMessages.serviceInService(serviceName)); + return ModelMappingUtils.createRestoreServiceReply( + LogMessages.serviceInService(serviceName), RpcStatus.Failed); + } + + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx"); + OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC); + DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime)); + SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder() + .setNotificationUrl(service.getSdncRequestHeader().getNotificationUrl()) + .setRequestId(service.getSdncRequestHeader().getRequestId()) + .setRequestSystemId(service.getSdncRequestHeader().getRequestSystemId()) + .setRpcAction(RpcActions.ServiceDelete); + ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder() + .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder() + .setServiceName(serviceName) + .setDueDate(datetime) + .setTailRetention(TailRetention.No).build()) + .setSdncRequestHeader(sdncBuilder.build()); + ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build()); + serviceInput.setServiceAEnd(service.getServiceAEnd()); + serviceInput.setServiceZEnd(service.getServiceZEnd()); + serviceInput.setConnectionType(service.getConnectionType()); + HardConstraints hardConstraints = service.getHardConstraints(); + if (hardConstraints == null) { + LOG.warn("service '{}' HardConstraints is not set !", serviceName); + } else { + SoftConstraints softConstraints = service.getSoftConstraints(); + if (softConstraints == null) { + LOG.warn("service '{}' SoftConstraints is not set !", serviceName); + serviceInput.setSoftConstraints(DowngradeConstraints.convertToSoftConstraints(hardConstraints)); + serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints)); } else { - LOG.error("Service '{}' is in 'inService' state", input.getServiceName()); - message = "Service '" + input.getServiceName() + "' is in 'inService' state"; - return ModelMappingUtils.createRestoreServiceReply(message, RpcStatus.Failed); + LOG.info("converting hard constraints to soft constraints ..."); + serviceInput.setSoftConstraints( + DowngradeConstraints.updateSoftConstraints(hardConstraints, softConstraints)); + serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints)); } - } else { - LOG.error("Service '{}' is not present", input.getServiceName()); - message = "Service '" + input.getServiceName() + "' is not present"; - return ModelMappingUtils.createRestoreServiceReply(message, RpcStatus.Failed); } + this.pceListenerImpl.setInput(serviceInput); + this.pceListenerImpl.setServiceReconfigure(true); + this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); + this.rendererListenerImpl.setServiceInput(serviceInput); + this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput( + new ServiceInput(deleteInputBldr.build())); + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput, + ServiceNotificationTypes.ServiceDeleteResult); + if (output == null) { + LOG.error("serviceRestoration: {}", LogMessages.RENDERER_DELETE_FAILED); + return ModelMappingUtils.createRestoreServiceReply( + LogMessages.RENDERER_DELETE_FAILED, RpcStatus.Failed); + } + LOG.info("RPC serviceRestore in progress..."); + ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); + return ModelMappingUtils.createRestoreServiceReply( + common.getResponseMessage(), RpcStatus.Successful); + } @Override @@ -376,54 +418,55 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { @Override public ListenableFuture> serviceReroute(ServiceRerouteInput input) { - LOG.info("RPC service reroute received"); - String message = ""; - Optional servicesObject = this.serviceDataStoreOperations.getService(input.getServiceName()); - if (servicesObject.isPresent()) { - Services service = servicesObject.get(); - ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder(); - DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx"); - OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC); - DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime)); - deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder() - .setServiceName(input.getServiceName()).setDueDate(datetime) - .setTailRetention(TailRetention.No).build()); - SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder() + String serviceName = input.getServiceName(); + LOG.info("RPC serviceReroute received for {}", serviceName); + Optional servicesObject = this.serviceDataStoreOperations.getService(serviceName); + if (!servicesObject.isPresent()) { + LOG.warn("serviceReroute: {}", LogMessages.serviceNotInDS(serviceName)); + return ModelMappingUtils.createRerouteServiceReply( + input, ResponseCodes.FINAL_ACK_NO, + LogMessages.serviceNotInDS(serviceName), RpcStatus.Failed); + } + Services service = servicesObject.get(); + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx"); + OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC); + DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime)); + SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder() .setNotificationUrl(service.getSdncRequestHeader().getNotificationUrl()) .setRequestId(service.getSdncRequestHeader().getRequestId()) .setRequestSystemId(service.getSdncRequestHeader().getRequestSystemId()) .setRpcAction(RpcActions.ServiceDelete); - deleteInputBldr.setSdncRequestHeader(sdncBuilder.build()); - ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build()); - serviceInput.setServiceAEnd(service.getServiceAEnd()); - serviceInput.setServiceZEnd(service.getServiceZEnd()); - serviceInput.setConnectionType(service.getConnectionType()); - this.pceListenerImpl.setInput(serviceInput); - this.pceListenerImpl.setServiceReconfigure(true); - this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); - this.rendererListenerImpl.setServiceInput(serviceInput); - this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput( - new ServiceInput(deleteInputBldr.build())); - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 - .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput, - ServiceNotificationTypes.ServiceDeleteResult); - if (output != null) { - LOG.info("Service present in datastore, service-reroute in progress..."); - ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); - return ModelMappingUtils.createRerouteServiceReply(input, common.getAckFinalIndicator(), - common.getResponseMessage(), RpcStatus.Successful); - } else { - return ModelMappingUtils.createRerouteServiceReply(input, ResponseCodes.FINAL_ACK_YES, - "Renderer service delete failed !", RpcStatus.Failed); - } - } else { - LOG.error("Service '{}' is not present", input.getServiceName()); - message = "Service '" + input.getServiceName() + "' is not present"; - return ModelMappingUtils.createRerouteServiceReply(input, ResponseCodes.FINAL_ACK_NO, message, - RpcStatus.Failed); + ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder() + .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder() + .setServiceName(serviceName).setDueDate(datetime) + .setTailRetention(TailRetention.No).build()) + .setSdncRequestHeader(sdncBuilder.build()); + ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build()); + serviceInput.setServiceAEnd(service.getServiceAEnd()); + serviceInput.setServiceZEnd(service.getServiceZEnd()); + serviceInput.setConnectionType(service.getConnectionType()); + this.pceListenerImpl.setInput(serviceInput); + this.pceListenerImpl.setServiceReconfigure(true); + this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); + this.rendererListenerImpl.setServiceInput(serviceInput); + this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput( + new ServiceInput(deleteInputBldr.build())); + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017 + .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput, + ServiceNotificationTypes.ServiceDeleteResult); + if (output == null) { + LOG.error("serviceReroute: {}", LogMessages.RENDERER_DELETE_FAILED); + return ModelMappingUtils.createRerouteServiceReply( + input, ResponseCodes.FINAL_ACK_YES, + LogMessages.RENDERER_DELETE_FAILED, RpcStatus.Failed); } + LOG.info("RPC ServiceReroute in progress..."); + ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); + return ModelMappingUtils.createRerouteServiceReply( + input, common.getAckFinalIndicator(), + common.getResponseMessage(), RpcStatus.Successful); } @Override @@ -447,38 +490,42 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { @Override public ListenableFuture> tempServiceDelete(TempServiceDeleteInput input) { - LOG.info("RPC temp serviceDelete request received for {}", input.getCommonId()); - String message = ""; + String commonId = input.getCommonId(); + LOG.info("RPC temp serviceDelete request received for {}", commonId); /* * Upon receipt of service-deleteService RPC, service header and sdnc-request * header compliancy are verified. */ - LOG.info("checking Service Compliancy ..."); - ComplianceCheckResult serviceHandlerCheckResult = ServicehandlerCompliancyCheck.check(input.getCommonId(), - null, null, RpcActions.ServiceDelete, false, false); - if (serviceHandlerCheckResult.hasPassed()) { - LOG.info("Service compliant !"); - } else { - LOG.info("Service is not compliant !"); - return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, - "Service not compliant !", ResponseCodes.RESPONSE_FAILED); + LOG.debug("checking Service Compliance ..."); + ComplianceCheckResult serviceHandlerCheckResult = ServicehandlerComplianceCheck.check( + commonId, null, null, RpcActions.ServiceDelete, false, false + ); + if (!serviceHandlerCheckResult.hasPassed()) { + LOG.warn("tempServiceDelete: {}", LogMessages.ABORT_SERVICE_NON_COMPLIANT); + return ModelMappingUtils.createDeleteServiceReply( + input, ResponseCodes.FINAL_ACK_YES, + LogMessages.SERVICE_NON_COMPLIANT, ResponseCodes.RESPONSE_FAILED); } //Check presence of service to be deleted - String commonId = input.getCommonId(); - LOG.info("service common-id : {}", commonId); - try { - Optional service = this.serviceDataStoreOperations.getTempService(commonId); - if (!service.isPresent()) { - message = "Service '" + commonId + "' does not exist in datastore"; - LOG.error(message); - return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, - message, ResponseCodes.RESPONSE_FAILED); - } - } catch (NullPointerException e) { - LOG.info("failed to get service '{}' from datastore : ", commonId, e); + LOG.debug("service common-id '{}' is compliant", commonId); +//TODO check if an expected bug was justifying this NPE handling +// try { + Optional + service = + this.serviceDataStoreOperations.getTempService(commonId); +// } catch (NullPointerException e) { +// LOG.info("failed to get service '{}' from datastore : ", commonId, e); +// return ModelMappingUtils.createDeleteServiceReply( +// input, ResponseCodes.FINAL_ACK_YES, +// LogMessages.serviceNotInDS(CommonId), ResponseCodes.RESPONSE_FAILED); +// } + if (!service.isPresent()) { + LOG.error("tempServiceDelete: {}", LogMessages.serviceNotInDS(commonId)); + return ModelMappingUtils.createDeleteServiceReply( + input, ResponseCodes.FINAL_ACK_YES, + LogMessages.serviceNotInDS(commonId), ResponseCodes.RESPONSE_FAILED); } LOG.info("Service '{}' present in datastore !", commonId); @@ -490,32 +537,34 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { this.rendererListenerImpl.setTempService(true); org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(input, ServiceNotificationTypes.ServiceDeleteResult); - if (output != null) { - LOG.info("Temp Service present in datastore, service-delete in progress..."); - ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); - return ModelMappingUtils.createDeleteServiceReply(input, common.getAckFinalIndicator(), - common.getResponseMessage(), common.getResponseCode()); - } else { - return ModelMappingUtils.createDeleteServiceReply(input, ResponseCodes.FINAL_ACK_YES, - "Renderer service delete failed !", ResponseCodes.RESPONSE_FAILED); + if (output == null) { + LOG.error("tempServiceDelete: {}", LogMessages.RENDERER_DELETE_FAILED); + return ModelMappingUtils.createDeleteServiceReply( + input, ResponseCodes.FINAL_ACK_YES, + LogMessages.RENDERER_DELETE_FAILED, ResponseCodes.RESPONSE_FAILED); } + LOG.info("RPC tempServiceDelete in progress..."); + ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); + return ModelMappingUtils.createDeleteServiceReply( + input, common.getAckFinalIndicator(), + common.getResponseMessage(), common.getResponseCode()); } @Override public ListenableFuture> tempServiceCreate(TempServiceCreateInput input) { - LOG.info("RPC temp service creation received"); + LOG.info("RPC tempServiceCreate received"); // Validation OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest( new ServiceInput(input), RpcActions.TempServiceCreate); if (! validationResult.isSuccess()) { - LOG.warn("Aborting service create because validation of service create request failed: {}", - validationResult.getResultMessage()); - return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES, + LOG.warn("tempServiceCreate: {}", LogMessages.ABORT_VALID_FAILED); + return ModelMappingUtils.createCreateServiceReply( + input, ResponseCodes.FINAL_ACK_YES, validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED); } // Starting service create operation - LOG.info("Commencing PCE"); + LOG.debug("tempServiceCreate: {}", LogMessages.PCE_CALLING); this.pceListenerImpl.setInput(new ServiceInput(input)); this.pceListenerImpl.setServiceReconfigure(false); this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations); @@ -524,15 +573,17 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { this.rendererListenerImpl.setServiceInput(new ServiceInput(input)); this.rendererListenerImpl.setTempService(true); PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true); - if (output != null) { - LOG.info("Service compliant, temp serviceCreate in progress..."); - ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); - return ModelMappingUtils.createCreateServiceReply(input, common.getAckFinalIndicator(), - common.getResponseMessage(), common.getResponseCode()); - } else { - return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES, - "PCE calculation failed", ResponseCodes.RESPONSE_FAILED); + if (output == null) { + LOG.warn("tempServiceCreate: {}", LogMessages.ABORT_PCE_FAILED); + return ModelMappingUtils.createCreateServiceReply( + input, ResponseCodes.FINAL_ACK_YES, + LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED); } + LOG.info("RPC tempServiceCreate in progress..."); + ConfigurationResponseCommon common = output.getConfigurationResponseCommon(); + return ModelMappingUtils.createCreateServiceReply( + input, common.getAckFinalIndicator(), + common.getResponseMessage(), common.getResponseCode()); } @Override diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImpl.java index 52031fbeb..bd590e607 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImpl.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImpl.java @@ -44,9 +44,29 @@ import org.slf4j.LoggerFactory; public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperations { private static final Logger LOG = LoggerFactory.getLogger(ServiceDataStoreOperationsImpl.class); - private static final String SUCCESSFUL_MESSAGE = "Successful"; private DataBroker dataBroker; + // This is class is public so that these messages can be accessed from Junit (avoid duplications). + public static final class LogMessages { + + public static final String SUCCESSFUL_MESSAGE; + public static final String SERVICE_NOT_FOUND; + + // Static blocks are generated once and spare memory. + static { + SUCCESSFUL_MESSAGE = "Successful"; + SERVICE_NOT_FOUND = "Service not found"; + } + + public static String failedTo(String action, String serviceName) { + return "Failed to " + action + " service " + serviceName; + } + + private LogMessages() { + } + } + + public ServiceDataStoreOperationsImpl(DataBroker dataBroker) { this.dataBroker = dataBroker; } @@ -67,7 +87,7 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation FluentFuture future = transaction.commit(); future.get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { - LOG.warn("init failed: {}", e.getMessage()); + LOG.error("init failed: ", e); } } @@ -81,7 +101,7 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation FluentFuture future = transaction.commit(); future.get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { - LOG.warn("init failed: {}", e.getMessage()); + LOG.error("init failed: ", e); } } @@ -128,11 +148,10 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation InstanceIdentifier.create(ServiceList.class).child(Services.class, new ServicesKey(serviceName)); writeTx.delete(LogicalDatastoreType.OPERATIONAL, iid); writeTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); - return OperationResult.ok(SUCCESSFUL_MESSAGE); + return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE); } catch (TimeoutException | InterruptedException | ExecutionException e) { - String message = "Failed to delete service " + serviceName + " from Service List"; - LOG.warn(message, e); - return OperationResult.failed(message); + LOG.warn("deleteService : {}", LogMessages.failedTo("delete", serviceName), e); + return OperationResult.failed(LogMessages.failedTo("delete", serviceName)); } } @@ -148,11 +167,10 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation .ServicesKey(commonId)); writeTx.delete(LogicalDatastoreType.OPERATIONAL, iid); writeTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); - return OperationResult.ok(SUCCESSFUL_MESSAGE); + return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE); } catch (TimeoutException | InterruptedException | ExecutionException e) { - String message = "Failed to delete service " + commonId + " from Service List"; - LOG.warn(message, e); - return OperationResult.failed(message); + LOG.warn("deleteTempService : {}", LogMessages.failedTo("delete Temp", commonId), e); + return OperationResult.failed(LogMessages.failedTo("delete Temp", commonId)); } } @@ -160,26 +178,23 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation public OperationResult modifyService(String serviceName, State operationalState, AdminStates administrativeState) { LOG.debug("Modifying '{}' Service", serviceName); Optional readService = getService(serviceName); - if (readService.isPresent()) { - try { - WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction(); - InstanceIdentifier iid = InstanceIdentifier.create(ServiceList.class) - .child(Services.class, new ServicesKey(serviceName)); - Services services = new ServicesBuilder(readService.get()).setOperationalState(operationalState) - .setAdministrativeState(administrativeState) - .build(); - writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, services); - writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); - return OperationResult.ok(SUCCESSFUL_MESSAGE); - } catch (TimeoutException | InterruptedException | ExecutionException e) { - String message = "Failed to modify service " + serviceName + " from Service List"; - LOG.warn(message, e); - return OperationResult.failed(message); - } - } else { - String message = "Service " + serviceName + " is not present!"; - LOG.warn(message); - return OperationResult.failed(message); + if (!readService.isPresent()) { + LOG.warn("modifyService: {}", LogMessages.SERVICE_NOT_FOUND); + return OperationResult.failed(LogMessages.SERVICE_NOT_FOUND); + } + try { + WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction(); + InstanceIdentifier iid = InstanceIdentifier.create(ServiceList.class) + .child(Services.class, new ServicesKey(serviceName)); + Services services = new ServicesBuilder(readService.get()).setOperationalState(operationalState) + .setAdministrativeState(administrativeState) + .build(); + writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, services); + writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); + return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE); + } catch (TimeoutException | InterruptedException | ExecutionException e) { + LOG.warn("modifyService : {}", LogMessages.failedTo("modify", serviceName), e); + return OperationResult.failed(LogMessages.failedTo("modify", serviceName)); } } @@ -189,31 +204,28 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation LOG.debug("Modifying '{}' Temp Service", serviceName); Optional readService = getTempService(serviceName); - if (readService.isPresent()) { - try { - WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction(); - InstanceIdentifier iid = InstanceIdentifier.create(TempServiceList.class) - .child(org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp.service.list - .Services.class, new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531 - .temp.service.list.ServicesKey(serviceName)); - org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp.service.list - .Services services = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp - .service.list.ServicesBuilder(readService.get()).setOperationalState(operationalState) - .setAdministrativeState(administrativeState) - .build(); - writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, services); - writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); - return OperationResult.ok(SUCCESSFUL_MESSAGE); - } catch (TimeoutException | InterruptedException | ExecutionException e) { - String message = "Failed to modify temp service " + serviceName + " from Temp Service List"; - LOG.warn(message, e); - return OperationResult.failed(message); - } - } else { - String message = "Temp Service " + serviceName + " is not present!"; - LOG.warn(message); - return OperationResult.failed(message); + if (!readService.isPresent()) { + LOG.warn("modifyTempService: {}", LogMessages.SERVICE_NOT_FOUND); + return OperationResult.failed(LogMessages.SERVICE_NOT_FOUND); + } + try { + WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction(); + InstanceIdentifier iid = InstanceIdentifier.create(TempServiceList.class) + .child(org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp.service.list + .Services.class, new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531 + .temp.service.list.ServicesKey(serviceName)); + org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp.service.list + .Services services = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp + .service.list.ServicesBuilder(readService.get()).setOperationalState(operationalState) + .setAdministrativeState(administrativeState) + .build(); + writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, services); + writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); + return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE); + } catch (TimeoutException | InterruptedException | ExecutionException e) { + LOG.warn("modifyTempService : {}", LogMessages.failedTo("modify Temp", serviceName), e); + return OperationResult.failed(LogMessages.failedTo("modify Temp", serviceName)); } } @@ -227,11 +239,10 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction(); writeTx.put(LogicalDatastoreType.OPERATIONAL, iid, service); writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); - return OperationResult.ok(SUCCESSFUL_MESSAGE); + return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE); } catch (TimeoutException | InterruptedException | ExecutionException e) { - String message = "Failed to create service " + serviceCreateInput.getServiceName() + " to Service List"; - LOG.warn(message, e); - return OperationResult.failed(message); + LOG.warn("createService : {}", LogMessages.failedTo("create", serviceCreateInput.getServiceName()), e); + return OperationResult.failed(LogMessages.failedTo("create", serviceCreateInput.getServiceName())); } } @@ -249,12 +260,11 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction(); writeTx.put(LogicalDatastoreType.OPERATIONAL, iid, service); writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); - return OperationResult.ok(SUCCESSFUL_MESSAGE); + return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE); } catch (TimeoutException | InterruptedException | ExecutionException e) { - String message = "Failed to create Temp service " + tempServiceCreateInput.getCommonId() - + " to TempService List"; - LOG.warn(message, e); - return OperationResult.failed(message); + LOG.warn("createTempService : {}", + LogMessages.failedTo("create Temp", tempServiceCreateInput.getCommonId()), e); + return OperationResult.failed(LogMessages.failedTo("create Temp", tempServiceCreateInput.getCommonId())); } } @@ -268,11 +278,11 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction(); writeTx.put(LogicalDatastoreType.OPERATIONAL, servicePathsIID, servicePath); writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); - return OperationResult.ok(SUCCESSFUL_MESSAGE); + return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE); } catch (TimeoutException | InterruptedException | ExecutionException e) { - String message = "Failed to create servicePath " + serviceInput.getCommonId() + " to ServicePath List"; - LOG.warn(message, e); - return OperationResult.failed(message); + LOG.warn("createServicePath : {}", + LogMessages.failedTo("create servicePath", serviceInput.getCommonId()), e); + return OperationResult.failed(LogMessages.failedTo("create servicePath", serviceInput.getCommonId())); } } @@ -285,11 +295,10 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation servicePathsWriteTx.delete(LogicalDatastoreType.OPERATIONAL, servicePathsIID); try { servicePathsWriteTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); - return OperationResult.ok(SUCCESSFUL_MESSAGE); + return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE); } catch (InterruptedException | ExecutionException | TimeoutException e) { - String message = "Unable to delete service path " + serviceName; - LOG.error(message, e); - return OperationResult.failed(message); + LOG.error("deleteServicePath : {}", LogMessages.failedTo("delete servicePath", serviceName), e); + return OperationResult.failed(LogMessages.failedTo("delete servicePath", serviceName)); } } @@ -312,60 +321,61 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation PathComputationRequestOutput output, int choice) { LOG.debug("WriteOrModifyOrDeleting '{}' Service", serviceName); WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction(); - String result = null; Optional readService = getService(serviceName); - if (readService.isPresent()) { - /* - * Modify / Delete Service. - */ - InstanceIdentifier iid = - InstanceIdentifier.create(ServiceList.class).child(Services.class, new ServicesKey(serviceName)); - ServicesBuilder service = new ServicesBuilder(readService.get()); - String action = null; - switch (choice) { - case 0 : /* Modify. */ - LOG.debug("Modifying '{}' Service", serviceName); - service.setOperationalState(State.InService).setAdministrativeState(AdminStates.InService); - writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, service.build()); - action = "modifyService"; - break; - case 1 : /* Delete */ - LOG.debug("Deleting '{}' Service", serviceName); - writeTx.delete(LogicalDatastoreType.OPERATIONAL, iid); - action = "deleteService"; - break; - default: - LOG.debug("No choice found"); - break; + + /* + * Write Service. + */ + if (!readService.isPresent()) { + if (choice != 2) { + LOG.warn("writeOrModifyOrDeleteServiceList: {}", LogMessages.SERVICE_NOT_FOUND); + return LogMessages.SERVICE_NOT_FOUND; } + + LOG.debug("Writing '{}' Service", serviceName); + InstanceIdentifier iid = InstanceIdentifier.create(ServiceList.class) + .child(Services.class, new ServicesKey(serviceName)); + Services service = ModelMappingUtils.mappingServices(input, null); + writeTx.put(LogicalDatastoreType.OPERATIONAL, iid, service); try { writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); - } catch (InterruptedException | ExecutionException | TimeoutException e) { - LOG.error("Failed to {} service from Service List", action, e); - result = "Failed to " + action + " service from Service List"; - } - } else { - /* - * Write Service. - */ - if (choice == 2) { - LOG.debug("Writing '{}' Service", serviceName); - InstanceIdentifier iid = InstanceIdentifier.create(ServiceList.class) - .child(Services.class, new ServicesKey(serviceName)); - Services service = ModelMappingUtils.mappingServices(input, null); - writeTx.put(LogicalDatastoreType.OPERATIONAL, iid, service); - try { - writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); - result = null; - } catch (InterruptedException | TimeoutException | ExecutionException e) { - LOG.error("Failed to createService service to Service List", e); - result = "Failed to createService service to Service List"; - } - } else { - LOG.info("Service is not present ! "); - result = "Service is not present ! "; + return null; + } catch (InterruptedException | TimeoutException | ExecutionException e) { + LOG.error("writeOrModifyOrDeleteServiceList : {}", LogMessages.failedTo("create", serviceName), e); + return LogMessages.failedTo("create", serviceName); } } - return result; + + /* + * Modify / Delete Service. + */ + InstanceIdentifier iid = + InstanceIdentifier.create(ServiceList.class).child(Services.class, new ServicesKey(serviceName)); + ServicesBuilder service = new ServicesBuilder(readService.get()); + String action = null; + switch (choice) { + case 0 : /* Modify. */ + LOG.debug("Modifying '{}' Service", serviceName); + service.setOperationalState(State.InService).setAdministrativeState(AdminStates.InService); + writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, service.build()); + action = "modifyService"; + break; + case 1 : /* Delete */ + LOG.debug("Deleting '{}' Service", serviceName); + writeTx.delete(LogicalDatastoreType.OPERATIONAL, iid); + action = "deleteService"; + break; + default: + LOG.debug("No choice found"); + break; + } + try { + writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + LOG.error("writeOrModifyOrDeleteServiceList : {}", LogMessages.failedTo(action, serviceName), e); + return LogMessages.failedTo(action, serviceName); + } + + return null; } } diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/ServiceCreateValidation.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/ServiceCreateValidation.java index 503dad06b..666264ac8 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/ServiceCreateValidation.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/ServiceCreateValidation.java @@ -13,7 +13,7 @@ import org.opendaylight.transportpce.servicehandler.ServiceEndpointType; import org.opendaylight.transportpce.servicehandler.ServiceInput; import org.opendaylight.transportpce.servicehandler.validation.checks.CheckCoherencyHardSoft; import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult; -import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerCompliancyCheck; +import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck; import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerTxRxCheck; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ConnectionType; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.RpcActions; @@ -30,12 +30,12 @@ public final class ServiceCreateValidation { * -create RPC, service header and sdnc * -request header compliancy are verified. */ - LOG.debug("checking Service Compliancy ..."); + LOG.debug("checking Service Compliance ..."); try { String serviceNmame = input.getServiceName(); SdncRequestHeader sdncRequestHeader = input.getSdncRequestHeader(); ConnectionType conType = input.getConnectionType(); - ComplianceCheckResult serviceHandlerCheckResult = ServicehandlerCompliancyCheck.check( + ComplianceCheckResult serviceHandlerCheckResult = ServicehandlerComplianceCheck.check( serviceNmame, sdncRequestHeader, conType, rpcActions, true, true); if (serviceHandlerCheckResult.hasPassed()) { LOG.debug("Service request compliant !"); diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ComplianceCheckResult.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ComplianceCheckResult.java index 6a26fa255..e50a3324b 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ComplianceCheckResult.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ComplianceCheckResult.java @@ -6,9 +6,13 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.transportpce.servicehandler.validation.checks; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ComplianceCheckResult { + private static final Logger LOG = LoggerFactory.getLogger(ComplianceCheckResult.class); + private boolean passed; private String message; @@ -18,6 +22,11 @@ public class ComplianceCheckResult { } public ComplianceCheckResult(boolean passed, String message) { + if (passed) { + LOG.debug("Compliance check passed"); + } else { + LOG.debug("Compliance check: {}", message); + } this.passed = passed; this.message = message; } diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheck.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheck.java new file mode 100644 index 000000000..5508ac781 --- /dev/null +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheck.java @@ -0,0 +1,107 @@ +/* + * Copyright © 2017 Orange, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.transportpce.servicehandler.validation.checks; + +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ConnectionType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.RpcActions; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.sdnc.request.header.SdncRequestHeader; + +/** + * Class for checking service sdnc-request-header compliance. + * + */ +public final class ServicehandlerComplianceCheck { + + // This is class is public so that these messages can be accessed from Junit (avoid duplications). + public static final class LogMessages { + + public static final String SERVICENAME_NOT_SET; + public static final String CONNECTIONTYPE_NOT_SET; + public static final String REQUESTID_NOT_SET; + public static final String RPCACTION_NOT_SET; + public static final String HEADER_NOT_SET; + + // Static blocks are generated once and spare memory. + static { + SERVICENAME_NOT_SET = "Service Name (common-id for Temp service) is not set"; + CONNECTIONTYPE_NOT_SET = "Service ConnectionType is not set"; + REQUESTID_NOT_SET = "Service sdncRequestHeader 'request-id' is not set"; + RPCACTION_NOT_SET = "Service sdncRequestHeader 'rpc-action' is not set"; + HEADER_NOT_SET = "Service sdncRequestHeader is not set"; + } + + public static String rpcactionsDiffers(RpcActions action1, RpcActions action2) { + return + "Service sdncRequestHeader rpc-action '" + action1.name() + "' not equal to '" + action2.name() + "'"; + } + + private LogMessages() { + } + } + + /** + * Check if a String is not null and not equal to void. + * + * @param value + * String value + * @return true if String ok false if not + */ + public static boolean checkString(String value) { + return ((value != null) && (!value.isEmpty())); + } + + /** + * Check Compliance of Service request. + * + * @param serviceName + * Service Name + * @param sdncRequestHeader + * sdncRequestHeader + * @param conType + * Connection type + * @param action + * RPC Actions + * @param contype + * Boolean to check connection Type + * @param sdncRequest + * Boolean to check sdncRequestHeader + * + * @return true if Service Request OK and false if not + */ + public static ComplianceCheckResult check(String serviceName, SdncRequestHeader sdncRequestHeader, + ConnectionType conType, RpcActions action, + Boolean contype, Boolean sdncRequest) { + if (!checkString(serviceName)) { + return new ComplianceCheckResult(false, LogMessages.SERVICENAME_NOT_SET); + } + if (contype && (conType == null)) { + return new ComplianceCheckResult(false, LogMessages.CONNECTIONTYPE_NOT_SET); + } + if (sdncRequest) { + if (sdncRequestHeader == null) { + return new ComplianceCheckResult(false, LogMessages.HEADER_NOT_SET); + } + RpcActions serviceAction = sdncRequestHeader.getRpcAction(); + String requestId = sdncRequestHeader.getRequestId(); + if (!checkString(requestId)) { + return new ComplianceCheckResult(false, LogMessages.REQUESTID_NOT_SET); + } + if (serviceAction == null) { + return new ComplianceCheckResult(false, LogMessages.RPCACTION_NOT_SET); + } + if (serviceAction.compareTo(action) != 0) { + return new ComplianceCheckResult(false, LogMessages.rpcactionsDiffers(serviceAction, action)); + } + } + return new ComplianceCheckResult(true, ""); + } + + private ServicehandlerComplianceCheck() { + } + +} diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerCompliancyCheck.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerCompliancyCheck.java deleted file mode 100644 index f0c15acf6..000000000 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerCompliancyCheck.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright © 2017 Orange, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.transportpce.servicehandler.validation.checks; - -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ConnectionType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.RpcActions; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.sdnc.request.header.SdncRequestHeader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Class for checking service sdnc-request-header compliancy. - * - */ -public final class ServicehandlerCompliancyCheck { - - private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerCompliancyCheck.class); - - /** - * Check if a String is not null and not equal to void. - * - * @param value - * String value - * @return true if String ok false if not - */ - public static boolean checkString(String value) { - return ((value != null) && (value.compareTo("") != 0)); - } - - /** - * Check Compliancy of Service request. - * - * @param serviceName - * Service Name - * @param sdncRequestHeader - * sdncRequestHeader - * @param conType - * Connection type - * @param action - * RPC Actions - * @param contype - * Boolean to check connection Type - * @param sdncRequest - * Boolean to check sdncRequestHeader - * - * @return true if String ok false if not - */ - public static ComplianceCheckResult check(String serviceName, SdncRequestHeader sdncRequestHeader, - ConnectionType conType, RpcActions action, - Boolean contype, Boolean sdncRequest) { - boolean result = true; - String message = ""; - if (!checkString(serviceName)) { - result = false; - message = "Service Name (common-id for Temp service) is not set"; - } else if (contype && (conType == null)) { - result = false; - message = "Service ConnectionType is not set"; - } - if (sdncRequest) { - if (sdncRequestHeader != null) { - RpcActions serviceAction = sdncRequestHeader.getRpcAction(); - String requestId = sdncRequestHeader.getRequestId(); - if (!checkString(requestId)) { - result = false; - message = "Service sdncRequestHeader 'request-id' is not set"; - LOG.debug(message); - } else if (serviceAction != null) { - if (serviceAction.compareTo(action) != 0) { - result = false; - message = "Service sdncRequestHeader rpc-action '" + serviceAction + "' not equal to '" - + action.name() + "'"; - } - } else { - result = false; - message = "Service sndc-request-header 'rpc-action' is not set "; - } - - } else { - result = false; - message = "Service sndc-request-header is not set "; - } - } - LOG.debug(message); - return new ComplianceCheckResult(result, message); - } - - private ServicehandlerCompliancyCheck() { - } - -} diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheck.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheck.java index 93dc39349..519f85cfb 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheck.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheck.java @@ -15,8 +15,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev1 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.lgx.Lgx; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.port.Port; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Class for checking missing info on Tx/Rx for A/Z end. @@ -24,7 +22,46 @@ import org.slf4j.LoggerFactory; */ public final class ServicehandlerTxRxCheck { - private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerTxRxCheck.class); + // This is class is public so that these messages can be accessed from Junit (avoid duplications). + public static final class LogMessages { + + public static final String TXDIR_NOT_SET; + public static final String TXDIR_PORT_NOT_SET; + public static final String TXDIR_LGX_NOT_SET; + public static final String RXDIR_NOT_SET; + public static final String RXDIR_PORT_NOT_SET; + public static final String RXDIR_LGX_NOT_SET; + + // Static blocks are generated once and spare memory. + static { + TXDIR_NOT_SET = "Service TxDirection is not correctly set"; + RXDIR_NOT_SET = "Service RxDirection is not correctly set"; + TXDIR_PORT_NOT_SET = "Service TxDirection Port is not correctly set"; + TXDIR_LGX_NOT_SET = "Service TxDirection Lgx is not correctly set"; + RXDIR_PORT_NOT_SET = "Service RxDirection Port is not correctly set"; + RXDIR_LGX_NOT_SET = "Service RxDirection Lgx is not correctly set"; + } + + public static String endpointTypeNotSet(ServiceEndpointType endpointType) { + return "Service " + endpointType + " is not set"; + } + + public static String rateNotSet(ServiceEndpointType endpointType) { + return "Service " + endpointType + " rate is not set"; + } + + public static String formatNotSet(ServiceEndpointType endpointType) { + return "Service " + endpointType + " format is not set"; + } + + public static String clliNotSet(ServiceEndpointType endpointType) { + return "Service " + endpointType + " clli is not set"; + } + + private LogMessages() { + } + } + /** * Check if a String is not null and not equal to ''. @@ -94,80 +131,67 @@ public final class ServicehandlerTxRxCheck { * @return true if check is ok false else */ public static ComplianceCheckResult checkTxOrRxInfo(TxDirection txDirection, RxDirection rxDirection) { - boolean result = true; - String message = ""; - if (txDirection != null) { - if (!checkPort(txDirection.getPort())) { - result = false; - message = "Service TxDirection Port is not correctly set"; - } else if (!checkLgx(txDirection.getLgx())) { - result = false; - message = "Service TxDirection Lgx is not correctly set"; - } else if (rxDirection != null) { - if (!checkPort(rxDirection.getPort())) { - result = false; - message = "Service RxDirection Port is not correctly set"; - } else if (!checkLgx(rxDirection.getLgx())) { - result = false; - message = "Service RxDirection Lgx is not correctly set"; - } - } else { - result = false; - message = "Service RxDirection is not correctly set"; - } - } else { - result = false; - message = "Service TxDirection is not correctly set"; + if (txDirection == null) { + return new ComplianceCheckResult(false, LogMessages.TXDIR_NOT_SET); + } + if (rxDirection == null) { + return new ComplianceCheckResult(false, LogMessages.RXDIR_NOT_SET); + } + if (!checkPort(txDirection.getPort())) { + return new ComplianceCheckResult(false, LogMessages.TXDIR_PORT_NOT_SET); + } + if (!checkLgx(txDirection.getLgx())) { + return new ComplianceCheckResult(false, LogMessages.TXDIR_LGX_NOT_SET); } - return new ComplianceCheckResult(result, message); + if (!checkPort(rxDirection.getPort())) { + return new ComplianceCheckResult(false, LogMessages.RXDIR_PORT_NOT_SET); + } + if (!checkLgx(rxDirection.getLgx())) { + return new ComplianceCheckResult(false, LogMessages.RXDIR_LGX_NOT_SET); + } + return new ComplianceCheckResult(true, ""); } /** - * Check Compliancy of Service TxRx info. + * Check Compliance of Service TxRx info. * @param serviceEnd Service Endpoint * @param endpointType Endpoint type * * @return true if String ok false if not */ public static ComplianceCheckResult check(ServiceEndpoint serviceEnd, ServiceEndpointType endpointType) { - boolean result = true; - String message = ""; - if (serviceEnd != null) { - try { - Long serviceRate = serviceEnd.getServiceRate().toJava(); - ServiceFormat serviceformat = serviceEnd.getServiceFormat(); - String clli = serviceEnd.getClli(); - if ((serviceRate == null) || (serviceRate <= 0)) { - result = false; - message = "Service " + endpointType + " rate is not set"; - LOG.debug(message); - } else if (serviceformat == null) { - result = false; - message = "Service " + endpointType + " format is not set"; - LOG.debug(message); - } else if (!checkString(clli)) { - result = false; - message = "Service" + endpointType + " clli format is not set"; - LOG.debug(message); - } else { - ComplianceCheckResult complianceCheckResult - = checkTxOrRxInfo(serviceEnd.getTxDirection(), serviceEnd.getRxDirection()); - if (!complianceCheckResult.hasPassed()) { - result = false; - message = complianceCheckResult.getMessage(); - } - } - } catch (NullPointerException e) { - message = "Service " + endpointType + " rate, format or clli is not set"; - LOG.error(message, e); - return new ComplianceCheckResult(false, message); - } - } else { - result = false; - message = endpointType + " is not set"; - LOG.debug(message); + if (serviceEnd == null) { + return new ComplianceCheckResult(false, LogMessages.endpointTypeNotSet(endpointType)); } - return new ComplianceCheckResult(result, message); + +//TODO check if an expected bug was justifying this NPE handling +// try { + Long serviceRate = serviceEnd.getServiceRate().toJava(); + ServiceFormat serviceformat = serviceEnd.getServiceFormat(); + String clli = serviceEnd.getClli(); +// } catch (NullPointerException e) { +// String message = "Something wrong when accessing Service " + endpointType + " rate, format or clli"; +// LOG.error("Service TxRx info check: {}",message, e); +// return new ComplianceCheckResult(false, message); +// } + + if ((serviceRate == null) || (serviceRate <= 0)) { + return new ComplianceCheckResult(false, LogMessages.rateNotSet(endpointType)); + } + if (serviceformat == null) { + return new ComplianceCheckResult(false, LogMessages.formatNotSet(endpointType)); + } + if (!checkString(clli)) { + return new ComplianceCheckResult(false, LogMessages.clliNotSet(endpointType)); + } + + ComplianceCheckResult complianceCheckResult + = checkTxOrRxInfo(serviceEnd.getTxDirection(), serviceEnd.getRxDirection()); + if (!complianceCheckResult.hasPassed()) { + return new ComplianceCheckResult(false, complianceCheckResult.getMessage()); + } + + return new ComplianceCheckResult(true, ""); } private ServicehandlerTxRxCheck() { diff --git a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImplTest.java b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImplTest.java index 38c2cdc14..96829eca9 100644 --- a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImplTest.java +++ b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImplTest.java @@ -8,6 +8,7 @@ package org.opendaylight.transportpce.servicehandler.impl; import static org.mockito.ArgumentMatchers.any; +import static org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -526,7 +527,8 @@ public class ServicehandlerImplTest extends AbstractTest { Assert.assertEquals( ResponseCodes.RESPONSE_FAILED, rpcResult.getResult().getConfigurationResponseCommon().getResponseCode()); Assert.assertEquals( - "Service not compliant !", rpcResult.getResult().getConfigurationResponseCommon().getResponseMessage()); + LogMessages.SERVICE_NON_COMPLIANT, + rpcResult.getResult().getConfigurationResponseCommon().getResponseMessage()); } @Test diff --git a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImplTest.java b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImplTest.java index c854702e4..52d408d3f 100644 --- a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImplTest.java +++ b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImplTest.java @@ -7,6 +7,8 @@ */ package org.opendaylight.transportpce.servicehandler.service; +import static org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl.LogMessages; + import java.util.Optional; import org.junit.Assert; import org.junit.Before; @@ -49,7 +51,7 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest { OperationResult result = this.serviceDataStoreOperations.modifyService("service 1", State.InService, AdminStates.InService); Assert.assertFalse(result.isSuccess()); - Assert.assertEquals("Service service 1 is not present!", result.getResultMessage()); + Assert.assertEquals(LogMessages.SERVICE_NOT_FOUND, result.getResultMessage()); } @Test @@ -64,7 +66,7 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest { String result = serviceDataStoreOperations.writeOrModifyOrDeleteServiceList("serviceCreateInput", createInput, pathComputationRequestOutput, 3); - Assert.assertEquals("Service is not present ! ", result); + Assert.assertEquals(LogMessages.SERVICE_NOT_FOUND, result); } @Test @@ -99,6 +101,7 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest { @Test public void writeOrModifyOrDeleteServiceListPresentWithDeleteChoice() { ServiceCreateInput createInput = ServiceDataUtils.buildServiceCreateInput(); + ConfigurationResponseCommon configurationResponseCommon = new ConfigurationResponseCommonBuilder() .setRequestId("request 1").setAckFinalIndicator(ResponseCodes.FINAL_ACK_NO) .setResponseCode(ResponseCodes.RESPONSE_OK).setResponseMessage("PCE calculation in progress").build(); @@ -208,8 +211,8 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest { public void modifyTempServiceIsSuccessfulForPresentTempService() { TempServiceCreateInput createInput = ServiceDataUtils.buildTempServiceCreateInput(); this.serviceDataStoreOperations.createTempService(createInput); - OperationResult result = this.serviceDataStoreOperations.modifyTempService(createInput.getCommonId(), - State.InService, AdminStates.InService); + OperationResult result = this.serviceDataStoreOperations.modifyTempService( + createInput.getCommonId(), State.InService, AdminStates.InService); Assert.assertTrue(result.isSuccess()); } diff --git a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerCompliancyCheckTest.java b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheckTest.java similarity index 64% rename from servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerCompliancyCheckTest.java rename to servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheckTest.java index 65f510266..cd00a36f9 100644 --- a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerCompliancyCheckTest.java +++ b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheckTest.java @@ -7,20 +7,22 @@ */ package org.opendaylight.transportpce.servicehandler.validation.checks; +import static org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck.LogMessages; + import org.junit.Assert; import org.junit.Test; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ConnectionType; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.RpcActions; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.sdnc.request.header.SdncRequestHeaderBuilder; -public class ServicehandlerCompliancyCheckTest { +public class ServicehandlerComplianceCheckTest { - public ServicehandlerCompliancyCheckTest(){ + public ServicehandlerComplianceCheckTest(){ } @Test public void checkFalseSdncRequest() { - ComplianceCheckResult result = ServicehandlerCompliancyCheck.check("service 1", + ComplianceCheckResult result = ServicehandlerComplianceCheck.check("service 1", new SdncRequestHeaderBuilder().setRequestId("1").setRequestSystemId("1").setNotificationUrl("1") .setRpcAction(RpcActions.ServiceCreate).build(), ConnectionType.Service,RpcActions.ServiceCreate, false, false); @@ -31,61 +33,61 @@ public class ServicehandlerCompliancyCheckTest { @Test public void checkServiceNameNull() { - ComplianceCheckResult result = ServicehandlerCompliancyCheck.check(null, null, - ConnectionType.Service,null, false, false); + ComplianceCheckResult result = ServicehandlerComplianceCheck.check(null, null, + ConnectionType.Service, null, false, false); - Assert.assertEquals("Service Name (common-id for Temp service) is not set", result.getMessage()); + Assert.assertEquals(LogMessages.SERVICENAME_NOT_SET, result.getMessage()); Assert.assertFalse(result.hasPassed()); } @Test public void checkConTypeFalseAndNull() { - ComplianceCheckResult result = ServicehandlerCompliancyCheck.check("service 1", null, - null,null, true, false); - Assert.assertEquals("Service ConnectionType is not set", result.getMessage()); + ComplianceCheckResult result = ServicehandlerComplianceCheck.check("service 1", null, + null, null, true, false); + Assert.assertEquals(LogMessages.CONNECTIONTYPE_NOT_SET, result.getMessage()); Assert.assertFalse(result.hasPassed()); } @Test public void checkSdncRequestHeaderNull() { - ComplianceCheckResult result = ServicehandlerCompliancyCheck.check("service 1", null, - ConnectionType.Service,null, true, true); + ComplianceCheckResult result = ServicehandlerComplianceCheck.check("service 1", null, + ConnectionType.Service, null, true, true); - Assert.assertEquals("Service sndc-request-header is not set ", result.getMessage()); + Assert.assertEquals(LogMessages.HEADER_NOT_SET, result.getMessage()); Assert.assertFalse(result.hasPassed()); } @Test public void checkRequestIdEmptyString() { - ComplianceCheckResult result = ServicehandlerCompliancyCheck.check("service 1", + ComplianceCheckResult result = ServicehandlerComplianceCheck.check("service 1", new SdncRequestHeaderBuilder().setRequestId("") .setRpcAction(RpcActions.ServiceCreate).build(), ConnectionType.Service, RpcActions.ServiceCreate, true, true); - Assert.assertEquals("Service sdncRequestHeader 'request-id' is not set", result.getMessage()); + Assert.assertEquals(LogMessages.REQUESTID_NOT_SET, result.getMessage()); Assert.assertFalse(result.hasPassed()); } @Test public void checkDifferentAction() { - ComplianceCheckResult result = ServicehandlerCompliancyCheck.check("service 1", + ComplianceCheckResult result = ServicehandlerComplianceCheck.check("service 1", new SdncRequestHeaderBuilder().setRequestId("1") .setRpcAction(RpcActions.ServiceCreate).build(), ConnectionType.Service, RpcActions.NetworkReOptimization, true, true); - Assert.assertEquals("Service sdncRequestHeader rpc-action '" + RpcActions.ServiceCreate.name() - + "' not equal to '" - + RpcActions.NetworkReOptimization.name() + "'", result.getMessage()); + Assert.assertEquals( + LogMessages.rpcactionsDiffers(RpcActions.ServiceCreate, RpcActions.NetworkReOptimization), + result.getMessage()); Assert.assertFalse(result.hasPassed()); } @Test public void checkServiceActionNull() { - ComplianceCheckResult result = ServicehandlerCompliancyCheck.check("service 1", + ComplianceCheckResult result = ServicehandlerComplianceCheck.check("service 1", new SdncRequestHeaderBuilder().setRequestId("1").build(), ConnectionType.Service, RpcActions.NetworkReOptimization, true, true); - Assert.assertEquals("Service sndc-request-header 'rpc-action' is not set ", result.getMessage()); + Assert.assertEquals(LogMessages.RPCACTION_NOT_SET, result.getMessage()); Assert.assertFalse(result.hasPassed()); } } diff --git a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheckTest.java b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheckTest.java index 3df746e36..53f6ca8aa 100644 --- a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheckTest.java +++ b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheckTest.java @@ -8,6 +8,8 @@ package org.opendaylight.transportpce.servicehandler.validation.checks; +import static org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerTxRxCheck.LogMessages; + import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; @@ -33,72 +35,103 @@ public class ServicehandlerTxRxCheckTest { @Test public void checkTxOrRxInfoForNullTx() { - ComplianceCheckResult result = ServicehandlerTxRxCheck.checkTxOrRxInfo(null, null); + ComplianceCheckResult result = ServicehandlerTxRxCheck.checkTxOrRxInfo( + null, + new RxDirectionBuilder() + .setPort(new PortBuilder().setPortDeviceName("q") + .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) + .setLgx(new LgxBuilder().setLgxDeviceName("l") + .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()) + .build()); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service TxDirection is not correctly set", result.getMessage()); + Assert.assertEquals(LogMessages.TXDIR_NOT_SET, result.getMessage()); } @Test public void checkTxOrRxInfoForNullTxPort() { - ComplianceCheckResult result = ServicehandlerTxRxCheck - .checkTxOrRxInfo(new TxDirectionBuilder().build(), null); + ComplianceCheckResult result = ServicehandlerTxRxCheck.checkTxOrRxInfo( + new TxDirectionBuilder() + .setLgx(new LgxBuilder().setLgxDeviceName("l") + .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()) + .build(), + new RxDirectionBuilder() + .setPort(new PortBuilder().setPortDeviceName("q") + .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) + .setLgx(new LgxBuilder().setLgxDeviceName("l") + .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()) + .build()); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service TxDirection Port is not correctly set", result.getMessage()); + Assert.assertEquals(LogMessages.TXDIR_PORT_NOT_SET, result.getMessage()); } @Test public void checkTxOrRxInfoForNullTxLgx() { - ComplianceCheckResult result = ServicehandlerTxRxCheck - .checkTxOrRxInfo(new TxDirectionBuilder() - .setPort(new PortBuilder().setPortDeviceName("q") - .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()).build(), null); + ComplianceCheckResult result = ServicehandlerTxRxCheck.checkTxOrRxInfo( + new TxDirectionBuilder() + .setPort(new PortBuilder().setPortDeviceName("q") + .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()).build(), + new RxDirectionBuilder() + .setPort(new PortBuilder().setPortDeviceName("q") + .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) + .setLgx(new LgxBuilder().setLgxDeviceName("l") + .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()) + .build()); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service TxDirection Lgx is not correctly set", result.getMessage()); + Assert.assertEquals(LogMessages.TXDIR_LGX_NOT_SET, result.getMessage()); } @Test public void checkTxOrRxInfoForNullRx() { - ComplianceCheckResult result = ServicehandlerTxRxCheck - .checkTxOrRxInfo(new TxDirectionBuilder() - .setPort(new PortBuilder().setPortDeviceName("q") - .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) - .setLgx(new LgxBuilder().setLgxDeviceName("l") - .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()).build(), null); + ComplianceCheckResult result = ServicehandlerTxRxCheck.checkTxOrRxInfo( + new TxDirectionBuilder() + .setPort(new PortBuilder().setPortDeviceName("q") + .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) + .setLgx(new LgxBuilder().setLgxDeviceName("l") + .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()) + .build(), + null); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service RxDirection is not correctly set", result.getMessage()); + Assert.assertEquals(LogMessages.RXDIR_NOT_SET, result.getMessage()); } @Test public void checkTxOrRxInfoForNullRxPort() { - ComplianceCheckResult result = ServicehandlerTxRxCheck - .checkTxOrRxInfo(new TxDirectionBuilder() - .setPort(new PortBuilder().setPortDeviceName("q") - .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) - .setLgx(new LgxBuilder().setLgxDeviceName("l") - .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()).build(), - new RxDirectionBuilder().build()); + ComplianceCheckResult result = ServicehandlerTxRxCheck.checkTxOrRxInfo( + new TxDirectionBuilder() + .setPort(new PortBuilder().setPortDeviceName("q") + .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) + .setLgx(new LgxBuilder().setLgxDeviceName("l") + .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()) + .build(), + new RxDirectionBuilder() + .setLgx(new LgxBuilder().setLgxDeviceName("l") + .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()) + .build()); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service RxDirection Port is not correctly set", result.getMessage()); + Assert.assertEquals(LogMessages.RXDIR_PORT_NOT_SET, result.getMessage()); } @Test public void checkTxOrRxInfoForNullRxLgx() { - ComplianceCheckResult result = ServicehandlerTxRxCheck - .checkTxOrRxInfo(new TxDirectionBuilder() - .setPort(new PortBuilder().setPortDeviceName("q") - .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) - .setLgx(new LgxBuilder().setLgxDeviceName("l") - .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()).build(), - new RxDirectionBuilder().setPort(new PortBuilder().setPortDeviceName("q") - .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()).build()); + ComplianceCheckResult result = ServicehandlerTxRxCheck.checkTxOrRxInfo( + new TxDirectionBuilder() + .setPort(new PortBuilder().setPortDeviceName("q") + .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) + .setLgx(new LgxBuilder().setLgxDeviceName("l") + .setLgxPortName("p").setLgxPortRack("r").setLgxPortShelf("s").build()) + .build(), + new RxDirectionBuilder() + .setPort(new PortBuilder().setPortDeviceName("q") + .setPortName("n").setPortRack("r").setPortShelf("s").setPortType("t").build()) + .build()); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service RxDirection Lgx is not correctly set", result.getMessage()); + Assert.assertEquals(LogMessages.RXDIR_LGX_NOT_SET, result.getMessage()); } @Test @@ -106,7 +139,7 @@ public class ServicehandlerTxRxCheckTest { ComplianceCheckResult result = ServicehandlerTxRxCheck.check(null, ServiceEndpointType.SERVICEAEND); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals(ServiceEndpointType.SERVICEAEND + " is not set", result.getMessage()); + Assert.assertEquals(LogMessages.endpointTypeNotSet(ServiceEndpointType.SERVICEAEND), result.getMessage()); } @Ignore @@ -116,7 +149,7 @@ public class ServicehandlerTxRxCheckTest { ServicehandlerTxRxCheck.check(new ServiceAEndBuilder().build(), ServiceEndpointType.SERVICEAEND); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service " + ServiceEndpointType.SERVICEAEND + " rate is not set", result.getMessage()); + Assert.assertEquals(LogMessages.rateNotSet(ServiceEndpointType.SERVICEAEND), result.getMessage()); } @Test @@ -125,7 +158,7 @@ public class ServicehandlerTxRxCheckTest { new ServiceAEndBuilder().setServiceRate(0L).build(), ServiceEndpointType.SERVICEAEND); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service " + ServiceEndpointType.SERVICEAEND + " rate is not set", result.getMessage()); + Assert.assertEquals(LogMessages.rateNotSet(ServiceEndpointType.SERVICEAEND), result.getMessage()); } @Test @@ -134,7 +167,7 @@ public class ServicehandlerTxRxCheckTest { new ServiceAEndBuilder().setServiceRate(3L).build(), ServiceEndpointType.SERVICEAEND); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service " + ServiceEndpointType.SERVICEAEND + " format is not set", result.getMessage()); + Assert.assertEquals(LogMessages.formatNotSet(ServiceEndpointType.SERVICEAEND), result.getMessage()); } @Test @@ -144,8 +177,7 @@ public class ServicehandlerTxRxCheckTest { ServiceEndpointType.SERVICEAEND); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals( - "Service" + ServiceEndpointType.SERVICEAEND + " clli format is not set", result.getMessage()); + Assert.assertEquals(LogMessages.clliNotSet(ServiceEndpointType.SERVICEAEND), result.getMessage()); } @Test @@ -155,6 +187,6 @@ public class ServicehandlerTxRxCheckTest { ServiceEndpointType.SERVICEAEND); Assert.assertFalse(result.hasPassed()); - Assert.assertEquals("Service TxDirection is not correctly set", result.getMessage()); + Assert.assertEquals(LogMessages.TXDIR_NOT_SET, result.getMessage()); } } -- 2.36.6