From 686a21407fdf7fcab336e7a189ee1e6162af0718 Mon Sep 17 00:00:00 2001 From: AhmedEldeeb50 Date: Wed, 29 Apr 2020 17:15:19 +0200 Subject: [PATCH] add PcePathDescription Test JIRA: TRNSPRTPCE-209 Signed-off-by: AhmedEldeeb50 Change-Id: Ic9448f6d551749fe70b0ceee6a403acd4a6c7c9e (cherry picked from commit 252e251f4ec3e1ddd76c12985b90a8d2f5641d29) --- .../pce/PcePathDescriptionTests.java | 309 ++++++++++++++++++ .../pce/gnpy/GnpyUtilitiesImplTest.java | 13 +- .../ServiceDataStoreOperationsImplTest.java | 5 + .../networkanalyzer/PceCalculationTest.java | 7 +- .../PathComputationServiceImplTest.java | 1 + 5 files changed, 328 insertions(+), 7 deletions(-) create mode 100644 pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java new file mode 100644 index 000000000..a2e8f2351 --- /dev/null +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java @@ -0,0 +1,309 @@ +/* + * Copyright © 2020 Orange, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.transportpce.pce; + +import com.google.common.collect.ImmutableList; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; +import org.opendaylight.transportpce.common.network.RequestProcessor; +import org.opendaylight.transportpce.pce.constraints.PceConstraints; +import org.opendaylight.transportpce.pce.constraints.PceConstraintsCalc; +import org.opendaylight.transportpce.pce.networkanalyzer.MapUtils; +import org.opendaylight.transportpce.pce.networkanalyzer.PceLink; +import org.opendaylight.transportpce.pce.networkanalyzer.PceOpticalNode; +import org.opendaylight.transportpce.pce.networkanalyzer.PceResult; +import org.opendaylight.transportpce.pce.utils.PceTestData; +import org.opendaylight.transportpce.pce.utils.TransactionUtils; +import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.FiberPmd; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State; +import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.amplified.link.SectionElementBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation; +import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.TerminationPoint1Builder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.OMSAttributesBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.AmplifiedLinkBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.SpanBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; +import org.opendaylight.yangtools.yang.binding.Augmentation; + +public class PcePathDescriptionTests extends AbstractTest { + + private PcePathDescription pcePathDescription; + private PceResult pceResult; + private static final String LINK_ID_FORMAT = "%1$s-%2$sto%3$s-%4$s"; + private static final Long WAVE_LENGTH = 20L; + private PceLink pceLink = null; + private Link link = null; + private Node node = null; + + @Before + public void setUp() { + // Build Link + link = createRoadmToRoadm("OpenROADM-3-2-DEG1", + "OpenROADM-3-1-DEG1", + "DEG1-TTP-TX", "DEG1-TTP-RX").build(); + + // Link link=genereateLinkBuilder(); + + NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes()); + node = node1Builder.build(); + + PceOpticalNode pceOpticalNode = new PceOpticalNode(node, + OpenroadmNodeType.SRG, new NodeId("OpenROADM-3-2-DEG1"), ServiceFormat.Ethernet, + "DEGREE"); + PceOpticalNode pceOpticalNode2 = new PceOpticalNode(node, + OpenroadmNodeType.SRG, new NodeId("OpenROADM-3-1-DEG1"), ServiceFormat.Ethernet, + "DEGREE"); + + pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2); + pceLink.setClient("XPONDER-CLIENT"); + + pceResult = new PceResult(); + pceResult.setRC("200"); + pceResult.setRate(Long.valueOf(1)); + Map map = Map.of(new LinkId("OpenROADM-3-1-DEG1-to-OpenROADM-3-2-DEG1"), pceLink); + pcePathDescription = new PcePathDescription(List.of(pceLink), + map, pceResult); + + } + + // TODO fix opposite link + @Test(expected = Exception.class) + public void buildDescriptionsTest() { + + pcePathDescription.buildDescriptions(); + Assert.assertEquals(pcePathDescription.getReturnStructure().getMessage(), "No path available by PCE"); + } + + @Test + public void mapUtil() { + PceConstraints pceConstraintsCalc = new PceConstraintsCalc(PceTestData + .getPCERequest(), new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker()))) + .getPceHardConstraints(); + MapUtils.mapDiversityConstraints(List.of(node), List.of(link), pceConstraintsCalc); + MapUtils.getSupLink(link); + MapUtils.getAllSupNode(node); + MapUtils.getSRLGfromLink(link); + } + + private static LinkBuilder createLinkBuilder( + String srcNode, String destNode, String srcTp, String destTp, Link1Builder link1Builder) { + SourceBuilder ietfSrcLinkBldr = + new SourceBuilder().setSourceNode(new NodeId(srcNode)).setSourceTp(srcTp); + //create destination link + DestinationBuilder ietfDestLinkBldr = + new DestinationBuilder().setDestNode(new NodeId(destNode)) + .setDestTp(destTp); + LinkId linkId = new LinkId(String.format(LINK_ID_FORMAT, srcNode, srcTp, destNode, destTp)); + + LinkId oppositeLinkId = new LinkId("OpenROADM-3-2-DEG1-to-OpenROADM-3-1-DEG1"); + //For setting up attributes for openRoadm augment + OMSAttributesBuilder omsAttributesBuilder = + new OMSAttributesBuilder().setOppositeLink(oppositeLinkId); + + // Augementation + Augmentation aug11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130 + .Link1Builder() + .setAdministrativeGroup(Long.valueOf(123)) + .setAdministrativeState(State.InService) + .setAmplified(true) + .setLinkLatency(Long.valueOf(123)) + .setLinkLength(BigDecimal.valueOf(123)) + .setOMSAttributes(new OMSAttributesBuilder() + .setOppositeLink(new LinkId("OpenROADM-3-2-DEG1-to-OpenROADM-3-1-DEG1")) + .setSpan(new SpanBuilder().build()) + .setTEMetric(Long.valueOf(123)).build()) + .setOperationalState(State.InService).build(); + + LinkBuilder linkBuilder = new LinkBuilder() + .setSource(ietfSrcLinkBldr.build()) + .setDestination(ietfDestLinkBldr.build()) + .setLinkId(linkId) + .addAugmentation(Link1.class, aug11) + .withKey(new LinkKey(linkId)); + + linkBuilder.addAugmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class, + link1Builder.build()); + return linkBuilder; + } + + private static LinkBuilder createRoadmToRoadm(String srcNode, String destNode, String srcTp, String destTp) { + Link1Builder link1Builder = new Link1Builder() + .setLinkLatency(30L) + .setLinkType(OpenroadmLinkType.ROADMTOROADM); + return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder); + + } + + private List geSupportingNodes() { + List supportingNodes1 = new ArrayList<>(); +// + supportingNodes1 + .add(new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 1")) + .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)) + .build()); + + supportingNodes1 + .add(new SupportingNodeBuilder() + .setNodeRef(new NodeId("node 2")) + .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) + .build()); + return supportingNodes1; + } + + private NodeBuilder getNodeBuilder(List supportingNodes1) { + + + //update tp of nodes + TerminationPointBuilder xpdrTpBldr = new TerminationPointBuilder(); + TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(); + + tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK); + xpdrTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build()); + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 = + new Node1Builder().setTerminationPoint(ImmutableList.of(xpdrTpBldr.build())).build(); + + + return new NodeBuilder() + .setNodeId(new NodeId("node 1")) + .withKey(new NodeKey(new NodeId("node 1"))) + .addAugmentation( + Node1.class, node1) + .setSupportingNode(supportingNodes1); + } + + private Link genereateLinkBuilder() { + + List linkConcentationValues = new ArrayList<>(); + LinkConcatenation linkConcatenation = new LinkConcatenationBuilder() + .setFiberType(LinkConcatenation.FiberType.Truewave) + .setPmd(new FiberPmd(BigDecimal.ONE)) + .setSRLGId(Long.valueOf(1)) + .setSRLGLength(Long.valueOf(1)) + .build(); + LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder() + .setFiberType(LinkConcatenation.FiberType.Truewave) + .setPmd(new FiberPmd(BigDecimal.ONE)) + .setSRLGId(Long.valueOf(1)) + .setSRLGLength(Long.valueOf(1)) + .build(); + linkConcentationValues.add(linkConcatenation); + linkConcentationValues.add(linkConcatenation2); + + List + amplifiedLinkValues = new ArrayList<>(); + org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al = + new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes + .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder() + .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130 + .amplified.link.attributes.amplified.link.section.element.section.element + .SpanBuilder() + .setSpan( + new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified + .link.attributes.amplified.link.section.element.section + .element.span.SpanBuilder() + .setAdministrativeState(AdminStates.InService) + .setAutoSpanloss(true) + .setClfi("clfi") + .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE)) + .setLinkConcatenation(linkConcentationValues) + .setSpanlossBase(new RatioDB(BigDecimal.ONE)) + .setSpanlossCurrent(new RatioDB(BigDecimal.ONE)) + .build()) + .build()) + .build()) + .setSectionEltNumber(Integer.valueOf(1)).build(); + org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 = + new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes + .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder() + .setSectionElement( + new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link + .attributes.amplified.link.section.element.section.element.SpanBuilder() + .setSpan( + new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130 + .amplified.link + .attributes.amplified.link.section.element.section.element.span + .SpanBuilder() + .setAdministrativeState(AdminStates.InService) + .setAutoSpanloss(true) + .setClfi("clfi") + .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE)) + .setLinkConcatenation(linkConcentationValues) + .setSpanlossBase(new RatioDB(BigDecimal.ONE)) + .setSpanlossCurrent(new RatioDB(BigDecimal.ONE)) + .build()) + .build()) + .build()) + .setSectionEltNumber(Integer.valueOf(1)).build(); + + amplifiedLinkValues.add(al); + amplifiedLinkValues.add(al2); + Augmentation aug11 = + new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder() + .setAdministrativeGroup(Long.valueOf(123)) + .setAdministrativeState(State.InService) + .setAmplified(true) + .setLinkLatency(Long.valueOf(123)) + .setLinkLength(BigDecimal.valueOf(123)) + .setOMSAttributes(new OMSAttributesBuilder() + .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues) + .build()) + .setOppositeLink(new LinkId("link 1")) + .setSpan(new SpanBuilder().build()) + .setTEMetric(Long.valueOf(123)).build()) + .setOperationalState(State.InService).build(); + + TransactionUtils.getNetworkForSpanLoss(); + return new LinkBuilder().setLinkId(new LinkId("OpenROADM-3-1-DEG1-to-OpenROADM-3-2-DEG1")) + .setSource(new SourceBuilder().setSourceNode(new NodeId("OpenROADM-3-2-DEG1")) + .setSourceTp("DEG1-TTP-TX").build()) + .setDestination( + new DestinationBuilder().setDestNode(new NodeId("OpenROADM-3-1-DEG1")) + .setDestTp("DEG1-TTP-RX").build()) + .addAugmentation(Link1.class, aug11) + .build(); + + + } +} \ No newline at end of file diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java index 986d782fe..23289ae17 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java @@ -8,17 +8,16 @@ package org.opendaylight.transportpce.pce.gnpy; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; import org.opendaylight.transportpce.common.network.RequestProcessor; import org.opendaylight.transportpce.pce.constraints.PceConstraints; import org.opendaylight.transportpce.pce.constraints.PceConstraintsCalc; import org.opendaylight.transportpce.pce.utils.PceTestData; +import org.opendaylight.transportpce.pce.utils.PceTestUtils; +import org.opendaylight.transportpce.pce.utils.TransactionUtils; import org.opendaylight.transportpce.test.AbstractTest; -@Ignore - public class GnpyUtilitiesImplTest extends AbstractTest { private GnpyUtilitiesImpl gnpyUtilitiesImpl; @@ -26,13 +25,16 @@ public class GnpyUtilitiesImplTest extends AbstractTest { @Before public void setUp()throws Exception { - networkTransaction = new NetworkTransactionImpl(new RequestProcessor(this.getNewDataBroker())); + PceTestUtils.writeNetworkIntoDataStore(this.getDataBroker(), this.getDataStoreContextUtil(), + TransactionUtils.getNetworkForSpanLoss()); + networkTransaction = new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker())); + - gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCE_test1_request_54()); } @Test(expected = Exception.class) public void askNewPathFromGnpyTest() throws Exception { + gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCERequest()); PceConstraintsCalc constraints = new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(), networkTransaction); PceConstraints pceHardConstraints = constraints.getPceHardConstraints(); @@ -41,6 +43,7 @@ public class GnpyUtilitiesImplTest extends AbstractTest { @Test(expected = Exception.class) public void gnpyResponseOneDirectionTest() throws Exception { + gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCERequest()); gnpyUtilitiesImpl.gnpyResponseOneDirection(null); } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImplTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImplTest.java index 574cc2cff..0607818a2 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImplTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ServiceDataStoreOperationsImplTest.java @@ -32,4 +32,9 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest { serviceDataStoreOperations.createXMLFromDevice(this.getDataStoreContextUtil(), orgOpenroadmDevice, "some-output"); } + + @Test + public void writeStringFile() throws GnpyException { + serviceDataStoreOperations.writeStringFile("filename","data"); + } } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java index c2192a123..39f0e7096 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java @@ -12,6 +12,7 @@ import org.junit.Before; import org.junit.Test; import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; import org.opendaylight.transportpce.common.network.RequestProcessor; +import org.opendaylight.transportpce.pce.constraints.PceConstraintsCalc; import org.opendaylight.transportpce.pce.utils.PceTestData; import org.opendaylight.transportpce.test.AbstractTest; @@ -25,11 +26,13 @@ public class PceCalculationTest extends AbstractTest { PceResult pceResult = new PceResult(); pceResult.setRC("200"); + PceConstraintsCalc pceConstraintsCalc = new PceConstraintsCalc(PceTestData + .getPCERequest(), new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker()))); pceCalculation = new PceCalculation( PceTestData.getPCERequest(), new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker())), - null, - null, + pceConstraintsCalc.getPceHardConstraints(), + pceConstraintsCalc.getPceSoftConstraints(), pceResult); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java index 62de9fb3f..02fef6512 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java @@ -46,6 +46,7 @@ public class PathComputationServiceImplTest extends AbstractTest { @Test public void pathComputationRequestTest() { + pathComputationServiceImpl.generateGnpyResponse(null,"path"); Assert.assertNotNull( pathComputationServiceImpl.pathComputationRequest(PceTestData.getPCE_simpletopology_test1_request())); -- 2.36.6