Fix previous and add new PCE Junit test cases 66/89066/14
authorAhmedEldeeb50 <ahmed.eldeeb.ext@orange.com>
Wed, 15 Apr 2020 18:28:52 +0000 (20:28 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Wed, 22 Apr 2020 09:49:07 +0000 (11:49 +0200)
- add unit tests for PceLink

JIRA TRNSPRTPCE-209
Signed-off-by: AhmedEldeeb50 <ahmed.eldeeb.ext@orange.com>
Change-Id: I01b5c172481f56691f1ef8dc17837354262154b7

pce/src/test/java/org/opendaylight/transportpce/pce/PceComplianceCheckResultTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/PceComplianceCheckTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalcTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java

index a7e1f17fa9fec25c4d679e2706dd5357e23d795d..622ee130de7b703da9b906eeff03c0314ebeb2d6 100644 (file)
@@ -5,11 +5,10 @@
  * 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.utils;
+package org.opendaylight.transportpce.pce;
 
 import org.junit.Assert;
 import org.junit.Test;
-import org.opendaylight.transportpce.pce.PceComplianceCheckResult;
 
 public class PceComplianceCheckResultTest {
 
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/PceComplianceCheckTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/PceComplianceCheckTest.java
new file mode 100644 (file)
index 0000000..7b82fd4
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright © 2020 Orange Labs, 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 org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.opendaylight.transportpce.pce.utils.PceTestData;
+import org.opendaylight.transportpce.test.AbstractTest;
+
+public class PceComplianceCheckTest extends AbstractTest {
+
+
+    @Before
+    public void setup() {
+
+    }
+
+    @Test
+    public void testCheckFalse() {
+        Assert.assertFalse(
+                PceComplianceCheck.check(PceTestData.getEmptyPCERequest()).hasPassed());
+    }
+
+    @Test
+    public void testCheckTrue() {
+        Assert.assertTrue(
+                PceComplianceCheck.check(PceTestData.getEmptyPCERequestServiceNameWithRequestId()).hasPassed());
+    }
+
+    @Test
+    public void testCheckFalseWihtoutRequestID() {
+        Assert.assertFalse(
+                PceComplianceCheck.check(PceTestData.getEmptyPCERequestServiceNameWithOutRequestId()).hasPassed());
+    }
+}
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTest.java
new file mode 100644 (file)
index 0000000..fbd6c27
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * 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 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.pce.networkanalyzer.PceLink;
+import org.opendaylight.transportpce.pce.networkanalyzer.PceOpticalNode;
+import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
+import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType;
+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.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;
+
+
+
+public class PcePathDescriptionTest extends AbstractTest {
+
+    private List<PceLink> pathAtoZ = null;
+    private List<PceLink> pathZtoA = null;
+    private PceResult rc;
+    private Map<LinkId, PceLink> allPceLinks = null;
+    private static PcePathDescription pcePathDescription = null;
+    private static final String LINK_ID_FORMAT = "%1$s-%2$sto%3$s-%4$s";
+    private PceSendingPceRPCs pceSendingPceRPCs;
+
+    @Before
+    public void setup() {
+
+        Link link = createLink("srcNode", "destNode", "srcTp", "destTp").build();
+
+
+        /*PceOtnNode pceOtnNode =
+        new PceOtnNode(node, OpenroadmNodeType.DEGREE, new NodeId("optical"), ServiceFormat.OTM.getName(), "test");*/
+        //PceLink pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
+        /* rc = new PceResult();
+
+        pcePathDescription = new PcePathDescription(List.of(pceLink), new HashMap<>(), rc);*/
+    }
+
+
+    @Test
+    public void buildPceOpticalNodeRoadmTest() {
+        NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
+        Node node = node1Builder.build();
+
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.ROADM, new NodeId("optical"), ServiceFormat.OMS, "test");
+        pceOpticalNode.initSrgTps();
+        pceOpticalNode.initXndrTps();
+        pceOpticalNode.initWLlist();
+        Assert.assertFalse(pceOpticalNode.isValid());
+        Assert.assertFalse(pceOpticalNode.checkWL(12));
+        Assert.assertTrue(pceOpticalNode.checkTP("testTP"));
+    }
+
+    private List<SupportingNode> geSupportingNodes() {
+        List<SupportingNode> supportingNodes1 = new ArrayList<>();
+
+        supportingNodes1
+                .add(new SupportingNodeBuilder()
+                        .setNodeRef(new NodeId("node 2"))
+                        .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
+                        .build());
+        return supportingNodes1;
+    }
+
+    private NodeBuilder getNodeBuilder(List<SupportingNode> supportingNodes1) {
+        return new NodeBuilder()
+                .setNodeId(new NodeId("node 1"))
+                .withKey(new NodeKey(new NodeId("node 1")))
+                .setSupportingNode(supportingNodes1);
+    }
+
+    private static LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) {
+        //create source link
+        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));
+        return new LinkBuilder()
+                .setSource(ietfSrcLinkBldr.build())
+                .setDestination(ietfDestLinkBldr.build())
+                .setLinkId(linkId)
+                .withKey(new LinkKey(linkId));
+    }
+}
index d94f58319063dd34a5b41d965c8325b184dd2d78..8cd611e2844dc6070f29836a52717902a29c65fd 100644 (file)
@@ -10,15 +10,35 @@ package org.opendaylight.transportpce.pce;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.transportpce.common.DataStoreContext;
+import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
+import org.opendaylight.transportpce.common.network.RequestProcessor;
 import org.opendaylight.transportpce.pce.utils.PceTestData;
+import org.opendaylight.transportpce.test.AbstractTest;
 
-public class PceSendingPceRPCsTest {
+
+
+@RunWith(MockitoJUnitRunner.class)
+public class PceSendingPceRPCsTest extends AbstractTest {
 
     private PceSendingPceRPCs pceSendingPceRPCs;
+    private NetworkTransactionImpl networkTransaction;
+    private DataStoreContext dataStoreContext = this.getDataStoreContextUtil();
+    private DataBroker dataBroker = dataStoreContext.getDataBroker();
+
 
     @Before
-    public void setUp() {
-        pceSendingPceRPCs = new PceSendingPceRPCs(PceTestData.getPCE_test1_request_54(), null);
+    public void setUp() throws Exception {
+//        PceTestUtils.writeTopologyIntoDataStore(
+//                dataBroker, dataStoreContext, "./topologyData/basePceTopology.json");
+        networkTransaction = new NetworkTransactionImpl(new RequestProcessor(dataBroker));
+        pceSendingPceRPCs = new PceSendingPceRPCs();
+        pceSendingPceRPCs =
+                new PceSendingPceRPCs(PceTestData.getPCERequest(), networkTransaction
+                );
     }
 
     @Test
@@ -29,7 +49,6 @@ public class PceSendingPceRPCsTest {
 
     @Test
     public void pathComputationTest() throws Exception {
-
         pceSendingPceRPCs.pathComputation();
 
     }
@@ -45,7 +64,14 @@ public class PceSendingPceRPCsTest {
     }
 
     @Test
-    public void pathComputationWithConstraintsTest() {
-        pceSendingPceRPCs.pathComputationWithConstraints(null, null);
+    public void gnpyAtoZ() {
+        Assert.assertNull(pceSendingPceRPCs.getGnpyAtoZ());
     }
+
+    @Test
+    public void getGnpyZtoA() {
+        Assert.assertNull(pceSendingPceRPCs.getGnpyZtoA());
+    }
+
+
 }
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalcTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalcTest.java
new file mode 100644 (file)
index 0000000..f3d8152
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2020 Orange Labs, 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.constraints;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.pce.utils.PceTestData;
+import org.opendaylight.transportpce.test.AbstractTest;
+
+public class PceConstraintsCalcTest extends AbstractTest {
+    private static PceConstraintsCalc pceConstraintsCalc = null;
+    private static NetworkTransactionService networkTransactionService = null;
+
+    @Before
+    public void setup() {
+        networkTransactionService = Mockito.mock(NetworkTransactionService.class);
+
+    }
+
+    @Test
+    public void testNoHardOrSoftConstrainsExists() {
+        pceConstraintsCalc = new PceConstraintsCalc(PceTestData
+                .getEmptyPCERequest(), networkTransactionService);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testHardConstrainsExists() {
+        pceConstraintsCalc = new PceConstraintsCalc(PceTestData
+                .getPCE_test2_request_54(), networkTransactionService);
+    }
+
+    @Test
+    public void testSoftConstrainsExists() {
+        pceConstraintsCalc = new PceConstraintsCalc(PceTestData
+                .getPCERequest(), networkTransactionService);
+    }
+
+}
index e462b79be8ebdae6b5ed64293a1a737ba376f319..900061989eab56f543503454e7f3c687768cad55 100644 (file)
@@ -10,12 +10,16 @@ package org.opendaylight.transportpce.pce.constraints;
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.opendaylight.transportpce.pce.networkanalyzer.PceOpticalNode;
 import org.opendaylight.transportpce.test.AbstractTest;
 
+
+
 public class PceConstraintsTest extends AbstractTest {
     private static PceConstraints pceConstraints = new PceConstraints();
 
@@ -103,4 +107,26 @@ public class PceConstraintsTest extends AbstractTest {
 
     }
 
+
+    @Test
+    public void getIncludePceNodesTest() {
+        Assert.assertTrue(pceConstraints.getIncludePceNodes().size() == 0);
+        pceConstraints.setIncludePceNode(new PceOpticalNode(null, null, null, null, null));
+        Assert.assertTrue(pceConstraints.getIncludePceNodes().size() == 1);
+
+    }
+
+    @Test
+    public void getListToIncludeTest() {
+        Assert.assertTrue(pceConstraints.getListToInclude().size() == 0);
+        PceConstraints.ResourcePair resourcePair = new PceConstraints
+                .ResourcePair(PceConstraints.ResourceType.SRLG, "test");
+        pceConstraints.setListToInclude(resourcePair);
+        Assert.assertTrue(pceConstraints.getListToInclude().size() == 1);
+        Assert.assertTrue(pceConstraints.getSRLGnames().size() == 1);
+
+    }
+
 }
+
+
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
new file mode 100644 (file)
index 0000000..986d782
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright © 2020 Orange Labs, 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.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.test.AbstractTest;
+
+@Ignore
+
+public class GnpyUtilitiesImplTest extends AbstractTest {
+
+    private GnpyUtilitiesImpl gnpyUtilitiesImpl;
+    private NetworkTransactionImpl networkTransaction;
+
+    @Before
+    public void setUp()throws Exception {
+        networkTransaction = new NetworkTransactionImpl(new RequestProcessor(this.getNewDataBroker()));
+
+        gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCE_test1_request_54());
+    }
+
+    @Test(expected = Exception.class)
+    public void askNewPathFromGnpyTest() throws Exception {
+        PceConstraintsCalc constraints =
+                new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(), networkTransaction);
+        PceConstraints pceHardConstraints = constraints.getPceHardConstraints();
+        gnpyUtilitiesImpl.askNewPathFromGnpy(pceHardConstraints);
+    }
+
+    @Test(expected = Exception.class)
+    public void gnpyResponseOneDirectionTest() throws Exception {
+        gnpyUtilitiesImpl.gnpyResponseOneDirection(null);
+    }
+
+
+}
index e26e306f3c06bcc0832a193ce0cdc7f8d594cd50..c2192a123a35f06af16c74aa6cf3fc132a24e00b 100644 (file)
@@ -5,15 +5,13 @@
  * 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.utils.networkanalyzer;
+package org.opendaylight.transportpce.pce.networkanalyzer;
 
 import org.junit.Assert;
 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.networkanalyzer.PceCalculation;
-import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
 import org.opendaylight.transportpce.pce.utils.PceTestData;
 import org.opendaylight.transportpce.test.AbstractTest;
 
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java
new file mode 100644 (file)
index 0000000..c796151
--- /dev/null
@@ -0,0 +1,291 @@
+/*
+ * 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.networkanalyzer;
+
+import com.google.common.collect.ImmutableList;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.transportpce.test.AbstractTest;
+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.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.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.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;
+
+
+
+
+public class PceLinkTest extends AbstractTest {
+
+    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;
+
+    @Before
+    public void setup() {
+
+    }
+
+    @Test
+    public void testBuildPceLinkRoadmToRoadm() {
+        Link link = createRoadmToRoadm("srcNode",
+                "destNode",
+                "srcTp", "destTp").build();
+
+        NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
+        Node node = node1Builder.build();
+
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.SRG, new NodeId("optical"), ServiceFormat.OMS, "test");
+        pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
+    }
+
+    @Test
+    public void testBuildPceLinkOTN() {
+        Link link = createOTNLink("srcNode",
+                "destNode",
+                "srcTp", "destTp").build();
+
+        NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
+        Node node = node1Builder.build();
+
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.SRG, new NodeId("optical"), ServiceFormat.OMS, "test");
+        pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
+
+    }
+
+    @Test
+    public void testBuildPceLinkExponder() {
+        Link link = createXponderLink("srcNode",
+                "destNode",
+                "srcTp", "destTp").build();
+
+        NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
+        Node node = node1Builder.build();
+
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.SRG, new NodeId("optical"), ServiceFormat.OMS, "test");
+        pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
+    }
+
+    @Test
+    public void testCalcSpanOSNR() {
+        Link link = createRoadmToRoadm("srcNode",
+                "destNode",
+                "srcTp", "destTp").build();
+
+        NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
+        Node node = node1Builder.build();
+
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.SRG, new NodeId("optical"), ServiceFormat.OMS, "test");
+        pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
+        Assert.assertNotNull(MapUtils.getOmsAttributesSpan(link));
+        Assert.assertNotNull(pceLink.calcSpanOSNR());
+        Assert.assertEquals(0, pceLink.getsrlgList().size());
+        Assert.assertTrue(7.857119000000001 == pceLink.calcSpanOSNR());
+        Assert.assertNull(pceLink.getOppositeLink());
+        Assert.assertNull(pceLink.getOppositeLink());
+        Assert.assertNotNull(pceLink.getDestTP());
+        Assert.assertNotNull(pceLink.getlinkType());
+        Assert.assertNotNull(pceLink.getLinkId());
+        Assert.assertNotNull(pceLink.getSourceId());
+        Assert.assertNotNull(pceLink.getDestId());
+        Assert.assertNotNull(pceLink.getClient());
+        Assert.assertNotNull(pceLink.getLatency());
+        Assert.assertNotNull(pceLink.getAvailableBandwidth());
+        Assert.assertNotNull(pceLink.getUsedBandwidth());
+        Assert.assertNotNull(pceLink.getsourceNetworkSupNodeId());
+        Assert.assertNotNull(pceLink.getdestNetworkSupNodeId());
+        Assert.assertNotNull(pceLink.getosnr());
+        Assert.assertNull(pceLink.getsourceCLLI());
+        Assert.assertNull(pceLink.getdestCLLI());
+    }
+
+    @Test
+    public void testPceOpticalNode() {
+        NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
+        Node node = node1Builder.build();
+
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.ROADM, new NodeId("optical"), ServiceFormat.OMS, "test");
+        pceOpticalNode.initSrgTps();
+        pceOpticalNode.initXndrTps();
+        pceOpticalNode.initWLlist();
+        Assert.assertFalse(pceOpticalNode.isValid());
+        Assert.assertFalse(pceOpticalNode.checkWL(12));
+        Assert.assertTrue(pceOpticalNode.checkTP("testTP"));
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testPceOTNNode() {
+        NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
+        Node node = node1Builder.build();
+        Assert.assertNotNull(node.augmentation(Node1.class));
+        // OpenroadmNodeType nodeType = node.augmentation(Node1.class).;
+
+        PceOtnNode pceOtnNode = new PceOtnNode(node, OpenroadmNodeType.SRG, node.getNodeId(), "otn", "serviceType");
+
+        //pceOtnNode.validateXponder(anodeId, znodeId);
+        /*
+        PceOtnNode pceOtnNode =
+                new PceOtnNode(node, OpenroadmNodeType.DEGREE,
+                        new NodeId("optical"),
+                        ServiceFormat.OTM.getName(), "test");*/
+        // pceOtnNode.initXndrTps("mode");
+       /* pceOtnNode.initSrgTps();
+        pceOtnNode.initXndrTps();
+        pceOtnNode.initWLlist();
+        Assert.assertFalse(pceOtnNode.isValid());
+        Assert.assertFalse(pceOtnNode.checkWL(12));
+        Assert.assertTrue(pceOtnNode.checkTP("testTP"));*/
+    }
+
+    private static LinkBuilder createOTNLink(String srcNode, String destNode, String srcTp, String destTp) {
+        Link1Builder link1Builder = new Link1Builder()
+                .setLinkType(OpenroadmLinkType.OTNLINK);
+
+        //create source link
+        return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder);
+
+    }
+
+    private static LinkBuilder createXponderLink(String srcNode, String destNode, String srcTp, String destTp) {
+        Link1Builder link1Builder = new Link1Builder()
+                .setLinkType(OpenroadmLinkType.XPONDERINPUT);
+
+        //create source link
+        return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder);
+
+    }
+
+    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("opposite");
+        //For setting up attributes for openRoadm augment
+        OMSAttributesBuilder omsAttributesBuilder =
+                new OMSAttributesBuilder()
+                        .setSpan(new SpanBuilder()
+                                .setSpanlossCurrent(new RatioDB(new BigDecimal("55")))
+                                .setLinkConcatenation(Arrays.asList(
+                                        new LinkConcatenationBuilder()
+                                                .setFiberType(LinkConcatenation.FiberType.Dsf)
+                                                .build()
+                                )).build()).setOppositeLink(oppositeLinkId);
+
+
+        LinkBuilder linkBuilder = new LinkBuilder()
+                .setSource(ietfSrcLinkBldr.build())
+                .setDestination(ietfDestLinkBldr.build())
+                .setLinkId(linkId)
+                .withKey(new LinkKey(linkId));
+
+        linkBuilder.addAugmentation(
+                org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Link1.class,
+                link1Builder.build());
+
+        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder linkBuilderNetworkLink
+                = new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder()
+                .setOMSAttributes(omsAttributesBuilder
+                        .build());
+
+
+        linkBuilder.addAugmentation(
+                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1.class,
+                linkBuilderNetworkLink.build());
+
+        return linkBuilder;
+    }
+
+    private static LinkBuilder createRoadmToRoadm(String srcNode, String destNode, String srcTp, String destTp) {
+        Link1Builder link1Builder = new Link1Builder()
+                .setLinkLatency(100L)
+                .setLinkType(OpenroadmLinkType.ROADMTOROADM);
+        return createLinkBuilder(srcNode, destNode, srcTp, destTp, link1Builder);
+
+    }
+
+    private List<SupportingNode> geSupportingNodes() {
+        List<SupportingNode> 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<SupportingNode> 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);
+    }
+
+}
index 71d57e075c300af6cb6dba39fe8aba2c4d765dcf..b7ccf9183314c6424413b45928483ba772d4d9dd 100644 (file)
@@ -5,14 +5,16 @@
  * 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.utils.service;
+package org.opendaylight.transportpce.pce.service;
 
+import org.junit.After;
 import org.junit.Assert;
 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.service.PathComputationServiceImpl;
+import org.opendaylight.transportpce.pce.gnpy.GnpyResult;
+import org.opendaylight.transportpce.pce.gnpy.GnpyTopoImpl;
 import org.opendaylight.transportpce.pce.utils.PceTestData;
 import org.opendaylight.transportpce.test.AbstractTest;
 
@@ -30,7 +32,24 @@ public class PathComputationServiceImplTest extends AbstractTest {
 
     @Test
     public void pathComputationRequestTest() {
-        Assert.assertNotNull(pathComputationServiceImpl.pathComputationRequest(PceTestData.getPCERequest()));
+        Assert.assertNotNull(
+                pathComputationServiceImpl.pathComputationRequest(PceTestData.getEmptyPCERequest()));
+
+    }
+
+    @Test(expected = Exception.class)
+    public void generateGnpyResponse() throws Exception {
+
+        GnpyResult gnpyResult =
+                new GnpyResult("A-to-Z",
+                        new GnpyTopoImpl(new NetworkTransactionImpl(
+                                new RequestProcessor(this.getNewDataBroker()))));
+        pathComputationServiceImpl.generateGnpyResponse(gnpyResult.getResponse(), "A-to-Z");
+    }
+
+
+    @After
+    public void destroy() {
         pathComputationServiceImpl.close();
     }
 }
index b822b7a8bf3b0f31b2f338c21856e07285c25a22..d471002dba9c10a8f3625d42a6ad65f478aea132 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.transportpce.pce.utils;
 
 import java.util.Arrays;
+
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInputBuilder;
@@ -35,9 +36,14 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.GeneralBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.DiversityBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.ExcludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.IncludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.LatencyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.include_.OrderedHopsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.diversity.existing.service.contraints.sp.ExistingServiceApplicability;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.diversity.existing.service.contraints.sp.ExistingServiceApplicabilityBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.routing.constraints.sp.HardConstraints;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.routing.constraints.sp.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.routing.constraints.sp.SoftConstraints;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.routing.constraints.sp.SoftConstraintsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.response.parameters.sp.ResponseParameters;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.response.parameters.sp.ResponseParametersBuilder;
@@ -48,6 +54,8 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeader;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeaderBuilder;
 
+
+
 public final class PceTestData {
 
     private PceTestData() {
@@ -63,6 +71,120 @@ public final class PceTestData {
         return input;
     }
 
+    public static PathComputationRequestInput getEmptyPCERequestServiceNameWithRequestId() {
+        ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder()
+                .setRequestId("request1")
+                .build();
+        PathComputationRequestInput input = new PathComputationRequestInputBuilder()
+                .setServiceName("serviceName")
+                .setServiceHandlerHeader(serviceHandlerHeader)
+                .build();
+        return input;
+    }
+
+    public static PathComputationRequestInput getEmptyPCERequestServiceNameWithOutRequestId() {
+        ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder()
+                .build();
+        PathComputationRequestInput input = new PathComputationRequestInputBuilder()
+                .setServiceName("serviceName")
+                .setServiceHandlerHeader(serviceHandlerHeader)
+                .build();
+        return input;
+    }
+
+    public static PathComputationRequestInput getPathComputationRequestInputWithCoRoutingOrGeneral() {
+        ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder()
+                .setRequestId("request1")
+                .build();
+        ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
+                .setServiceFormat(ServiceFormat.Ethernet)
+                .setServiceRate(100L)
+                .setClli("clli11")
+                .setNodeId("XPONDER-2-2")
+                .setTxDirection(new TxDirectionBuilder().setPort(
+                        new PortBuilder()
+                                .setPortDeviceName("Some port-device-name")
+                                .setPortType("Some port-type")
+                                .setPortName("Some port-name")
+                                .setPortRack("Some port-rack")
+                                .setPortShelf("Some port-shelf")
+                                .setPortSlot("Some port-slot")
+                                .setPortSubSlot("Some port-sub-slot")
+                                .build()
+                ).build())
+                .setRxDirection(new RxDirectionBuilder().setPort(
+                        new PortBuilder()
+                                .setPortDeviceName("Some port-device-name")
+                                .setPortType("Some port-type")
+                                .setPortName("Some port-name")
+                                .setPortRack("Some port-rack")
+                                .setPortShelf("Some port-shelf")
+                                .setPortSlot("Some port-slot")
+                                .setPortSubSlot("Some port-sub-slot")
+                                .build()
+                ).build())
+                .build();
+        ServiceZEnd serviceZEnd = new ServiceZEndBuilder()
+                .setServiceFormat(ServiceFormat.Ethernet)
+                .setServiceRate(0L)
+                .setClli("Some clli11")
+                .setNodeId("XPONDER-1-2")
+                .setTxDirection(new TxDirectionBuilder().setPort(
+                        new PortBuilder()
+                                .setPortDeviceName("Some port-device-name")
+                                .setPortType("Some port-type")
+                                .setPortName("Some port-name")
+                                .setPortRack("Some port-rack")
+                                .setPortShelf("Some port-shelf")
+                                .setPortSlot("Some port-slot")
+                                .setPortSubSlot("Some port-sub-slot")
+                                .build()
+                ).build())
+                .setRxDirection(new RxDirectionBuilder().setPort(
+                        new PortBuilder()
+                                .setPortDeviceName("Some port-device-name")
+                                .setPortType("Some port-type")
+                                .setPortName("Some port-name")
+                                .setPortRack("Some port-rack")
+                                .setPortShelf("Some port-shelf")
+                                .setPortSlot("Some port-slot")
+                                .setPortSubSlot("Some port-sub-slot")
+                                .build()
+                ).build())
+                .build();
+        PathComputationRequestInput input = new PathComputationRequestInputBuilder()
+                .setServiceName("service1")
+                .setResourceReserve(true)
+                .setPceMetric(PceMetric.HopCount)
+                .setLocallyProtectedLinks(true)
+                .setServiceHandlerHeader(serviceHandlerHeader)
+                .setServiceAEnd(serviceAEnd)
+                .setServiceZEnd(serviceZEnd)
+                .setHardConstraints(new HardConstraintsBuilder()
+                        .setCustomerCode(Arrays.asList("Some customer-code"))
+                        .setCoRoutingOrGeneral(new CoRoutingBuilder()
+                                .setCoRouting(new org.opendaylight.yang.gen.v1.http.org
+                                        .transportpce.b.c._interface.routing.constraints.rev171017
+                                        .constraints.sp.co.routing.or.general.co.routing.CoRoutingBuilder()
+                                        .setExistingService(Arrays.asList("Some existing-service"))
+
+                                        .build())
+                                .build())
+                        .build())
+                .setSoftConstraints(new SoftConstraintsBuilder()
+                        .setCustomerCode(Arrays.asList("Some customer-code"))
+                        .setCoRoutingOrGeneral(new CoRoutingBuilder()
+                                .setCoRouting(new org.opendaylight.yang.gen.v1.http.org
+                                        .transportpce.b.c._interface.routing.constraints.rev171017
+                                        .constraints.sp.co.routing.or.general.co.routing.CoRoutingBuilder()
+                                        .setExistingService(Arrays.asList("Some existing-service"))
+                                        .build())
+                                .build())
+                        .build())
+                .build();
+        return input;
+    }
+
     public static PathComputationRequestInput getPCERequest() {
         ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder()
                 .setRequestId("request1")
@@ -124,32 +246,34 @@ public final class PceTestData {
                 ).build())
                 .build();
         PathComputationRequestInput input = new PathComputationRequestInputBuilder()
-            .setServiceName("service1")
-            .setResourceReserve(true)
-            .setPceMetric(PceMetric.HopCount)
-            .setLocallyProtectedLinks(true)
-            .setServiceHandlerHeader(serviceHandlerHeader)
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd)
-            .setHardConstraints(new HardConstraintsBuilder()
-            .setCustomerCode(Arrays.asList("Some customer-code"))
-            .setCoRoutingOrGeneral(new CoRoutingBuilder()
-            .setCoRouting(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints
-                 .rev171017.constraints.sp.co.routing.or.general.co.routing.CoRoutingBuilder()
-            .setExistingService(Arrays.asList("Some existing-service"))
-            .build())
-            .build())
-            .build())
-            .setSoftConstraints(new SoftConstraintsBuilder()
-            .setCustomerCode(Arrays.asList("Some customer-code"))
-            .setCoRoutingOrGeneral(new CoRoutingBuilder()
-            .setCoRouting(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints
-                .rev171017.constraints.sp.co.routing.or.general.co.routing.CoRoutingBuilder()
-            .setExistingService(Arrays.asList("Some existing-service"))
-            .build())
-            .build())
-            .build())
-            .build();
+                .setServiceName("service1")
+                .setResourceReserve(true)
+                .setPceMetric(PceMetric.HopCount)
+                .setLocallyProtectedLinks(true)
+                .setServiceHandlerHeader(serviceHandlerHeader)
+                .setServiceAEnd(serviceAEnd)
+                .setServiceZEnd(serviceZEnd)
+                .setHardConstraints(new HardConstraintsBuilder()
+                        .setCustomerCode(Arrays.asList("Some customer-code"))
+                        .setCoRoutingOrGeneral(new CoRoutingBuilder()
+                                .setCoRouting(new org.opendaylight.yang.gen.v1.http.org
+                                        .transportpce.b.c._interface.routing.constraints.rev171017
+                                        .constraints.sp.co.routing.or.general.co.routing.CoRoutingBuilder()
+                                        .setExistingService(Arrays.asList("Some existing-service"))
+                                        .build())
+                                .build())
+                        .build())
+                .setSoftConstraints(new SoftConstraintsBuilder()
+                        .setCustomerCode(Arrays.asList("Some customer-code"))
+                        .setCoRoutingOrGeneral(new CoRoutingBuilder()
+                                .setCoRouting(new org.opendaylight.yang.gen.v1.http.org
+                                        .transportpce.b.c._interface.routing.constraints.rev171017
+                                        .constraints.sp.co.routing.or.general.co.routing.CoRoutingBuilder()
+                                        .setExistingService(Arrays.asList("Some existing-service"))
+                                        .build())
+                                .build())
+                        .build())
+                .build();
         return input;
     }
 
@@ -178,23 +302,23 @@ public final class PceTestData {
     /**
      * Generate Data for Test 1 request 5-4.
      * <code>{
-       "pce:input": {
-         "pce:service-name": "service 1",
-         "pce:resource-reserve": "true",
-         "pce:service-handler-header": {
-           "pce:request-id": "request 1"
-         },
-         "pce:service-a-end": {
-           "pce:service-rate": "0",
-           "pce:node-id": "XPONDER-1-2"
-         },
-         "pce:service-z-end": {
-           "pce:service-rate": "0",
-           "pce:node-id": "XPONDER-3-2"
-         },
-         "pce:pce-metric": "hop-count"
-       }
-     }</code>
+     * "pce:input": {
+     * "pce:service-name": "service 1",
+     * "pce:resource-reserve": "true",
+     * "pce:service-handler-header": {
+     * "pce:request-id": "request 1"
+     * },
+     * "pce:service-a-end": {
+     * "pce:service-rate": "0",
+     * "pce:node-id": "XPONDER-1-2"
+     * },
+     * "pce:service-z-end": {
+     * "pce:service-rate": "0",
+     * "pce:node-id": "XPONDER-3-2"
+     * },
+     * "pce:pce-metric": "hop-count"
+     * }
+     }</code>
      *
      * @return input PathComputationRequestInput data
      */
@@ -223,8 +347,8 @@ public final class PceTestData {
 
     /**
      * Generate Data for Test 1 result 5-4.
-     * @param wl WaveLength
      *
+     * @param wl WaveLength
      * @return output PathComputationRequestOutput data
      */
     public static PathComputationRequestOutput getPCE_test_result_54(Long wl) {
@@ -239,29 +363,30 @@ public final class PceTestData {
 
     /**
      * Generate Data for Test 2 request 5-4.
-     *<code>{
-       "pce:input": {
-         "pce:service-name": "service 1",
-         "pce:resource-reserve": "true",
-         "pce:service-handler-header": {
-           "pce:request-id": "request 1"
-         },
-         "pce:service-a-end": {
-           "pce:service-rate": "0",
-           "pce:node-id": "XPONDER-1-2"
-         },
-         "pce:service-z-end": {
-           "pce:service-rate": "0",
-           "pce:node-id": "XPONDER-3-2"
-         },
-         "pce:hard-constraints": {
-           "pce:exclude_": {
-             "node-id": [ "OpenROADM-2-2" ]
-           }
-         },
-         "pce:pce-metric": "hop-count"
-       }
-     }</code>
+     * <code>{
+     * "pce:input": {
+     * "pce:service-name": "service 1",
+     * "pce:resource-reserve": "true",
+     * "pce:service-handler-header": {
+     * "pce:request-id": "request 1"
+     * },
+     * "pce:service-a-end": {
+     * "pce:service-rate": "0",
+     * "pce:node-id": "XPONDER-1-2"
+     * },
+     * "pce:service-z-end": {
+     * "pce:service-rate": "0",
+     * "pce:node-id": "XPONDER-3-2"
+     * },
+     * "pce:hard-constraints": {
+     * "pce:exclude_": {
+     * "node-id": [ "OpenROADM-2-2" ]
+     * }
+     * },
+     * "pce:pce-metric": "hop-count"
+     * }
+     * }</code>
+     *
      * @return input PathComputationRequestInput data
      */
     public static PathComputationRequestInput getPCE_test2_request_54() {
@@ -288,6 +413,16 @@ public final class PceTestData {
                                 .setExclude(new ExcludeBuilder()
                                         .setNodeId(Arrays.asList("OpenROADM-2-2"))
                                         .build())
+                                .setLatency(new LatencyBuilder()
+                                        .setMaxLatency(3223L).build())
+                                .setInclude(new IncludeBuilder()
+                                        .setOrderedHops(
+                                                Arrays.asList(new OrderedHopsBuilder()
+                                                        .setHopNumber(22)
+                                                        // .setHopType(new HopTypeBuilder()
+                                                        // .setHopType(new ClliBuilder().getClli())
+                                                        .build()))
+                                        .build())
                                 .build())
                         .build())
                 .build();
@@ -296,6 +431,7 @@ public final class PceTestData {
 
     /**
      * Generate Data for Test 2 result 5-4.
+     *
      * @return output PathComputationRequestOutput data
      */
     public static PathComputationRequestOutput getPCE_test2_result_54() {
@@ -310,29 +446,30 @@ public final class PceTestData {
 
     /**
      * Generate Data for Test 2 request 5-4.
-     *<code>{
-       "pce:input": {
-         "pce:service-name": "service 1",
-         "pce:resource-reserve": "true",
-         "pce:service-handler-header": {
-           "pce:request-id": "request 1"
-         },
-         "pce:service-a-end": {
-           "pce:service-rate": "0",
-           "pce:node-id": "XPONDER-1-2"
-         },
-         "pce:service-z-end": {
-           "pce:service-rate": "0",
-           "pce:node-id": "XPONDER-3-2"
-         },
-         "pce:hard-constraints": {
-           "pce:exclude_": {
-             "node-id": [ "OpenROADM-2-1", "OpenROADM-2-2" ]
-           }
-         },
-         "pce:pce-metric": "hop-count"
-       }
-     }</code>
+     * <code>{
+     * "pce:input": {
+     * "pce:service-name": "service 1",
+     * "pce:resource-reserve": "true",
+     * "pce:service-handler-header": {
+     * "pce:request-id": "request 1"
+     * },
+     * "pce:service-a-end": {
+     * "pce:service-rate": "0",
+     * "pce:node-id": "XPONDER-1-2"
+     * },
+     * "pce:service-z-end": {
+     * "pce:service-rate": "0",
+     * "pce:node-id": "XPONDER-3-2"
+     * },
+     * "pce:hard-constraints": {
+     * "pce:exclude_": {
+     * "node-id": [ "OpenROADM-2-1", "OpenROADM-2-2" ]
+     * }
+     * },
+     * "pce:pce-metric": "hop-count"
+     * }
+     * }</code>
+     *
      * @return input PathComputationRequestInput data
      */
     public static PathComputationRequestInput getPCE_test3_request_54() {
@@ -367,6 +504,7 @@ public final class PceTestData {
 
     /**
      * Generate Data for Test 3 result 5-4.
+     *
      * @return output PathComputationRequestOutput data
      */
     public static PathComputationRequestOutput getPCE_test3_result_54() {
@@ -379,6 +517,33 @@ public final class PceTestData {
         return outputBuilder.build();
     }
 
+    public static PathComputationRequestInput getPCE_simpletopology_test1_requestSetHardAndSoftConstrains() {
+        ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder()
+                .setRequestId("request 1")
+                .build();
+        ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
+                .setServiceRate(0L)
+                .setNodeId("XPONDER-1-2")
+                .build();
+        ServiceZEnd serviceZEnd = new ServiceZEndBuilder()
+                .setServiceRate(0L)
+                .setNodeId("XPONDER-3-2")
+                .build();
+        HardConstraints hardConstrains = new HardConstraintsBuilder().build();
+        SoftConstraints softConstraints = new SoftConstraintsBuilder().build();
+        PathComputationRequestInput input = new PathComputationRequestInputBuilder()
+                .setServiceHandlerHeader(serviceHandlerHeader)
+                .setServiceName("service 1")
+                .setResourceReserve(true)
+                .setPceMetric(PceMetric.HopCount)
+                .setServiceAEnd(serviceAEnd)
+                .setServiceZEnd(serviceZEnd)
+                .setHardConstraints(hardConstrains)
+                .setSoftConstraints(softConstraints)
+                .build();
+        return input;
+    }
+
     public static PathComputationRequestInput getPCE_simpletopology_test1_request() {
         ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder()
                 .setRequestId("request 1")
@@ -422,7 +587,7 @@ public final class PceTestData {
     }
 
     private static PathDescription createPathDescription(long azRate, long azWaveLength, long zaRate,
-        long zaWaveLength) {
+                                                         long zaWaveLength) {
         AToZDirection atozDirection = new AToZDirectionBuilder()
                 .setRate(azRate)
                 .setAToZWavelengthNumber(azWaveLength)
@@ -442,34 +607,34 @@ public final class PceTestData {
 
     /**
      * Generate Data for Test Diversity test 1 request 5-4.
-     *<code>{
-       "pce:input": {
-         "pce:service-name": "service 1",
-         "pce:resource-reserve": "true",
-         "pce:service-handler-header": {
-           "pce:request-id": "request 1"
-         },
-         "pce:service-a-end": {
-           "pce:service-rate": "0",
-           "pce:node-id": "XPONDER-1-1"
-         },
-         "pce:service-z-end": {
-           "pce:service-rate": "0",
-           "pce:node-id": "XPONDER-3-1"
-         },
-         "pce:hard-constraints": {
-           "pce:diversity": {
-            "existing-service": ["Path test-1-54"],
-            "existing-service-applicability": {
-                "node": "true"
-            }
-           }
-         },
-         "pce:pce-metric": "hop-count"
-       }
-     }</code>
-     * @param base Path Computation Request Input base
+     * <code>{
+     * "pce:input": {
+     * "pce:service-name": "service 1",
+     * "pce:resource-reserve": "true",
+     * "pce:service-handler-header": {
+     * "pce:request-id": "request 1"
+     * },
+     * "pce:service-a-end": {
+     * "pce:service-rate": "0",
+     * "pce:node-id": "XPONDER-1-1"
+     * },
+     * "pce:service-z-end": {
+     * "pce:service-rate": "0",
+     * "pce:node-id": "XPONDER-3-1"
+     * },
+     * "pce:hard-constraints": {
+     * "pce:diversity": {
+     * "existing-service": ["Path test-1-54"],
+     * "existing-service-applicability": {
+     * "node": "true"
+     * }
+     * }
+     * },
+     * "pce:pce-metric": "hop-count"
+     * }
+     * }</code>
      *
+     * @param base Path Computation Request Input base
      * @return input PathComputationRequestInput data
      */
     public static PathComputationRequestInput build_diversity_from_request(PathComputationRequestInput base) {
@@ -505,47 +670,47 @@ public final class PceTestData {
     public static ServiceCreateInput buildServiceCreateInput() {
 
         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input.ServiceAEnd serviceAEnd =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.service
-                .rev190531.service.create.input.ServiceAEndBuilder()
-                .setClli("clli")
-                .setServiceRate((long)0)
-                .setNodeId(new NodeIdType("XPONDER-1-2"))
-                .setTxDirection(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types
-                    .rev190531.service.endpoint.TxDirectionBuilder()
-                    .setPort(new PortBuilder().build())
-                    .build())
-                .setRxDirection(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types
-                    .rev190531.service.endpoint.RxDirectionBuilder()
-                    .setPort(new PortBuilder().build())
-                    .build())
-                .build();
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531
+                        .service.create.input.ServiceAEndBuilder()
+                        .setClli("clli")
+                        .setServiceRate((long) 0)
+                        .setNodeId(new NodeIdType("XPONDER-1-2"))
+                        .setTxDirection(new org.opendaylight.yang.gen.v1.http.org
+                                .openroadm.common.service.types.rev190531.service.endpoint.TxDirectionBuilder()
+                                .setPort(new PortBuilder().build())
+                                .build())
+                        .setRxDirection(new org.opendaylight.yang.gen.v1.http.org
+                                .openroadm.common.service.types.rev190531.service.endpoint.RxDirectionBuilder()
+                                .setPort(new PortBuilder().build())
+                                .build())
+                        .build();
 
         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input.ServiceZEnd serviceZEnd =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.service
-            .rev190531.service.create.input.ServiceZEndBuilder()
-                .setClli("clli")
-                .setServiceRate((long)0)
-                .setNodeId(new NodeIdType("XPONDER-3-2"))
-                .setTxDirection(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types
-                    .rev190531.service.endpoint.TxDirectionBuilder()
-                    .setPort(new PortBuilder().build())
-                    .build())
-                .setRxDirection(new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types
-                    .rev190531.service.endpoint.RxDirectionBuilder()
-                    .setPort(new PortBuilder().build())
-                    .build())
-                .build();
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531
+                        .service.create.input.ServiceZEndBuilder()
+                        .setClli("clli")
+                        .setServiceRate((long) 0)
+                        .setNodeId(new NodeIdType("XPONDER-3-2"))
+                        .setTxDirection(new org.opendaylight.yang.gen.v1.http.org
+                                .openroadm.common.service.types.rev190531.service.endpoint.TxDirectionBuilder()
+                                .setPort(new PortBuilder().build())
+                                .build())
+                        .setRxDirection(new org.opendaylight.yang.gen.v1.http.org
+                                .openroadm.common.service.types.rev190531.service.endpoint.RxDirectionBuilder()
+                                .setPort(new PortBuilder().build())
+                                .build())
+                        .build();
 
         ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder()
-            .setCommonId("commonId")
-            .setConnectionType(ConnectionType.Service)
-            .setCustomer("Customer")
-            .setServiceName("service 1")
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd)
-            .setSdncRequestHeader(new SdncRequestHeaderBuilder()
-                .setRequestId("request 1")
-                .build());
+                .setCommonId("commonId")
+                .setConnectionType(ConnectionType.Service)
+                .setCustomer("Customer")
+                .setServiceName("service 1")
+                .setServiceAEnd(serviceAEnd)
+                .setServiceZEnd(serviceZEnd)
+                .setSdncRequestHeader(new SdncRequestHeaderBuilder()
+                        .setRequestId("request 1")
+                        .build());
 
         return builtInput.build();
     }