Servicehandler Tests
[transportpce.git] / servicehandler / src / main / java / org / opendaylight / transportpce / servicehandler / MappingAndSendingPCRequest.java
index df9192211f1ada7415bb25bcb7158654ae5b3f18..ff386744190f0f764022a16a80411769ed4ce80f 100644 (file)
@@ -19,54 +19,65 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.ServiceFeasibilityCheckInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.ServiceReconfigureInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.service.list.Services;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.CancelResourceReserveOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.StubpceService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.path.computation.request.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.path.computation.request.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceEndpoint;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeader;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceFeasibilityCheckInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.list.Services;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.RoutingConstraintsSp.PceMetric;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.routing.constraints.sp.HardConstraints;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.routing.constraints.sp.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.handler.header.ServiceHandlerHeaderBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/*
+/**
  * class for Mapping and Sending PCE requests : - path-computation-request -
  * cancel-resource-reserve.
- * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
+ *
+ * @author <a href="mailto:martial.coulibaly@gfi.com">Martial Coulibaly</a> on behalf of Orange
  *
  */
 public class MappingAndSendingPCRequest {
-    /* Logging. */
+    /** Logging. */
     private static final Logger LOG = LoggerFactory.getLogger(MappingAndSendingPCRequest.class);
-    /* Permit to call PCE RPCs. */
+    /** Permit to call PCE RPCs. */
     private StubpceService service;
-    /* define procedure success (or not ). */
+    /** define procedure success (or not ). */
     private Boolean success;
-    /* permit to call bundle service (PCE, Renderer, Servicehandler. */
+    /** permit to call bundle service (PCE, Renderer, Servicehandler. */
     private RpcProviderRegistry rpcRegistry;
     PathComputationRequestInput pathComputationRequestInput = null;
     CancelResourceReserveInput cancelResourceReserveInput = null;
     HardConstraints hard = null;
     SoftConstraints soft = null;
-    /* store all error messages. */
+    private ServiceAEnd serviceAEndSp;
+    private ServiceZEnd serviceZEndSp;
+    /** store all error messages. */
     private String error;
     private final ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(5));
 
-    /*
+    /**
      * MappingAndSendingPCRequest Class constructor for RPC serviceReconfigure.
      *
      * @param rpcRegistry
@@ -78,26 +89,30 @@ public class MappingAndSendingPCRequest {
      */
     public MappingAndSendingPCRequest(RpcProviderRegistry rpcRegistry, ServiceReconfigureInput serviceReconfigureInput,
             Boolean resvResource) {
-        this.rpcRegistry = rpcRegistry;
+        this.setRpcRegistry(rpcRegistry);
         if (rpcRegistry != null) {
             service = rpcRegistry.getRpcService(StubpceService.class);
         }
-        SdncRequestHeader head = new SdncRequestHeaderBuilder().build();
+        endpointToEndpointStubpce(serviceReconfigureInput.getServiceAEnd(), serviceReconfigureInput.getServiceZEnd());
+        SdncRequestHeader head = new SdncRequestHeaderBuilder()
+                .setRequestId("reconfigure_" + serviceReconfigureInput.getServiceName())
+                .setRpcAction(RpcActions.ServiceReconfigure)
+                .build();
         MappingConstraints map = new MappingConstraints(serviceReconfigureInput.getHardConstraints(),
                 serviceReconfigureInput.getSoftConstraints());
         map.serviceToServicePathConstarints();
-        /*
+        /**
          * mappingPCRequest(serviceReconfigureInput.getNewServiceName(),
          * serviceReconfigureInput.getHardConstraints(),
          * serviceReconfigureInput.getSoftConstraints(),head ,resvResource);
          */
-        mappingPCRequest(serviceReconfigureInput.getNewServiceName(), map.getServicePathHardConstraints(),
-                map.getServicePathSoftConstraints(), head, resvResource);
+        mappingPCRequest(serviceReconfigureInput.getNewServiceName(),serviceAEndSp, serviceZEndSp,
+                map.getServicePathHardConstraints(), map.getServicePathSoftConstraints(), head, resvResource);
         setSuccess(false);
         setError("");
     }
 
-    /*
+    /**
      * MappingAndSendingPCRequest Class constructor for RPC
      * serviceFeasibilityCheck.
      *
@@ -110,20 +125,23 @@ public class MappingAndSendingPCRequest {
      */
     public MappingAndSendingPCRequest(RpcProviderRegistry rpcRegistry,
             ServiceFeasibilityCheckInput serviceFeasibilityCheckInput, Boolean resvResource) {
-        this.rpcRegistry = rpcRegistry;
+        this.setRpcRegistry(rpcRegistry);
         if (rpcRegistry != null) {
             service = rpcRegistry.getRpcService(StubpceService.class);
         }
+        endpointToEndpointStubpce(serviceFeasibilityCheckInput.getServiceAEnd(),
+                serviceFeasibilityCheckInput.getServiceZEnd());
         MappingConstraints map = new MappingConstraints(serviceFeasibilityCheckInput.getHardConstraints(),
                 serviceFeasibilityCheckInput.getSoftConstraints());
         map.serviceToServicePathConstarints();
-        mappingPCRequest("no name", map.getServicePathHardConstraints(), map.getServicePathSoftConstraints(),
-                serviceFeasibilityCheckInput.getSdncRequestHeader(), resvResource);
+        mappingPCRequest("no name",serviceAEndSp, serviceZEndSp, map.getServicePathHardConstraints(),
+                map.getServicePathSoftConstraints(), serviceFeasibilityCheckInput.getSdncRequestHeader(),
+                resvResource);
         setSuccess(false);
         setError("");
     }
 
-    /*
+    /**
      * MappingAndSendingPCRequest Class constructor for RPC serviceCreate.
      *
      * @param rpcRegistry
@@ -135,20 +153,22 @@ public class MappingAndSendingPCRequest {
      */
     public MappingAndSendingPCRequest(RpcProviderRegistry rpcRegistry, ServiceCreateInput serviceCreateInput,
             Boolean resvResource) {
-        this.rpcRegistry = rpcRegistry;
+        this.setRpcRegistry(rpcRegistry);
         if (rpcRegistry != null) {
             service = rpcRegistry.getRpcService(StubpceService.class);
         }
+        endpointToEndpointStubpce(serviceCreateInput.getServiceAEnd(), serviceCreateInput.getServiceZEnd());
         MappingConstraints map = new MappingConstraints(serviceCreateInput.getHardConstraints(),
                 serviceCreateInput.getSoftConstraints());
         map.serviceToServicePathConstarints();
-        mappingPCRequest(serviceCreateInput.getServiceName(), map.getServicePathHardConstraints(),
-                map.getServicePathSoftConstraints(), serviceCreateInput.getSdncRequestHeader(), resvResource);
+        mappingPCRequest(serviceCreateInput.getServiceName(),serviceAEndSp, serviceZEndSp,
+                map.getServicePathHardConstraints(), map.getServicePathSoftConstraints(),
+                serviceCreateInput.getSdncRequestHeader(), resvResource);
         setSuccess(false);
         setError("");
     }
 
-    /*
+    /**
      * MappingAndSendingPCRequest Class constructor for modify Service in ODL
      * Datastore.
      *
@@ -160,24 +180,65 @@ public class MappingAndSendingPCRequest {
      *            Boolean to reserve resource
      */
     public MappingAndSendingPCRequest(RpcProviderRegistry rpcRegistry, Services input, Boolean resvResource) {
-        this.rpcRegistry = rpcRegistry;
+        this.setRpcRegistry(rpcRegistry);
         if (rpcRegistry != null) {
             service = rpcRegistry.getRpcService(StubpceService.class);
         }
+        endpointToEndpointStubpce(input.getServiceAEnd(), input.getServiceZEnd());
         MappingConstraints map = new MappingConstraints(input.getHardConstraints(), input.getSoftConstraints());
         map.serviceToServicePathConstarints();
-        mappingPCRequest(input.getServiceName(), map.getServicePathHardConstraints(),
+        mappingPCRequest(input.getServiceName(),serviceAEndSp, serviceZEndSp, map.getServicePathHardConstraints(),
                 map.getServicePathSoftConstraints(), input.getSdncRequestHeader(), resvResource);
         setSuccess(false);
         setError("");
     }
 
-    /*
+
+    public void endpointToEndpointStubpce(ServiceEndpoint serviceAEnd, ServiceEndpoint serviceZEnd) {
+        LOG.info("Mapping Service Endpoint to Service Endpoint Stubpce");
+        TxDirection txDirection = null;
+        RxDirection rxDirection = null;
+        if (serviceAEnd != null && serviceZEnd != null) {
+            txDirection = new TxDirectionBuilder()
+                    .setPort(serviceAEnd.getTxDirection().getPort())
+                    .build();
+            rxDirection = new RxDirectionBuilder()
+                    .setPort(serviceAEnd.getRxDirection().getPort())
+                    .build();
+            serviceAEndSp = new ServiceAEndBuilder()
+                    .setClli(serviceAEnd.getClli())
+                    .setNodeId(serviceAEnd.getNodeId())
+                    .setServiceFormat(serviceAEnd.getServiceFormat())
+                    .setServiceRate(serviceAEnd.getServiceRate())
+                    .setTxDirection(txDirection)
+                    .setRxDirection(rxDirection)
+                    .build();
+
+            txDirection = new TxDirectionBuilder()
+                    .setPort(serviceZEnd.getTxDirection().getPort())
+                    .build();
+            rxDirection = new RxDirectionBuilder()
+                    .setPort(serviceZEnd.getRxDirection().getPort())
+                    .build();
+            serviceZEndSp = new ServiceZEndBuilder()
+                    .setClli(serviceZEnd.getClli())
+                    .setNodeId(serviceZEnd.getNodeId())
+                    .setServiceFormat(serviceZEnd.getServiceFormat())
+                    .setServiceRate(serviceZEnd.getServiceRate())
+                    .setTxDirection(txDirection)
+                    .setRxDirection(rxDirection)
+                    .build();
+        }
+    }
+
+    /**
      * Build pathComputationRequestInput or cancelResourceReserveInput with
      * input parameters (serviceReconfigureInput or serviceFeasibilityCheckInput.
      *
      * @param String
      *            serviceName
+     * @param zend Service ZEnd
+     * @param aend Service AEnd
      * @param HardConstraints
      *            hardConstraints
      * @param SoftConstraints
@@ -187,9 +248,10 @@ public class MappingAndSendingPCRequest {
      * @param Boolean
      *            resvResource
      */
-    private void mappingPCRequest(String serviceName, HardConstraints hardConstraints, SoftConstraints softConstraints,
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.sdnc.request.header
-            .SdncRequestHeader sdncRequestHeader, Boolean resvResource) {
+    private void mappingPCRequest(String serviceName, ServiceAEnd aend, ServiceZEnd zend,
+            HardConstraints hardConstraints, SoftConstraints softConstraints, org.opendaylight.yang.gen.v1.http.org
+            .openroadm.common.service.types.rev161014.sdnc.request.header.SdncRequestHeader sdncRequestHeader,
+            Boolean resvResource) {
 
         LOG.info("Mapping ServiceCreateInput or ServiceFeasibilityCheckInput or serviceReconfigureInput "
                 + "to PCE requests");
@@ -212,34 +274,38 @@ public class MappingAndSendingPCRequest {
             serviceHandlerHeader.setRequestId(sdncRequestHeader.getRequestId());
         }
 
-        /* PathComputationRequestInput build */
-        pathComputationRequestInput = new PathComputationRequestInputBuilder().setServiceName(serviceName)
-                .setResourceReserve(resvResource).setServiceHandlerHeader(serviceHandlerHeader.build())
-                .setHardConstraints(pceHardConstraints).setSoftConstraints(pceSoftConstraints)
+        /** PathComputationRequestInput build */
+        pathComputationRequestInput = new PathComputationRequestInputBuilder()
+                .setServiceName(serviceName)
+                .setResourceReserve(resvResource)
+                .setServiceHandlerHeader(serviceHandlerHeader.build())
+                .setServiceAEnd(aend)
+                .setServiceZEnd(zend)
+                .setHardConstraints(pceHardConstraints)
+                .setSoftConstraints(pceSoftConstraints)
                 .setPceMetric(PceMetric.TEMetric).build();
 
-        /* CancelResourceReserveInput build */
+        /** CancelResourceReserveInput build */
         cancelResourceReserveInput = new CancelResourceReserveInputBuilder().setServiceName(serviceName)
                 .setServiceHandlerHeader(serviceHandlerHeader.build()).build();
     }
 
-    /* Send cancelResourceReserve request to PCE.
+
+    /**
+     * Send cancelResourceReserve request to PCE.
      *
-     * @return CancelResourceReserveOutput data response from PCE
+     * @return Boolean true if success, false else
      */
-    public ListenableFuture<CancelResourceReserveOutput> cancelResourceReserve() {
+    public ListenableFuture<Boolean> cancelResourceReserve() {
         setSuccess(false);
-        return executor.submit(new Callable<CancelResourceReserveOutput>() {
-
+        return executor.submit(new Callable<Boolean>() {
             @Override
-            public CancelResourceReserveOutput call() throws Exception {
-                CancelResourceReserveOutput output = null;
+            public Boolean call() throws Exception {
+                Boolean output = false;
                 if (cancelResourceReserveInput != null) {
-
                     RpcResult<CancelResourceReserveOutput> pceOutputResult = null;
                     Future<RpcResult<CancelResourceReserveOutput>> pceOutputFuture = service
                             .cancelResourceReserve(cancelResourceReserveInput);
-
                     try {
                         pceOutputResult = pceOutputFuture.get();
                     } catch (InterruptedException | CancellationException | ExecutionException e) {
@@ -251,9 +317,7 @@ public class MappingAndSendingPCRequest {
 
                     if (pceOutputResult != null && pceOutputResult.isSuccessful()) {
                         LOG.info("PCE replied to CancelResource request !");
-                        CancelResourceReserveOutput pceOutput = pceOutputResult.getResult();
-                        output = new CancelResourceReserveOutputBuilder()
-                                .setConfigurationResponseCommon(pceOutput.getConfigurationResponseCommon()).build();
+                        output = true;
                         setSuccess(true);
                     }
                 } else {
@@ -265,54 +329,35 @@ public class MappingAndSendingPCRequest {
 
     }
 
-    public Boolean getSuccess() {
-        return success;
-    }
-
-    public void setSuccess(Boolean success) {
-        this.success = success;
-    }
-
-    public String getError() {
-        return error;
-    }
-
-    public void setError(String error) {
-        this.error = error;
-    }
-
-    /*Send pathComputationRequest request to PCE.
+    /**
+     * Send pathComputationRequest request to PCE.
      *
-     * @return PathComputationRequestOutput data response from PCE
+     * @return Boolean true if success, false else
      */
-    public ListenableFuture<PathComputationRequestOutput> pathComputationRequest() {
+    public ListenableFuture<Boolean> pathComputationRequest() {
         LOG.info("In pathComputationRequest ...");
         setSuccess(false);
-        return executor.submit(new Callable<PathComputationRequestOutput>() {
+        return executor.submit(new Callable<Boolean>() {
             @Override
-            public PathComputationRequestOutput call() throws Exception {
+            public Boolean call() throws Exception {
                 RpcResult<PathComputationRequestOutput> pceOutputResult = null;
-                PathComputationRequestOutput output = null;
+                Boolean output = false;
                 if (pathComputationRequestInput != null) {
+                    LOG.info("pathComputationRequestInput : {}", pathComputationRequestInput.toString());
                     Future<RpcResult<PathComputationRequestOutput>> pceOutputFuture = service
                             .pathComputationRequest(pathComputationRequestInput);
                     try {
-                        pceOutputResult = pceOutputFuture.get();// wait to get
-                                                                // the result
+                        pceOutputResult = pceOutputFuture.get();
                     } catch (InterruptedException | CancellationException | ExecutionException e) {
                         setError("Did not receive the expected response from pce to pathComputationRequest RPC "
                                 + e.toString());
                         LOG.error(error);
                         pceOutputFuture.cancel(true);
                     }
-
                     if (pceOutputResult != null && pceOutputResult.isSuccessful()) {
                         setSuccess(true);
+                        output = true;
                         LOG.info("PCE replied to pathComputation request !");
-                        PathComputationRequestOutput pceOutput = pceOutputResult.getResult();
-                        output = new PathComputationRequestOutputBuilder()
-                                .setConfigurationResponseCommon(pceOutput.getConfigurationResponseCommon())
-                                .setResponseParameters(pceOutput.getResponseParameters()).build();
                     }
                 } else {
                     LOG.info("pathComputationRequestInput parameter not valid !");
@@ -320,6 +365,45 @@ public class MappingAndSendingPCRequest {
                 return output;
             }
         });
+    }
+
+    public Boolean getSuccess() {
+        return success;
+    }
+
+    public void setSuccess(Boolean success) {
+        this.success = success;
+    }
+
+    public String getError() {
+        return error;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+
+    public RpcProviderRegistry getRpcRegistry() {
+        return rpcRegistry;
+    }
+
+    public void setRpcRegistry(RpcProviderRegistry rpcRegistry) {
+        this.rpcRegistry = rpcRegistry;
+    }
+
+    public ServiceAEnd getServiceAEndSp() {
+        return serviceAEndSp;
+    }
+
+    public void setServiceAEndSp(ServiceAEnd serviceAEndSp) {
+        this.serviceAEndSp = serviceAEndSp;
+    }
+
+    public ServiceZEnd getServiceZEndSp() {
+        return serviceZEndSp;
+    }
 
+    public void setServiceZEndSp(ServiceZEnd serviceZEndSp) {
+        this.serviceZEndSp = serviceZEndSp;
     }
 }