<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
POSSIBILITY OF SUCH DAMAGE";
+ revision 2022-08-08 {
+ description
+ "Implement the RPC path-computation-reroute-request (only for reroute purposes) that computes a service path of
+ an existing service in order to reroute it";
+ }
revision 2022-06-15 {
description
"change fraction digits from 2 to 6 for accumulative-value leaf, from 2 to 6 to be compliant with Gnpy";
}
}
+ rpc path-computation-reroute-request {
+ input {
+ container endpoints {
+ description
+ "Indicates the endpoints termination-point of the service to reroute";
+ leaf a-end-tp {
+ mandatory true;
+ type string;
+ }
+ leaf z-end-tp {
+ mandatory true;
+ type string;
+ }
+ }
+ leaf pce-routing-metric {
+ type transportpce-common-service-path-types:pce-metric;
+ }
+ uses transportpce-common-service-path-types:service-handler-header;
+ container service-a-end {
+ uses transportpce-common-service-path-types:service-endpoint-sp;
+ }
+ container service-z-end {
+ uses transportpce-common-service-path-types:service-endpoint-sp;
+ }
+ uses org-openroadm-routing-constraints:routing-constraints;
+ uses org-openroadm-common-service-types:routing-metric;
+ }
+ output {
+ uses org-openroadm-common-service-types:configuration-response-common;
+ }
+ }
+
rpc cancel-resource-reserve {
input {
leaf service-name {
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>netconf-artifacts</artifactId>
- <version>4.0.1</version>
+ <version>4.0.2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
sortedCreatedOduInterfaces.sort((s1,s2) -> s1.compareTo(s2));
String srcTp = sortedCreatedOduInterfaces.get(0);
String dstTp = sortedCreatedOduInterfaces.get(1);
+ // Strip the service name from the src and dst
+ String oduXConnectionName = srcTp.split(":")[0] + "-x-" + dstTp.split(":")[0];
OduConnectionBuilder oduConnectionBuilder = new OduConnectionBuilder()
- .setConnectionName(srcTp + "-x-" + dstTp)
+ .setConnectionName(oduXConnectionName)
.setDestination(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.odu.connection
.DestinationBuilder().setDstIf(dstTp).build())
.setSource(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.odu.connection
deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
try {
commit.get();
- LOG.info("Otn-connection successfully created: {}-{}", srcTp, dstTp);
- return Optional.of(srcTp + "-x-" + dstTp);
+ LOG.info("Otn-connection successfully created: {}", oduXConnectionName);
+ return Optional.of(oduXConnectionName);
} catch (InterruptedException | ExecutionException e) {
LOG.warn("Failed to post {}.", oduConnectionBuilder.build(), e);
}
String deviceId = node.getNodeId();
String srcTp = createdOduInterfaces.get(0);
String dstTp = createdOduInterfaces.get(1);
-
+ LOG.debug("Client TP: {}, Network TP: {}, Network2TP: {} SrcTP: {}, DstTP: {}",
+ node.getClientTp(), node.getNetworkTp(), node.getNetwork2Tp(), srcTp, dstTp);
+ if (!srcTp.contains(node.getClientTp())) {
+ // If the src-tp does not contain client port, then we swap src-tp & dest-tp
+ String tmp;
+ tmp = dstTp;
+ dstTp = srcTp;
+ srcTp = tmp;
+ LOG.debug("After swap, SrcTP: {}, DstTP: {}", srcTp, dstTp);
+ }
+ // Strip the service name from the src and dst
+ String oduXConnectionName = srcTp.split(":")[0] + "-x-" + dstTp.split(":")[0];
OduConnectionBuilder oduConnectionBuilder = new OduConnectionBuilder()
- .setConnectionName(srcTp + "-x-" + dstTp)
+ .setConnectionName(oduXConnectionName)
.setDestination(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.odu.connection
.DestinationBuilder().setDstIf(dstTp).build())
.setSource(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.odu.connection
deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
try {
commit.get();
- LOG.info("Otn-connection successfully created: {}-{}", srcTp, dstTp);
- return Optional.of(srcTp + "-x-" + dstTp);
+ LOG.info("Otn-connection successfully created: {}", oduXConnectionName);
+ return Optional.of(oduXConnectionName);
} catch (InterruptedException | ExecutionException e) {
LOG.warn("Failed to post {}.", oduConnectionBuilder.build(), e);
}
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<name>OpenDaylight :: transportpce :: swagger</name>
<properties>
- <netconf.version>4.0.1</netconf.version>
+ <netconf.version>4.0.2</netconf.version>
<configfile.directory>etc/opendaylight/karaf</configfile.directory>
</properties>
<name>OpenDaylight :: transportpce</name>
<properties>
- <netconf.version>4.0.1</netconf.version>
+ <netconf.version>4.0.2</netconf.version>
<configfile.directory>etc/opendaylight/karaf</configfile.directory>
</properties>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
.getInstance(),
org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.$YangModuleInfoImpl
.getInstance(),
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.$YangModuleInfoImpl
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.$YangModuleInfoImpl
.getInstance(),
org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.$YangModuleInfoImpl
.getInstance(),
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>netconf-artifacts</artifactId>
- <version>4.0.1</version>
+ <version>4.0.2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
import org.opendaylight.transportpce.test.converter.DataObjectConverter;
import org.opendaylight.transportpce.test.converter.JSONDataObjectConverter;
import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsKey;
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>netconf-artifacts</artifactId>
- <version>4.0.1</version>
+ <version>4.0.2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
*/
package org.opendaylight.transportpce.pce;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
return new PceComplianceCheckResult(result, message);
}
+ public static PceComplianceCheckResult check(PathComputationRerouteRequestInput input) {
+ if (input == null) {
+ return new PceComplianceCheckResult(false, "");
+ }
+ if (input.getEndpoints() == null
+ || input.getEndpoints().getAEndTp() == null
+ || input.getEndpoints().getZEndTp() == null) {
+ String message = "At least one of the termination points is missing";
+ LOG.debug(message);
+ return new PceComplianceCheckResult(false, message);
+ }
+ return new PceComplianceCheckResult(true, "");
+ }
+
}
import org.opendaylight.transportpce.pce.graph.PceGraph;
import org.opendaylight.transportpce.pce.networkanalyzer.PceCalculation;
import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.Endpoints;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
* Class for Sending
* PCE requests :
* - path-computation-request
+ * - path-computation-reroute
* - cancel-resource-reserve.
* @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
*
private String responseCode;
private final GnpyConsumer gnpyConsumer;
private PortMapping portMapping;
+ // Define the termination points whose reservation status is not taken into account during the pruning process
+ private Endpoints endpoints;
public PceSendingPceRPCs(GnpyConsumer gnpyConsumer) {
setPathDescription(null);
this.gnpyConsumer = gnpyConsumer;
}
- public PceSendingPceRPCs(PathComputationRequestInput input,
- NetworkTransactionService networkTransaction, GnpyConsumer gnpyConsumer, PortMapping portMapping) {
+ public PceSendingPceRPCs(PathComputationRequestInput input, NetworkTransactionService networkTransaction,
+ GnpyConsumer gnpyConsumer, PortMapping portMapping) {
this.gnpyConsumer = gnpyConsumer;
setPathDescription(null);
-
// TODO compliance check to check that input is not empty
this.input = input;
this.networkTransaction = networkTransaction;
this.portMapping = portMapping;
+ this.endpoints = null;
+ }
+
+ public PceSendingPceRPCs(PathComputationRequestInput input, NetworkTransactionService networkTransaction,
+ GnpyConsumer gnpyConsumer, PortMapping portMapping,
+ Endpoints endpoints) {
+ this.gnpyConsumer = gnpyConsumer;
+ setPathDescription(null);
+ this.input = input;
+ this.networkTransaction = networkTransaction;
+ this.portMapping = portMapping;
+ this.endpoints = endpoints;
}
public void cancelResourceReserve() {
public void pathComputationWithConstraints(PceConstraints hardConstraints, PceConstraints softConstraints) {
- PceCalculation nwAnalizer =
- new PceCalculation(input, networkTransaction, hardConstraints, softConstraints, rc, portMapping);
+ PceCalculation nwAnalizer = new PceCalculation(input, networkTransaction, hardConstraints, softConstraints, rc,
+ portMapping, endpoints);
nwAnalizer.retrievePceNetwork();
rc = nwAnalizer.getReturnStructure();
String serviceType = nwAnalizer.getServiceType();
import org.opendaylight.transportpce.common.Timeouts;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.pce.constraints.PceConstraints.ResourcePair;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.Constraints;
import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRouting;
import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.SynchronizationBuilder;
import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.synchronization.Svec;
import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.synchronization.SvecBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.generic.path.properties.path.properties.PathRouteObjects;
import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.service.PathRequest;
import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.Synchronization;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
import org.opendaylight.transportpce.pce.constraints.PceConstraints.ResourcePair;
import org.opendaylight.transportpce.pce.networkanalyzer.PceNode;
import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.SpectrumAssignment;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.SpectrumAssignmentBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.SpectrumAssignment;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.SpectrumAssignmentBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.OpucnTribSlotDef;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
import org.opendaylight.mdsal.binding.api.RpcProviderService;
import org.opendaylight.transportpce.pce.service.PathComputationService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.TransportpcePceService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceService;
import org.opendaylight.yangtools.concepts.ObjectRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.concurrent.ExecutionException;
import org.opendaylight.transportpce.pce.service.PathComputationService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.TransportpcePceService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceService;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.slf4j.Logger;
public ListenableFuture<RpcResult<CancelResourceReserveOutput>>
cancelResourceReserve(CancelResourceReserveInput input) {
LOG.info("RPC cancelResourceReserve request received");
- CancelResourceReserveOutput output = null;
try {
- output = this.pathComputationService.cancelResourceReserve(input).get();
+ return RpcResultBuilder
+ .success(
+ this.pathComputationService.cancelResourceReserve(input).get())
+ .buildFuture();
} catch (InterruptedException | ExecutionException e) {
LOG.error("RPC cancelResourceReserve failed !", e);
+ return RpcResultBuilder.success((CancelResourceReserveOutput) null).buildFuture();
}
- return RpcResultBuilder.success(output).buildFuture();
}
@Override
public ListenableFuture<RpcResult<PathComputationRequestOutput>>
pathComputationRequest(PathComputationRequestInput input) {
LOG.info("RPC path computation request received");
- LOG.debug("input parameters are : input = {}", input.toString());
- PathComputationRequestOutput output = null;
+ LOG.debug("input parameters are : input = {}", input);
try {
- output = this.pathComputationService.pathComputationRequest(input).get();
+ return RpcResultBuilder
+ .success(
+ this.pathComputationService.pathComputationRequest(input).get())
+ .buildFuture();
} catch (InterruptedException | ExecutionException e) {
LOG.error("RPC path computation request failed !", e);
}
- return RpcResultBuilder.success(output).buildFuture();
+ return RpcResultBuilder.success((PathComputationRequestOutput) null).buildFuture();
+ }
+
+ @Override
+ public ListenableFuture<RpcResult<PathComputationRerouteRequestOutput>> pathComputationRerouteRequest(
+ PathComputationRerouteRequestInput input) {
+ LOG.info("RPC path computation reroute request received");
+ LOG.debug("input parameters are : input = {}", input);
+ try {
+ return RpcResultBuilder
+ .success(
+ this.pathComputationService.pathComputationRerouteRequest(input).get())
+ .buildFuture();
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("RPC path computation request failed !", e);
+ return RpcResultBuilder.success((PathComputationRerouteRequestOutput) null).buildFuture();
+ }
}
}
import org.opendaylight.transportpce.common.service.ServiceTypes;
import org.opendaylight.transportpce.pce.PceComplianceCheck;
import org.opendaylight.transportpce.pce.constraints.PceConstraints;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.Endpoints;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mc.capabilities.McCapabilities;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
private List<LinkId> linksToExclude = new ArrayList<>();
private PceResult returnStructure;
private PortMapping portMapping;
+ // Define the termination points whose reservation status is not taken into account during the pruning process
+ private Endpoints endpoints;
private enum ConstraintTypes {
NONE, HARD_EXCLUDE, HARD_INCLUDE, HARD_DIVERSITY, SOFT_EXCLUDE, SOFT_INCLUDE, SOFT_DIVERSITY;
private MappingUtils mappingUtils;
public PceCalculation(PathComputationRequestInput input, NetworkTransactionService networkTransactionService,
- PceConstraints pceHardConstraints, PceConstraints pceSoftConstraints, PceResult rc,
- PortMapping portMapping) {
+ PceConstraints pceHardConstraints, PceConstraints pceSoftConstraints, PceResult rc,
+ PortMapping portMapping) {
this.input = input;
this.networkTransactionService = networkTransactionService;
this.returnStructure = rc;
+ this.pceHardConstraints = pceHardConstraints;
+ this.mappingUtils = new MappingUtilsImpl(networkTransactionService.getDataBroker());
+ this.portMapping = portMapping;
+ this.endpoints = null;
+ parseInput();
+ }
+ public PceCalculation(PathComputationRequestInput input, NetworkTransactionService networkTransactionService,
+ PceConstraints pceHardConstraints, PceConstraints pceSoftConstraints, PceResult rc,
+ PortMapping portMapping, Endpoints endpoints) {
+ this.input = input;
+ this.networkTransactionService = networkTransactionService;
+ this.returnStructure = rc;
this.pceHardConstraints = pceHardConstraints;
this.mappingUtils = new MappingUtilsImpl(networkTransactionService.getDataBroker());
this.portMapping = portMapping;
+ this.endpoints = endpoints;
parseInput();
}
PceOpticalNode pceNode = new PceOpticalNode(deviceNodeId, this.serviceType, portMapping, node, nodeType,
mappingUtils.getOpenRoadmVersion(deviceNodeId), getSlotWidthGranularity(deviceNodeId, node.getNodeId()),
getCentralFreqGranularity(deviceNodeId, node.getNodeId()));
+ if (endpoints != null) {
+ pceNode.setEndpoints(endpoints);
+ }
pceNode.validateAZxponder(anodeId, znodeId, input.getServiceAEnd().getServiceFormat());
pceNode.initFrequenciesBitSet();
import org.opendaylight.transportpce.common.fixedflex.GridConstant;
import org.opendaylight.transportpce.common.mapping.PortMapping;
import org.opendaylight.transportpce.pce.SortPortsByName;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.Endpoints;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
private String version;
private BigDecimal slotWidthGranularity;
private BigDecimal centralFreqGranularity;
+ private Endpoints endpoints;
public PceOpticalNode(String deviceNodeId, String serviceType, PortMapping portMapping, Node node,
OpenroadmNodeType nodeType, String version, BigDecimal slotWidthGranularity,
LOG.warn("initXndrTps: XPONDER tp = {} is OOS/degraded", tp.getTpId().getValue());
continue;
}
- org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1 nttp1 = tp
- .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
- .TerminationPoint1.class);
- if (nttp1 != null && nttp1.getXpdrNetworkAttributes().getWavelength() != null) {
- this.usedXpndrNWTps.add(tp.getTpId().getValue());
- LOG.debug("initXndrTps: XPONDER tp = {} is used", tp.getTpId().getValue());
- continue;
+ if (endpoints == null
+ || (!endpoints.getAEndTp().equals(tp.getTpId().getValue())
+ && !endpoints.getZEndTp().equals(tp.getTpId().getValue()))) {
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1 nttp1 =
+ tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+ .TerminationPoint1.class);
+ if (nttp1 != null && nttp1.getXpdrNetworkAttributes().getWavelength() != null) {
+ this.usedXpndrNWTps.add(tp.getTpId().getValue());
+ LOG.debug("initXndrTps: XPONDER tp = {} is used", tp.getTpId().getValue());
+ continue;
+ }
}
// find Client of this network TP
if (cntp1.getAssociatedConnectionMapTp() != null) {
return centralFreqGranularity;
}
+ public void setEndpoints(Endpoints endpoints) {
+ this.endpoints = endpoints;
+ }
+
}
package org.opendaylight.transportpce.pce.service;
import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
/**
* Path Computation Service.
*/
ListenableFuture<PathComputationRequestOutput> pathComputationRequest(PathComputationRequestInput input);
+ /**
+ * Requests a path computation in order to reroute a service.
+ *
+ * @param input PathComputationRerouteRequestInput data
+ * @return output PathComputationRerouteRequestOutput data
+ */
+ ListenableFuture<PathComputationRerouteRequestOutput> pathComputationRerouteRequest(
+ PathComputationRerouteRequestInput input);
+
}
import org.opendaylight.transportpce.pce.gnpy.GnpyResult;
import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.result.Response;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.ServicePathRpcResultBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.gnpy.GnpyResponse;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.gnpy.GnpyResponseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.gnpy.gnpy.response.response.type.NoPathCaseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.gnpy.gnpy.response.response.type.PathCaseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.performance.PathPropertiesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.performance.path.properties.PathMetric;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.performance.path.properties.PathMetricBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResultBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.GnpyResponse;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.GnpyResponseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.gnpy.response.response.type.NoPathCaseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.gnpy.response.response.type.PathCaseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.PathPropertiesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.path.properties.PathMetric;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.path.properties.PathMetricBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
}
// Path calculator returned Success
PathDescription pathDescription =
- new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615
- .service.path.rpc.result.PathDescriptionBuilder()
+ new PathDescriptionBuilder()
.setAToZDirection(path.getAToZDirection())
.setZToADirection(path.getZToADirection())
.build();
});
}
+ @Override
+ public ListenableFuture<PathComputationRerouteRequestOutput> pathComputationRerouteRequest(
+ PathComputationRerouteRequestInput input) {
+ return executor.submit(() -> {
+ PathComputationRerouteRequestOutputBuilder output = new PathComputationRerouteRequestOutputBuilder();
+ ConfigurationResponseCommonBuilder configurationResponseCommon = new ConfigurationResponseCommonBuilder()
+ .setRequestId("none");
+ PceComplianceCheckResult check = PceComplianceCheck.check(input);
+ if (!check.hasPassed()) {
+ LOG.error("Path not calculated, path computation reroute request not compliant : {}",
+ check.getMessage());
+ configurationResponseCommon
+ .setAckFinalIndicator("Yes")
+ .setResponseCode("Path not calculated")
+ .setResponseMessage(check.getMessage());
+ return output
+ .setConfigurationResponseCommon(configurationResponseCommon.build())
+ .build();
+ }
+ PathComputationRequestInput pathComputationInput = new PathComputationRequestInputBuilder()
+ .setServiceName("no_name")
+ .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("none").build())
+ .setServiceAEnd(new ServiceAEndBuilder(input.getServiceAEnd()).build())
+ .setServiceZEnd(new ServiceZEndBuilder(input.getServiceZEnd()).build())
+ .setHardConstraints(input.getHardConstraints())
+ .setPceRoutingMetric(input.getPceRoutingMetric())
+ .setResourceReserve(false)
+ .setSoftConstraints(input.getSoftConstraints())
+ .setRoutingMetric(input.getRoutingMetric())
+ .build();
+ PceSendingPceRPCs sendingPCE = new PceSendingPceRPCs(pathComputationInput, networkTransactionService,
+ gnpyConsumer, portMapping, input.getEndpoints());
+ sendingPCE.pathComputation();
+ String message = sendingPCE.getMessage();
+ String responseCode = sendingPCE.getResponseCode();
+ LOG.info("PCE response: {} {}", message, responseCode);
+ return output.setConfigurationResponseCommon(
+ configurationResponseCommon
+ .setAckFinalIndicator("Yes")
+ .setResponseCode(responseCode)
+ .setResponseMessage(message)
+ .build())
+ .build();
+ });
+ }
+
public GnpyResponse generateGnpyResponse(Response responseGnpy, String pathDir) {
if (responseGnpy == null) {
return new GnpyResponseBuilder()
import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
import org.opendaylight.transportpce.pce.utils.NotificationPublishServiceMock;
import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.TransportpcePceService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceService;
import org.opendaylight.yangtools.concepts.ObjectRegistration;
public class PceProviderTest extends AbstractTest {
import org.opendaylight.transportpce.pce.utils.PceTestUtils;
import org.opendaylight.transportpce.pce.utils.TransactionUtils;
import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInputBuilder;
public class PceServiceRPCImplTest extends AbstractTest {
assertNotNull(pceServiceRPC.pathComputationRequest(PceTestData.getPCERequest()));
}
+ @Test
+ public void testPathComputationRerouteRequest() {
+ assertNotNull(pceServiceRPC.pathComputationRerouteRequest(PceTestData.getPCERerouteRequest()));
+ }
+
@Test
public void testPathComputationRequestCoRoutingOrGeneral2() {
assertNotNull(pceServiceRPC.pathComputationRequest(
import org.opendaylight.transportpce.pce.utils.PceTestUtils;
import org.opendaylight.transportpce.pce.utils.TransactionUtils;
import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.MappingBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.Nodes;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.nodes.NodeInfo;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.nodes.NodeInfoBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
-//import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class PceCalculationTest extends AbstractTest {
}
+ @Test
+ public void pathComputationRerouteRequestTest() {
+ pathComputationServiceImpl.generateGnpyResponse(null,"path");
+ Assert.assertNotNull(pathComputationServiceImpl
+ .pathComputationRerouteRequest(PceTestData.getPCEReroute()));
+
+ }
+
@After
public void destroy() {
pathComputationServiceImpl.close();
import java.util.Map;
import java.util.Set;
import org.opendaylight.transportpce.common.ResponseCodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.EndpointsBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
.build();
}
+ public static PathComputationRerouteRequestInput getPCERerouteRequest() {
+ return new PathComputationRerouteRequestInputBuilder()
+ .setPceRoutingMetric(PceMetric.HopCount)
+ .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder()
+ .setRequestId("request1")
+ .build())
+ .setServiceAEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+ .path.computation.reroute.request.input.ServiceAEndBuilder()
+ .setServiceFormat(ServiceFormat.Ethernet)
+ .setServiceRate(Uint32.valueOf(100))
+ .setClli("clli11")
+ .setNodeId("XPONDER-2-2")
+ .setTxDirection(new TxDirectionBuilder()
+ .setPort(new PortBuilder()
+ .setPortDeviceName("Some port-device-name")
+ .setPortType("Some port-type")
+ .setPortName("Some port-name")
+ .setPortRack("Some port-rack")
+ .setPortShelf("Some port-shelf")
+ .setPortSlot("Some port-slot")
+ .setPortSubSlot("Some port-sub-slot")
+ .build())
+ .build())
+ .setRxDirection(new RxDirectionBuilder()
+ .setPort(new PortBuilder()
+ .setPortDeviceName("Some port-device-name")
+ .setPortType("Some port-type")
+ .setPortName("Some port-name")
+ .setPortRack("Some port-rack")
+ .setPortShelf("Some port-shelf")
+ .setPortSlot("Some port-slot")
+ .setPortSubSlot("Some port-sub-slot")
+ .build())
+ .build())
+ .build())
+ .setServiceZEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+ .path.computation.reroute.request.input.ServiceZEndBuilder()
+ .setServiceFormat(ServiceFormat.Ethernet)
+ .setServiceRate(Uint32.valueOf(0))
+ .setClli("Some clli11")
+ .setNodeId("XPONDER-1-2")
+ .setTxDirection(new TxDirectionBuilder()
+ .setPort(new PortBuilder()
+ .setPortDeviceName("Some port-device-name")
+ .setPortType("Some port-type")
+ .setPortName("Some port-name")
+ .setPortRack("Some port-rack")
+ .setPortShelf("Some port-shelf")
+ .setPortSlot("Some port-slot")
+ .setPortSubSlot("Some port-sub-slot")
+ .build())
+ .build())
+ .setRxDirection(new RxDirectionBuilder()
+ .setPort(new PortBuilder()
+ .setPortDeviceName("Some port-device-name")
+ .setPortType("Some port-type")
+ .setPortName("Some port-name")
+ .setPortRack("Some port-rack")
+ .setPortShelf("Some port-shelf")
+ .setPortSlot("Some port-slot")
+ .setPortSubSlot("Some port-sub-slot")
+ .build())
+ .build())
+ .build())
+ .setHardConstraints(new HardConstraintsBuilder()
+ .setCustomerCode(Set.of("Some customer-code"))
+ .setCoRouting(new CoRoutingBuilder()
+ .setServiceIdentifierList(Map.of(
+ new org.opendaylight.yang.gen.v1
+ .http.org.openroadm.routing.constraints.rev211210
+ .constraints.co.routing.ServiceIdentifierListKey("test"),
+ new ServiceIdentifierListBuilder().setServiceIdentifier("test").build()))
+ .build())
+ .build())
+ .setSoftConstraints(new SoftConstraintsBuilder()
+ .setCustomerCode(Set.of("Some customer-code"))
+ .setCoRouting(new CoRoutingBuilder()
+ .setServiceIdentifierList(Map.of(
+ new org.opendaylight.yang.gen.v1
+ .http.org.openroadm.routing.constraints.rev211210
+ .constraints.co.routing.ServiceIdentifierListKey("test"),
+ new ServiceIdentifierListBuilder().setServiceIdentifier("test").build()))
+ .build())
+ .build())
+ .setEndpoints(new EndpointsBuilder()
+ .setAEndTp("AendTP")
+ .setZEndTp("ZendTP")
+ .build())
+ .build();
+ }
+
public static PathComputationRequestOutput getFailedPCEResultYes() {
return new PathComputationRequestOutputBuilder()
.setConfigurationResponseCommon(
.build();
}
+ public static PathComputationRerouteRequestInput getPCEReroute() {
+ return new PathComputationRerouteRequestInputBuilder()
+ .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder()
+ .setRequestId("request 1")
+ .build())
+ .setPceRoutingMetric(PceMetric.HopCount)
+ .setServiceAEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+ .path.computation.reroute.request.input.ServiceAEndBuilder()
+ .setServiceRate(Uint32.valueOf(100))
+ .setServiceFormat(ServiceFormat.Ethernet)
+ .setNodeId("XPONDER-1-2")
+ .build())
+ .setServiceZEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+ .path.computation.reroute.request.input.ServiceZEndBuilder()
+ .setServiceRate(Uint32.valueOf(0))
+ .setServiceFormat(ServiceFormat.Ethernet)
+ .setNodeId("XPONDER-3-2")
+ .build())
+ .setHardConstraints(new HardConstraintsBuilder()
+ .setExclude(new ExcludeBuilder()
+ .setNodeId(Set.of(
+ new NodeIdType("OpenROADM-2-1"),
+ new NodeIdType("OpenROADM-2-2")))
+ .build())
+ .build())
+ .setEndpoints(new EndpointsBuilder()
+ .setAEndTp("AendTP")
+ .setZEndTp("ZendTP")
+ .build())
+ .build();
+ }
+
/**
* Generate Data for Test 2 request 5-4.
* <code>{
import org.opendaylight.transportpce.test.DataStoreContext;
import org.opendaylight.transportpce.test.converter.DataObjectConverter;
import org.opendaylight.transportpce.test.converter.XMLDataObjectConverter;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Node;
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
LOG.error(OTN_FUNTIONS_ARE_NOT_SUPPORTED_BY_OPENROADM_MODELS_1_2_1_MSG);
return null;
case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
- return openRoadmOtnInterface221.createOpenRoadmOdu0Interface(nodeId, logicalConnPoint,
+ return openRoadmOtnInterface221.createOpenRoadmOdu0Interface(nodeId, logicalConnPoint, servicename,
isCTP, tribPortNumber, tribSlotIndex, apiInfoA, apiInfoZ, payLoadType);
default:
return null;
}
}
- public String createOpenRoadmOdu2Interface(String nodeId, String logicalConnPoint,
+ public String createOpenRoadmOdu2Interface(String nodeId, String logicalConnPoint, String servicename,
boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ,
String payLoadType)
throws OpenRoadmInterfaceException {
LOG.error(OTN_FUNTIONS_ARE_NOT_SUPPORTED_BY_OPENROADM_MODELS_1_2_1_MSG);
return null;
case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
- return openRoadmOtnInterface221.createOpenRoadmOdu2Interface(nodeId, logicalConnPoint,
+ return openRoadmOtnInterface221.createOpenRoadmOdu2Interface(nodeId, logicalConnPoint, servicename,
isCTP, tribPortNumber, tribSlotIndex, apiInfoA, apiInfoZ, payLoadType);
default:
return null;
}
}
- public String createOpenRoadmOdu2eInterface(String nodeId, String logicalConnPoint,
+ public String createOpenRoadmOdu2eInterface(String nodeId, String logicalConnPoint, String servicename,
boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ,
String payLoadType)
throws OpenRoadmInterfaceException {
LOG.error(OTN_FUNTIONS_ARE_NOT_SUPPORTED_BY_OPENROADM_MODELS_1_2_1_MSG);
return null;
case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1:
- return openRoadmOtnInterface221.createOpenRoadmOdu2eInterface(nodeId, logicalConnPoint,
+ return openRoadmOtnInterface221.createOpenRoadmOdu2eInterface(nodeId, logicalConnPoint, servicename,
isCTP, tribPortNumber, tribSlotIndex, apiInfoA, apiInfoZ, payLoadType);
default:
return null;
LOG.error(OTN_FUNTIONS_ARE_NOT_SUPPORTED_BY_OPENROADM_MODELS_2_2_1_MSG);
return null;
case StringConstants.OPENROADM_DEVICE_VERSION_7_1:
- return openRoadmOtnInterface710.createOpenRoadmOdu4Interface(nodeId, logicalConnPoint,
+ return openRoadmOtnInterface710.createOpenRoadmOdu4Interface(nodeId, logicalConnPoint, serviceName,
payLoad, isNetworkPort, minTribSlotNumber, maxTribSlotNumber);
default:
return null;
return ethernetInterfaceName;
}
- public String createOpenRoadmOdu2eInterface(String nodeId, String logicalConnPoint,
+ public String createOpenRoadmOdu2eInterface(String nodeId, String logicalConnPoint, String serviceName,
boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ,
String payloadType) throws OpenRoadmInterfaceException {
String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
}
InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOdu.VALUE,
- logicalConnPoint + "-ODU2e");
+ logicalConnPoint + "-ODU2e" + ":" + serviceName);
if (mapping.getSupportingOdu4() != null) {
oduInterfaceBldr.setSupportingInterface(mapping.getSupportingOdu4());
}
return oduInterfaceBldr.getName();
}
- public String createOpenRoadmOdu0Interface(String nodeId, String logicalConnPoint,
- boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ,
+ public String createOpenRoadmOdu0Interface(String nodeId, String logicalConnPoint, String servicename,
+ boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ,
String payloadType) throws OpenRoadmInterfaceException {
Mapping mapping = this.portMapping.getMapping(nodeId, logicalConnPoint);
String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
}
InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOdu.VALUE,
- logicalConnPoint + "-ODU0");
+ logicalConnPoint + "-ODU0" + ":" + servicename);
if (mapping.getSupportingOdu4() != null) {
oduInterfaceBldr.setSupportingInterface(mapping.getSupportingOdu4());
}
}
public String createOpenRoadmOdu2Interface(String nodeId, String logicalConnPoint,
- boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA, ZEndApiInfo apiInfoZ,
- String payloadType) throws OpenRoadmInterfaceException {
+ String servicename, boolean isCTP, int tribPortNumber, int tribSlotIndex, AEndApiInfo apiInfoA,
+ ZEndApiInfo apiInfoZ, String payloadType) throws OpenRoadmInterfaceException {
Mapping mapping = this.portMapping.getMapping(nodeId, logicalConnPoint);
if (mapping == null) {
String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint));
}
InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(mapping, OtnOdu.VALUE,
- logicalConnPoint + "-ODU2");
+ logicalConnPoint + "-ODU2" + ":" + servicename);
if (mapping.getSupportingOdu4() != null) {
oduInterfaceBldr.setSupportingInterface(mapping.getSupportingOdu4());
}
nodeId, logicalConnPoint));
}
- public String createOpenRoadmOdu4Interface(String nodeId, String logicalConnPoint,
+ public String createOpenRoadmOdu4Interface(String nodeId, String logicalConnPoint, String serviceName,
String payLoad, boolean isNetworkPort, OpucnTribSlotDef minTribSlotNumber, OpucnTribSlotDef maxTribSlotNumber)
throws OpenRoadmInterfaceException {
Mapping portMap = this.portMapping.getMapping(nodeId, logicalConnPoint);
// Supporting interface is a list for B100G (7.1) device models
supportingInterfaceList.add(supportingInterface);
- InterfaceBuilder oduIfBuilder = createGenericInterfaceBuilder(portMap, OtnOdu.VALUE, logicalConnPoint + "-ODU4")
+ InterfaceBuilder oduIfBuilder = createGenericInterfaceBuilder(
+ portMap, OtnOdu.VALUE, logicalConnPoint + "-ODU4" + ":" + serviceName)
.setSupportingInterfaceList(supportingInterfaceList);
// Agument ODU4 specific interface data
OduBuilder oduBuilder = new OduBuilder().setRate(ODU4.VALUE)
createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth10GInterface(
node.getNodeId(), node.getClientTp()));
createdOduInterfaces.add(
- // suppporting interface?, payload ?
+ // supporting interface?, payload ?
openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
- node.getClientTp(), false, input.getTribPortNumber(),
+ node.getClientTp(), input.getServiceName(), false, input.getTribPortNumber(),
input.getTribSlot(), apiInfoA, apiInfoZ, PT_03));
}
createdOduInterfaces.add(
// supporting interface? payload ?
openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(), node.getNetworkTp(),
- true, input.getTribPortNumber(), input.getTribSlot(), null,
+ input.getServiceName(), true, input.getTribPortNumber(), input.getTribSlot(), null,
null, null));
linkTpList.add(
new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
createdOduInterfaces.add(
// supporting interface? payload ?
openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
- node.getNetwork2Tp(), true, input.getTribPortNumber(),
+ node.getNetwork2Tp(), input.getServiceName(),true, input.getTribPortNumber(),
input.getTribSlot(), null, null, null));
linkTpList.add(
new LinkTpBuilder().setNodeId(node.getNodeId()).setTpId(node.getNetworkTp()).build());
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceZEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
.build();
}
+ public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+ .path.computation.reroute.request.input.ServiceAEnd createServiceAEndReroute(ServiceEndpoint serviceAEnd) {
+ return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+ .path.computation.reroute.request.input.ServiceAEndBuilder()
+ .setClli(serviceAEnd.getClli())
+ .setNodeId(serviceAEnd.getNodeId().getValue())
+ .setRxDirection(createRxDirection(serviceAEnd.getRxDirection().values().stream().findFirst().get()))
+ .setServiceFormat(serviceAEnd.getServiceFormat())
+ .setServiceRate(serviceAEnd.getServiceRate())
+ .setTxDirection(createTxDirection(serviceAEnd.getTxDirection().values().stream().findFirst().get()))
+ .build();
+ }
+
public static ServiceZEnd createServiceZEnd(ServiceEndpoint serviceZEnd) {
return new ServiceZEndBuilder()
.setClli(serviceZEnd.getClli())
.build();
}
+ public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+ .path.computation.reroute.request.input.ServiceZEnd createServiceZEndReroute(ServiceEndpoint serviceZEnd) {
+ return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+ .path.computation.reroute.request.input.ServiceZEndBuilder()
+ .setClli(serviceZEnd.getClli())
+ .setNodeId(serviceZEnd.getNodeId().getValue())
+ .setRxDirection(createRxDirection(serviceZEnd.getRxDirection().values().stream().findFirst().get()))
+ .setServiceFormat(serviceZEnd.getServiceFormat())
+ .setServiceRate(serviceZEnd.getServiceRate())
+ .setTxDirection(createTxDirection(serviceZEnd.getTxDirection().values().stream().findFirst().get()))
+ .build();
+ }
+
public static RxDirection createRxDirection(
org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
.service.endpoint.RxDirection rxDirection) {
}
public static ListenableFuture<RpcResult<ServiceRerouteOutput>> createRerouteServiceReply(
- ServiceRerouteInput input, String finalAckYes, String message) {
+ ServiceRerouteInput input, String finalAckYes, String message, String responseCode) {
return RpcResultBuilder
.success(
new ServiceRerouteOutputBuilder()
.setConfigurationResponseCommon(
new ConfigurationResponseCommonBuilder()
- .setResponseMessage(message)
- .build())
+ .setAckFinalIndicator(finalAckYes)
+ .setResponseCode(responseCode)
+ .setResponseMessage(message)
+ .build())
.setHardConstraints(null)
.setSoftConstraints(null)
.build())
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
* Super class of {@link ServiceCreateInput} and {@link TempServiceCreateInput}.
*
* @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
- *
*/
public class ServiceInput {
private String serviceName;
setServiceReconfigure(false);
}
+ public ServiceInput(ServiceRerouteInput serviceRerouteInput) {
+ setServiceName(serviceRerouteInput.getServiceName());
+ setSdncRequestHeader(serviceRerouteInput.getSdncRequestHeader());
+ setServiceResiliency(serviceRerouteInput.getServiceResiliency());
+ setServiceReconfigure(false);
+ }
+
public ServiceCreateInput getServiceCreateInput() {
ServiceCreateInputBuilder serviceCreateInputBuilder = new ServiceCreateInputBuilder()
.setCommonId(commonId)
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
+import java.util.Map;
import java.util.Optional;
import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.transportpce.servicehandler.validation.ServiceCreateValidation;
import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.EndpointsBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfo.TailRetention;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
return "Service '" + serviceName + "' does not exist in datastore";
}
+ public static String servicePathNotInDS(String serviceName) {
+ return "Service Path from '" + serviceName + "' does not exist in datastore";
+ }
+
public static String serviceInService(String serviceName) {
return "Service '" + serviceName + "' is in 'inService' state";
}
if (servicesObject.isEmpty()) {
LOG.warn("serviceReroute: {}", LogMessages.serviceNotInDS(serviceName));
return ModelMappingUtils.createRerouteServiceReply(
- input, ResponseCodes.FINAL_ACK_NO,
- LogMessages.serviceNotInDS(serviceName));
+ input, ResponseCodes.FINAL_ACK_YES,
+ LogMessages.serviceNotInDS(serviceName),
+ ResponseCodes.RESPONSE_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);
- ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder()
- .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
- .setServiceName(serviceName).setDueDate(datetime)
- .setTailRetention(TailRetention.No).build())
- .setSdncRequestHeader(sdncBuilder.build());
- ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build());
+ Optional<ServicePaths> servicePathsObject = this.serviceDataStoreOperations.getServicePath(serviceName);
+ if (servicePathsObject.isEmpty()) {
+ LOG.warn("serviceReroute: {}", LogMessages.servicePathNotInDS(serviceName));
+ return ModelMappingUtils.createRerouteServiceReply(
+ input, ResponseCodes.FINAL_ACK_YES,
+ LogMessages.servicePathNotInDS(serviceName),
+ ResponseCodes.RESPONSE_FAILED);
+ }
+ ServicePaths servicePaths = servicePathsObject.get();
+ // serviceInput for later use maybe...
+ ServiceInput serviceInput = new ServiceInput(input);
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);
- this.networkModelListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
- .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(
- new ServiceInput(deleteInputBldr.build()));
- org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
- .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
- ServiceNotificationTypes.ServiceDeleteResult, null);
+ serviceInput.setCommonId(service.getCommonId());
+ serviceInput.setHardConstraints(service.getHardConstraints());
+ serviceInput.setSoftConstraints(service.getSoftConstraints());
+ serviceInput.setCustomer(service.getCustomer());
+ serviceInput.setCustomerContact(service.getCustomerContact());
+
+ // Get the network xpdr termination points
+ Map<AToZKey, AToZ> mapaToz = servicePaths.getPathDescription().getAToZDirection().getAToZ();
+ String aendtp = ((TerminationPoint) mapaToz.get(new AToZKey(String.valueOf(mapaToz.size() - 3)))
+ .getResource()
+ .getResource())
+ .getTpId();
+ String zendtp = ((TerminationPoint) mapaToz.get(new AToZKey("2"))
+ .getResource()
+ .getResource())
+ .getTpId();
+
+ PathComputationRerouteRequestOutput output = this.pceServiceWrapper.performPCEReroute(
+ service.getHardConstraints(), service.getSoftConstraints(), input.getSdncRequestHeader(),
+ service.getServiceAEnd(), service.getServiceZEnd(),
+ new EndpointsBuilder().setAEndTp(aendtp).setZEndTp(zendtp).build());
+
if (output == null) {
- LOG.error("serviceReroute: {}", LogMessages.RENDERER_DELETE_FAILED);
+ LOG.error("serviceReroute: {}", LogMessages.PCE_FAILED);
return ModelMappingUtils.createRerouteServiceReply(
input, ResponseCodes.FINAL_ACK_YES,
- LogMessages.RENDERER_DELETE_FAILED);
+ LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
}
- LOG.info("RPC ServiceReroute in progress...");
+ LOG.info("RPC ServiceReroute is done");
ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
- return ModelMappingUtils.createRerouteServiceReply(
- input, common.getAckFinalIndicator(),
- common.getResponseMessage());
+ return ModelMappingUtils.createRerouteServiceReply(input, common.getAckFinalIndicator(),
+ common.getResponseMessage(), common.getResponseCode());
}
@Override
import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.TransportpcePceListener;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceList;
import org.opendaylight.transportpce.servicehandler.ServiceInput;
import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
import org.opendaylight.mdsal.binding.api.DataTreeModification;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.pce.service.PathComputationService;
import org.opendaylight.transportpce.servicehandler.ServiceInput;
import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Restorable;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.routing.metric.RoutingMetric;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceAEndBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceZEndBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfo;
private ServicehandlerImpl servicehandlerImpl;
private ServiceDataStoreOperations serviceDataStoreOperations;
private NotificationPublishService notificationPublishService;
+ private PathComputationService pathComputationService;
private Map<String, ServiceInput> mapServiceInputReroute;
private final ScheduledExecutorService executor;
&& inputAfter.getServiceResiliency().getResiliency() != null
&& inputAfter.getServiceResiliency().getResiliency().equals(Restorable.VALUE)) {
LOG.info("Attempting to reroute the service '{}'...", serviceInputName);
- // It is used for hold off time purposes
+ if (!serviceRerouteCheck(serviceInputName, inputAfter.getServiceResiliency(),
+ inputAfter.getRoutingMetric())) {
+ LOG.info("No other path available, cancelling reroute process of service '{}'...",
+ serviceInputName);
+ continue;
+ }
mapServiceInputReroute.put(serviceInputName, null);
if (inputAfter.getServiceResiliency().getHoldoffTime() != null) {
LOG.info("Waiting hold off time before rerouting...");
&& mapServiceInputReroute.get(serviceInputName) == null) {
serviceRerouteStep1(serviceInputName);
} else {
- LOG.info("Cancelling rerouting for service '{}'...", serviceInputName);
+ LOG.info("Cancelling reroute process of service '{}'...",
+ serviceInputName);
}
},
Long.parseLong(String.valueOf(inputAfter.getServiceResiliency()
mapServiceInputReroute.remove(serviceNameToReroute);
}
+ /**
+ * Prior to the reroute steps: check that an alternative route of the service is possible.
+ *
+ * @param serviceNameToReroute Name of the service
+ * @param serviceResiliency Resiliency of the service
+ * @param routingMetric Metric of the routing
+ */
+ private boolean serviceRerouteCheck(String serviceNameToReroute, ServiceResiliency serviceResiliency,
+ RoutingMetric routingMetric) {
+ ServiceRerouteInput serviceRerouteInput = new ServiceRerouteInputBuilder()
+ .setServiceName(serviceNameToReroute)
+ .setServiceResiliency(serviceResiliency)
+ .setRoutingMetric(routingMetric)
+ .setSdncRequestHeader(new SdncRequestHeaderBuilder()
+ .setRpcAction(RpcActions.ServiceReroute)
+ .build())
+ .build();
+ ListenableFuture<RpcResult<ServiceRerouteOutput>> res = this.servicehandlerImpl.serviceReroute(
+ serviceRerouteInput);
+ try {
+ return res.get().getResult().getConfigurationResponseCommon().getResponseCode()
+ .equals(ResponseCodes.RESPONSE_OK);
+ } catch (ExecutionException | InterruptedException e) {
+ LOG.warn("ServiceRerouteCheck FAILED ! ", e);
+ return false;
+ }
+ }
+
/**
* Send notification to NBI notification in order to publish message.
*
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.transportpce.common.ResponseCodes;
import org.opendaylight.transportpce.pce.service.PathComputationService;
import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.Endpoints;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.EndpointsBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultShBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceEndpoint;
.build();
}
+ public PathComputationRerouteRequestOutput performPCEReroute(HardConstraints hardConstraints,
+ SoftConstraints softConstraints, SdncRequestHeader serviceHandler, ServiceEndpoint serviceAEnd,
+ ServiceEndpoint serviceZEnd,
+ Endpoints endpoints) {
+ // TODO: Make it asynchronous
+ LOG.info("Calling path computation reroute");
+ PathComputationRerouteRequestInput inputPCE = createPceRerouteRequestInput(hardConstraints, softConstraints,
+ serviceHandler, serviceAEnd, serviceZEnd, endpoints);
+ ListenableFuture<PathComputationRerouteRequestOutput> res =
+ pathComputationService.pathComputationRerouteRequest(inputPCE);
+ try {
+ return res.get();
+ } catch (ExecutionException | InterruptedException e) {
+ LOG.warn("PerformPCEReroute FAILED ! ", e);
+ return new PathComputationRerouteRequestOutputBuilder()
+ .setConfigurationResponseCommon(new ConfigurationResponseCommonBuilder()
+ .setAckFinalIndicator(ResponseCodes.FINAL_ACK_YES)
+ .setRequestId("None")
+ .setResponseCode(ResponseCodes.RESPONSE_OK)
+ .setResponseMessage("PCE calculation FAILED")
+ .build())
+ .build();
+ }
+ }
+
private PathComputationRequestInput createPceRequestInput(String serviceName,
SdncRequestHeader serviceHandler, HardConstraints hardConstraints,
SoftConstraints softConstraints, Boolean reserveResource, ServiceEndpoint serviceAEnd,
.build();
}
+ private PathComputationRerouteRequestInput createPceRerouteRequestInput(HardConstraints hardConstraints,
+ SoftConstraints softConstraints, SdncRequestHeader serviceHandler, ServiceEndpoint serviceAEnd,
+ ServiceEndpoint serviceZEnd, Endpoints endpoints) {
+ LOG.info("Mapping Service-reroute to PCE requests");
+ return new PathComputationRerouteRequestInputBuilder()
+ .setServiceHandlerHeader(serviceHandler == null
+ ? new ServiceHandlerHeaderBuilder().build()
+ : new ServiceHandlerHeaderBuilder().setRequestId(serviceHandler.getRequestId()).build())
+ .setHardConstraints(hardConstraints)
+ .setSoftConstraints(softConstraints)
+ .setPceRoutingMetric(PceMetric.TEMetric)
+ .setEndpoints(new EndpointsBuilder()
+ .setAEndTp(endpoints.getAEndTp())
+ .setZEndTp(endpoints.getZEndTp())
+ .build())
+ .setServiceAEnd(ModelMappingUtils.createServiceAEndReroute(serviceAEnd))
+ .setServiceZEnd(ModelMappingUtils.createServiceZEndReroute(serviceZEnd))
+ .build();
+ }
+
private CancelResourceReserveInput mappingCancelResourceReserve(String serviceName,
SdncRequestHeader sdncRequestHeader) {
LOG.info("Mapping to PCE Cancel resource request input");
import java.util.Optional;
import org.opendaylight.transportpce.common.OperationResult;
import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
import org.opendaylight.transportpce.common.Timeouts;
import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
import org.opendaylight.transportpce.common.ResponseCodes;
import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
+import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import org.opendaylight.transportpce.common.ResponseCodes;
import org.opendaylight.transportpce.pce.service.PathComputationService;
import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutput;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.response.parameters.PathDescriptionBuilder;
import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.Uint32;
public class ServicehandlerImplTest extends AbstractTest {
result.addListener(() -> endSignal.countDown(), executorService);
endSignal.await();
+
+ Assert.assertEquals(ResponseCodes.RESPONSE_FAILED,
+ result.get().getResult().getConfigurationResponseCommon().getResponseCode());
}
@Test
result.addListener(() -> endSignal.countDown(), executorService);
endSignal.await();
+
+ Assert.assertEquals(ResponseCodes.RESPONSE_FAILED,
+ result.get().getResult().getConfigurationResponseCommon().getResponseCode());
}
@Test
public void serviceRerouteShouldBeSuccessForExistingService() throws ExecutionException, InterruptedException {
- // serviceReroute is calling service delete method in renderer
- Mockito.when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
- //create service to be rerouted later
- ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
- rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
- networkModelListenerImpl, serviceDataStoreOperations);
- serviceDataStoreOperations.createService(serviceCreateInput);
+ Mockito.when(pathComputationService.pathComputationRerouteRequest(any()))
+ .thenReturn(Futures.immediateFuture(new PathComputationRerouteRequestOutputBuilder()
+ .setConfigurationResponseCommon(new ConfigurationResponseCommonBuilder()
+ .setResponseCode(ResponseCodes.RESPONSE_OK)
+ .build())
+ .build()));
+ Map<AToZKey, AToZ> atoz = Map.of(
+ new AToZKey("0"),
+ new AToZBuilder()
+ .setId("0")
+ .setResource(new ResourceBuilder()
+ .setResource(new TerminationPointBuilder()
+ .setTpNodeId("tpNodeIdC")
+ .setTpId("TpIdC1")
+ .build())
+ .setState(State.InService)
+ .build())
+ .build(),
+ new AToZKey("1"),
+ new AToZBuilder()
+ .setId("1")
+ .setResource(new ResourceBuilder()
+ .setResource(new TerminationPointBuilder()
+ .setTpNodeId("tpNodeIdD")
+ .setTpId("TpIdCD")
+ .build())
+ .setState(State.InService)
+ .build())
+ .build(), new AToZKey("2"),
+ new AToZBuilder()
+ .setId("2")
+ .setResource(new ResourceBuilder()
+ .setResource(new TerminationPointBuilder()
+ .setTpNodeId("tpNodeIdA")
+ .setTpId("TpIdA1")
+ .build())
+ .setState(State.InService)
+ .build())
+ .build()
+
+ );
+ serviceDataStoreOperations.createServicePath(new ServiceInput(serviceCreateInput),
+ new PathComputationRequestOutputBuilder()
+ .setResponseParameters(new ResponseParametersBuilder()
+ .setPathDescription(new PathDescriptionBuilder()
+ .setAToZDirection(new AToZDirectionBuilder()
+ .setAToZ(atoz)
+ .setRate(Uint32.valueOf(1))
+ .build())
+ .setZToADirection(new ZToADirectionBuilder()
+ .setRate(Uint32.valueOf(1))
+ .build())
+ .build())
+ .build())
+ .build());
- //service reroute test action
- //ServiceRerouteInput is created with the same service information that is created before
- ListenableFuture<RpcResult<ServiceRerouteOutput>> result = servicehandlerImpl.serviceReroute(
- serviceRerouteInput);
+ serviceDataStoreOperations.createService(serviceCreateInput);
+ ListenableFuture<RpcResult<ServiceRerouteOutput>> result = new ServicehandlerImpl(getNewDataBroker(),
+ pathComputationService, rendererServiceOperations, notificationPublishService, pceListenerImpl,
+ rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations)
+ .serviceReroute(serviceRerouteInput);
result.addListener(() -> endSignal.countDown(), executorService);
endSignal.await();
+
+ Assert.assertEquals(
+ ResponseCodes.RESPONSE_OK, result.get().getResult().getConfigurationResponseCommon().getResponseCode());
}
@Test
import org.opendaylight.mdsal.binding.api.DataTreeModification;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.pce.service.PathComputationService;
import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
private ServiceDataStoreOperations serviceDataStoreOperations;
@Mock
private NotificationPublishService notificationPublishService;
+ @Mock
+ private PathComputationService pathComputationService;
@Test
public void testOnDataTreeChangedWhenDeleteService() {
.build())
.build())
.buildFuture());
+ when(servicehandler.serviceReroute(any())).thenReturn(
+ RpcResultBuilder.success(
+ new ServiceRerouteOutputBuilder()
+ .setConfigurationResponseCommon(
+ new ConfigurationResponseCommonBuilder()
+ .setResponseCode(ResponseCodes.RESPONSE_OK)
+ .build())
+ .build())
+ .buildFuture());
when(servicehandler.serviceCreate(any())).thenReturn(
RpcResultBuilder.success(
new ServiceCreateOutputBuilder()
import org.opendaylight.transportpce.pce.service.PathComputationService;
import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.CancelResourceReserveOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
import org.opendaylight.transportpce.servicehandler.ServiceInput;
import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import com.google.common.util.concurrent.ListenableFuture;
import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceZEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.path.computation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.ServicePathRpcResultBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResultBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSpBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>netconf-artifacts</artifactId>
- <version>4.0.1</version>
+ <version>4.0.2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
import org.opendaylight.transportpce.tapi.utils.TapiInitialORMapping;
import org.opendaylight.transportpce.tapi.utils.TapiLink;
import org.opendaylight.transportpce.tapi.utils.TapiListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.TransportpcePceListener;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.Network;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.Nodes;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.common.network.RequestProcessor;
import org.opendaylight.transportpce.tapi.TapiStringConstants;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220615.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.Network;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.MappingKey;
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>10.0.1</version>
+ <version>10.0.2</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>netconf-artifacts</artifactId>
- <version>4.0.1</version>
+ <version>4.0.2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
self.assertIn('XPDR1-CLIENT4-ODU2e-x-XPDR1-NETWORK1-ODU2e',
response['output']['node-interface'][0]['connection-id'])
self.assertIn('XPDR1-CLIENT4-ETHERNET10G', response['output']['node-interface'][0]['eth-interface-id'])
- self.assertIn('XPDR1-NETWORK1-ODU2e', response['output']['node-interface'][0]['odu-interface-id'])
- self.assertIn('XPDR1-CLIENT4-ODU2e', response['output']['node-interface'][0]['odu-interface-id'])
+ self.assertIn('XPDR1-NETWORK1-ODU2e:service1', response['output']['node-interface'][0]['odu-interface-id'])
+ self.assertIn('XPDR1-CLIENT4-ODU2e:service1', response['output']['node-interface'][0]['odu-interface-id'])
def test_12_check_interface_10GE_CLIENT(self):
response = test_utils.check_node_attribute_request("SPDR-SA1", "interface", "XPDR1-CLIENT4-ETHERNET10G")
def test_13_check_interface_ODU2E_CLIENT(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SA1", "interface", "XPDR1-CLIENT4-ODU2e")
+ "SPDR-SA1", "interface", "XPDR1-CLIENT4-ODU2e:service1")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-CLIENT4-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-CLIENT4-ODU2e:service1',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'supporting-interface': 'XPDR1-CLIENT4-ETHERNET10G',
def test_14_check_interface_ODU2E_NETWORK(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SA1", "interface", "XPDR1-NETWORK1-ODU2e")
+ "SPDR-SA1", "interface", "XPDR1-NETWORK1-ODU2e:service1")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e', 'administrative-state': 'inService',
+ input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e:service1', 'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR1-NETWORK1-ODU4',
'type': 'org-openroadm-interfaces:otnOdu',
self.assertDictEqual(dict(response['odu-connection'][0], **input_dict_1),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e'},
+ self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e:service1'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR1-CLIENT4-ODU2e'},
+ self.assertDictEqual({'src-if': 'XPDR1-CLIENT4-ODU2e:service1'},
response['odu-connection'][0]['source'])
def test_16_otn_service_path_delete_10GE(self):
def test_18_check_no_interface_ODU2E_NETWORK(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SA1", "interface", "XPDR1-NETWORK1-ODU2e")
+ "SPDR-SA1", "interface", "XPDR1-NETWORK1-ODU2e:service1")
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_19_check_no_interface_ODU2E_CLIENT(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SA1", "interface", "XPDR1-CLIENT4-ODU2e")
+ "SPDR-SA1", "interface", "XPDR1-CLIENT4-ODU2e:service1")
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_20_check_no_interface_10GE_CLIENT(self):
def test_13_check_interface_ODU2E_CLIENT(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SA1", "interface", "XPDR1-CLIENT1-ODU2e")
+ "SPDR-SA1", "interface", "XPDR1-CLIENT1-ODU2e:SPDRA-SPDRC-10G")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e:SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'supporting-interface': 'XPDR1-CLIENT1-ETHERNET10G',
}
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e'},
+ self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e:SPDRA-SPDRC-10G'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e'},
+ self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e:SPDRA-SPDRC-10G'},
response['odu-connection'][0]['source'])
def test_15_check_interface_ODU2E_NETWORK(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SA1", "interface", "XPDR1-NETWORK1-ODU2e")
+ "SPDR-SA1", "interface", "XPDR1-NETWORK1-ODU2e:SPDRA-SPDRC-10G")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e-SPDRA:SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR1-NETWORK1-ODU4',
# Test the interfaces on SPDR-C1
def test_16_check_interface_ODU2E_NETWORK(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SC1", "interface", "XPDR1-NETWORK1-ODU2e")
+ "SPDR-SC1", "interface", "XPDR1-NETWORK1-ODU2e:SPDRA-SPDRC-10G")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e:SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR1-NETWORK1-ODU4',
def test_18_check_interface_ODU2E_CLIENT(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SC1", "interface", "XPDR1-CLIENT1-ODU2e")
+ "SPDR-SC1", "interface", "XPDR1-CLIENT1-ODU2e:SPDRA-SPDRC-10G")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'supporting-interface': 'XPDR1-CLIENT1-ETHERNET10G',
}
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e'},
+ self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e:SPDRA-SPDRC-10G'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e'},
+ self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e:SPDRA-SPDRC-10G'},
response['odu-connection'][0]['source'])
def test_20_check_interface_ODU2E_NETWORK(self):
response = test_utils.check_node_attribute_request(
- "SPDR-SC1", "interface", "XPDR1-NETWORK1-ODU2e")
+ "SPDR-SC1", "interface", "XPDR1-NETWORK1-ODU2e:SPDRA-SPDRC-10G")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e:SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR1-NETWORK1-ODU4',
def test_32_check_interface_ODU2E_CLIENT_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR1-CLIENT1-ODU2e')
+ 'SPDR-SA1', 'interface', 'XPDR1-CLIENT1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'supporting-interface': 'XPDR1-CLIENT1-ETHERNET10G',
def test_33_check_interface_ODU2E_NETWORK_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR1-NETWORK1-ODU2e')
+ 'SPDR-SA1', 'interface', 'XPDR1-NETWORK1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR1-NETWORK1-ODU4',
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e'},
+ self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e:service1-10GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e'},
+ self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e:service1-10GE'},
response['odu-connection'][0]['source'])
def test_35_check_interface_10GE_CLIENT_spdrc(self):
def test_36_check_interface_ODU2E_CLIENT_spdrc(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SC1', 'interface', 'XPDR1-CLIENT1-ODU2e')
+ 'SPDR-SC1', 'interface', 'XPDR1-CLIENT1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'supporting-interface': 'XPDR1-CLIENT1-ETHERNET10G',
def test_37_check_interface_ODU2E_NETWORK_spdrc(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SC1', 'interface', 'XPDR1-NETWORK1-ODU2e')
+ 'SPDR-SC1', 'interface', 'XPDR1-NETWORK1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR1-NETWORK1-ODU4',
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e'},
+ self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e:service1-10GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e'},
+ self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e:service1-10GE'},
response['odu-connection'][0]['source'])
def test_39_check_otn_topo_links(self):
def test_73_check_interface_ODU0_CLIENT_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR3-CLIENT1-ODU0')
+ 'SPDR-SA1', 'interface', 'XPDR3-CLIENT1-ODU0:service1-1GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR3-CLIENT1-ODU0',
+ input_dict_1 = {'name': 'XPDR3-CLIENT1-ODU0:service1-1GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP3-SFP1',
'supporting-interface': 'XPDR3-CLIENT1-ETHERNET1G',
def test_74_check_interface_ODU0_NETWORK_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR3-NETWORK1-ODU0')
+ 'SPDR-SA1', 'interface', 'XPDR3-NETWORK1-ODU0:service1-1GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR3-NETWORK1-ODU0',
+ input_dict_1 = {'name': 'XPDR3-NETWORK1-ODU0:service1-1GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP3-CFP0',
'supporting-interface': 'XPDR3-NETWORK1-ODU4',
}
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR3-NETWORK1-ODU0'},
+ self.assertDictEqual({'dst-if': 'XPDR3-NETWORK1-ODU0:service1-1GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR3-CLIENT1-ODU0'},
+ self.assertDictEqual({'src-if': 'XPDR3-CLIENT1-ODU0:service1-1GE'},
response['odu-connection'][0]['source'])
def test_76_check_interface_1GE_CLIENT_spdrc(self):
def test_77_check_interface_ODU0_CLIENT_spdrc(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SC1', 'interface', 'XPDR3-CLIENT1-ODU0')
+ 'SPDR-SC1', 'interface', 'XPDR3-CLIENT1-ODU0:service1-1GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR3-CLIENT1-ODU0',
+ input_dict_1 = {'name': 'XPDR3-CLIENT1-ODU0:service1-1GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP3-SFP1',
'supporting-interface': 'XPDR3-CLIENT1-ETHERNET1G',
def test_78_check_interface_ODU0_NETWORK_spdrc(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SC1', 'interface', 'XPDR3-NETWORK1-ODU0')
+ 'SPDR-SC1', 'interface', 'XPDR3-NETWORK1-ODU0:service1-1GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR3-NETWORK1-ODU0',
+ input_dict_1 = {'name': 'XPDR3-NETWORK1-ODU0:service1-1GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP3-CFP0',
'supporting-interface': 'XPDR3-NETWORK1-ODU4',
}
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR3-NETWORK1-ODU0'},
+ self.assertDictEqual({'dst-if': 'XPDR3-NETWORK1-ODU0:service1-1GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR3-CLIENT1-ODU0'},
+ self.assertDictEqual({'src-if': 'XPDR3-CLIENT1-ODU0:service1-1GE'},
response['odu-connection'][0]['source'])
def test_80_check_otn_topo_links(self):
def test_85_check_no_interface_ODU0_NETWORK_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR3-NETWORK1-ODU0-service1')
+ 'SPDR-SA1', 'interface', 'XPDR3-NETWORK1-ODU0:service1-1GE')
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_86_check_no_interface_ODU0_CLIENT_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR3-CLIENT1-ODU0-service1')
+ 'SPDR-SA1', 'interface', 'XPDR3-CLIENT1-ODU0:service1-1GE')
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_87_check_no_interface_10GE_CLIENT_spdra(self):
def test_043_check_interface_ODU2E_CLIENT_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR1-CLIENT1-ODU2e')
+ 'SPDR-SA1', 'interface', 'XPDR1-CLIENT1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'supporting-interface': 'XPDR1-CLIENT1-ETHERNET10G',
response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
response2 = test_utils.check_node_attribute_request(
- 'SPDR-SC1', 'interface', 'XPDR1-CLIENT1-ODU2e')
+ 'SPDR-SC1', 'interface', 'XPDR1-CLIENT1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertEqual(input_dict_2['tx-sapi'],
response2['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['tx-dapi'])
def test_044_check_interface_ODU2E_NETWORK_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR1-NETWORK1-ODU2e')
+ 'SPDR-SA1', 'interface', 'XPDR1-NETWORK1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR1-NETWORK1-ODU4',
}
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e'},
+ self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e:service1-10GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e'},
+ self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e:service1-10GE'},
response['odu-connection'][0]['source'])
def test_046_check_interface_10GE_CLIENT_spdrc(self):
def test_047_check_interface_ODU2E_CLIENT_spdrc(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SC1', 'interface', 'XPDR1-CLIENT1-ODU2e')
+ 'SPDR-SC1', 'interface', 'XPDR1-CLIENT1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'supporting-interface': 'XPDR1-CLIENT1-ETHERNET10G',
response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
response2 = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR1-CLIENT1-ODU2e')
+ 'SPDR-SA1', 'interface', 'XPDR1-CLIENT1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertEqual(input_dict_2['tx-sapi'],
response2['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['tx-dapi'])
def test_048_check_interface_ODU2E_NETWORK_spdrc(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SC1', 'interface', 'XPDR1-NETWORK1-ODU2e')
+ 'SPDR-SC1', 'interface', 'XPDR1-NETWORK1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e',
+ input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR1-NETWORK1-ODU4',
}
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e'},
+ self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e:service1-10GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e'},
+ self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e:service1-10GE'},
response['odu-connection'][0]['source'])
def test_050_check_otn_topo_links(self):
def test_055_check_no_interface_ODU2E_NETWORK_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR1-NETWORK1-ODU2e')
+ 'SPDR-SA1', 'interface', 'XPDR1-NETWORK1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_056_check_no_interface_ODU2E_CLIENT_spdra(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SA1', 'interface', 'XPDR1-CLIENT1-ODU2e')
+ 'SPDR-SA1', 'interface', 'XPDR1-CLIENT1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_057_check_no_interface_10GE_CLIENT_spdra(self):
def test_078_check_interface_ODU2E_NETWORK1_spdrb(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SB1', 'interface', 'XPDR2-NETWORK1-ODU2e')
+ 'SPDR-SB1', 'interface', 'XPDR2-NETWORK1-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU2e',
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR2-NETWORK1-ODU4',
def test_079_check_interface_ODU2E_NETWORK2_spdrb(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SB1', 'interface', 'XPDR2-NETWORK2-ODU2e')
+ 'SPDR-SB1', 'interface', 'XPDR2-NETWORK2-ODU2e:service1-10GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR2-NETWORK2-ODU2e',
+ input_dict_1 = {'name': 'XPDR2-NETWORK2-ODU2e:service1-10GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'supporting-interface': 'XPDR2-NETWORK2-ODU4',
'XPDR2-NETWORK1-ODU2e-x-XPDR2-NETWORK2-ODU2e',
'direction': 'bidirectional'
}
-
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR2-NETWORK2-ODU2e'},
+ self.assertDictEqual({'dst-if': 'XPDR2-NETWORK2-ODU2e:service1-10GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR2-NETWORK1-ODU2e'},
+ self.assertDictEqual({'src-if': 'XPDR2-NETWORK1-ODU2e:service1-10GE'},
response['odu-connection'][0]['source'])
def test_081_check_otn_topo_links(self):
def test_087_check_no_interface_ODU2E_NETWORK1_spdrb(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SB1', 'interface', 'XPDR2-NETWORK1-ODU2e')
+ 'SPDR-SB1', 'interface', 'XPDR2-NETWORK1-ODU2e-service1-10GE')
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_088_check_no_interface_ODU2E_NETWORK2_spdrb(self):
response = test_utils.check_node_attribute_request(
- 'SPDR-SB1', 'interface', 'XPDR2-NETWORK2-ODU2e')
+ 'SPDR-SB1', 'interface', 'XPDR2-NETWORK2-ODU2e-service1-10GE')
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_089_check_otn_topo_links(self):
self.assertIn('XPDR2-CLIENT1-ODU4-x-XPDR2-NETWORK1-ODU4',
response['output']['node-interface'][0]['connection-id'])
self.assertIn('XPDR2-CLIENT1-ETHERNET-100G', response['output']['node-interface'][0]['eth-interface-id'])
- self.assertIn('XPDR2-NETWORK1-ODU4',
+ self.assertIn('XPDR2-NETWORK1-ODU4:service_Ethernet',
response['output']['node-interface'][0]['odu-interface-id'])
- self.assertIn('XPDR2-CLIENT1-ODU4',
+ self.assertIn('XPDR2-CLIENT1-ODU4:service_Ethernet',
response['output']['node-interface'][0]['odu-interface-id'])
def test_11_check_interface_100ge_client(self):
def test_12_check_interface_odu4_client(self):
response = test_utils.check_node_attribute_request(
- "XPDR-A2", "interface", "XPDR2-CLIENT1-ODU4")
+ "XPDR-A2", "interface", "XPDR2-CLIENT1-ODU4:service_Ethernet")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR2-CLIENT1-ODU4',
+ input_dict_1 = {'name': 'XPDR2-CLIENT1-ODU4:service_Ethernet',
'administrative-state': 'inService',
'supporting-circuit-pack-name': '1/2/1/1-PLUG-CLIENT',
'supporting-interface-list': 'XPDR2-CLIENT1-ETHERNET-100G',
def test_13_check_interface_odu4_network(self):
response = test_utils.check_node_attribute_request(
- "XPDR-A2", "interface", "XPDR2-NETWORK1-ODU4")
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-ODU4:service_Ethernet")
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU4',
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU4:service_Ethernet',
'administrative-state': 'inService',
'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
'supporting-interface-list': 'XPDR2-NETWORK1-ODUC2',
self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {
'connection-name':
- 'XPDR2-CLIENT1-ODU4-x-XPDR2-NETWORK1-ODU4',
+ 'XPDR2-NETWORK1-ODU4-x-XPDR2-CLIENT1-ODU4',
'direction': 'bidirectional'
}
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4'},
+ self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4:service_Ethernet'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4'},
+ self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4:service_Ethernet'},
response['odu-connection'][0]['source'])
# 1d) Delete Ethernet device interfaces
def test_17_check_no_interface_odu_network(self):
response = test_utils.check_node_attribute_request(
- "XPDR-A2", "interface", "XPDR2-NETWORK1-ODU4")
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-ODU4:service_Ethernet")
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_18_check_no_interface_odu_client(self):
response = test_utils.check_node_attribute_request(
- "XPDR-A2", "interface", "XPDR2-CLIENT1-ODU4")
+ "XPDR-A2", "interface", "XPDR2-CLIENT1-ODU4:service_Ethernet")
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_19_check_no_interface_100ge_client(self):
def test_32_check_interface_ODU4_CLIENT_xpdra2(self):
response = test_utils.check_node_attribute_request(
- 'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ODU4')
+ 'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ODU4:service-100GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR2-CLIENT1-ODU4',
+ input_dict_1 = {'name': 'XPDR2-CLIENT1-ODU4:service-100GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': '1/2/1/1-PLUG-CLIENT',
'supporting-interface-list': 'XPDR2-CLIENT1-ETHERNET-100G',
def test_33_check_interface_ODU4_NETWORK_xpdra2(self):
response = test_utils.check_node_attribute_request(
- 'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODU4')
+ 'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODU4:service-100GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU4',
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU4:service-100GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
'supporting-interface-list': 'XPDR2-NETWORK1-ODUC4',
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4'},
+ self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4:service-100GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4'},
+ self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4:service-100GE'},
response['odu-connection'][0]['source'])
def test_35_check_interface_100GE_CLIENT_xpdrc2(self):
def test_36_check_interface_ODU4_CLIENT_xpdrc2(self):
response = test_utils.check_node_attribute_request(
- 'XPDR-C2', 'interface', 'XPDR2-CLIENT1-ODU4')
+ 'XPDR-C2', 'interface', 'XPDR2-CLIENT1-ODU4:service-100GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR2-CLIENT1-ODU4',
+ input_dict_1 = {'name': 'XPDR2-CLIENT1-ODU4:service-100GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': '1/2/1/1-PLUG-CLIENT',
'supporting-interface-list': 'XPDR2-CLIENT1-ETHERNET-100G',
def test_37_check_interface_ODU4_NETWORK_xpdrc2(self):
response = test_utils.check_node_attribute_request(
- 'XPDR-C2', 'interface', 'XPDR2-NETWORK1-ODU4')
+ 'XPDR-C2', 'interface', 'XPDR2-NETWORK1-ODU4:service-100GE')
self.assertEqual(response['status_code'], requests.codes.ok)
- input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU4',
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU4:service-100GE',
'administrative-state': 'inService',
'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
'supporting-interface-list': 'XPDR2-NETWORK1-ODUC4',
self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
response['odu-connection'][0])
- self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4'},
+ self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4:service-100GE'},
response['odu-connection'][0]['destination'])
- self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4'},
+ self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4:service-100GE'},
response['odu-connection'][0]['source'])
def test_39_check_otn_topo_links(self):
def test_50_check_no_interface_ODU4_NETWORK_xpdra2(self):
response = test_utils.check_node_attribute_request(
- 'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODU4')
+ 'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODU4:service-100GE')
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_51_check_no_interface_ODU4_CLIENT_xpdra2(self):
response = test_utils.check_node_attribute_request(
- 'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ODU4')
+ 'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ODU4:service-100GE')
self.assertEqual(response['status_code'], requests.codes.conflict)
def test_52_check_no_interface_100GE_CLIENT_xpdra2(self):
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
- def test_10_connect_xprda2_3_N1_to_roadma_PP2(self):
+ def test_10_add_omsAttributes_roadma_roadmc(self):
+ # Config ROADMA-ROADMC oms-attributes
+ data = {"span": {
+ "auto-spanloss": "true",
+ "spanloss-base": 11.4,
+ "spanloss-current": 12,
+ "engineered-spanloss": 12.2,
+ "link-concatenation": [{
+ "SRLG-Id": 0,
+ "fiber-type": "smf",
+ "SRLG-length": 100000,
+ "pmd": 0.5}]}}
+ response = test_utils.add_oms_attr_request("ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
+ self.assertEqual(response.status_code, requests.codes.created)
+
+ def test_11_add_omsAttributes_roadmc_roadma(self):
+ # Config ROADMC-ROADMA oms-attributes
+ data = {"span": {
+ "auto-spanloss": "true",
+ "spanloss-base": 11.4,
+ "spanloss-current": 12,
+ "engineered-spanloss": 12.2,
+ "link-concatenation": [{
+ "SRLG-Id": 0,
+ "fiber-type": "smf",
+ "SRLG-length": 100000,
+ "pmd": 0.5}]}}
+ response = test_utils.add_oms_attr_request("ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
+ self.assertEqual(response.status_code, requests.codes.created)
+
+ # test service-create for Eth service from xpdr to xpdr with service-resiliency
+ def test_12_create_eth_service1_with_service_resiliency_restorable(self):
+ self.cr_serv_input_data["service-name"] = "service1"
+ response = test_utils.transportpce_api_rpc_request('org-openroadm-service', 'service-create',
+ self.cr_serv_input_data)
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('PCE calculation in progress',
+ response['output']['configuration-response-common']['response-message'])
+ time.sleep(self.WAITING)
+
+ def test_13_get_eth_service1(self):
+ response = test_utils.get_ordm_serv_list_attr_request("services", "service1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertEqual(response['services'][0]['administrative-state'], 'inService')
+ self.assertEqual(response['services'][0]['service-name'], 'service1')
+ self.assertEqual(response['services'][0]['connection-type'], 'service')
+ self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
+ self.assertEqual(response['services'][0]['service-resiliency']['resiliency'],
+ 'org-openroadm-common-service-types:restorable')
+ time.sleep(1)
+
+ # Degrade ROADM-A1-ROADM-C1 link
+ def test_14_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
+ url = "{}/operations/pm-handling:pm-interact"
+ body = {
+ "input": {
+ "rpc-action": "set",
+ "pm-to-be-set-or-created": {
+ "current-pm-entry": [
+ {
+ "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
+ ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
+ "pm-resource-type": "interface",
+ "pm-resource-type-extension": "",
+ "current-pm": [
+ {
+ "type": "opticalPowerInput",
+ "extension": "",
+ "location": "nearEnd",
+ "direction": "rx",
+ "measurement": [
+ {
+ "granularity": "15min",
+ "pmParameterValue": -30,
+ "pmParameterUnit": "dBm",
+ "validity": "complete"
+ },
+ {
+ "granularity": "24Hour",
+ "pmParameterValue": -21.3,
+ "pmParameterUnit": "dBm",
+ "validity": "complete"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
+ data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+ auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
+ timeout=test_utils.REQUEST_TIMEOUT)
+ self.assertEqual(response.status_code, requests.codes.ok)
+ self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully set !")
+ time.sleep(2)
+
+ def test_15_get_eth_service1(self):
+ response = test_utils.get_ordm_serv_list_attr_request("services", "service1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertEqual(response['services'][0]['operational-state'], 'outOfService')
+ self.assertEqual(response['services'][0]['administrative-state'], 'inService')
+ self.assertEqual(response['services'][0]['service-name'], 'service1')
+ self.assertEqual(response['services'][0]['connection-type'], 'service')
+ self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
+ self.assertEqual(response['services'][0]['service-resiliency']['resiliency'],
+ 'org-openroadm-common-service-types:restorable')
+ time.sleep(1)
+
+ def test_16_service_reroute_service1(self):
+ response = test_utils.transportpce_api_rpc_request(
+ 'org-openroadm-service', 'service-reroute',
+ {
+ "sdnc-request-header": {
+ "request-id": "request-1",
+ "rpc-action": "service-reroute",
+ "request-system-id": "appname"
+ },
+ "service-name": "service1",
+ "service-resiliency": {
+ "resiliency": "org-openroadm-common-service-types:restorable"
+ }
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('500', response['output']['configuration-response-common']['response-code'])
+ self.assertIn('No path available by PCE',
+ response['output']['configuration-response-common']['response-message'])
+ time.sleep(2)
+
+ # Restore ROADM-A1-ROADM-C1 link
+ def test_17_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
+ url = "{}/operations/pm-handling:pm-interact"
+ body = {
+ "input": {
+ "rpc-action": "clear",
+ "pm-to-get-clear-or-delete": {
+ "current-pm-entry": [
+ {
+ "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
+ ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
+ "pm-resource-type": "interface",
+ "pm-resource-type-extension": "",
+ "current-pm": [
+ {
+ "type": "opticalPowerInput",
+ "extension": "",
+ "location": "nearEnd",
+ "direction": "rx"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
+ data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+ auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
+ timeout=test_utils.REQUEST_TIMEOUT)
+ self.assertEqual(response.status_code, requests.codes.ok)
+ self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully released !")
+ time.sleep(2)
+
+ def test_18_get_eth_service1(self):
+ self.test_13_get_eth_service1()
+
+ def test_19_connect_xprda2_3_N1_to_roadma_PP2(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-networkutils', 'init-xpdr-rdm-links',
{'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '3', 'network-num': '1',
'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
+ time.sleep(2)
- def test_11_connect_roadma_PP2_to_xpdra2_3_N1(self):
+ def test_20_connect_roadma_PP2_to_xpdra2_3_N1(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-networkutils', 'init-rdm-xpdr-links',
{'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '3', 'network-num': '1',
'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
+ time.sleep(2)
- def test_12_connect_xprdc2_3_N1_to_roadmc_PP2(self):
+ def test_21_connect_xprdc2_3_N1_to_roadmc_PP2(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-networkutils', 'init-xpdr-rdm-links',
{'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '3', 'network-num': '1',
'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
+ time.sleep(2)
- def test_13_connect_roadmc_PP2_to_xpdrc2_3_N1(self):
+ def test_22_connect_roadmc_PP2_to_xpdrc2_3_N1(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-networkutils', 'init-rdm-xpdr-links',
{'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '3', 'network-num': '1',
'rdm-node': 'ROADM-C1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP2-TXRX'}})
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
+ time.sleep(2)
- def test_14_add_omsAttributes_roadma_roadmc(self):
- # Config ROADMA-ROADMC oms-attributes
- data = {"span": {
- "auto-spanloss": "true",
- "spanloss-base": 11.4,
- "spanloss-current": 12,
- "engineered-spanloss": 12.2,
- "link-concatenation": [{
- "SRLG-Id": 0,
- "fiber-type": "smf",
- "SRLG-length": 100000,
- "pmd": 0.5}]}}
- response = test_utils.add_oms_attr_request(
- "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
- self.assertEqual(response.status_code, requests.codes.created)
-
- def test_15_add_omsAttributes_roadmc_roadma(self):
- # Config ROADMC-ROADMA oms-attributes
- data = {"span": {
- "auto-spanloss": "true",
- "spanloss-base": 11.4,
- "spanloss-current": 12,
- "engineered-spanloss": 12.2,
- "link-concatenation": [{
- "SRLG-Id": 0,
- "fiber-type": "smf",
- "SRLG-length": 100000,
- "pmd": 0.5}]}}
- response = test_utils.add_oms_attr_request(
- "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
- self.assertEqual(response.status_code, requests.codes.created)
-
- def test_16_add_omsAttributes_roadma_roadmb(self):
+ def test_23_add_omsAttributes_roadma_roadmb(self):
# Config ROADMA-ROADMB oms-attributes
data = {"span": {
"auto-spanloss": "true",
"fiber-type": "smf",
"SRLG-length": 100000,
"pmd": 0.5}]}}
- response = test_utils.add_oms_attr_request(
- "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX", data)
+ response = test_utils.add_oms_attr_request("ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX", data)
self.assertEqual(response.status_code, requests.codes.created)
- def test_17_add_omsAttributes_roadmb_roadma(self):
+ def test_24_add_omsAttributes_roadmb_roadma(self):
# Config ROADMB-ROADMA oms-attributes
data = {"span": {
"auto-spanloss": "true",
"fiber-type": "smf",
"SRLG-length": 100000,
"pmd": 0.5}]}}
- response = test_utils.add_oms_attr_request(
- "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX", data)
+ response = test_utils.add_oms_attr_request("ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX", data)
self.assertEqual(response.status_code, requests.codes.created)
- def test_18_add_omsAttributes_roadmb_roadmc(self):
+ def test_25_add_omsAttributes_roadmb_roadmc(self):
# Config ROADMB-ROADMC oms-attributes
data = {"span": {
"auto-spanloss": "true",
"fiber-type": "smf",
"SRLG-length": 100000,
"pmd": 0.5}]}}
- response = test_utils.add_oms_attr_request(
- "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX", data)
+ response = test_utils.add_oms_attr_request("ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX", data)
self.assertEqual(response.status_code, requests.codes.created)
- def test_19_add_omsAttributes_roadmc_roadmb(self):
+ def test_26_add_omsAttributes_roadmc_roadmb(self):
# Config ROADMC-ROADMB oms-attributes
data = {"span": {
"auto-spanloss": "true",
"fiber-type": "smf",
"SRLG-length": 100000,
"pmd": 0.5}]}}
- response = test_utils.add_oms_attr_request(
- "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX", data)
+ response = test_utils.add_oms_attr_request("ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX", data)
self.assertEqual(response.status_code, requests.codes.created)
- def test_20_create_OTS_ROADMA_DEG1(self):
+ def test_27_create_OTS_ROADMA_DEG1(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-device-renderer', 'create-ots-oms',
{
self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-A1',
response["output"]["result"])
- def test_21_create_OTS_ROADMC_DEG2(self):
+ def test_28_create_OTS_ROADMC_DEG2(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-device-renderer', 'create-ots-oms',
{
self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-C1',
response["output"]["result"])
- def test_22_create_OTS_ROADMB_DEG1(self):
+ def test_29_create_OTS_ROADMB_DEG1(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-device-renderer', 'create-ots-oms',
{
self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-B1',
response["output"]["result"])
- def test_23_create_OTS_ROADMB_DEG2(self):
+ def test_30_create_OTS_ROADMB_DEG2(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-device-renderer', 'create-ots-oms',
{
self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-B1',
response["output"]["result"])
- def test_24_calculate_span_loss_base_all(self):
+ def test_31_calculate_span_loss_base_all(self):
response = test_utils.transportpce_api_rpc_request(
'transportpce-olm', 'calculate-spanloss-base',
{
}, response["output"]["spans"])
time.sleep(1)
- # test service-create for Eth service from xpdr to xpdr with service-resiliency
- def test_25_create_eth_service1_with_service_resiliency_restorable(self):
- response = test_utils.transportpce_api_rpc_request(
- 'org-openroadm-service', 'service-create',
- self.cr_serv_input_data)
- self.assertEqual(response['status_code'], requests.codes.ok)
- self.assertIn('PCE calculation in progress',
- response['output']['configuration-response-common']['response-message'])
- time.sleep(self.WAITING)
-
- def test_26_get_eth_service1(self):
- response = test_utils.get_ordm_serv_list_attr_request("services", "service1")
- self.assertEqual(response['status_code'], requests.codes.ok)
- self.assertEqual(response['services'][0]['administrative-state'], 'inService')
- self.assertEqual(response['services'][0]['service-name'], 'service1')
- self.assertEqual(response['services'][0]['connection-type'], 'service')
- self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
- self.assertEqual(
- response['services'][0]['service-resiliency']['resiliency'],
- 'org-openroadm-common-service-types:restorable')
- time.sleep(1)
-
- def test_27_get_service_path_service_1(self):
+ def test_32_get_service_path_service_1(self):
response = test_utils.get_serv_path_list_attr("service-paths", "service1")
self.assertEqual(response['status_code'], requests.codes.ok)
- self.assertCountEqual(
- self.service_path_service_1_AtoZ,
- response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
+ self.assertCountEqual(self.service_path_service_1_AtoZ,
+ response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
# test service-create for Eth service from xpdr to xpdr without service-resiliency
- def test_28_create_eth_service2_without_service_resiliency(self):
+ def test_33_create_eth_service2_without_service_resiliency(self):
self.cr_serv_input_data["service-name"] = "service2"
del self.cr_serv_input_data["service-resiliency"]
- response = test_utils.transportpce_api_rpc_request(
- 'org-openroadm-service', 'service-create',
- self.cr_serv_input_data)
+ response = test_utils.transportpce_api_rpc_request('org-openroadm-service', 'service-create',
+ self.cr_serv_input_data)
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('PCE calculation in progress',
response['output']['configuration-response-common']['response-message'])
time.sleep(self.WAITING)
- def test_29_get_eth_service2(self):
+ def test_34_get_eth_service2(self):
response = test_utils.get_ordm_serv_list_attr_request("services", "service2")
self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertEqual(response['services'][0]['operational-state'], 'inService')
self.assertEqual(response['services'][0]['administrative-state'], 'inService')
self.assertEqual(response['services'][0]['service-name'], 'service2')
self.assertEqual(response['services'][0]['connection-type'], 'service')
self.assertNotIn('service-resiliency', response['services'][0])
time.sleep(1)
- def test_30_get_service_path_service_2(self):
+ def test_35_get_service_path_service_2(self):
response = test_utils.get_serv_path_list_attr("service-paths", "service2")
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertCountEqual(
response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
# Degrade ROADM-A1-ROADM-C1 link
- def test_31_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
+ def test_36_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
url = "{}/operations/pm-handling:pm-interact"
body = {
"input": {
self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully set !")
time.sleep(self.WAITING * 2)
- def test_32_get_eth_service1(self):
- self.test_26_get_eth_service1()
+ def test_37_get_eth_service1(self):
+ self.test_13_get_eth_service1()
- def test_33_get_service_path_service_1(self):
+ def test_38_get_service_path_service_1(self):
response = test_utils.get_serv_path_list_attr("service-paths", "service1")
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertCountEqual(
self.service_path_service_1_rerouted_AtoZ,
response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
- def test_34_get_eth_service2(self):
+ def test_39_get_eth_service2(self):
response = test_utils.get_ordm_serv_list_attr_request("services", "service2")
self.assertEqual(response['services'][0]['operational-state'], 'outOfService')
self.assertEqual(response['services'][0]['administrative-state'], 'inService')
self.assertNotIn('service-resiliency', response['services'])
time.sleep(1)
- def test_35_get_service_path_service_2(self):
+ def test_40_get_service_path_service_2(self):
response = test_utils.get_serv_path_list_attr("service-paths", "service2")
self.assertEqual(response['status_code'], requests.codes.ok)
index = self.service_path_service_2_AtoZ.index(
response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
# Restore ROADM-A1-ROADM-C1 link
- def test_36_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
+ def test_41_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
url = "{}/operations/pm-handling:pm-interact"
body = {
"input": {
self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully released !")
time.sleep(2)
- def test_37_get_eth_service1(self):
- self.test_26_get_eth_service1()
+ def test_42_get_eth_service1(self):
+ self.test_13_get_eth_service1()
- def test_38_get_service_path_service_1(self):
- self.test_33_get_service_path_service_1()
+ def test_43_get_service_path_service_1(self):
+ self.test_38_get_service_path_service_1()
- def test_39_get_eth_service2(self):
- self.test_29_get_eth_service2()
+ def test_44_get_eth_service2(self):
+ self.test_34_get_eth_service2()
- def test_40_get_service_path_service_2(self):
- self.test_30_get_service_path_service_2()
+ def test_45_get_service_path_service_2(self):
+ self.test_35_get_service_path_service_2()
- def test_41_delete_eth_service2(self):
+ def test_46_delete_eth_service2(self):
self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service2"
response = test_utils.transportpce_api_rpc_request(
'org-openroadm-service', 'service-delete',
response['output']['configuration-response-common']['response-message'])
time.sleep(self.WAITING)
- def test_42_delete_eth_service1(self):
+ def test_47_delete_eth_service1(self):
self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service1"
response = test_utils.transportpce_api_rpc_request(
'org-openroadm-service', 'service-delete',
response['output']['configuration-response-common']['response-message'])
time.sleep(self.WAITING)
- def test_43_disconnect_xponders_from_roadm(self):
+ def test_48_disconnect_xponders_from_roadm(self):
response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
self.assertEqual(response['status_code'], requests.codes.ok)
links = response['network'][0]['ietf-network-topology:link']
'openroadm-topology', link['link-id'], 'config')
self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
- def test_44_disconnect_xpdra2(self):
+ def test_49_disconnect_xpdra2(self):
response = test_utils.unmount_device("XPDR-A2")
self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
- def test_45_disconnect_xpdrc2(self):
+ def test_50_disconnect_xpdrc2(self):
response = test_utils.unmount_device("XPDR-C2")
self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
- def test_46_disconnect_roadmA(self):
+ def test_51_disconnect_roadmA(self):
response = test_utils.unmount_device("ROADM-A1")
self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
- def test_47_disconnect_roadmB(self):
+ def test_52_disconnect_roadmB(self):
response = test_utils.unmount_device("ROADM-B1")
self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
- def test_48_disconnect_roadmC(self):
+ def test_53_disconnect_roadmC(self):
response = test_utils.unmount_device("ROADM-C1")
self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))