private static Table<Uint32, ModulationFormat, String> initFrequencyWidthTable() {
Table<Uint32, ModulationFormat, String> frequencyWidthTable = HashBasedTable.create();
frequencyWidthTable.put(ServiceRateConstant.RATE_100, ModulationFormat.DpQpsk, String.valueOf(WIDTH_40));
- frequencyWidthTable.put(ServiceRateConstant.RATE_200, ModulationFormat.DpQpsk, String.valueOf(WIDTH_80));
- frequencyWidthTable.put(ServiceRateConstant.RATE_300, ModulationFormat.DpQam8, String.valueOf(WIDTH_80));
+ frequencyWidthTable.put(ServiceRateConstant.RATE_200, ModulationFormat.DpQpsk, String.valueOf(WIDTH_75));
+ frequencyWidthTable.put(ServiceRateConstant.RATE_300, ModulationFormat.DpQam8, String.valueOf(WIDTH_75));
frequencyWidthTable.put(ServiceRateConstant.RATE_400, ModulationFormat.DpQam16, String.valueOf(WIDTH_75));
return frequencyWidthTable;
}
import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If1GEODU0;
import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If400GE;
import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCH;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCHOTU2EODU2E;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCHOTU2ODU2;
import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCHOTU4ODU4;
import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOTUCnODUCn;
import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.SupportedIfCapability;
put("If100GE", If100GE.class);
put("If10GE", If10GE.class);
put("If1GE", If1GE.class);
+ put("IfOCHOTU2EODU2E", IfOCHOTU2EODU2E.class);
+ put("IfOCHOTU2ODU2", IfOCHOTU2ODU2.class);
}
};
nodesList.put(nodes.key(),nodes);
Network network = new NetworkBuilder().setNodes(nodesList).build();
-
final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
InstanceIdentifier<Network> nodesIID = InstanceIdentifier.builder(Network.class).build();
writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, nodesIID, network);
List<Class<? extends org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327
.SupportedIfCapability>> supportedIntf = new ArrayList<>();
for (Class<? extends SupportedIfCapability> sup: port.getSupportedInterfaceCapability()) {
- supportedIntf.add(MappingUtilsImpl.convertSupIfCapa(sup.getSimpleName()));
+ if (MappingUtilsImpl.convertSupIfCapa(sup.getSimpleName()) != null) {
+ supportedIntf.add(MappingUtilsImpl.convertSupIfCapa(sup.getSimpleName()));
+ }
}
mpBldr.setSupportedInterfaceCapability(supportedIntf);
}
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OduRateIdentity;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.Link1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.Node1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.Node1Builder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.TerminationPoint1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.SwitchingPools;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.SwitchingPoolsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.TpBandwidthSharing;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.TpBandwidthSharingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.XpdrAttributes;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.XpdrAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.termination.point.TpSupportedInterfaces;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.SupportedIfCapability;
private static final String CLIENT = "-CLIENT";
private static final String NETWORK = "-NETWORK";
private static final String XPDR = "-XPDR";
+ private static final String OTN_PARAMS_ERROR = "Error with otn parameters of supported link {}";
private static final int NB_TRIB_PORTS = 80;
private static final int NB_TRIB_SLOTS = 80;
- private static final int NB_TRIB_SLOT_PER_10GE = 8;
+
+ private static Map<String, Class<? extends OduRateIdentity>> rateMap = Map.of(
+ "If100GEODU4", ODU4.class,
+ "IfOCHOTU4ODU4", ODU4.class,
+ "If1GEODU0", ODU0.class,
+ "If10GEODU2", ODU2.class,
+ "If10GEODU2e", ODU2e.class);
+ private static Map<OtnLinkType, Long> otnLinkTypeBwMap = Map.of(
+ OtnLinkType.ODTU4, 100000L,
+ OtnLinkType.ODUC4, 400000L,
+ OtnLinkType.ODUC3, 300000L,
+ OtnLinkType.ODUC2, 200000L);
+ private static Map<Uint32, Long> serviceRateBwIncrMap = Map.of(
+ Uint32.valueOf(1), 1000L,
+ Uint32.valueOf(10), 10000L,
+ Uint32.valueOf(100), 100000L);
private OpenRoadmOtnTopology() {
}
}
public static TopologyShard createOtnLinks(String nodeA, String tpA, String nodeZ, String tpZ,
- OtnLinkType linkType) {
- List<Link> links = null;
- if (OtnLinkType.OTU4.equals(linkType) || OtnLinkType.OTUC4.equals(linkType)) {
- links = initialiseOtnLinks(nodeA, tpA, nodeZ, tpZ, linkType);
- }
- return new TopologyShard(null, links);
+ OtnLinkType linkType) {
+
+ return new TopologyShard(
+ null,
+ OtnLinkType.OTU4.equals(linkType) || OtnLinkType.OTUC4.equals(linkType)
+ ? initialiseOtnLinks(nodeA, tpA, nodeZ, tpZ, linkType)
+ : null);
}
public static TopologyShard createOtnLinks(
.Link notifLink,
OtnLinkType linkType) {
- return new TopologyShard(null, initialiseOtnLinks(notifLink.getATermination().getNodeId(),
- notifLink.getATermination().getTpId(), notifLink.getZTermination().getNodeId(),
- notifLink.getZTermination().getTpId(), linkType));
+ return new TopologyShard(
+ null,
+ initialiseOtnLinks(notifLink.getATermination().getNodeId(),
+ notifLink.getATermination().getTpId(),
+ notifLink.getZTermination().getNodeId(),
+ notifLink.getZTermination().getTpId(),
+ linkType));
}
public static TopologyShard createOtnLinks(
org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp
.Link notifLink,
- List<Link> supportedOtu4links,
- List<TerminationPoint> supportedTPs,
- OtnLinkType linkType) {
+ List<Link> supportedOtu4links, List<TerminationPoint> supportedTPs, OtnLinkType linkType) {
List<Link> links;
switch (linkType) {
updatedTPs.add(updateTp(tp, true, linkType));
}
return new TopologyShard(null, links, updatedTPs);
+ //TODO shouldn't other linkt type listed in otnLinkTypeBwMap be handled too ?
default:
return null;
}
public static TopologyShard createOtnLinks(List<Link> suppOtuLinks, List<TerminationPoint> oldTps,
OtnLinkType linkType) {
+
List<Link> links = new ArrayList<>();
for (Link link : suppOtuLinks) {
if (link.augmentation(Link1.class) == null) {
- LOG.error("Error with otn parameters of supported link {}", link.getLinkId().getValue());
+ LOG.error("Error with OTN parameters of supported link {}", link.getLinkId().getValue());
continue;
}
- if (OtnLinkType.ODTU4.equals(linkType)
- && link.augmentation(Link1.class).getAvailableBandwidth().equals(Uint32.valueOf(100000))) {
- links.add(updateOtnLinkBwParameters(link, 0L, 100000L));
- } else if (OtnLinkType.ODUC4.equals(linkType)
- && link.augmentation(Link1.class).getAvailableBandwidth().equals(Uint32.valueOf(400000))) {
- links.add(updateOtnLinkBwParameters(link, 0L, 400000L));
- } else if (OtnLinkType.ODUC3.equals(linkType)
- && link.augmentation(Link1.class).getAvailableBandwidth().equals(Uint32.valueOf(300000))) {
- links.add(updateOtnLinkBwParameters(link, 0L, 300000L));
- } else if (OtnLinkType.ODUC2.equals(linkType)
- && link.augmentation(Link1.class).getAvailableBandwidth().equals(Uint32.valueOf(200000))) {
- links.add(updateOtnLinkBwParameters(link, 0L, 200000L));
- } else {
- LOG.error("Unsupported OTN Link Type link or unsufficient available bandwith: {}",
- link.getLinkId().getValue());
+ if (!otnLinkTypeBwMap.containsKey(linkType)) {
+ LOG.error("Error with link {} : unsupported OTN link type", link.getLinkId().getValue());
+ continue;
}
- //TODO use a Map here instead of multiple else-if-blocks
+ if (!link.augmentation(Link1.class).getAvailableBandwidth()
+ .equals(Uint32.valueOf(otnLinkTypeBwMap.get(linkType)))) {
+ //TODO shouldn't it be < rather than !equals() here ?
+ LOG.error("Error with link {} : unsufficient available bandwith", link.getLinkId().getValue());
+ continue;
+ }
+ links.add(updateOtnLinkBwParameters(link, 0L, otnLinkTypeBwMap.get(linkType)));
}
if (links.size() == 2) {
links.addAll(initialiseOtnLinks(suppOtuLinks.get(0).getSource().getSourceNode().getValue(),
for (TerminationPoint tp : oldTps) {
tps.add(updateTp(tp, true, linkType));
}
- if (links.size() == 4 && tps.size() == 2) {
- return new TopologyShard(null, links, tps);
- } else {
- return new TopologyShard(null, null, null);
- }
+ return links.size() == 4 && tps.size() == 2
+ ? new TopologyShard(null, links, tps)
+ : new TopologyShard(null, null, null);
}
public static TopologyShard updateOtnLinks(List<Link> suppOduLinks, List<TerminationPoint> oldTps,
- Uint32 serviceRate, Short tribPortNb, Short minTribSlotNb, Short maxTribSlotNb, boolean isDeletion) {
+ Uint32 serviceRate, Short tribPortNb, Short minTribSlotNb, Short maxTribSlotNb, boolean isDeletion) {
+
List<Link> links = new ArrayList<>();
- Long bwIncr;
- switch (serviceRate.intValue()) {
- case 1:
- bwIncr = 1000L;
- break;
- case 10:
- bwIncr = 10000L;
- break;
- case 100:
- bwIncr = 100000L;
- break;
- default:
- LOG.warn("Error with not managed service rate {}", serviceRate.toString());
- return new TopologyShard(null, null, null);
+ if (!serviceRateBwIncrMap.containsKey(serviceRate)) {
+ LOG.warn("Error with not managed service rate {}", serviceRate.toString());
+ return new TopologyShard(null, null, null);
}
+ Long bwIncr = serviceRateBwIncrMap.get(serviceRate);
for (Link link : suppOduLinks) {
- if (link.augmentation(Link1.class) != null && link.augmentation(Link1.class).getAvailableBandwidth() != null
- && link.augmentation(Link1.class).getUsedBandwidth() != null) {
+ if (link.augmentation(Link1.class) == null
+ || link.augmentation(Link1.class).getAvailableBandwidth() == null
+ || link.augmentation(Link1.class).getUsedBandwidth() == null) {
+ LOG.error(OTN_PARAMS_ERROR, link.getLinkId().getValue());
+ } else {
Uint32 avlBw = link.augmentation(Link1.class).getAvailableBandwidth();
Uint32 usedBw = link.augmentation(Link1.class).getUsedBandwidth();
if (avlBw.toJava() < bwIncr) {
bwIncr = 0L;
}
- if (isDeletion) {
- links.add(updateOtnLinkBwParameters(link, avlBw.toJava() + bwIncr,
- usedBw.toJava() - bwIncr));
- } else {
- links.add(updateOtnLinkBwParameters(link, avlBw.toJava() - bwIncr,
- usedBw.toJava() + bwIncr));
- }
- } else {
- LOG.error("Error with otn parameters of supported link {}", link.getLinkId().getValue());
+ links.add(
+ isDeletion
+ ? updateOtnLinkBwParameters(link, avlBw.toJava() + bwIncr, usedBw.toJava() - bwIncr)
+ : updateOtnLinkBwParameters(link, avlBw.toJava() - bwIncr, usedBw.toJava() + bwIncr)
+ );
}
}
List<TerminationPoint> tps = new ArrayList<>();
for (TerminationPoint tp : oldTps) {
if (bwIncr != 0) {
+ //TODO shouldn't it be 0L rather?
tps.add(updateNodeTpTsPool(tp, serviceRate, tribPortNb, minTribSlotNb, maxTribSlotNb, isDeletion));
}
}
}
public static TopologyShard updateOtnLinks(List<Link> suppOtuLinks, boolean isDeletion) {
+
List<Link> links = new ArrayList<>();
for (Link link : suppOtuLinks) {
if (link.augmentation(Link1.class) == null
|| link.augmentation(Link1.class).getAvailableBandwidth() == null
|| link.augmentation(Link1.class).getUsedBandwidth() == null) {
- LOG.error("Error with otn parameters of supported link {}", link.getLinkId().getValue());
+ LOG.error(OTN_PARAMS_ERROR, link.getLinkId().getValue());
} else {
- if (isDeletion) {
- links.add(updateOtnLinkBwParameters(link, Long.valueOf(100000), Long.valueOf(0)));
- } else {
- links.add(updateOtnLinkBwParameters(link, Long.valueOf(0), Long.valueOf(100000)));
- }
+ links.add(
+ isDeletion
+ ? updateOtnLinkBwParameters(link, Long.valueOf(100000), Long.valueOf(0))
+ : updateOtnLinkBwParameters(link, Long.valueOf(0), Long.valueOf(100000))
+ );
}
}
if (links.isEmpty()) {
public static TopologyShard deleteOtnLinks(List<Link> suppOtuLinks, List<TerminationPoint> oldTps,
OtnLinkType linkType) {
+
List<Link> links = new ArrayList<>();
OtnLinkType otnLinkType = null;
for (Link link : suppOtuLinks) {
- if (link.augmentation(Link1.class) != null && link.augmentation(
- org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class) != null) {
- otnLinkType = link.augmentation(
- org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class).getOtnLinkType();
- if (OtnLinkType.OTU4.equals(otnLinkType)) {
- links.add(updateOtnLinkBwParameters(link, 100000L, 0L));
- } else if (OtnLinkType.OTUC4.equals(otnLinkType)) {
- links.add(updateOtnLinkBwParameters(link, 400000L, 0L));
- } else {
- LOG.warn("Unexpected otn-link-type {} for link {}", otnLinkType, link.getLinkId());
- }
- } else {
- LOG.error("Error with otn parameters of supported link {}", link.getLinkId().getValue());
+ if (link.augmentation(Link1.class) == null
+ || link.augmentation(
+ org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class) == null) {
+ LOG.error(OTN_PARAMS_ERROR, link.getLinkId().getValue());
return new TopologyShard(null, null, null);
}
+ otnLinkType = link.augmentation(
+ org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class).getOtnLinkType();
+ if (OtnLinkType.OTU4.equals(otnLinkType)) {
+ links.add(updateOtnLinkBwParameters(link, 100000L, 0L));
+ } else if (OtnLinkType.OTUC4.equals(otnLinkType)) {
+ links.add(updateOtnLinkBwParameters(link, 400000L, 0L));
+ } else {
+ LOG.warn("Unexpected otn-link-type {} for link {}", otnLinkType, link.getLinkId());
+ }
+ //TODO shouldn't other linkt type listed in otnLinkTypeBwMap be handled too ?
}
List<TerminationPoint> tps = new ArrayList<>();
for (TerminationPoint tp : oldTps) {
tps.add(updateTp(tp, false, linkType));
}
- if (!links.isEmpty() && !tps.isEmpty()) {
- return new TopologyShard(null, links, tps);
- } else {
- return new TopologyShard(null, null, null);
- }
+ return
+ links.isEmpty() || tps.isEmpty()
+ ? new TopologyShard(null, null, null)
+ : new TopologyShard(null, links, tps);
}
private static List<Link> initialiseOtnLinks(String nodeA, String tpA, String nodeZ, String tpZ,
OtnLinkType linkType) {
+
List<Link> links = new ArrayList<>();
String nodeATopo = formatNodeName(nodeA, tpA);
String nodeZTopo = formatNodeName(nodeZ, tpZ);
org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1 tpceLink1
= new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1Builder()
- .setOtnLinkType(linkType).build();
+ .setOtnLinkType(linkType).build();
Link1Builder otnLink1Bldr = new Link1Builder()
.setUsedBandwidth(Uint32.valueOf(0));
switch (linkType) {
default:
LOG.error("unable to set available bandwidth to unknown link type");
break;
+ //TODO shouldn't other linkt type listed in otnLinkTypeBwMap be handled too ?
}
// create link A-Z
LinkBuilder ietfLinkAZBldr = TopologyUtils.createLink(nodeATopo, nodeZTopo, tpA, tpZ, linkType.getName());
new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder(
ietfLinkAZBldr.augmentation(
org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1.class))
- .setLinkType(OpenroadmLinkType.OTNLINK)
- .setOperationalState(State.InService)
- .setAdministrativeState(AdminStates.InService)
- .build());
+ .setLinkType(OpenroadmLinkType.OTNLINK)
+ .setOperationalState(State.InService)
+ .setAdministrativeState(AdminStates.InService)
+ .build());
links.add(ietfLinkAZBldr.build());
// create link Z-A
LinkBuilder ietfLinkZABldr = TopologyUtils.createLink(nodeZTopo, nodeATopo, tpZ, tpA, linkType.getName());
new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder(
ietfLinkZABldr.augmentation(
org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1.class))
- .setLinkType(OpenroadmLinkType.OTNLINK)
- .setOperationalState(State.InService)
- .setAdministrativeState(AdminStates.InService)
- .build());
+ .setLinkType(OpenroadmLinkType.OTNLINK)
+ .setOperationalState(State.InService)
+ .setAdministrativeState(AdminStates.InService)
+ .build());
links.add(ietfLinkZABldr.build());
return links;
}
private static Link updateOtnLinkBwParameters(Link link, Long availBw, Long usedBw) {
+
LOG.debug("in updateOtnLinkBwParameters with availBw = {}, usedBw = {}", availBw, usedBw);
LinkBuilder updatedLinkBldr = new LinkBuilder(link);
Link1Builder updatedLink1Bldr = new Link1Builder(link.augmentation(Link1.class))
}
private static List<Link> updateOtnLinkBwParameters(List<Link> supportedLinks, OtnLinkType linkType) {
+
LOG.debug("in updateOtnLinkBwParameters with supportedLinks = {}, linkType = {}", supportedLinks, linkType);
Uint32 usedBw;
switch (linkType) {
usedBw = Uint32.valueOf(0);
break;
}
+ //TODO shouldn't other linkt type listed in otnLinkTypeBwMap be handled too ?
List<Link> updatedlinks = new ArrayList<>();
for (Link link : supportedLinks) {
LinkBuilder updatedLinkBldr = new LinkBuilder(link);
private static TerminationPoint updateTp(TerminationPoint originalTp, boolean addingTsTpnPoolTermination,
OtnLinkType linkType) {
+
LOG.debug("in updateTp");
TerminationPointBuilder tpBldr = new TerminationPointBuilder(originalTp);
- TerminationPoint1Builder otnTp1Bldr = new TerminationPoint1Builder(
- tpBldr.augmentation(TerminationPoint1.class));
- XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder(otnTp1Bldr
- .getXpdrTpPortConnectionAttributes());
+ TerminationPoint1Builder otnTp1Bldr =
+ new TerminationPoint1Builder(tpBldr.augmentation(TerminationPoint1.class));
+ XpdrTpPortConnectionAttributesBuilder xtpcaBldr =
+ new XpdrTpPortConnectionAttributesBuilder(otnTp1Bldr.getXpdrTpPortConnectionAttributes());
if (addingTsTpnPoolTermination) {
List<Uint16> tsPool = new ArrayList<>();
for (int i = 1; i <= NB_TRIB_SLOTS; i++) {
for (int i = 1; i <= nbTribPort; i++) {
tpnPool.add(Uint16.valueOf(i));
}
- OdtuTpnPool oduTpnPool = new OdtuTpnPoolBuilder().setOdtuType(ODTU4TsAllocated.class)
- .setTpnPool(tpnPool).build();
+ OdtuTpnPool oduTpnPool = new OdtuTpnPoolBuilder()
+ .setOdtuType(ODTU4TsAllocated.class)
+ .setTpnPool(tpnPool)
+ .build();
xtpcaBldr.setOdtuTpnPool(ImmutableMap.of(oduTpnPool.key(),oduTpnPool));
} else {
xtpcaBldr.setTsPool(null);
}
private static TerminationPoint updateNodeTpTsPool(TerminationPoint tp, Uint32 serviceRate, Short tribPortNb,
- Short minTribSlotNb, Short maxTribSlotNb, boolean isDeletion) {
+ Short minTribSlotNb, Short maxTribSlotNb, boolean isDeletion) {
+
LOG.debug("in updateNodeTpTsPool");
TerminationPointBuilder tpBldr = new TerminationPointBuilder(tp);
@Nullable
- XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder(
- tpBldr.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes());
+ XpdrTpPortConnectionAttributesBuilder xtpcaBldr =
+ new XpdrTpPortConnectionAttributesBuilder(
+ tpBldr.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes());
List<Uint16> tsPool = new ArrayList<>(xtpcaBldr.getTsPool());
if (isDeletion) {
for (int i = minTribSlotNb; i <= maxTribSlotNb; i++) {
xtpcaBldr.setTsPool(tsPool);
List<Uint16> tpnPool;
List<OdtuTpnPool> odtuTpnPoolValues = new ArrayList<>(xtpcaBldr.getOdtuTpnPool().values());
- if (odtuTpnPoolValues.get(0).getTpnPool() != null) {
+ if (odtuTpnPoolValues.get(0).getTpnPool() == null) {
+ tpnPool = new ArrayList<>();
+ } else {
tpnPool = new ArrayList<>(odtuTpnPoolValues.get(0).getTpnPool());
if (isDeletion) {
tpnPool.add(Uint16.valueOf(tribPortNb));
} else {
tpnPool.remove(Uint16.valueOf(tribPortNb));
}
- } else {
- tpnPool = new ArrayList<>();
}
Class<? extends OdtuTypeIdentity> odtuType = null;
switch (serviceRate.intValue()) {
LOG.warn("Unable to set the odtu-type");
break;
}
- OdtuTpnPool odtuTpnPool = new OdtuTpnPoolBuilder().setOdtuType(odtuType)
- .setTpnPool(tpnPool).build();
+ OdtuTpnPool odtuTpnPool = new OdtuTpnPoolBuilder()
+ .setOdtuType(odtuType)
+ .setTpnPool(tpnPool)
+ .build();
xtpcaBldr.setOdtuTpnPool(ImmutableMap.of(odtuTpnPool.key(),odtuTpnPool));
-
- tpBldr.addAugmentation(new TerminationPoint1Builder(tp.augmentation(TerminationPoint1.class))
- .setXpdrTpPortConnectionAttributes(xtpcaBldr.build()).build());
+ tpBldr.addAugmentation(
+ new TerminationPoint1Builder(
+ tp.augmentation(TerminationPoint1.class))
+ .setXpdrTpPortConnectionAttributes(xtpcaBldr.build())
+ .build());
return tpBldr.build();
}
private static Map<Integer, OtnTopoNode> convertPortMappingToOtnNodeList(Nodes mappingNode) {
- List<Mapping> networkMappings = mappingNode.nonnullMapping().values()
- .stream().filter(k -> k.getLogicalConnectionPoint()
- .contains("NETWORK")).collect(Collectors.toList());
+
+ List<Mapping> networkMappings =
+ mappingNode.nonnullMapping().values().stream()
+ .filter(k -> k.getLogicalConnectionPoint().contains("NETWORK"))
+ .collect(Collectors.toList());
Map<Integer, OtnTopoNode> xpdrMap = new HashMap<>();
for (Mapping mapping : networkMappings) {
Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
if (!xpdrMap.containsKey(xpdrNb)) {
- List<Mapping> xpdrNetMaps = mappingNode.nonnullMapping().values()
- .stream().filter(k -> k.getLogicalConnectionPoint()
- .contains("XPDR" + xpdrNb + NETWORK)).collect(Collectors.toList());
- List<Mapping> xpdrClMaps = mappingNode.nonnullMapping().values()
- .stream().filter(k -> k.getLogicalConnectionPoint()
- .contains("XPDR" + xpdrNb + CLIENT)).collect(Collectors.toList());
- OtnTopoNode otnNode = null;
- if (mapping.getXponderType() != null) {
- otnNode = new OtnTopoNode(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb,
- mapping.getXponderType(), fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps),
- xpdrNetMaps, xpdrClMaps);
- } else {
- otnNode = new OtnTopoNode(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb,
- XpdrNodeTypes.Tpdr, fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps),
- xpdrNetMaps, xpdrClMaps);
- }
- xpdrMap.put(xpdrNb, otnNode);
+ List<Mapping> xpdrNetMaps =
+ mappingNode.nonnullMapping().values().stream()
+ .filter(k -> k.getLogicalConnectionPoint().contains("XPDR" + xpdrNb + NETWORK))
+ .collect(Collectors.toList());
+ List<Mapping> xpdrClMaps =
+ mappingNode.nonnullMapping().values().stream()
+ .filter(k -> k.getLogicalConnectionPoint().contains("XPDR" + xpdrNb + CLIENT))
+ .collect(Collectors.toList());
+ xpdrMap.put(
+ xpdrNb,
+ new OtnTopoNode(
+ mappingNode.getNodeId(),
+ mappingNode.getNodeInfo().getNodeClli(),
+ xpdrNb,
+ mapping.getXponderType() == null
+ ? XpdrNodeTypes.Tpdr
+ : mapping.getXponderType(),
+ fillConnectionMapLcp(xpdrNetMaps),
+ fillConnectionMapLcp(xpdrClMaps),
+ xpdrNetMaps,
+ xpdrClMaps
+ ));
}
}
LOG.debug("there are {} xpdr to build", xpdrMap.size());
- xpdrMap.forEach((k, v) -> LOG.debug("xpdr {} = {} - {} - {} - {}", k, v.getNodeId(), v.getNodeType(),
- v.getNbTpClient(), v.getNbTpNetwork()));
+ xpdrMap.forEach((k, v) -> LOG.debug("xpdr {} = {} - {} - {} - {}",
+ k, v.getNodeId(), v.getNodeType(), v.getNbTpClient(), v.getNbTpNetwork()));
return xpdrMap;
}
private static Map<String, String> fillConnectionMapLcp(List<Mapping> mappingList) {
+
Map<String, String> xpdrConnectionMap = new HashMap<>();
for (Mapping map : mappingList) {
- if (map.getConnectionMapLcp() != null) {
- xpdrConnectionMap.put(map.getLogicalConnectionPoint(), map.getConnectionMapLcp());
- } else {
- xpdrConnectionMap.put(map.getLogicalConnectionPoint(), null);
- }
+ xpdrConnectionMap.put(map.getLogicalConnectionPoint(), map.getConnectionMapLcp());
}
return xpdrConnectionMap;
}
private static Node createTpdr(OtnTopoNode node) {
- // create otn-topology node augmentation
- XpdrAttributes xpdrAttr = new XpdrAttributesBuilder()
- .setXpdrNumber(Uint16.valueOf(node.getXpdrNb()))
- .build();
- Node1 otnNodeAug = new Node1Builder()
- .setXpdrAttributes(xpdrAttr)
- .build();
- org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNodeAug =
- new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
- .setNodeType(OpenroadmNodeType.TPDR)
- .setOperationalState(State.InService)
- .setAdministrativeState(AdminStates.InService)
- .build();
- // create ietf node augmentation to add TP list
+
+ // prepare ietf node augmentation to add TP list
Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
- // creation of tps
createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, false);
createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true);
-
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug =
- new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder()
- .setTerminationPoint(tpMap)
- .build();
-
// return ietfNode
return new NodeBuilder()
.setNodeId(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb()))
.withKey(new NodeKey(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb())))
.setSupportingNode(createSupportingNodes(node))
- .addAugmentation(otnNodeAug)
- .addAugmentation(ocnNodeAug)
- .addAugmentation(ietfNodeAug)
+ .addAugmentation(
+ new Node1Builder()
+ .setXpdrAttributes(
+ new XpdrAttributesBuilder()
+ .setXpdrNumber(Uint16.valueOf(node.getXpdrNb()))
+ .build())
+ .build())
+ .addAugmentation(
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
+ .setNodeType(OpenroadmNodeType.TPDR)
+ .setOperationalState(State.InService)
+ .setAdministrativeState(AdminStates.InService)
+ .build())
+ .addAugmentation(
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .Node1Builder()
+ .setTerminationPoint(tpMap)
+ .build())
.build();
}
private static Node createMuxpdr(OtnTopoNode node) {
- // create otn-topology node augmentation
- // TODO: will need to be completed
- TpBandwidthSharing tpBwSh = new TpBandwidthSharingBuilder().build();
- XpdrAttributes xpdrAttr = new XpdrAttributesBuilder()
- .setXpdrNumber(Uint16.valueOf(node.getXpdrNb()))
- .build();
+ // prepare otn-topology node augmentation
+ // TODO: will need to be completed
Map<NonBlockingListKey, NonBlockingList> nbMap = new HashMap<>();
for (int i = 1; i <= node.getNbTpClient(); i++) {
List<TpId> tpList = new ArrayList<>();
- TpId tpId = new TpId("XPDR" + node.getXpdrNb() + CLIENT + i);
- tpList.add(tpId);
- tpId = new TpId("XPDR" + node.getXpdrNb() + "-NETWORK1");
- tpList.add(tpId);
+ tpList.add(new TpId("XPDR" + node.getXpdrNb() + CLIENT + i));
+ tpList.add(new TpId("XPDR" + node.getXpdrNb() + "-NETWORK1"));
NonBlockingList nbl = new NonBlockingListBuilder()
.setNblNumber(Uint16.valueOf(i))
.setTpList(tpList)
.setSwitchingPoolType(SwitchingPoolTypes.NonBlocking)
.setNonBlockingList(nbMap)
.build();
- SwitchingPools switchingPools = new SwitchingPoolsBuilder()
- .setOduSwitchingPools(Map.of(oduSwitchPool.key(),oduSwitchPool))
- .build();
- Node1 otnNodeAug = new Node1Builder()
- .setTpBandwidthSharing(tpBwSh)
- .setXpdrAttributes(xpdrAttr)
- .setSwitchingPools(switchingPools)
- .build();
- org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNodeAug =
- new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
- .setNodeType(OpenroadmNodeType.MUXPDR)
- .setAdministrativeState(AdminStates.InService)
- .setOperationalState(State.InService)
- .build();
-
- // create ietf node augmentation to add TP list
+ // prepare ietf node augmentation to add TP list
Map<TerminationPointKey, TerminationPoint> tpMap = new HashMap<>();
- // creation of tps
createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, true);
createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true);
-
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug =
- new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder()
- .setTerminationPoint(tpMap)
- .build();
-
// return ietfNode
return new NodeBuilder()
.setNodeId(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb()))
.withKey(new NodeKey(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb())))
.setSupportingNode(createSupportingNodes(node))
- .addAugmentation(otnNodeAug)
- .addAugmentation(ocnNodeAug)
- .addAugmentation(ietfNodeAug)
+ .addAugmentation(
+ new Node1Builder()
+ .setTpBandwidthSharing(new TpBandwidthSharingBuilder().build())
+ .setXpdrAttributes(
+ new XpdrAttributesBuilder()
+ .setXpdrNumber(Uint16.valueOf(node.getXpdrNb()))
+ .build())
+ .setSwitchingPools(
+ new SwitchingPoolsBuilder()
+ .setOduSwitchingPools(Map.of(oduSwitchPool.key(),oduSwitchPool))
+ .build())
+ .build())
+ .addAugmentation(
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
+ .setNodeType(OpenroadmNodeType.MUXPDR)
+ .setAdministrativeState(AdminStates.InService)
+ .setOperationalState(State.InService)
+ .build())
+ .addAugmentation(
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .Node1Builder()
+ .setTerminationPoint(tpMap)
+ .build())
.build();
}
private static Node createSwitch(OtnTopoNode node) {
+
List<TpId> tpl = new ArrayList<>();
- TpId tpId = null;
for (int i = 1; i <= node.getNbTpClient(); i++) {
- tpId = new TpId("XPDR" + node.getXpdrNb() + CLIENT + i);
- tpl.add(tpId);
+ tpl.add(new TpId("XPDR" + node.getXpdrNb() + CLIENT + i));
}
for (int i = 1; i <= node.getNbTpNetwork(); i++) {
- tpId = new TpId("XPDR" + node.getXpdrNb() + NETWORK + i);
- tpl.add(tpId);
+ tpl.add(new TpId("XPDR" + node.getXpdrNb() + NETWORK + i));
}
Map<NonBlockingListKey, NonBlockingList> nbMap = new HashMap<>();
NonBlockingList nbl = new NonBlockingListBuilder()
.setTpList(tpl)
.build();
nbMap.put(nbl.key(),nbl);
-
OduSwitchingPools oduSwitchPool = new OduSwitchingPoolsBuilder()
.setSwitchingPoolNumber(Uint16.valueOf(1))
.setSwitchingPoolType(SwitchingPoolTypes.NonBlocking)
.build();
Map<OduSwitchingPoolsKey, OduSwitchingPools> oduSwitchPoolList = new HashMap<>();
oduSwitchPoolList.put(oduSwitchPool.key(),oduSwitchPool);
- SwitchingPools switchingPools = new SwitchingPoolsBuilder()
- .setOduSwitchingPools(oduSwitchPoolList)
- .build();
-
- // create otn-topology node augmentation
- // TODO: will need to be completed
- TpBandwidthSharing tpBwSh = new TpBandwidthSharingBuilder().build();
- XpdrAttributes xpdrAttr = new XpdrAttributesBuilder()
- .setXpdrNumber(Uint16.valueOf(node.getXpdrNb()))
- .build();
-
- Node1 otnNodeAug = new Node1Builder()
- .setTpBandwidthSharing(tpBwSh)
- .setXpdrAttributes(xpdrAttr)
- .setSwitchingPools(switchingPools)
- .build();
- org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 ocnNodeAug =
- new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
- .setNodeType(OpenroadmNodeType.SWITCH)
- .setOperationalState(State.InService)
- .setAdministrativeState(AdminStates.InService)
- .build();
-
- // create ietf node augmentation to add TP list
+ // prepare ietf node augmentation to add TP list
Map<TerminationPointKey, TerminationPoint> tpMap = new HashMap<>();
- // creation of tps
createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, true);
createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true);
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug =
- new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder()
- .setTerminationPoint(tpMap)
- .build();
-
// return ietfNode
return new NodeBuilder()
.setNodeId(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb()))
.withKey(new NodeKey(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb())))
.setSupportingNode(createSupportingNodes(node))
- .addAugmentation(otnNodeAug)
- .addAugmentation(ocnNodeAug)
- .addAugmentation(ietfNodeAug)
+ .addAugmentation(
+ new Node1Builder()
+ .setTpBandwidthSharing(new TpBandwidthSharingBuilder().build())
+ .setXpdrAttributes(
+ new XpdrAttributesBuilder()
+ .setXpdrNumber(Uint16.valueOf(node.getXpdrNb()))
+ .build())
+ .setSwitchingPools(
+ new SwitchingPoolsBuilder()
+ .setOduSwitchingPools(oduSwitchPoolList)
+ .build())
+ .build())
+ .addAugmentation(
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder()
+ .setNodeType(OpenroadmNodeType.SWITCH)
+ .setOperationalState(State.InService)
+ .setAdministrativeState(AdminStates.InService)
+ .build())
+ .addAugmentation(
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .Node1Builder()
+ .setTerminationPoint(tpMap)
+ .build())
.build();
}
private static void createTP(Map<TerminationPointKey, TerminationPoint> tpMap,
OtnTopoNode node, OpenroadmTpType tpType, boolean withRate) {
+
List<Mapping> mappings = null;
switch (tpType) {
case XPONDERNETWORK:
private static void fillTpMap(Map<TerminationPointKey, TerminationPoint> tpMap, OtnTopoNode node,
OpenroadmTpType tpType, boolean withRate, List<Mapping> mappings) {
+
for (Mapping mapping : mappings) {
// openroadm-otn-topoology augmentation
Map<SupportedInterfaceCapabilityKey, SupportedInterfaceCapability> supIfMap = new HashMap<>();
TerminationPoint1Builder otnTp1Bldr = new TerminationPoint1Builder();
- if (mapping.getSupportedInterfaceCapability() != null) {
+ if (mapping.getSupportedInterfaceCapability() == null) {
+ LOG.warn("mapping {} of node {} has no if-cap-type",
+ mapping.getLogicalConnectionPoint(), node.getNodeId());
+ } else {
XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder();
for (Class<? extends SupportedIfCapability> supInterCapa : mapping.getSupportedInterfaceCapability()) {
SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
.build();
supIfMap.put(supIfCapa.key(), supIfCapa);
}
- TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder()
- .setSupportedInterfaceCapability(supIfMap)
- .build();
- otnTp1Bldr.setTpSupportedInterfaces(tpSupIf);
+ otnTp1Bldr.setTpSupportedInterfaces(
+ new TpSupportedInterfacesBuilder()
+ .setSupportedInterfaceCapability(supIfMap)
+ .build()
+ );
//TODO: It is not logical to assign a priori one of the possible rate to the TP.
//Would be worth assigning per default "unallocated" at the tp creation step,
//and updating it with correct rate when it supports a specific service.
if (withRate) {
- xtpcaBldr.setRate(fixRate(mapping.getSupportedInterfaceCapability()));
- otnTp1Bldr.setXpdrTpPortConnectionAttributes(xtpcaBldr.build());
+ otnTp1Bldr.setXpdrTpPortConnectionAttributes(
+ xtpcaBldr.setRate(fixRate(mapping.getSupportedInterfaceCapability())).build());
}
- } else {
- LOG.warn("mapping {} of node {} has no if-cap-type", mapping.getLogicalConnectionPoint(),
- node.getNodeId());
}
- org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder tpceTp1Bldr =
- new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder();
- TpId tpId = new TpId(mapping.getLogicalConnectionPoint());
- setclientNwTpAttr(tpMap, node, tpId, tpType, otnTp1Bldr.build(), tpceTp1Bldr, mapping);
+ setclientNwTpAttr(
+ tpMap,
+ node,
+ new TpId(mapping.getLogicalConnectionPoint()),
+ tpType,
+ otnTp1Bldr.build(),
+ new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder(),
+ mapping);
}
}
OpenroadmTpType tpType, TerminationPoint1 otnTp1,
org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder tpceTp1Bldr,
Mapping mapping) {
+
switch (tpType) {
case XPONDERNETWORK:
if (node.getXpdrNetConnectionMap().get(tpId.getValue()) != null) {
.setNodeRef(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb()))
.setTpRef(tpId)
.build();
- TerminationPoint ietfTpNw = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, Map.of(stp.key(), stp),
- mapping);
+ TerminationPoint ietfTpNw =
+ buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, Map.of(stp.key(), stp), mapping);
tpMap.put(ietfTpNw.key(),ietfTpNw);
break;
case XPONDERCLIENT:
}
private static Class<? extends OduRateIdentity> fixRate(List<Class<? extends SupportedIfCapability>> list) {
- Map<String, Class<? extends OduRateIdentity>> rateMap = Map.of(
- "If100GEODU4", ODU4.class,
- "IfOCHOTU4ODU4", ODU4.class,
- "If1GEODU0", ODU0.class,
- "If10GEODU2", ODU2.class,
- "If10GEODU2e", ODU2e.class);
+
for (Class<? extends SupportedIfCapability> class1 : list) {
if (rateMap.containsKey(class1.getSimpleName())) {
return rateMap.get(class1.getSimpleName());
}
private static Map<SupportingNodeKey,SupportingNode> createSupportingNodes(OtnTopoNode node) {
+
SupportingNode suppNode1 = new SupportingNodeBuilder()
.setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
.setNodeRef(new NodeId(node.getNodeId()))
- .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID),
- new NodeId(node.getNodeId())))
+ .withKey(
+ new SupportingNodeKey(
+ new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID),
+ new NodeId(node.getNodeId())))
.build();
SupportingNode suppNode2 = new SupportingNodeBuilder()
.setNetworkRef(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))
.setNodeRef(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb()))
- .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID),
- new NodeId(node.getNodeId() + XPDR + node.getXpdrNb())))
+ .withKey(
+ new SupportingNodeKey(
+ new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID),
+ new NodeId(node.getNodeId() + XPDR + node.getXpdrNb())))
.build();
SupportingNode suppNode3 = new SupportingNodeBuilder()
.setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
.setNodeRef(new NodeId(node.getClli()))
- .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID),
- new NodeId(node.getClli())))
+ .withKey(
+ new SupportingNodeKey(
+ new NetworkId(NetworkUtils.CLLI_NETWORK_ID),
+ new NodeId(node.getClli())))
.build();
Map<SupportingNodeKey,SupportingNode> suppNodeMap = new HashMap<>();
suppNodeMap.put(suppNode1.key(),suppNode1);
}
private static TerminationPoint buildIetfTp(
- org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder tpceTp1Bldr,
- TerminationPoint1 otnTp1, OpenroadmTpType tpType, TpId tpId,
- Map<SupportingTerminationPointKey, SupportingTerminationPoint> supportTpMap, Mapping mapping) {
+ org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder tpceTp1Bldr,
+ TerminationPoint1 otnTp1, OpenroadmTpType tpType, TpId tpId,
+ Map<SupportingTerminationPointKey, SupportingTerminationPoint> supportTpMap, Mapping mapping) {
TerminationPointBuilder ietfTpBldr = new TerminationPointBuilder();
if (tpceTp1Bldr.getAssociatedConnectionMapPort() != null) {
if (supportTpMap != null) {
ietfTpBldr.setSupportingTerminationPoint(supportTpMap);
}
- org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1 ocnTp =
- new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder()
+ return ietfTpBldr
+ .setTpId(tpId)
+ .withKey(new TerminationPointKey(tpId))
+ .addAugmentation(otnTp1)
+ .addAugmentation(
+ new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder()
.setTpType(tpType)
.setAdministrativeState(TopologyUtils.setNetworkAdminState(mapping.getPortAdminState()))
.setOperationalState(TopologyUtils.setNetworkOperState(mapping.getPortOperState()))
- .build();
-
- return ietfTpBldr.setTpId(tpId)
- .withKey(new TerminationPointKey(tpId))
- .addAugmentation(otnTp1)
- .addAugmentation(ocnTp)
- .build();
+ .build())
+ .build();
}
private static String formatNodeName(String nodeName, String tpName) {
+
return nodeName.contains(XPDR)
? nodeName
: new StringBuilder(nodeName).append("-").append(tpName.split("-")[0]).toString();
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
-import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.transportpce.common.StringConstants;
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;
this.usedXpdrClientTps.clear();
this.availableXpdrClientTps = new ArrayList<>();
this.usableXpdrClientTps = new ArrayList<>();
- this.adminStates = node.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
- .Node1.class).getAdministrativeState();
- this.state = node.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
- .Node1.class).getOperationalState();
+ this.adminStates = node
+ .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1.class)
+ .getAdministrativeState();
+ this.state = node
+ .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1.class)
+ .getOperationalState();
this.tpAvailableTribPort.clear();
checkAvailableTribPort();
this.tpAvailableTribSlot.clear();
checkAvailableTribSlot();
- if ((node == null) || (nodeId == null) || (nodeType != OpenroadmNodeType.MUXPDR)
- && (nodeType != OpenroadmNodeType.SWITCH) && (nodeType != OpenroadmNodeType.TPDR)) {
+ if (node == null || nodeId == null || nodeType != OpenroadmNodeType.MUXPDR
+ && nodeType != OpenroadmNodeType.SWITCH && nodeType != OpenroadmNodeType.TPDR) {
LOG.error("PceOtnNode: one of parameters is not populated : nodeId, node type");
this.valid = false;
}
public void initXndrTps(String mode) {
LOG.info("PceOtnNode: initXndrTps for node {}", this.nodeId.getValue());
this.availableXponderTp.clear();
-
this.modeType = mode;
-
org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 nodeTp
- = this.node.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
- .ietf.network.topology.rev180226.Node1.class);
+ = this.node
+ .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .Node1.class);
List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
- .node.TerminationPoint> allTps = new ArrayList<>(nodeTp.nonnullTerminationPoint().values());
+ .node.TerminationPoint> allTps =
+ new ArrayList<>(nodeTp.nonnullTerminationPoint().values());
this.valid = false;
if (allTps.isEmpty()) {
LOG.error("PceOtnNode: initXndrTps: XPONDER TerminationPoint list is empty for node {}", this);
return;
}
-
for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
.node.TerminationPoint tp : allTps) {
- org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.@Nullable TerminationPoint1 ocnTp1
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1 ocnTp1
= tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
- .TerminationPoint1.class);
- //TODO many nested if-structures below, this needs to be reworked
- if (OpenroadmTpType.XPONDERNETWORK.equals(ocnTp1.getTpType())) {
- TerminationPoint1 ontTp1;
- if (tp.augmentation(TerminationPoint1.class) != null) {
- ontTp1 = tp.augmentation(TerminationPoint1.class);
- } else {
- continue;
- }
- switch (this.otnServiceType) {
- case StringConstants.SERVICE_TYPE_100GE_S:
- // TODO verify the capability of network port to support ODU4 CTP interface creation
- case StringConstants.SERVICE_TYPE_ODU4:
- case StringConstants.SERVICE_TYPE_ODUC2:
- case StringConstants.SERVICE_TYPE_ODUC3:
- case StringConstants.SERVICE_TYPE_ODUC4:
- if (!checkTpForOdtuTermination(ontTp1)) {
- LOG.error("TP {} of {} does not allow ODU4 termination creation",
+ .TerminationPoint1.class);
+ if (ocnTp1 == null) {
+ LOG.warn("null ocn TP {}", tp);
+ continue;
+ }
+ //TODO many nested structures below, this needs to be reworked
+ switch (ocnTp1.getTpType()) {
+ case XPONDERNETWORK:
+ if (tp.augmentation(TerminationPoint1.class) == null) {
+ continue;
+ }
+ TerminationPoint1 ontTp1 = tp.augmentation(TerminationPoint1.class);
+ switch (this.otnServiceType) {
+ case StringConstants.SERVICE_TYPE_100GE_S:
+ // TODO verify the capability of network port to support ODU4 CTP interface creation
+ case StringConstants.SERVICE_TYPE_ODU4:
+ case StringConstants.SERVICE_TYPE_ODUC2:
+ case StringConstants.SERVICE_TYPE_ODUC3:
+ case StringConstants.SERVICE_TYPE_ODUC4:
+ if (!checkTpForOdtuTermination(ontTp1)) {
+ LOG.error("TP {} of {} does not allow ODU4 termination creation",
+ tp.getTpId().getValue(), node.getNodeId().getValue());
+ continue;
+ }
+ break;
+
+ case StringConstants.SERVICE_TYPE_10GE:
+ if (!checkOdtuTTPforLoOduCreation(ontTp1, 10)) {
+ LOG.error("TP {} of {} does not allow ODU2e termination creation",
+ tp.getTpId().getValue(), node.getNodeId().getValue());
+ continue;
+ }
+ break;
+ case StringConstants.SERVICE_TYPE_100GE_M:
+ if (!checkOdtuTTPforLoOduCreation(ontTp1, 20)) {
+ LOG.error("TP {} of {} does not allow ODU4 termination creation",
+ tp.getTpId().getValue(), node.getNodeId().getValue());
+ continue;
+ }
+ break;
+ case StringConstants.SERVICE_TYPE_1GE:
+ if (!checkOdtuTTPforLoOduCreation(ontTp1, 1)) {
+ LOG.error("TP {} of {} does not allow ODU0 termination creation",
+ tp.getTpId().getValue(), node.getNodeId().getValue());
+ continue;
+ }
+ break;
+
+ default:
+ LOG.error("TP {} of {} does not allow any termination creation",
tp.getTpId().getValue(), node.getNodeId().getValue());
continue;
- }
- break;
+ }
+ LOG.info("TP {} of XPONDER {} is validated", tp.getTpId(), node.getNodeId().getValue());
+ this.availableXpdrNWTps.add(tp.getTpId());
+ break;
- case StringConstants.SERVICE_TYPE_10GE:
- if (!checkOdtuTTPforLoOduCreation(ontTp1, 10)) {
- LOG.error("TP {} of {} does not allow OD2e termination creation",
- tp.getTpId().getValue(), node.getNodeId().getValue());
+ case XPONDERCLIENT:
+ if (StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType)
+ || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType)
+ || StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType)
+ || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType)) {
+ if (tp.augmentation(TerminationPoint1.class) == null) {
continue;
}
- break;
- case StringConstants.SERVICE_TYPE_100GE_M:
- if (!checkOdtuTTPforLoOduCreation(ontTp1, 20)) {
- LOG.error("TP {} of {} does not allow ODU4 termination creation",
+ if (checkClientTp(tp.augmentation(TerminationPoint1.class))) {
+ LOG.info("TP {} of XPONDER {} is validated", tp.getTpId(), node.getNodeId().getValue());
+ this.availableXpdrClientTps.add(tp.getTpId());
+ } else {
+ LOG.error("TP {} of {} does not allow lo-ODU (ODU2e or ODU0) termination creation",
tp.getTpId().getValue(), node.getNodeId().getValue());
- continue;
- }
- break;
- case StringConstants.SERVICE_TYPE_1GE:
- if (!checkOdtuTTPforLoOduCreation(ontTp1, 1)) {
- LOG.error("TP {} of {} does not allow ODU0 termination creation",
- tp.getTpId().getValue(), node.getNodeId().getValue());
- continue;
}
- break;
+ }
+ break;
- default:
- LOG.error("TP {} of {} does not allow any termination creation",
- tp.getTpId().getValue(), node.getNodeId().getValue());
- continue;
- }
- LOG.info("TP {} of XPONDER {} is validated", tp.getTpId(), node.getNodeId().getValue());
- this.availableXpdrNWTps.add(tp.getTpId());
- } else if (OpenroadmTpType.XPONDERCLIENT.equals(ocnTp1.getTpType())
- && (StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType)
- || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType)
- || StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType)
- || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))) {
- TerminationPoint1 ontTp1;
- if (tp.augmentation(TerminationPoint1.class) != null) {
- ontTp1 = tp.augmentation(TerminationPoint1.class);
- } else {
- continue;
- }
- if (checkClientTp(ontTp1)) {
- LOG.info("TP {} of XPONDER {} is validated", tp.getTpId(), node.getNodeId().getValue());
- this.availableXpdrClientTps.add(tp.getTpId());
- } else {
- LOG.error("TP {} of {} does not allow lo-ODU (ODU2e or ODU0) termination creation",
- tp.getTpId().getValue(), node.getNodeId().getValue());
- }
+ default:
+ LOG.debug("unsupported ocn TP type {}", ocnTp1.getTpType());
}
}
-
- if ((StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType)
+ if (StringConstants.SERVICE_TYPE_ODU4.equals(this.otnServiceType)
|| StringConstants.SERVICE_TYPE_ODUC4.equals(this.otnServiceType)
|| StringConstants.SERVICE_TYPE_ODUC3.equals(this.otnServiceType)
- || StringConstants.SERVICE_TYPE_ODUC2.equals(this.otnServiceType))
- || ((StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType)
- || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType)
- || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))
- && ((mode.equals("AZ") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 1, 1))
+ || StringConstants.SERVICE_TYPE_ODUC2.equals(this.otnServiceType)
+ || ((StringConstants.SERVICE_TYPE_10GE.equals(this.otnServiceType)
+ || StringConstants.SERVICE_TYPE_100GE_M.equals(this.otnServiceType)
+ || StringConstants.SERVICE_TYPE_1GE.equals(this.otnServiceType))
+ && ((mode.equals("AZ") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 1, 1))
|| (mode.equals("intermediate") && checkSwPool(null, availableXpdrNWTps, 0, 2)))
- )
- || (StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType)
- && (mode.equals("AZ") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 1, 1)))
- || (StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType)
- && (mode.equals("intermediate") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 0, 2)))
- ) {
+ )
+ || (StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType)
+ && (mode.equals("AZ") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 1, 1)))
+ || (StringConstants.SERVICE_TYPE_100GE_S.equals(this.otnServiceType)
+ && (mode.equals("intermediate") && checkSwPool(availableXpdrClientTps, availableXpdrNWTps, 0, 2)))
+ ) {
this.valid = true;
} else {
this.valid = false;
netwTps.sort(Comparator.comparing(TpId::getValue));
for (TpId nwTp : netwTps) {
for (TpId clTp : clientTps) {
- @Nullable
- List<NonBlockingList> nblList = new ArrayList<>(node.augmentation(Node1.class).getSwitchingPools()
- .nonnullOduSwitchingPools().values().stream().findFirst().get().getNonBlockingList().values());
- for (NonBlockingList nbl : nblList) {
+ for (NonBlockingList nbl : new ArrayList<>(node.augmentation(Node1.class).getSwitchingPools()
+ .nonnullOduSwitchingPools().values().stream().findFirst().get()
+ .getNonBlockingList().values())) {
if (nbl.getTpList().contains(clTp) && nbl.getTpList().contains(nwTp)) {
usableXpdrClientTps.add(clTp);
usableXpdrNWTps.add(nwTp);
}
}
}
-
}
if (netwTps != null && nbClient == 0 && nbNetw == 2) {
netwTps.sort(Comparator.comparing(TpId::getValue));
- @Nullable
- List<NonBlockingList> nblList = new ArrayList<>(node.augmentation(Node1.class).getSwitchingPools()
- .nonnullOduSwitchingPools().values().stream().findFirst().get().getNonBlockingList().values());
- for (NonBlockingList nbl : nblList) {
+ for (NonBlockingList nbl : new ArrayList<>(node.augmentation(Node1.class).getSwitchingPools()
+ .nonnullOduSwitchingPools().values().stream().findFirst().get()
+ .getNonBlockingList().values())) {
for (TpId nwTp : netwTps) {
if (nbl.getTpList().contains(nwTp)) {
usableXpdrNWTps.add(nwTp);
}
private boolean checkOdtuTTPforLoOduCreation(TerminationPoint1 ontTp1, int tsNb) {
- return (ontTp1.getXpdrTpPortConnectionAttributes() != null
+ return ontTp1.getXpdrTpPortConnectionAttributes() != null
&& ontTp1.getXpdrTpPortConnectionAttributes().getTsPool() != null
&& ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool() != null
&& (ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values()
- .stream().findFirst().get().getOdtuType()
- .equals(ODTU4TsAllocated.class)
+ .stream().findFirst().get().getOdtuType()
+ .equals(ODTU4TsAllocated.class)
||
ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values()
- .stream().findFirst().get().getOdtuType()
- .equals(ODTUCnTs.class))
+ .stream().findFirst().get().getOdtuType()
+ .equals(ODTUCnTs.class))
&& !ontTp1.getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values()
- .stream().findFirst().get().getTpnPool().isEmpty()
- && (ontTp1.getXpdrTpPortConnectionAttributes().getTsPool().size() >= tsNb));
+ .stream().findFirst().get().getTpnPool()
+ .isEmpty()
+ && ontTp1.getXpdrTpPortConnectionAttributes().getTsPool().size() >= tsNb;
}
private boolean checkClientTp(TerminationPoint1 ontTp1) {
}
}
}
-
LOG.debug("validateSwitchingPoolBandwidth: No valid Switching pool for crossconnecting tp {} and {}",
tp1.getTpId(), tp2.getTpId());
return false;
-
}
public void validateIntermediateSwitch() {
}
// Validate switch for use as an intermediate XPONDER on the path
initXndrTps("intermediate");
- if (!this.valid) {
- LOG.debug("validateIntermediateSwitch: Switch unusable for transit == {}", nodeId.getValue());
- } else {
+ if (this.valid) {
LOG.info("validateIntermediateSwitch: Switch usable for transit == {}", nodeId.getValue());
+ } else {
+ LOG.debug("validateIntermediateSwitch: Switch unusable for transit == {}", nodeId.getValue());
}
}
public void checkAvailableTribPort() {
- List<TerminationPoint> networkTpList = node.augmentation(
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
+ List<TerminationPoint> networkTpList = node
+ .augmentation(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
.getTerminationPoint().values().stream()
.filter(type -> type
.augmentation(
org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1.class)
- .getTpType().equals(OpenroadmTpType.XPONDERNETWORK))
+ .getTpType()
+ .equals(OpenroadmTpType.XPONDERNETWORK))
.collect(Collectors.toList());
-
for (TerminationPoint tp : networkTpList) {
if (tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes() != null
&& tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool() != null
.values().stream().findFirst().get().getOdtuType().equals(ODTU4TsAllocated.class)
|| tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool()
.values().stream().findFirst().get().getOdtuType().equals(ODTUCnTs.class))) {
- @Nullable
- List<Uint16> tpnPool = tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes()
- .getOdtuTpnPool().values().stream().findFirst().get().getTpnPool();
+ List<Uint16> tpnPool =
+ tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getOdtuTpnPool()
+ .values().stream().findFirst().get().getTpnPool();
if (tpnPool != null) {
tpAvailableTribPort.put(tp.getTpId().getValue(), tpnPool);
}
org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1.class)
.getTpType().equals(OpenroadmTpType.XPONDERNETWORK))
.collect(Collectors.toList());
-
for (TerminationPoint tp : networkTpList) {
if (tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes() != null
- && tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getTsPool() != null) {
- @Nullable
- List<Uint16> tsPool = tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes()
- .getTsPool();
+ && tp.augmentation(TerminationPoint1.class)
+ .getXpdrTpPortConnectionAttributes().getTsPool() != null) {
+ List<Uint16> tsPool =
+ tp.augmentation(TerminationPoint1.class).getXpdrTpPortConnectionAttributes().getTsPool();
tpAvailableTribSlot.put(tp.getTpId().getValue(), tsPool);
}
}
}
public boolean isValid() {
- if ((node == null) || (nodeId == null) || (nodeType == null) || (this.getSupNetworkNodeId() == null)
- || (this.getSupClliNodeId() == null)) {
+ if (node == null || nodeId == null || nodeType == null || this.getSupNetworkNodeId() == null
+ || this.getSupClliNodeId() == null) {
LOG.error("PceNode: one of parameters is not populated : nodeId, node type, supporting nodeId");
valid = false;
}
);
return false;
}
-
if (!isNodeTypeValid(pceOtnNode)) {
LOG.error("PceOtnNode node type: node type isn't one of MUXPDR or SWITCH or TPDR");
return false;
}
-
return isOtnServiceTypeValid(pceOtnNode);
}
if (pceOtnNode.modeType == null) {
return false;
}
-
//Todo refactor Strings (mode and otnServiceType ) to enums
- if ((pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_ODU4)
- && pceOtnNode.modeType.equals("AZ"))) {
+ if (pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_ODU4)
+ && pceOtnNode.modeType.equals("AZ")) {
return true;
}
-
- return ((pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_10GE)
+ return (pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_10GE)
|| pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_1GE)
|| pceOtnNode.otnServiceType.equals(StringConstants.SERVICE_TYPE_100GE_S))
- && (isAz(pceOtnNode) || isIntermediate(pceOtnNode)));
+ && (isAz(pceOtnNode) || isIntermediate(pceOtnNode));
}
private boolean isIntermediate(PceOtnNode pceOtnNode) {
}
private boolean isNodeTypeValid(final PceOtnNode pceOtnNode) {
- return (pceOtnNode.nodeType == OpenroadmNodeType.MUXPDR)
- || (pceOtnNode.nodeType == OpenroadmNodeType.SWITCH)
- || (pceOtnNode.nodeType == OpenroadmNodeType.TPDR);
+ return pceOtnNode.nodeType == OpenroadmNodeType.MUXPDR
+ || pceOtnNode.nodeType == OpenroadmNodeType.SWITCH
+ || pceOtnNode.nodeType == OpenroadmNodeType.TPDR;
}
@Override
def test_05_service_path_create(self):
response = test_utils_rfc8040.device_renderer_service_path_request(
- {'input': {
+ {
'service-name': 'service_test',
'wave-number': '7',
'modulation-format': 'dp-qpsk',
'max-freq': 195.825,
'lower-spectral-slot-number': 713,
'higher-spectral-slot-number': 720
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Interfaces created successfully for nodes: ROADMA01', response['output']['result'])
def test_14_service_path_delete(self):
response = test_utils_rfc8040.device_renderer_service_path_request(
- {'input': {
+ {
'service-name': 'service_test',
'wave-number': '7',
'modulation-format': 'dp-qpsk',
'max-freq': 195.825,
'lower-spectral-slot-number': 713,
'higher-spectral-slot-number': 720
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertDictEqual(response['output'], {'result': 'Request processed', 'success': True})
# Renderer interface creations
def test_07_device_renderer(self):
response = test_utils_rfc8040.device_renderer_service_path_request(
- {'input': {
+ {
'modulation-format': 'dp-qpsk',
'operation': 'create',
'service-name': 'testNMC-MC',
'max-freq': 196.09375,
'lower-spectral-slot-number': 749,
'higher-spectral-slot-number': 763
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Interfaces created successfully for nodes: ', response['output']['result'])
time.sleep(10)
def test_05_service_path_create(self):
response = test_utils_rfc8040.device_renderer_service_path_request(
- {'input': {
+ {
'service-name': 'service_test',
'wave-number': '7',
'modulation-format': 'dp-qpsk',
'max-freq': 195.825,
'lower-spectral-slot-number': 713,
'higher-spectral-slot-number': 720
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Interfaces created successfully for nodes: ROADM-A1', response['output']['result'])
def test_17_service_path_delete(self):
response = test_utils_rfc8040.device_renderer_service_path_request(
- {'input': {
+ {
'service-name': 'service_test',
'wave-number': '7',
'modulation-format': 'dp-qpsk',
'max-freq': 195.825,
'lower-spectral-slot-number': 713,
'higher-spectral-slot-number': 720
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertDictEqual(response['output'], {'result': 'Request processed', 'success': True})
def test_04_service_path_create_OCH_OTU4(self):
response = test_utils_rfc8040.device_renderer_service_path_request(
- {'input': {
+ {
'service-name': 'service_test',
'wave-number': '7',
'modulation-format': 'dp-qpsk',
'max-freq': 196.125,
'lower-spectral-slot-number': 761,
'higher-spectral-slot-number': 768
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Interfaces created successfully for nodes: ', response['output']['result'])
self.assertTrue(response['output']['success'])
def test_08_otn_service_path_create_ODU4(self):
response = test_utils_rfc8040.device_renderer_otn_service_path_request(
- {'input': {
+ {
'service-name': 'service_ODU4',
'operation': 'create',
'service-rate': '100',
'service-format': 'ODU',
'nodes': [{'node-id': 'SPDR-SA1', 'network-tp': 'XPDR1-NETWORK1'}]
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Otn Service path was set up successfully for node :SPDR-SA1', response['output']['result'])
self.assertTrue(response['output']['success'])
def test_11_otn_service_path_create_10GE(self):
response = test_utils_rfc8040.device_renderer_otn_service_path_request(
- {'input': {
+ {
'service-name': 'service1',
'operation': 'create',
'service-rate': '10',
'ethernet-encoding': 'eth encode',
'trib-slot': ['1'],
'trib-port-number': '1'
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Otn Service path was set up successfully for node :SPDR-SA1', response['output']['result'])
self.assertTrue(response['output']['success'])
def test_16_otn_service_path_delete_10GE(self):
response = test_utils_rfc8040.device_renderer_otn_service_path_request(
- {'input': {
+ {
'service-name': 'service1',
'operation': 'delete',
'service-rate': '10',
'ethernet-encoding': 'eth encode',
'trib-slot': ['1'],
'trib-port-number': '1'
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Request processed', response['output']['result'])
self.assertTrue(response['output']['success'])
def test_21_otn_service_path_delete_ODU4(self):
response = test_utils_rfc8040.device_renderer_otn_service_path_request(
- {'input': {
+ {
'service-name': 'service_ODU4',
'operation': 'delete',
'service-rate': '100',
'service-format': 'ODU',
'nodes': [{'node-id': 'SPDR-SA1', 'network-tp': 'XPDR1-NETWORK1'}]
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Request processed', response['output']['result'])
self.assertTrue(response['output']['success'])
def test_23_service_path_delete_OCH_OTU4(self):
response = test_utils_rfc8040.device_renderer_service_path_request(
- {'input': {
+ {
'service-name': 'service_test',
'wave-number': '7',
'modulation-format': 'dp-qpsk',
'max-freq': 196.125,
'lower-spectral-slot-number': 761,
'higher-spectral-slot-number': 768
- }})
+ })
self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Request processed', response['output']['result'])
self.assertTrue(response['output']['success'])
sys.path.append('transportpce_tests/common/')
# pylint: disable=wrong-import-position
# pylint: disable=import-error
-import test_utils # nopep8
+import test_utils_rfc8040 # nopep8
class TransportPCEtesting(unittest.TestCase):
@classmethod
def setUpClass(cls):
- cls.processes = test_utils.start_tpce()
- cls.processes = test_utils.start_sims([('spdra', cls.NODE_VERSION),
- ('spdrc', cls.NODE_VERSION)])
+ cls.processes = test_utils_rfc8040.start_tpce()
+ cls.processes = test_utils_rfc8040.start_sims([('spdra', cls.NODE_VERSION),
+ ('spdrc', cls.NODE_VERSION)])
@classmethod
def tearDownClass(cls):
# pylint: disable=not-an-iterable
for process in cls.processes:
- test_utils.shutdown_process(process)
+ test_utils_rfc8040.shutdown_process(process)
print("all processes killed")
def setUp(self):
time.sleep(5)
def test_01_connect_SPDR_SA1(self):
- response = test_utils.mount_device("SPDR-SA1", ('spdra', self.NODE_VERSION))
+ response = test_utils_rfc8040.mount_device("SPDR-SA1", ('spdra', self.NODE_VERSION))
self.assertEqual(response.status_code, requests.codes.created,
- test_utils.CODE_SHOULD_BE_201)
+ test_utils_rfc8040.CODE_SHOULD_BE_201)
time.sleep(10)
- response = test_utils.get_netconf_oper_request("SPDR-SA1")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
- self.assertEqual(
- res['node'][0]['netconf-node-topology:connection-status'],
- 'connected')
+ response = test_utils_rfc8040.check_device_connection("SPDR-SA1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertEqual(response['connection-status'], 'connected')
def test_02_connect_SPDR_SC1(self):
- response = test_utils.mount_device("SPDR-SC1", ('spdrc', self.NODE_VERSION))
+ response = test_utils_rfc8040.mount_device("SPDR-SC1", ('spdrc', self.NODE_VERSION))
self.assertEqual(response.status_code, requests.codes.created,
- test_utils.CODE_SHOULD_BE_201)
+ test_utils_rfc8040.CODE_SHOULD_BE_201)
time.sleep(10)
- response = test_utils.get_netconf_oper_request("SPDR-SC1")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
- self.assertEqual(
- res['node'][0]['netconf-node-topology:connection-status'],
- 'connected')
+ response = test_utils_rfc8040.check_device_connection("SPDR-SC1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertEqual(response['connection-status'], 'connected')
def test_03_service_create_OTU4(self):
- url = "{}/operations/transportpce-renderer:service-implementation-request"
- data = {
- "transportpce-renderer:input": {
- "transportpce-renderer:service-name": "SPDRA-SPDRC-OTU4-ODU4",
- "transportpce-renderer:connection-type": "infrastructure",
- "transportpce-renderer:service-handler-header": {
- "transportpce-renderer:request-id": "abcd12-efgh34"
+ response = test_utils_rfc8040.device_renderer_service_implementation_request(
+ {
+ 'service-name': 'SPDRA-SPDRC-OTU4-ODU4',
+ 'connection-type': 'infrastructure',
+ 'service-handler-header': {
+ 'request-id': 'abcd12-efgh34'
},
- "transportpce-renderer:service-a-end": {
- "transportpce-renderer:service-format": "OTU",
- "transportpce-renderer:otu-service-rate": "org-openroadm-otn-common-types:OTU4",
- "transportpce-renderer:clli": "nodeSA",
- "transportpce-renderer:node-id": "SPDR-SA1"
+ 'service-a-end': {
+ 'service-format': 'OTU',
+ 'otu-service-rate': 'org-openroadm-otn-common-types:OTU4',
+ 'clli': 'nodeSA',
+ 'node-id': 'SPDR-SA1'
},
- "transportpce-renderer:service-z-end": {
- "transportpce-renderer:service-format": "OTU",
- "transportpce-renderer:otu-service-rate": "org-openroadm-otn-common-types:OTU4",
- "transportpce-renderer:clli": "nodeSC",
- "transportpce-renderer:node-id": "SPDR-SC1"
+ 'service-z-end': {
+ 'service-format': 'OTU',
+ 'otu-service-rate': 'org-openroadm-otn-common-types:OTU4',
+ 'clli': 'nodeSC',
+ 'node-id': 'SPDR-SC1'
},
- "transportpce-renderer:path-description": {
- "aToZ-direction": {
- "rate": 100,
- "transportpce-renderer:modulation-format": "dp-qpsk",
- "aToZ-wavelength-number": 1,
- "aToZ": [
+ 'path-description': {
+ 'aToZ-direction': {
+ 'rate': 100,
+ 'modulation-format': 'dp-qpsk',
+ 'aToZ-wavelength-number': 1,
+ 'aToZ': [
{
- "id": "0",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": ""
+ 'id': '0',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': ''
}
},
{
- "id": "1",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '1',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "2",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '2',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "3",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": ""
+ 'id': '3',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': ''
}
}
],
- "transportpce-renderer:aToZ-min-frequency": 196.075,
- "transportpce-renderer:aToZ-max-frequency": 196.125
+ 'aToZ-min-frequency': 196.075,
+ 'aToZ-max-frequency': 196.125
},
- "transportpce-renderer:zToA-direction": {
- "transportpce-renderer:zToA-wavelength-number": "1",
- "transportpce-renderer:rate": "100",
- "transportpce-renderer:modulation-format": "dp-qpsk",
- "zToA": [
+ 'zToA-direction': {
+ 'zToA-wavelength-number': '1',
+ 'rate': '100',
+ 'modulation-format': 'dp-qpsk',
+ 'zToA': [
{
- "id": "0",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": ""
+ 'id': '0',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': ''
}
},
{
- "id": "1",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '1',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "2",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '2',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "3",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": ""
+ 'id': '3',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': ''
}
}
],
- "transportpce-renderer:zToA-min-frequency": 196.075,
- "transportpce-renderer:zToA-max-frequency": 196.125
+ 'zToA-min-frequency': 196.075,
+ 'zToA-max-frequency': 196.125
}
}
- }
- }
- response = test_utils.post_request(url, data)
- time.sleep(3)
- print(response.json())
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Operation Successful',
- res["output"]["configuration-response-common"]["response-message"])
+ response['output']['configuration-response-common']['response-message'])
# Test OCH-OTU interfaces on SPDR-A1
def test_04_check_interface_och(self):
- response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-NETWORK1-761:768")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request("SPDR-SA1", "interface", "XPDR1-NETWORK1-761:768")
+ self.assertEqual(response['status_code'], requests.codes.ok)
self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-761:768',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'type': 'org-openroadm-interfaces:opticalChannel',
'supporting-port': 'CP1-CFP0-P1'
- }, **res['interface'][0]),
- res['interface'][0])
-
- self.assertDictEqual(
- {'frequency': 196.1, 'rate': 'org-openroadm-common-types:R100G',
- 'transmit-power': -5, 'modulation-format': 'dp-qpsk'},
- res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
+ }, **response['interface'][0]),
+ response['interface'][0])
+ self.assertIn(
+ response['interface'][0]['org-openroadm-optical-channel-interfaces:och'],
+ [{'frequency': '196.1000', 'rate': 'org-openroadm-common-types:R100G',
+ 'transmit-power': '-5', 'modulation-format': 'dp-qpsk'},
+ {'frequency': 196.1, 'rate': 'org-openroadm-common-types:R100G',
+ 'transmit-power': -5, 'modulation-format': 'dp-qpsk'}])
def test_05_check_interface_OTU(self):
- response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-NETWORK1-OTU")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request("SPDR-SA1", "interface", "XPDR1-NETWORK1-OTU")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-NETWORK1-OTU',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'rate': 'org-openroadm-otn-common-types:OTU4',
'fec': 'scfec'
}
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
-
- self.assertDictEqual(input_dict_2,
- res['interface'][0]
- ['org-openroadm-otn-otu-interfaces:otu'])
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2, **response['interface'][0]['org-openroadm-otn-otu-interfaces:otu']),
+ response['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
# Test OCH-OTU interfaces on SPDR-C1
def test_06_check_interface_och(self):
- response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-NETWORK1-761:768")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request("SPDR-SC1", "interface", "XPDR1-NETWORK1-761:768")
+ self.assertEqual(response['status_code'], requests.codes.ok)
self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-1',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'type': 'org-openroadm-interfaces:opticalChannel',
'supporting-port': 'CP1-CFP0-P1'
- }, **res['interface'][0]),
- res['interface'][0])
-
- self.assertDictEqual(
- {'frequency': 196.1, 'rate': 'org-openroadm-common-types:R100G',
- 'transmit-power': -5, 'modulation-format': 'dp-qpsk'},
- res['interface'][0]['org-openroadm-optical-channel-interfaces:och'])
+ }, **response['interface'][0]),
+ response['interface'][0])
+ self.assertIn(
+ response['interface'][0]['org-openroadm-optical-channel-interfaces:och'],
+ [{'frequency': '196.1000', 'rate': 'org-openroadm-common-types:R100G',
+ 'transmit-power': '-5', 'modulation-format': 'dp-qpsk'},
+ {'frequency': 196.1, 'rate': 'org-openroadm-common-types:R100G',
+ 'transmit-power': -5, 'modulation-format': 'dp-qpsk'}])
def test_07_check_interface_OTU(self):
- response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-NETWORK1-OTU")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request("SPDR-SC1", "interface", "XPDR1-NETWORK1-OTU")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-NETWORK1-OTU',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'rate': 'org-openroadm-otn-common-types:OTU4',
'fec': 'scfec'
}
-
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
-
- self.assertDictEqual(input_dict_2,
- res['interface'][0]
- ['org-openroadm-otn-otu-interfaces:otu'])
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2, **response['interface'][0]['org-openroadm-otn-otu-interfaces:otu']),
+ response['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
# Test creation of ODU4 service
def test_08_service_create_ODU4(self):
- url = "{}/operations/transportpce-renderer:service-implementation-request"
-
- data = {
- "transportpce-renderer:input": {
- "transportpce-renderer:service-name":
- "SPDRA-SPDRC-OTU4-ODU4",
- "transportpce-renderer:connection-type": "infrastructure",
- "transportpce-renderer:service-handler-header": {
- "transportpce-renderer:request-id": "abcd12-efgh34"
+ response = test_utils_rfc8040.device_renderer_service_implementation_request(
+ {
+ 'service-name':
+ 'SPDRA-SPDRC-OTU4-ODU4',
+ 'connection-type': 'infrastructure',
+ 'service-handler-header': {
+ 'request-id': 'abcd12-efgh34'
},
- "transportpce-renderer:service-a-end": {
- "transportpce-renderer:service-format": "ODU",
- "transportpce-renderer:odu-service-rate":
- "org-openroadm-otn-common-types:ODU4",
- "transportpce-renderer:clli": "nodeSA",
- "transportpce-renderer:node-id": "SPDR-SA1"
+ 'service-a-end': {
+ 'service-format': 'ODU',
+ 'odu-service-rate':
+ 'org-openroadm-otn-common-types:ODU4',
+ 'clli': 'nodeSA',
+ 'node-id': 'SPDR-SA1'
},
- "transportpce-renderer:service-z-end": {
- "transportpce-renderer:service-format": "ODU",
- "transportpce-renderer:odu-service-rate":
- "org-openroadm-otn-common-types:ODU4",
- "transportpce-renderer:clli": "nodeSC",
- "transportpce-renderer:node-id": "SPDR-SC1"
+ 'service-z-end': {
+ 'service-format': 'ODU',
+ 'odu-service-rate':
+ 'org-openroadm-otn-common-types:ODU4',
+ 'clli': 'nodeSC',
+ 'node-id': 'SPDR-SC1'
},
- "transportpce-renderer:path-description": {
- "aToZ-direction": {
- "rate": 100,
- "aToZ": [
+ 'path-description': {
+ 'aToZ-direction': {
+ 'rate': 100,
+ 'aToZ': [
{
- "id": "0",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": ""
+ 'id': '0',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': ''
}
},
{
- "id": "1",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '1',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "2",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '2',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "3",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": ""
+ 'id': '3',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': ''
}
}
]
},
- "transportpce-renderer:zToA-direction": {
- "transportpce-renderer:rate": "100",
- "zToA": [
+ 'zToA-direction': {
+ 'rate': '100',
+ 'zToA': [
{
- "id": "0",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": ""
+ 'id': '0',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': ''
}
},
{
- "id": "1",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '1',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "2",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '2',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "3",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": ""
+ 'id': '3',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': ''
}
}
]
}
}
- }
- }
- response = test_utils.post_request(url, data)
- time.sleep(3)
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Operation Successful',
- res["output"]["configuration-response-common"]
- ["response-message"])
+ response['output']['configuration-response-common']['response-message'])
# Test ODU4 interfaces on SPDR-A1 and SPDR-C1
def test_09_check_interface_ODU4(self):
- response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-NETWORK1-ODU4")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request("SPDR-SA1", "interface", "XPDR1-NETWORK1-ODU4")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU4',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'tx-dapi': 'AMf1n5hK6Xkk',
'tx-sapi': 'H/OelLynehI='}
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
- self.assertDictEqual(dict(res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'],
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'],
**input_dict_2),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']
)
self.assertDictEqual(
{'payload-type': '21', 'exp-payload-type': '21'},
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
def test_10_check_interface_ODU4(self):
- response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-NETWORK1-ODU4")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request("SPDR-SC1", "interface", "XPDR1-NETWORK1-ODU4")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU4',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'expected-sapi': 'H/OelLynehI=',
'expected-dapi': 'AMf1n5hK6Xkk'
}
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
- self.assertDictEqual(dict(res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'],
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'],
**input_dict_2),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']
)
self.assertDictEqual(
{'payload-type': '21', 'exp-payload-type': '21'},
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
# Test creation of 10G service
def test_11_service_create_10GE(self):
- url = "{}/operations/transportpce-renderer:service-implementation-request"
-
- data = {
- "transportpce-renderer:input": {
- "transportpce-renderer:service-name": "SPDRA-SPDRC-10G",
- "transportpce-renderer:connection-type": "service",
- "transportpce-renderer:service-handler-header": {
- "transportpce-renderer:request-id": "abcd12-efgh34"
+ response = test_utils_rfc8040.device_renderer_service_implementation_request(
+ {
+ 'service-name': 'SPDRA-SPDRC-10G',
+ 'connection-type': 'service',
+ 'service-handler-header': {
+ 'request-id': 'abcd12-efgh34'
},
- "transportpce-renderer:service-a-end": {
- "transportpce-renderer:service-format": "Ethernet",
- "transportpce-renderer:service-rate": "10",
- "transportpce-renderer:clli": "nodeSA",
- "transportpce-renderer:node-id": "SPDR-SA1"
+ 'service-a-end': {
+ 'service-format': 'Ethernet',
+ 'service-rate': '10',
+ 'clli': 'nodeSA',
+ 'node-id': 'SPDR-SA1'
},
- "transportpce-renderer:service-z-end": {
- "transportpce-renderer:service-format": "Ethernet",
- "transportpce-renderer:service-rate": "10",
- "transportpce-renderer:clli": "nodeSC",
- "transportpce-renderer:node-id": "SPDR-SC1"
+ 'service-z-end': {
+ 'service-format': 'Ethernet',
+ 'service-rate': '10',
+ 'clli': 'nodeSC',
+ 'node-id': 'SPDR-SC1'
},
- "transportpce-renderer:path-description": {
- "aToZ-direction": {
- "rate": 10,
- "min-trib-slot": "1.1",
- "max-trib-slot": "1.8",
- "aToZ": [
+ 'path-description': {
+ 'aToZ-direction': {
+ 'rate': 10,
+ 'min-trib-slot': '1.1',
+ 'max-trib-slot': '1.8',
+ 'aToZ': [
{
- "id": "0",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": "XPDR1-CLIENT1"
+ 'id': '0',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': 'XPDR1-CLIENT1'
}
},
{
- "id": "1",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '1',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "2",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '2',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "3",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": "XPDR1-CLIENT1"
+ 'id': '3',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': 'XPDR1-CLIENT1'
}
}
]
},
- "transportpce-renderer:zToA-direction": {
- "rate": "10",
- "min-trib-slot": "1.1",
- "max-trib-slot": "1.8",
- "zToA": [
+ 'zToA-direction': {
+ 'rate': '10',
+ 'min-trib-slot': '1.1',
+ 'max-trib-slot': '1.8',
+ 'zToA': [
{
- "id": "0",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": "XPDR1-CLIENT1"
+ 'id': '0',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': 'XPDR1-CLIENT1'
}
},
{
- "id": "1",
- "resource": {
- "tp-node-id": "SPDR-SC1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '1',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SC1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "2",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": "XPDR1-NETWORK1"
+ 'id': '2',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': 'XPDR1-NETWORK1'
}
},
{
- "id": "3",
- "resource": {
- "tp-node-id": "SPDR-SA1-XPDR1",
- "tp-id": "XPDR1-CLIENT1"
+ 'id': '3',
+ 'resource': {
+ 'tp-node-id': 'SPDR-SA1-XPDR1',
+ 'tp-id': 'XPDR1-CLIENT1'
}
}
]
}
}
- }
- }
-
- response = test_utils.post_request(url, data)
- time.sleep(3)
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
self.assertIn('Operation Successful',
- res["output"]["configuration-response-common"]
- ["response-message"])
+ response['output']['configuration-response-common']['response-message'])
# Test the interfaces on SPDR-A1
def test_12_check_interface_10GE_CLIENT(self):
- response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-CLIENT1-ETHERNET10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request("SPDR-SA1", "interface", "XPDR1-CLIENT1-ETHERNET10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict = {'name': 'XPDR1-CLIENT1-ETHERNET10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'type': 'org-openroadm-interfaces:ethernetCsmacd',
'supporting-port': 'CP1-SFP4-P1'
}
- self.assertDictEqual(dict(input_dict, **res['interface'][0]),
- res['interface'][0])
- self.assertDictEqual(
- {'speed': 10000},
- res['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
+ self.assertDictEqual(dict(input_dict, **response['interface'][0]),
+ response['interface'][0])
+ self.assertEqual(response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet']['speed'], 10000)
def test_13_check_interface_ODU2E_CLIENT(self):
- response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "SPDR-SA1", "interface", "XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'rate': 'org-openroadm-otn-common-types:ODU2e',
'monitoring-mode': 'terminated'}
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
self.assertDictEqual(dict(input_dict_2,
- **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
self.assertDictEqual(
{'payload-type': '03', 'exp-payload-type': '03'},
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
def test_14_check_ODU2E_connection(self):
- response = test_utils.check_netconf_node_request(
+ response = test_utils_rfc8040.check_node_attribute_request(
"SPDR-SA1",
- "odu-connection/XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G-x-XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ "odu-connection", "XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G-x-XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {
'connection-name':
'XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G-x-XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G',
'direction': 'bidirectional'
}
-
- self.assertDictEqual(dict(input_dict_1, **res['odu-connection'][0]),
- res['odu-connection'][0])
+ self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
+ response['odu-connection'][0])
self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G'},
- res['odu-connection'][0]['destination'])
+ response['odu-connection'][0]['destination'])
self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G'},
- res['odu-connection'][0]['source'])
+ response['odu-connection'][0]['source'])
def test_15_check_interface_ODU2E_NETWORK(self):
- response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "SPDR-SA1", "interface", "XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'odu-function': 'org-openroadm-otn-common-types:ODU-CTP',
'rate': 'org-openroadm-otn-common-types:ODU2e',
'monitoring-mode': 'monitored'}
-
input_dict_3 = {'trib-port-number': 1}
-
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
self.assertDictEqual(dict(input_dict_2,
- **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
self.assertDictEqual(dict(input_dict_3,
- **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation']),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation'])
self.assertIn(1,
- res['interface'][0][
+ response['interface'][0][
'org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation']['trib-slots'])
# Test the interfaces on SPDR-C1
def test_16_check_interface_ODU2E_NETWORK(self):
- response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "SPDR-SC1", "interface", "XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
'odu-function': 'org-openroadm-otn-common-types:ODU-CTP',
'rate': 'org-openroadm-otn-common-types:ODU2e',
'monitoring-mode': 'monitored'}
-
input_dict_3 = {'trib-port-number': 1}
-
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
self.assertDictEqual(dict(input_dict_2,
- **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
self.assertDictEqual(dict(input_dict_3,
- **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation']),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation'])
self.assertIn(1,
- res['interface'][0][
+ response['interface'][0][
'org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation']['trib-slots'])
def test_17_check_interface_10GE_CLIENT(self):
- response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-CLIENT1-ETHERNET10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request("SPDR-SC1", "interface", "XPDR1-CLIENT1-ETHERNET10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict = {'name': 'XPDR1-CLIENT1-ETHERNET10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'type': 'org-openroadm-interfaces:ethernetCsmacd',
'supporting-port': 'CP1-SFP4-P1'
}
- self.assertDictEqual(dict(input_dict, **res['interface'][0]),
- res['interface'][0])
- self.assertDictEqual(
- {'speed': 10000},
- res['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
+ self.assertDictEqual(dict(input_dict, **response['interface'][0]),
+ response['interface'][0])
+ self.assertEqual(response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet']['speed'], 10000)
def test_18_check_interface_ODU2E_CLIENT(self):
- response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "SPDR-SC1", "interface", "XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-SFP4',
'odu-function': 'org-openroadm-otn-common-types:ODU-TTP-CTP',
'rate': 'org-openroadm-otn-common-types:ODU2e',
'monitoring-mode': 'terminated'}
-
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
self.assertDictEqual(dict(input_dict_2,
- **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
self.assertDictEqual(
{'payload-type': '03', 'exp-payload-type': '03'},
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
def test_19_check_ODU2E_connection(self):
- response = test_utils.check_netconf_node_request(
+ response = test_utils_rfc8040.check_node_attribute_request(
"SPDR-SC1",
- "odu-connection/XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G-x-XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ "odu-connection", "XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G-x-XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {
'connection-name':
'XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G-x-XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G',
'direction': 'bidirectional'
}
-
- self.assertDictEqual(dict(input_dict_1, **res['odu-connection'][0]),
- res['odu-connection'][0])
+ self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
+ response['odu-connection'][0])
self.assertDictEqual({'dst-if': 'XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G'},
- res['odu-connection'][0]['destination'])
+ response['odu-connection'][0]['destination'])
self.assertDictEqual({'src-if': 'XPDR1-CLIENT1-ODU2e-SPDRA-SPDRC-10G'},
- res['odu-connection'][0]['source'])
+ response['odu-connection'][0]['source'])
def test_20_check_interface_ODU2E_NETWORK(self):
- response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
- self.assertEqual(response.status_code, requests.codes.ok)
- res = response.json()
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "SPDR-SC1", "interface", "XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
input_dict_1 = {'name': 'XPDR1-NETWORK1-ODU2e-SPDRA-SPDRC-10G',
'administrative-state': 'inService',
'supporting-circuit-pack-name': 'CP1-CFP0',
input_dict_3 = {'trib-port-number': 1}
- self.assertDictEqual(dict(input_dict_1, **res['interface'][0]),
- res['interface'][0])
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
self.assertDictEqual(dict(input_dict_2,
- **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
self.assertDictEqual(dict(input_dict_3,
- **res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation']),
- res['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation'])
self.assertIn(1,
- res['interface'][0][
+ response['interface'][0][
'org-openroadm-otn-odu-interfaces:odu'][
'parent-odu-allocation']['trib-slots'])
# TODO: Delete interfaces (SPDR-A1, SPDR-C1)
def test_21_disconnect_SPDR_SA1(self):
- response = test_utils.unmount_device("SPDR-SA1")
- self.assertEqual(response.status_code, requests.codes.ok,
- test_utils.CODE_SHOULD_BE_200)
+ response = test_utils_rfc8040.unmount_device("SPDR-SA1")
+ self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
def test_22_disconnect_SPDR_SC1(self):
- response = test_utils.unmount_device("SPDR-SC1")
- self.assertEqual(response.status_code, requests.codes.ok,
- test_utils.CODE_SHOULD_BE_200)
+ response = test_utils_rfc8040.unmount_device("SPDR-SC1")
+ self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
if __name__ == "__main__":
--- /dev/null
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2022 AT&T, Inc. and others. All rights reserved.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# pylint: disable=no-member
+# pylint: disable=too-many-public-methods
+
+import unittest
+import time
+import requests
+# pylint: disable=wrong-import-order
+import sys
+sys.path.append('transportpce_tests/common')
+# pylint: disable=wrong-import-position
+# pylint: disable=import-error
+import test_utils_rfc8040 # nopep8
+
+
+class TransportPCE400GPortMappingTesting(unittest.TestCase):
+
+ processes = None
+ NETWORK2_CHECK_DICT = {"logical-connection-point": "XPDR2-NETWORK1",
+ "supporting-port": "L1",
+ "supported-interface-capability": [
+ "org-openroadm-port-types:if-otsi-otsigroup"
+ ],
+ "port-direction": "bidirectional",
+ "port-qual": "switch-network",
+ "supporting-circuit-pack-name": "1/2/2-PLUG-NET",
+ "xponder-type": "mpdr",
+ 'lcp-hash-val': 'LY9PxYJqUbw=',
+ 'port-admin-state': 'InService',
+ 'port-oper-state': 'InService'}
+ NODE_VERSION = '7.1'
+
+ @classmethod
+ def setUpClass(cls):
+ cls.processes = test_utils_rfc8040.start_tpce()
+ cls.processes = test_utils_rfc8040.start_sims([('xpdra2', cls.NODE_VERSION)])
+
+ @classmethod
+ def tearDownClass(cls):
+ # pylint: disable=not-an-iterable
+ for process in cls.processes:
+ test_utils_rfc8040.shutdown_process(process)
+ print("all processes killed")
+
+ def setUp(self):
+ # pylint: disable=consider-using-f-string
+ print("execution of {}".format(self.id().split(".")[-1]))
+ time.sleep(10)
+
+ def test_01_xpdr_device_connection(self):
+ response = test_utils_rfc8040.mount_device("XPDR-A2",
+ ('xpdra2', self.NODE_VERSION))
+ self.assertEqual(response.status_code, requests.codes.created,
+ test_utils_rfc8040.CODE_SHOULD_BE_201)
+
+ # Check if the node appears in the ietf-network topology
+ # this test has been removed, since it already exists in port-mapping
+ # 1a) create a OTUC2 device renderer
+ def test_02_service_path_create_otuc2(self):
+ response = test_utils_rfc8040.device_renderer_service_path_request(
+ {
+ 'service-name': 'service_OTUC2',
+ 'wave-number': '0',
+ 'modulation-format': 'dp-qpsk',
+ 'operation': 'create',
+ 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}],
+ 'center-freq': 196.1,
+ 'nmc-width': 75,
+ 'min-freq': 196.0375,
+ 'max-freq': 196.125,
+ 'lower-spectral-slot-number': 755,
+ 'higher-spectral-slot-number': 768
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Interfaces created successfully for nodes: ', response['output']['result'])
+ self.assertIn(
+ {'node-id': 'XPDR-A2',
+ 'otu-interface-id': ['XPDR2-NETWORK1-OTUC2'],
+ 'och-interface-id': ['XPDR2-NETWORK1-OTSIGROUP-200G']}, response['output']['node-interface'])
+
+ def test_03_get_portmapping_network1(self):
+ response = test_utils_rfc8040.portmapping_request("XPDR-A2", "XPDR2-NETWORK1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.NETWORK2_CHECK_DICT["supporting-otucn"] = "XPDR2-NETWORK1-OTUC2"
+ self.assertIn(
+ self.NETWORK2_CHECK_DICT,
+ response['mapping'])
+
+ def test_04_check_interface_otsi(self):
+ # pylint: disable=line-too-long
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-755:768")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-755:768',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ 'type': 'org-openroadm-interfaces:otsi',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {
+ "frequency": 196.0812,
+ "otsi-rate": "org-openroadm-common-optical-channel-types:R200G-otsi",
+ "fec": "org-openroadm-common-types:ofec",
+ "transmit-power": -5,
+ "provision-mode": "explicit",
+ "modulation-format": "dp-qpsk"}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']),
+ response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi'])
+ self.assertDictEqual({"foic-type": "org-openroadm-common-optical-channel-types:foic2.4", "iid": [1, 2]},
+ response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']['flexo'])
+
+ def test_05_check_interface_otsig(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-OTSIGROUP-200G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-OTSIGROUP-200G',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ ['supporting-interface-list'][0]: 'XPDR2-NETWORK1-755:768',
+ 'type': 'org-openroadm-interfaces:otsi-group',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {"group-id": 1,
+ "group-rate": "org-openroadm-common-optical-channel-types:R200G-otsi"}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-otsi-group-interfaces:otsi-group']),
+ response['interface'][0]['org-openroadm-otsi-group-interfaces:otsi-group'])
+
+ def test_06_check_interface_otuc2(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-OTUC2")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-OTUC2',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ ['supporting-interface-list'][0]: 'XPDR2-NETWORK1-OTSIGROUP-200G',
+ 'type': 'org-openroadm-interfaces:otnOtu',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {"rate": "org-openroadm-otn-common-types:OTUCn",
+ "degthr-percentage": 100,
+ "tim-detect-mode": "Disabled",
+ "otucn-n-rate": 2,
+ "degm-intervals": 2}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-otn-otu-interfaces:otu']),
+ response['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
+
+ # 1b) create a ODUC2 device renderer
+ def test_07_otn_service_path_create_oduc2(self):
+ response = test_utils_rfc8040.device_renderer_otn_service_path_request(
+ {
+ 'service-name': 'service_ODUC2',
+ 'operation': 'create',
+ 'service-rate': '200',
+ 'service-format': 'ODU',
+ 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}]
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Otn Service path was set up successfully for node :XPDR-A2', response['output']['result'])
+ self.assertIn(
+ {'node-id': 'XPDR-A2',
+ 'odu-interface-id': ['XPDR2-NETWORK1-ODUC2']}, response['output']['node-interface'])
+
+ def test_08_get_portmapping_network1(self):
+ response = test_utils_rfc8040.portmapping_request("XPDR-A2", "XPDR2-NETWORK1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.NETWORK2_CHECK_DICT["supporting-oducn"] = "XPDR2-NETWORK1-ODUC2"
+ self.assertIn(
+ self.NETWORK2_CHECK_DICT,
+ response['mapping'])
+
+ def test_09_check_interface_oduc2(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC2")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-ODUC2',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ 'supporting-interface-list': 'XPDR2-NETWORK1-OTUC2',
+ 'type': 'org-openroadm-interfaces:otnOdu',
+ 'supporting-port': 'L1'}
+
+ input_dict_2 = {'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
+ 'rate': 'org-openroadm-otn-common-types:ODUCn',
+ 'tx-sapi': 'LY9PxYJqUbw=',
+ 'tx-dapi': 'LY9PxYJqUbw=',
+ 'expected-sapi': 'LY9PxYJqUbw=',
+ 'expected-dapi': 'LY9PxYJqUbw=',
+ "degm-intervals": 2,
+ "degthr-percentage": 100,
+ "monitoring-mode": "terminated",
+ "oducn-n-rate": 2
+ }
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2, **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ self.assertDictEqual(
+ {'payload-type': '22', 'exp-payload-type': '22'},
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+
+ # 1c) create Ethernet device renderer
+ def test_10_otn_service_path_create_100ge(self):
+ response = test_utils_rfc8040.device_renderer_otn_service_path_request(
+ {
+ 'service-name': 'service_Ethernet',
+ 'operation': 'create',
+ 'service-rate': '100',
+ 'service-format': 'Ethernet',
+ 'nodes': [{'node-id': 'XPDR-A2', 'client-tp': 'XPDR2-CLIENT1', 'network-tp': 'XPDR2-NETWORK1'}],
+ 'ethernet-encoding': 'eth encode',
+ 'opucn-trib-slots': ['1.1', '1.20']
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Otn Service path was set up successfully for node :XPDR-A2', response['output']['result'])
+ self.assertEqual('XPDR-A2', response['output']['node-interface'][0]['node-id'])
+ self.assertIn('XPDR2-CLIENT1-ODU4-service_Ethernet-x-XPDR2-NETWORK1-ODU4-service_Ethernet',
+ 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-service_Ethernet',
+ response['output']['node-interface'][0]['odu-interface-id'])
+ self.assertIn('XPDR2-CLIENT1-ODU4-service_Ethernet',
+ response['output']['node-interface'][0]['odu-interface-id'])
+
+ def test_11_check_interface_100ge_client(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-CLIENT1-ETHERNET-100G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {'name': 'XPDR2-CLIENT1-ETHERNET-100G',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/1/1-PLUG-CLIENT',
+ 'type': 'org-openroadm-interfaces:ethernetCsmacd',
+ 'supporting-port': 'C1'
+ }
+ input_dict_2 = {'speed': 100000}
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet']),
+ response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
+
+ def test_12_check_interface_odu4_client(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-CLIENT1-ODU4-service_Ethernet")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ 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',
+ 'type': 'org-openroadm-interfaces:otnOdu',
+ 'supporting-port': 'C1'}
+ input_dict_2 = {
+ 'odu-function': 'org-openroadm-otn-common-types:ODU-TTP-CTP',
+ 'rate': 'org-openroadm-otn-common-types:ODU4',
+ 'monitoring-mode': 'terminated'}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ self.assertDictEqual(
+ {'payload-type': '07', 'exp-payload-type': '07'},
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+
+ def test_13_check_interface_odu4_network(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-ODU4-service_Ethernet")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ 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',
+ 'type': 'org-openroadm-interfaces:otnOdu',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {
+ 'odu-function': 'org-openroadm-otn-common-types:ODU-CTP',
+ 'rate': 'org-openroadm-otn-common-types:ODU4',
+ 'monitoring-mode': 'not-terminated'}
+ input_dict_3 = {'trib-port-number': 1}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ self.assertDictEqual(dict(input_dict_3,
+ **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+ 'parent-odu-allocation']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['parent-odu-allocation'])
+ self.assertIn('1.1', response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['parent-odu-allocation']
+ ['opucn-trib-slots'])
+ self.assertIn('1.20', response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['parent-odu-allocation']
+ ['opucn-trib-slots'])
+
+ def test_14_check_odu_connection_xpdra2(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2",
+ "odu-connection", "XPDR2-CLIENT1-ODU4-service_Ethernet-x-XPDR2-NETWORK1-ODU4-service_Ethernet")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {
+ 'connection-name':
+ 'XPDR2-CLIENT1-ODU4-service_Ethernet-x-XPDR2-NETWORK1-ODU4-service_Ethernet',
+ 'direction': 'bidirectional'
+ }
+
+ self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
+ response['odu-connection'][0])
+ self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4-service_Ethernet'},
+ response['odu-connection'][0]['destination'])
+ self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4-service_Ethernet'},
+ response['odu-connection'][0]['source'])
+
+ # 1d) Delete Ethernet device interfaces
+ def test_15_otn_service_path_delete_100ge(self):
+ response = test_utils_rfc8040.device_renderer_otn_service_path_request(
+ {
+ 'service-name': 'service_Ethernet',
+ 'operation': 'delete',
+ 'service-rate': '100',
+ 'service-format': 'Ethernet',
+ 'nodes': [{'node-id': 'XPDR-A2', 'client-tp': 'XPDR2-CLIENT1', 'network-tp': 'XPDR2-NETWORK1'}],
+ 'ethernet-encoding': 'eth encode',
+ 'trib-slot': ['1'],
+ 'trib-port-number': '1'
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Request processed', response['output']['result'])
+
+ def test_16_check_no_odu_connection(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2",
+ "odu-connection", "XPDR2-CLIENT1-ODU4-service_Ethernet-x-XPDR2-NETWORK1-ODU4-service_Ethernet")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ def test_17_check_no_interface_odu_network(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "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_rfc8040.check_node_attribute_request(
+ "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):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-CLIENT1-ETHERNET-100G")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ # 1e) Delete ODUC2 device interfaces
+ def test_20_otn_service_path_delete_oduc2(self):
+ response = test_utils_rfc8040.device_renderer_otn_service_path_request(
+ {
+ 'service-name': 'service_ODUC2',
+ 'operation': 'delete',
+ 'service-rate': '200',
+ 'service-format': 'ODU',
+ 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}]
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Request processed', response['output']['result'])
+
+ def test_21_check_no_interface_oduc2(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC2")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ # 1f) Delete OTUC2 device interfaces
+ def test_22_service_path_delete_otuc2(self):
+ response = test_utils_rfc8040.device_renderer_service_path_request(
+ {
+ 'service-name': 'service_OTUC2',
+ 'wave-number': '0',
+ 'modulation-format': 'dp-qpsk',
+ 'operation': 'delete',
+ 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}],
+ 'center-freq': 196.1,
+ 'nmc-width': 75,
+ 'min-freq': 196.0375,
+ 'max-freq': 196.125,
+ 'lower-spectral-slot-number': 755,
+ 'higher-spectral-slot-number': 768
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Request processed', response['output']['result'])
+
+ def test_23_check_no_interface_otuc2(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A1", "interface", "XPDR2-NETWORK1-OTUC2")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ def test_24_check_no_interface_otsig(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A1", "interface", "XPDR2-NETWORK1-OTSIGROUP-200G")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ def test_25_check_no_interface_otsi(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A1", "interface", "XPDR2-NETWORK1-755:768")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ # 2a) create a OTUC3 device renderer
+ def test_26_service_path_create_otuc3(self):
+ response = test_utils_rfc8040.device_renderer_service_path_request(
+ {
+ 'service-name': 'service_OTUC3',
+ 'wave-number': '0',
+ 'modulation-format': 'dp-qam8',
+ 'operation': 'create',
+ 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}],
+ 'center-freq': 196.1,
+ 'nmc-width': 75,
+ 'min-freq': 196.0375,
+ 'max-freq': 196.125,
+ 'lower-spectral-slot-number': 755,
+ 'higher-spectral-slot-number': 768
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Interfaces created successfully for nodes: ', response['output']['result'])
+ self.assertIn(
+ {'node-id': 'XPDR-A2',
+ 'otu-interface-id': ['XPDR2-NETWORK1-OTUC3'],
+ 'och-interface-id': ['XPDR2-NETWORK1-OTSIGROUP-300G']}, response['output']['node-interface'])
+
+ def test_27_get_portmapping_network1(self):
+ response = test_utils_rfc8040.portmapping_request("XPDR-A2", "XPDR2-NETWORK1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.NETWORK2_CHECK_DICT["supporting-otucn"] = "XPDR2-NETWORK1-OTUC3"
+ self.assertIn(
+ self.NETWORK2_CHECK_DICT,
+ response['mapping'])
+
+ def test_28_check_interface_otsi(self):
+ # pylint: disable=line-too-long
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-755:768")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-755:768',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ 'type': 'org-openroadm-interfaces:otsi',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {
+ "frequency": 196.0812,
+ "otsi-rate": "org-openroadm-common-optical-channel-types:R300G-otsi",
+ "fec": "org-openroadm-common-types:ofec",
+ "transmit-power": -5,
+ "provision-mode": "explicit",
+ "modulation-format": "dp-qam8"}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']),
+ response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi'])
+ self.assertDictEqual({"foic-type": "org-openroadm-common-optical-channel-types:foic3.6", "iid": [1, 2, 3]},
+ response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']['flexo'])
+
+ def test_29_check_interface_otsig(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-OTSIGROUP-300G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-OTSIGROUP-300G',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ ['supporting-interface-list'][0]: 'XPDR2-NETWORK1-755:768',
+ 'type': 'org-openroadm-interfaces:otsi-group',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {"group-id": 1,
+ "group-rate": "org-openroadm-common-optical-channel-types:R300G-otsi"}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-otsi-group-interfaces:otsi-group']),
+ response['interface'][0]['org-openroadm-otsi-group-interfaces:otsi-group'])
+
+ def test_30_check_interface_otuc3(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-OTUC3")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-OTUC3',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ ['supporting-interface-list'][0]: 'XPDR2-NETWORK1-OTSIGROUP-300G',
+ 'type': 'org-openroadm-interfaces:otnOtu',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {"rate": "org-openroadm-otn-common-types:OTUCn",
+ "degthr-percentage": 100,
+ "tim-detect-mode": "Disabled",
+ "otucn-n-rate": 3,
+ "degm-intervals": 2}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-otn-otu-interfaces:otu']),
+ response['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
+
+ # 2b) create a ODUC3 device renderer
+ def test_31_otn_service_path_create_oduc3(self):
+ response = test_utils_rfc8040.device_renderer_otn_service_path_request(
+ {
+ 'service-name': 'service_ODUC3',
+ 'operation': 'create',
+ 'service-rate': '300',
+ 'service-format': 'ODU',
+ 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}]
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Otn Service path was set up successfully for node :XPDR-A2', response['output']['result'])
+ self.assertIn(
+ {'node-id': 'XPDR-A2',
+ 'odu-interface-id': ['XPDR2-NETWORK1-ODUC3']}, response['output']['node-interface'])
+
+ def test_32_get_portmapping_network1(self):
+ response = test_utils_rfc8040.portmapping_request("XPDR-A2", "XPDR2-NETWORK1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.NETWORK2_CHECK_DICT["supporting-oducn"] = "XPDR2-NETWORK1-ODUC3"
+ self.assertIn(
+ self.NETWORK2_CHECK_DICT,
+ response['mapping'])
+
+ def test_33_check_interface_oduc3(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC3")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-ODUC3',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ 'supporting-interface-list': 'XPDR2-NETWORK1-OTUC3',
+ 'type': 'org-openroadm-interfaces:otnOdu',
+ 'supporting-port': 'L1'}
+
+ input_dict_2 = {'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
+ 'rate': 'org-openroadm-otn-common-types:ODUCn',
+ 'tx-sapi': 'LY9PxYJqUbw=',
+ 'tx-dapi': 'LY9PxYJqUbw=',
+ 'expected-sapi': 'LY9PxYJqUbw=',
+ 'expected-dapi': 'LY9PxYJqUbw=',
+ "degm-intervals": 2,
+ "degthr-percentage": 100,
+ "monitoring-mode": "terminated",
+ "oducn-n-rate": 3
+ }
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2, **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ self.assertDictEqual(
+ {'payload-type': '22', 'exp-payload-type': '22'},
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+
+ # 2c) create Ethernet device renderer
+ # No change in the ethernet device renderer so skipping those tests
+ # 2d) Delete Ethernet device interfaces
+ # No change in the ethernet device renderer so skipping those tests
+
+ # 2e) Delete ODUC3 device interfaces
+ def test_34_otn_service_path_delete_oduc3(self):
+ response = test_utils_rfc8040.device_renderer_otn_service_path_request(
+ {
+ 'service-name': 'service_ODUC3',
+ 'operation': 'delete',
+ 'service-rate': '300',
+ 'service-format': 'ODU',
+ 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}]
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Request processed', response['output']['result'])
+
+ def test_35_check_no_interface_oduc3(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC3")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ # 2f) Delete OTUC3 device interfaces
+ def test_36_service_path_delete_otuc3(self):
+ response = test_utils_rfc8040.device_renderer_service_path_request(
+ {
+ 'service-name': 'service_OTUC3',
+ 'wave-number': '0',
+ 'modulation-format': 'dp-qam8',
+ 'operation': 'delete',
+ 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}],
+ 'center-freq': 196.1,
+ 'nmc-width': 75,
+ 'min-freq': 196.0375,
+ 'max-freq': 196.125,
+ 'lower-spectral-slot-number': 755,
+ 'higher-spectral-slot-number': 768
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Request processed', response['output']['result'])
+
+ def test_37_check_no_interface_otuc3(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A1", "interface", "XPDR2-NETWORK1-OTUC3")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ def test_38_check_no_interface_otsig(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A1", "interface", "XPDR2-NETWORK1-OTSIGROUP-300G")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ def test_39_check_no_interface_otsi(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A1", "interface", "XPDR2-NETWORK1-755:768")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ # 3a) create a OTUC4 device renderer
+ def test_40_service_path_create_otuc3(self):
+ response = test_utils_rfc8040.device_renderer_service_path_request(
+ {
+ 'service-name': 'service_OTUC4',
+ 'wave-number': '0',
+ 'modulation-format': 'dp-qam16',
+ 'operation': 'create',
+ 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}],
+ 'center-freq': 196.1,
+ 'nmc-width': 75,
+ 'min-freq': 196.0375,
+ 'max-freq': 196.125,
+ 'lower-spectral-slot-number': 755,
+ 'higher-spectral-slot-number': 768
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Interfaces created successfully for nodes: ', response['output']['result'])
+ self.assertIn(
+ {'node-id': 'XPDR-A2',
+ 'otu-interface-id': ['XPDR2-NETWORK1-OTUC4'],
+ 'och-interface-id': ['XPDR2-NETWORK1-OTSIGROUP-400G']}, response['output']['node-interface'])
+
+ def test_41_get_portmapping_network1(self):
+ response = test_utils_rfc8040.portmapping_request("XPDR-A2", "XPDR2-NETWORK1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.NETWORK2_CHECK_DICT["supporting-otucn"] = "XPDR2-NETWORK1-OTUC4"
+ self.assertIn(
+ self.NETWORK2_CHECK_DICT,
+ response['mapping'])
+
+ def test_42_check_interface_otsi(self):
+ # pylint: disable=line-too-long
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-755:768")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-755:768',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ 'type': 'org-openroadm-interfaces:otsi',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {
+ "frequency": 196.0812,
+ "otsi-rate": "org-openroadm-common-optical-channel-types:R400G-otsi",
+ "fec": "org-openroadm-common-types:ofec",
+ "transmit-power": -5,
+ "provision-mode": "explicit",
+ "modulation-format": "dp-qam16"}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']),
+ response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi'])
+ self.assertDictEqual({"foic-type": "org-openroadm-common-optical-channel-types:foic4.8", "iid": [1, 2, 3, 4]},
+ response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']['flexo'])
+
+ def test_43_check_interface_otsig(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-OTSIGROUP-400G")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-OTSIGROUP-400G',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ ['supporting-interface-list'][0]: 'XPDR2-NETWORK1-755:768',
+ 'type': 'org-openroadm-interfaces:otsi-group',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {"group-id": 1,
+ "group-rate": "org-openroadm-common-optical-channel-types:R400G-otsi"}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-otsi-group-interfaces:otsi-group']),
+ response['interface'][0]['org-openroadm-otsi-group-interfaces:otsi-group'])
+
+ def test_44_check_interface_otuc4(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A2", "interface", "XPDR2-NETWORK1-OTUC4")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-OTUC4',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ ['supporting-interface-list'][0]: 'XPDR2-NETWORK1-OTSIGROUP-400G',
+ 'type': 'org-openroadm-interfaces:otnOtu',
+ 'supporting-port': 'L1'}
+ input_dict_2 = {"rate": "org-openroadm-otn-common-types:OTUCn",
+ "degthr-percentage": 100,
+ "tim-detect-mode": "Disabled",
+ "otucn-n-rate": 4,
+ "degm-intervals": 2}
+
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2,
+ **response['interface'][0]['org-openroadm-otn-otu-interfaces:otu']),
+ response['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
+
+ # 3b) create a ODUC4 device renderer
+ def test_45_otn_service_path_create_oduc3(self):
+ response = test_utils_rfc8040.device_renderer_otn_service_path_request(
+ {
+ 'service-name': 'service_ODUC4',
+ 'operation': 'create',
+ 'service-rate': '400',
+ 'service-format': 'ODU',
+ 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}]
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Otn Service path was set up successfully for node :XPDR-A2', response['output']['result'])
+ self.assertIn(
+ {'node-id': 'XPDR-A2',
+ 'odu-interface-id': ['XPDR2-NETWORK1-ODUC4']}, response['output']['node-interface'])
+
+ def test_46_get_portmapping_network1(self):
+ response = test_utils_rfc8040.portmapping_request("XPDR-A2", "XPDR2-NETWORK1")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.NETWORK2_CHECK_DICT["supporting-oducn"] = "XPDR2-NETWORK1-ODUC4"
+ self.assertIn(
+ self.NETWORK2_CHECK_DICT,
+ response['mapping'])
+
+ def test_47_check_interface_oduc4(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC4")
+ self.assertEqual(response['status_code'], requests.codes.ok)
+
+ input_dict_1 = {'name': 'XPDR2-NETWORK1-ODUC4',
+ 'administrative-state': 'inService',
+ 'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+ 'supporting-interface-list': 'XPDR2-NETWORK1-OTUC4',
+ 'type': 'org-openroadm-interfaces:otnOdu',
+ 'supporting-port': 'L1'}
+
+ input_dict_2 = {'odu-function': 'org-openroadm-otn-common-types:ODU-TTP',
+ 'rate': 'org-openroadm-otn-common-types:ODUCn',
+ 'tx-sapi': 'LY9PxYJqUbw=',
+ 'tx-dapi': 'LY9PxYJqUbw=',
+ 'expected-sapi': 'LY9PxYJqUbw=',
+ 'expected-dapi': 'LY9PxYJqUbw=',
+ "degm-intervals": 2,
+ "degthr-percentage": 100,
+ "monitoring-mode": "terminated",
+ "oducn-n-rate": 4
+ }
+ self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+ response['interface'][0])
+ self.assertDictEqual(dict(input_dict_2, **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+ self.assertDictEqual(
+ {'payload-type': '22', 'exp-payload-type': '22'},
+ response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+
+ # 3c) create Ethernet device renderer
+ # No change in the ethernet device renderer so skipping those tests
+ # 3d) Delete Ethernet device interfaces
+ # No change in the ethernet device renderer so skipping those tests
+
+ # 3e) Delete ODUC4 device interfaces
+ def test_48_otn_service_path_delete_oduc4(self):
+ response = test_utils_rfc8040.device_renderer_otn_service_path_request(
+ {
+ 'service-name': 'service_ODUC4',
+ 'operation': 'delete',
+ 'service-rate': '400',
+ 'service-format': 'ODU',
+ 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}]
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Request processed', response['output']['result'])
+
+ def test_49_check_no_interface_oduc4(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC4")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ # 3f) Delete OTUC4 device interfaces
+ def test_50_service_path_delete_otuc4(self):
+ response = test_utils_rfc8040.device_renderer_service_path_request(
+ {
+ 'service-name': 'service_OTUC4',
+ 'wave-number': '0',
+ 'modulation-format': 'dp-qam16',
+ 'operation': 'delete',
+ 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}],
+ 'center-freq': 196.1,
+ 'nmc-width': 75,
+ 'min-freq': 196.0375,
+ 'max-freq': 196.125,
+ 'lower-spectral-slot-number': 755,
+ 'higher-spectral-slot-number': 768
+ })
+ self.assertEqual(response['status_code'], requests.codes.ok)
+ self.assertIn('Request processed', response['output']['result'])
+
+ def test_51_check_no_interface_otuc4(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A1", "interface", "XPDR2-NETWORK1-OTUC4")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ def test_52_check_no_interface_otsig(self):
+ response = test_utils_rfc8040.check_node_attribute_request(
+ "XPDR-A1", "interface", "XPDR2-NETWORK1-OTSIGROUP-400G")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ def test_53_check_no_interface_otsi(self):
+ response = test_utils_rfc8040.check_node_attribute_request("XPDR-A1", "interface", "XPDR2-NETWORK1-755:768")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+
+ # Disconnect the XPDR
+ def test_54_xpdr_device_disconnection(self):
+ response = test_utils_rfc8040.unmount_device("XPDR-A2")
+ self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
+
+ def test_55_xpdr_device_disconnected(self):
+ response = test_utils_rfc8040.check_device_connection("XPDR-A2")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+ self.assertIn(response['connection-status']['error-type'], ('protocol', 'application'))
+ self.assertEqual(response['connection-status']['error-tag'], 'data-missing')
+ self.assertEqual(response['connection-status']['error-message'],
+ 'Request could not be completed because the relevant data model content does not exist')
+
+ def test_56_xpdr_device_not_connected(self):
+ response = test_utils_rfc8040.get_portmapping_node_info("XPDR-A2")
+ self.assertEqual(response['status_code'], requests.codes.conflict)
+ self.assertIn(response['node-info']['error-type'], ('protocol', 'application'))
+ self.assertEqual(response['node-info']['error-tag'], 'data-missing')
+ self.assertEqual(response['node-info']['error-message'],
+ 'Request could not be completed because the relevant data model content does not exist')
+
+
+if __name__ == '__main__':
+ unittest.main(verbosity=2)
def service_path_request(operation: str, servicename: str, wavenumber: str, nodes, centerfreq: str,
slotwidth: int, minfreq: float, maxfreq: float, lowerslotnumber: int,
- higherslotnumber: int):
+ higherslotnumber: int, modulation_format="dp-qpsk"):
attr = {"renderer:input": {
"renderer:service-name": servicename,
"renderer:wave-number": wavenumber,
- "renderer:modulation-format": "dp-qpsk",
+ "renderer:modulation-format": modulation_format,
"renderer:operation": operation,
"renderer:nodes": nodes,
"renderer:center-freq": centerfreq,
return response
#
-# TransportPCE network-utils and service-path operations
+# TransportPCE network-utils and service-path and service-implementation operations
#
def device_renderer_service_path_request(payload: dict):
url = "{}/operations/transportpce-device-renderer:service-path"
if RESTCONF_VERSION == 'draft-bierman02':
- data = prepend_dict_keys(payload, 'transportpce-device-renderer:')
+ data = prepend_dict_keys({'input': payload}, 'transportpce-device-renderer:')
else:
- data = payload
+ data = {'input': payload}
response = post_request(url, data)
res = response.json()
return_key = {'rfc8040': 'transportpce-device-renderer:output',
def device_renderer_otn_service_path_request(payload: dict):
url = "{}/operations/transportpce-device-renderer:otn-service-path"
if RESTCONF_VERSION == 'draft-bierman02':
- data = prepend_dict_keys(payload, 'transportpce-device-renderer:')
+ data = prepend_dict_keys({'input': payload}, 'transportpce-device-renderer:')
else:
- data = payload
+ data = {'input': payload}
response = post_request(url, data)
res = response.json()
return_key = {'rfc8040': 'transportpce-device-renderer:output',
return_output = res[return_key[RESTCONF_VERSION]]
return {'status_code': response.status_code,
'output': return_output}
+
+
+def device_renderer_service_implementation_request(payload: dict):
+ url = "{}/operations/transportpce-renderer:service-implementation-request"
+ if RESTCONF_VERSION == 'draft-bierman02':
+ data = prepend_dict_keys({'input': payload}, 'transportpce-renderer:')
+ else:
+ data = {'input': payload}
+ response = post_request(url, data)
+ res = response.json()
+ return_key = {'rfc8040': 'transportpce-renderer:output',
+ 'draft-bierman02': 'output'}
+ return_output = res[return_key[RESTCONF_VERSION]]
+ return {'status_code': response.status_code,
+ 'output': return_output}
-r{toxinidir}/tests/requirements.txt
-r{toxinidir}/tests/test-requirements.txt
setuptools>=7.0
- gnpy4tpce
+ gnpy4tpce==1.2.1
whitelist_externals = launch_tests.sh
passenv = LAUNCHER USE_LIGHTY USE_ODL_RESTCONF_VERSION
#setenv =
passenv = LAUNCHER USE_LIGHTY USE_ODL_RESTCONF_VERSION
setenv =
# USE_LIGHTY=True
-# USE_ODL_RESTCONF_VERSION=draft-bierman02
+ USE_ODL_RESTCONF_VERSION=draft-bierman02
USE_ODL_ALT_KARAF_ENV=./karaf71.env
USE_ODL_ALT_KARAF_INSTALL_DIR=karaf71
commands =
basepython = python3
deps = gitlint
commands =
- gitlint
+ gitlint --config ../.gitlint