GNPy stub for PCE 11/90011/7
authormanuedelf <emmanuelle.delfour@gmail.com>
Wed, 27 May 2020 18:48:12 +0000 (20:48 +0200)
committerGuillaume Lambert <guillaume.lambert@orange.com>
Thu, 4 Jun 2020 10:25:38 +0000 (10:25 +0000)
Add GNPy stub to simulate GNPy API
Add class util to deserialize file content to GNPy Yang object
Add example how to use GNPy stub
Add JSON files for openroadm-network
Add JSON file for opendroadm-topology
Add JSON file for GNPy result
Add JSON file for GNPY request
Add simplelogger.properties file for unit tests log

JIRA: TRNSPRTPCE-209
Change-Id: Id2ea6ba918636a35b99cad2acc6176115d3dbe2b

14 files changed:
pce/pom.xml
pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ConnectToGnpyServerTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/JerseyServer.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java
pce/src/test/resources/gnpy/gnpy_network.json [new file with mode: 0644]
pce/src/test/resources/gnpy/gnpy_request.json [new file with mode: 0644]
pce/src/test/resources/gnpy/gnpy_result_no_path.json [new file with mode: 0644]
pce/src/test/resources/gnpy/gnpy_result_with_path.json [new file with mode: 0644]
pce/src/test/resources/gnpy/gnpy_topology.json [new file with mode: 0644]
pce/src/test/resources/simplelogger.properties [new file with mode: 0644]

index b84248f1820e39b1764a1944a4eaf6bdce5ffdcd..177eb971e003822597dafdb6c08f45e02c3f5294 100644 (file)
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
-Copyright © 2017 AT&T and others. All rights reserved.
+<!-- Copyright © 2017 AT&T 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 Author: Martial Coulibaly <martial.coulibaly@gfi.com>
+    on behalf of Orange -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
-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
+    <modelVersion>4.0.0</modelVersion>
 
-Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.opendaylight.mdsal</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>5.0.10</version>
+        <relativePath />
+    </parent>
 
-  <modelVersion>4.0.0</modelVersion>
+    <groupId>org.opendaylight.transportpce</groupId>
+    <artifactId>transportpce-pce</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
 
-  <parent>
-    <groupId>org.opendaylight.mdsal</groupId>
-    <artifactId>binding-parent</artifactId>
-    <version>5.0.10</version>
-    <relativePath/>
-  </parent>
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>transportpce-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jgrapht</groupId>
+            <artifactId>jgrapht-core</artifactId>
+            <version>1.2.0</version>
+        </dependency>
 
-  <groupId>org.opendaylight.transportpce</groupId>
-  <artifactId>transportpce-pce</artifactId>
-  <version>2.0.0-SNAPSHOT</version>
-  <packaging>bundle</packaging>
+        <!-- Sodium bump: javax.annotation.Nullable and friends -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+            <optional>true</optional>
+        </dependency>
 
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>transportpce-common</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.jgrapht</groupId>
-      <artifactId>jgrapht-core</artifactId>
-      <version>1.2.0</version>
-    </dependency>
+        <dependency>
+            <groupId>org.opendaylight.transportpce</groupId>
+            <artifactId>test-common</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
 
-    <!-- Sodium bump: javax.annotation.Nullable and friends -->
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <version>3.0.2</version>
-      <optional>true</optional>
-    </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>2.25.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-core</artifactId>
+            <version>2.0.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito2</artifactId>
+            <version>2.0.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>2.0.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-grizzly2-http</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>javax.activation-api</artifactId>
+            <version>1.2.0</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 
-    <dependency>
-      <groupId>org.opendaylight.transportpce</groupId>
-      <artifactId>test-common</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
+    <repositories>
+        <repository>
+            <id>browserid-snapshots</id>
+            <name>browserid-snapshots</name>
+            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
+        </repository>
+    </repositories>
 
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <version>2.25.0</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-core</artifactId>
-      <version>2.0.2</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-api-mockito2</artifactId>
-      <version>2.0.2</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-module-junit4</artifactId>
-      <version>2.0.2</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <repositories>
-    <repository>
-      <id>browserid-snapshots</id>
-      <name>browserid-snapshots</name>
-      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
-    </repository>
-  </repositories>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>2.6</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>
index 06a5838db860611449830327f03c45e63cbec55f..6bf59376a6dbd9b661dc64372771e58b6fd283fa 100644 (file)
@@ -14,6 +14,8 @@ 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.gnpy.ConnectToGnpyServer;
+import org.opendaylight.transportpce.pce.gnpy.JerseyServer;
 import org.opendaylight.transportpce.pce.utils.PceTestData;
 import org.opendaylight.transportpce.pce.utils.PceTestUtils;
 import org.opendaylight.transportpce.pce.utils.TransactionUtils;
@@ -27,6 +29,7 @@ public class PceSendingPceRPCsTest extends AbstractTest {
     private NetworkTransactionImpl networkTransaction;
     private DataStoreContext dataStoreContext = this.getDataStoreContextUtil();
     private DataBroker dataBroker = this.getDataBroker();
+    private JerseyServer  jerseyServer = new JerseyServer();
 
 
     @Before
@@ -48,7 +51,13 @@ public class PceSendingPceRPCsTest extends AbstractTest {
 
     @Test
     public void pathComputationTest() throws Exception {
+        jerseyServer.setUp();
+        pceSendingPceRPCs =
+                new PceSendingPceRPCs(PceTestData.getGnpyPCERequest("nodeA","nodeZ"), networkTransaction);
         pceSendingPceRPCs.pathComputation();
+        ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer();
+        Assert.assertTrue(connectToGnpy.isGnpyURLExist());
+        jerseyServer.tearDown();
 
     }
 
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ConnectToGnpyServerTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ConnectToGnpyServerTest.java
new file mode 100644 (file)
index 0000000..739d8b0
--- /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 static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import javax.ws.rs.core.Application;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Test;
+
+public class ConnectToGnpyServerTest extends JerseyTest {
+    static {
+        //we must hardcode port because it's hardcoded in ConnectToGnpyServer
+        System.setProperty("jersey.config.test.container.port", "8008");
+    }
+
+    @Override
+    protected Application configure() {
+        return new ResourceConfig(GnpyStub.class);
+    }
+
+    @Test
+    public void isGnpyURLExistTest() throws GnpyException, IOException {
+        ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer();
+        assertTrue(connectToGnpy.isGnpyURLExist());
+    }
+
+    @Test
+    public void returnGnpyResponseTest() throws GnpyException, IOException {
+        ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer();
+        String result = connectToGnpy.returnGnpyResponse(Files.readString(
+                Paths.get("src", "test", "resources", "gnpy", "gnpy_request.json"), StandardCharsets.US_ASCII));
+        assertNotNull("result should not be null", result);
+        assertTrue("Result should not be empty", !result.isEmpty());
+    }
+
+}
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java
new file mode 100644 (file)
index 0000000..f2d1a87
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * 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 com.google.gson.stream.JsonReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.HEAD;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+import org.opendaylight.transportpce.pce.utils.JsonUtil;
+import org.opendaylight.yang.gen.v1.gnpy.gnpy.api.rev190103.GnpyApi;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequest;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Path("/gnpy/api/v1.0/files")
+public class GnpyStub {
+    private static final Logger LOG = LoggerFactory.getLogger(GnpyStub.class);
+
+    @HEAD
+    public Response testConnection() {
+        return Response.ok().build();
+    }
+
+    @POST
+    @Produces({ "application/json" })
+    @Consumes({ "application/json" })
+    public Response computePath(String body) {
+        LOG.info("Received path request {}", body);
+        // as type-element and explicit route usage are not in the same namespace than
+        // gnpy-api,
+        // we add to add prefix if they are not set (request generated by
+        // GnpyUtilitiesImpl does not
+        // contain prefix)
+        if (body != null && !body.contains("gnpy-network-topology")) {
+            body = body.replaceAll("\"type\":\\s*\"", "\"type\":\"gnpy-network-topology:")
+                    .replaceAll("\"length_units\":\\s*\"", "\"length_units\":\"gnpy-network-topology:");
+        }
+        if (body != null && !body.contains("gnpy-path-computation-simplified")) {
+            body = body.replaceAll("\"explicit-route-usage\":\\s*\"",
+                    "\"explicit-route-usage\":\"gnpy-path-computation-simplified:");
+        }
+        GnpyApi request = (GnpyApi) JsonUtil.getInstance().getDataObjectFromJson(new JsonReader(new StringReader(body)),
+                QName.create("gnpy:gnpy-api", "2019-01-03", "gnpy-api"));
+        URI location = URI.create("http://127.0.0.1:8008/gnpy/api/v1.0/files");
+        // TODO: return different response based on body data
+        try {
+            String response = null;
+            List<PathRequest> pathRequest = request.getServiceFile().getPathRequest();
+            // this condition is totally arbitrary and could be modified
+            if (!pathRequest.isEmpty() && "127.0.0.31".contentEquals(pathRequest.get(0).getSource().stringValue())) {
+                response = Files
+                        .readString(Paths.get("src", "test", "resources", "gnpy", "gnpy_result_with_path.json"));
+            } else {
+                response = Files.readString(Paths.get("src", "test", "resources", "gnpy", "gnpy_result_no_path.json"));
+            }
+
+            return Response.created(location).entity(response).build();
+        } catch (IOException e) {
+            return Response.serverError().build();
+        }
+    }
+
+}
index 23289ae17337c8856f5ce8c27bc7abaecfa510ed..7c2f424971d7595bddefcb806e2d588bc5f85a0e 100644 (file)
  */
 package org.opendaylight.transportpce.pce.gnpy;
 
-import org.junit.Before;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import com.google.gson.stream.JsonReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.net.URI;
+import java.util.concurrent.ExecutionException;
+import org.glassfish.grizzly.http.server.HttpServer;
+import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+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.utils.JsonUtil;
 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;
+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.Networks;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
 
 public class GnpyUtilitiesImplTest extends AbstractTest {
 
+    private static final Logger LOG = LoggerFactory.getLogger(GnpyUtilitiesImplTest.class);
     private GnpyUtilitiesImpl gnpyUtilitiesImpl;
     private NetworkTransactionImpl networkTransaction;
+    private static HttpServer httpServer;
 
-    @Before
-    public void setUp()throws Exception {
-        PceTestUtils.writeNetworkIntoDataStore(this.getDataBroker(), this.getDataStoreContextUtil(),
-                TransactionUtils.getNetworkForSpanLoss());
+    public GnpyUtilitiesImplTest() {
         networkTransaction = new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker()));
+        JsonReader networkReader = null;
+        JsonReader topoReader = null;
+
+        try {
+            // load openroadm-network
+            Reader gnpyNetwork = new FileReader("src/test/resources/gnpy/gnpy_network.json");
+
+            networkReader = new JsonReader(gnpyNetwork);
+            Networks networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(networkReader,
+                    QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks"));
+            saveOpenRoadmNetwork(networks.getNetwork().get(0), NetworkUtils.UNDERLAY_NETWORK_ID);
+            // load openroadm-topology
+            Reader gnpyTopo = new FileReader("src/test/resources/gnpy/gnpy_topology.json");
+            topoReader = new JsonReader(gnpyTopo);
+            networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(topoReader,
+                    QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks"));
+            saveOpenRoadmNetwork(networks.getNetwork().get(0), NetworkUtils.OVERLAY_NETWORK_ID);
+        } catch (FileNotFoundException | InterruptedException | ExecutionException e) {
+            LOG.error("Cannot init test ", e);
+            fail("Cannot init test ");
 
+        } finally {
+            try {
+                if (networkReader != null) {
+                    networkReader.close();
+                }
+                if (topoReader != null) {
+                    topoReader.close();
+                }
+            } catch (IOException e) {
+                LOG.warn("Cannot close reader ", e);
+            }
+        }
 
     }
 
-    @Test(expected = Exception.class)
+    @BeforeClass
+    public static void init() {
+        // here we cannot use JerseyTest as we already extends AbstractTest
+        final ResourceConfig rc = new ResourceConfig(GnpyStub.class);
+        httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create("http://127.0.0.1:8008"), rc);
+    }
+
+    @AfterClass
+    public static void tearDown() {
+        httpServer.shutdownNow();
+    }
+
+    private void saveOpenRoadmNetwork(Network network, String networkId)
+            throws InterruptedException, ExecutionException {
+        InstanceIdentifier<Network> nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class)
+                .child(Network.class, new NetworkKey(new NetworkId(networkId))).build();
+        WriteTransaction dataWriteTransaction = this.getDataBroker().newWriteOnlyTransaction();
+        dataWriteTransaction.put(LogicalDatastoreType.CONFIGURATION, nwInstanceIdentifier, network);
+        dataWriteTransaction.commit().get();
+    }
+
+    @Test
+    public void askNewPathFromGnpyNullResultTest() throws Exception {
+        gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction,
+                PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"));
+        assertNull("No hard constraints should be available", gnpyUtilitiesImpl.askNewPathFromGnpy(null));
+
+    }
+
+    @Test
     public void askNewPathFromGnpyTest() throws Exception {
-        gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCERequest());
-        PceConstraintsCalc constraints =
-                new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(), networkTransaction);
+        gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction,
+                PceTestData.getGnpyPCERequest("XPONDER-3", "XPONDER-4"));
+        PceConstraintsCalc constraints = new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(),
+                networkTransaction);
         PceConstraints pceHardConstraints = constraints.getPceHardConstraints();
-        gnpyUtilitiesImpl.askNewPathFromGnpy(pceHardConstraints);
+        assertNotNull("Hard constraints should be available",gnpyUtilitiesImpl.askNewPathFromGnpy(pceHardConstraints));
+
+
     }
 
     @Test(expected = Exception.class)
@@ -46,6 +136,4 @@ public class GnpyUtilitiesImplTest extends AbstractTest {
         gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCERequest());
         gnpyUtilitiesImpl.gnpyResponseOneDirection(null);
     }
-
-
 }
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/JerseyServer.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/JerseyServer.java
new file mode 100644 (file)
index 0000000..6678c94
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * 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 javax.ws.rs.core.Application;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+
+
+public class JerseyServer extends JerseyTest {
+
+    static {
+        //we must hardcode port because it's hardcoded in ConnectToGnpyServer
+        System.setProperty("jersey.config.test.container.port", "8008");
+    }
+
+    @Override
+    protected Application configure() {
+        return new ResourceConfig(GnpyStub.class);
+    }
+}
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java
new file mode 100644 (file)
index 0000000..b97d105
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * 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.utils;
+
+import com.google.gson.stream.JsonReader;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ServiceLoader;
+import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider;
+import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
+import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
+import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+public final class JsonUtil {
+    private static final Logger LOG = LoggerFactory.getLogger(JsonUtil.class);
+    private static JsonUtil instance;
+
+    private SchemaContext schemaCtx;
+
+    private BindingNormalizedNodeCodecRegistry codecRegistry;
+
+    private JsonUtil() {
+        List<YangModuleInfo> moduleInfos = new LinkedList<>();
+        ServiceLoader<YangModelBindingProvider> yangProviderLoader = ServiceLoader.load(YangModelBindingProvider.class);
+        for (YangModelBindingProvider yangModelBindingProvider : yangProviderLoader) {
+            moduleInfos.add(yangModelBindingProvider.getModuleInfo());
+        }
+        /* Create the schema context for loaded models */
+        ModuleInfoBackedContext moduleInfoBackedCntxt = ModuleInfoBackedContext.create();
+        moduleInfoBackedCntxt.addModuleInfos(moduleInfos);
+        schemaCtx = moduleInfoBackedCntxt.getSchemaContext();
+        if (schemaCtx == null) {
+            throw new IllegalStateException("Failed to load schema context");
+        }
+        // Create the binding binding normalized node codec registry
+        BindingRuntimeContext bindingRuntimeContext = BindingRuntimeContext.create(moduleInfoBackedCntxt, schemaCtx);
+        codecRegistry = new BindingNormalizedNodeCodecRegistry(bindingRuntimeContext);
+    }
+
+    public static JsonUtil getInstance() {
+        if (instance == null) {
+            instance = new JsonUtil();
+        }
+        return instance;
+    }
+
+    public DataObject getDataObjectFromJson(JsonReader reader, QName pathQname) {
+        NormalizedNodeResult result = new NormalizedNodeResult();
+        try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+                JsonParserStream jsonParser = JsonParserStream.create(streamWriter,
+                        JSONCodecFactorySupplier.RFC7951.getShared(schemaCtx), schemaCtx);) {
+            jsonParser.parse(reader);
+            YangInstanceIdentifier yangId = YangInstanceIdentifier.of(pathQname);
+            if (codecRegistry.fromNormalizedNode(yangId, result.getResult()) != null) {
+                return codecRegistry.fromNormalizedNode(yangId, result.getResult()).getValue();
+            } else {
+                return null;
+            }
+        } catch (IOException | IllegalArgumentException e) {
+            LOG.error("Cannot deserialize JSON ", e);
+            return null;
+        }
+
+    }
+}
index 970954d4899d6cf61150d8547538cf48a0334a15..cbb7afa44859a64d66ab27f40d567a0e7fbdd21d 100644 (file)
@@ -806,4 +806,96 @@ public final class PceTestData {
 
         return builtInput.build();
     }
+
+    public static PathComputationRequestInput getGnpyPCERequest(String nodeA, String nodeZ) {
+        ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder()
+                .setRequestId("request1")
+                .build();
+        ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
+                .setServiceFormat(ServiceFormat.Ethernet)
+                .setServiceRate(100L)
+                .setClli("clli11")
+                .setNodeId(nodeA)
+                .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(nodeZ)
+                .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;
+    }
 }
diff --git a/pce/src/test/resources/gnpy/gnpy_network.json b/pce/src/test/resources/gnpy/gnpy_network.json
new file mode 100644 (file)
index 0000000..231dc53
--- /dev/null
@@ -0,0 +1,142 @@
+{
+"ietf-network:networks":
+{
+   "network":
+      {
+        "network-id": "openroadm-network",
+      "node": [
+        {
+          "node-id": "XPONDER-1",
+          "org-openroadm-network:model": "1",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.11",
+          "org-openroadm-common-network:node-type": "XPONDER",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node1"
+            }
+          ]
+        },
+        {
+          "node-id": "XPONDER-2",
+          "org-openroadm-network:model": "1",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.21",
+          "org-openroadm-common-network:node-type": "XPONDER",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node2"
+            }
+          ]
+        },
+        {
+          "node-id": "XPONDER-3",
+          "org-openroadm-network:model": "1",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.31",
+          "org-openroadm-common-network:node-type": "XPONDER",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node3"
+            }
+          ]
+        },
+        {
+          "node-id": "XPONDER-4",
+          "org-openroadm-network:model": "1",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.41",
+          "org-openroadm-common-network:node-type": "XPONDER",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node4"
+            }
+          ]
+        },
+        {
+          "node-id": "XPONDER-5",
+          "org-openroadm-network:model": "1",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.51",
+          "org-openroadm-common-network:node-type": "XPONDER",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node5"
+            }
+          ]
+        },
+        {
+          "node-id": "OpenROADM-1",
+          "org-openroadm-network:model": "2",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.10",
+          "org-openroadm-common-network:node-type": "ROADM",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node1"
+            }
+          ]
+        },
+        {
+          "node-id": "OpenROADM-2",
+          "org-openroadm-network:model": "2",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.20",
+          "org-openroadm-common-network:node-type": "ROADM",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node2"
+            }
+          ]
+        },
+        {
+          "node-id": "OpenROADM-3",
+          "org-openroadm-network:model": "2",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.30",
+          "org-openroadm-common-network:node-type": "ROADM",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node3"
+            }
+          ]
+        },
+        {
+          "node-id": "OpenROADM-4",
+          "org-openroadm-network:model": "2",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.40",
+          "org-openroadm-common-network:node-type": "ROADM",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node4"
+            }
+          ]
+        },
+        {
+          "node-id": "OpenROADM-5",
+          "org-openroadm-network:model": "2",
+          "org-openroadm-network:vendor": "vendorA",
+          "org-openroadm-network:ip": "127.0.0.50",
+          "org-openroadm-common-network:node-type": "ROADM",
+          "supporting-node": [
+            {
+              "network-ref": "clli-network",
+              "node-ref": "Node5"
+            }
+          ]
+        }
+      ]
+    }
+   
+}
+}
\ No newline at end of file
diff --git a/pce/src/test/resources/gnpy/gnpy_request.json b/pce/src/test/resources/gnpy/gnpy_request.json
new file mode 100644 (file)
index 0000000..0219eef
--- /dev/null
@@ -0,0 +1,630 @@
+{
+  "gnpy-api": {
+    "topology-file": {
+      "elements": [
+        {
+          "uid": "127.0.0.40",
+         "type": "gnpy-network-topology:Roadm",
+          "metadata": {
+            "location": {
+              "region": "OpenROADM-4",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "target_pch_out_db": -20
+          }
+        },
+        {
+          "uid": "127.0.0.50",
+         "type": "gnpy-network-topology:Roadm",
+          "metadata": {
+            "location": {
+              "region": "OpenROADM-5",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "target_pch_out_db": -20
+          }
+        },
+        {
+          "uid": "127.0.0.20",
+         "type": "gnpy-network-topology:Roadm",
+          "metadata": {
+            "location": {
+              "region": "OpenROADM-2",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "target_pch_out_db": -20
+          }
+        },
+        {
+          "uid": "127.0.0.10",
+         "type": "gnpy-network-topology:Roadm",
+          "metadata": {
+            "location": {
+              "region": "OpenROADM-1",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "target_pch_out_db": -20
+          }
+        },
+        {
+          "uid": "127.0.0.30",
+         "type": "gnpy-network-topology:Roadm",
+          "metadata": {
+            "location": {
+              "region": "OpenROADM-3",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "target_pch_out_db": -20
+          }
+        },
+        {
+          "uid": "127.0.0.11",
+          "type": "gnpy-network-topology:Transceiver",
+          "metadata": {
+            "location": {
+              "region": "XPONDER-1",
+              "latitude": 0,
+              "longitude": 0
+            }
+          }
+        },
+        {
+          "uid": "127.0.0.51",
+          "type": "gnpy-network-topology:Transceiver",
+          "metadata": {
+            "location": {
+              "region": "XPONDER-5",
+              "latitude": 0,
+              "longitude": 0
+            }
+          }
+        },
+        {
+          "uid": "127.0.0.41",
+          "type": "gnpy-network-topology:Transceiver",
+          "metadata": {
+            "location": {
+              "region": "XPONDER-4",
+              "latitude": 0,
+              "longitude": 0
+            }
+          }
+        },
+        {
+          "uid": "127.0.0.31",
+          "type": "gnpy-network-topology:Transceiver",
+          "metadata": {
+            "location": {
+              "region": "XPONDER-3",
+              "latitude": 0,
+              "longitude": 0
+            }
+          }
+        },
+        {
+          "uid": "127.0.0.21",
+          "type": "gnpy-network-topology:Transceiver",
+          "metadata": {
+            "location": {
+              "region": "XPONDER-2",
+              "latitude": 0,
+              "longitude": 0
+            }
+          }
+        },
+        {
+          "uid": "243.0.0.1",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 100,
+            "loss_coef": 0.11999999999999999555910790149937383830547332763671875,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.2",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 100,
+            "loss_coef": 0.29,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.3",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 60,
+            "loss_coef": 0.12,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.4",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 100,
+            "loss_coef": 0.29,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.5",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 60,
+            "loss_coef": 0.12,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.6",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 140,
+            "loss_coef": 0.2127659574468085124099303584443987347185611724853515625,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.7",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 100,
+            "loss_coef": 0.29,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.8",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 100,
+            "loss_coef": 0.11999999999999999555910790149937383830547332763671875,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.9",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 100,
+            "loss_coef": 0.29,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.10",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 60,
+            "loss_coef": 0.12,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.11",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 60,
+            "loss_coef": 0.12,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.12",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 100,
+            "loss_coef": 0.29,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.13",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 140,
+            "loss_coef": 0.2127659574468085124099303584443987347185611724853515625,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        },
+        {
+          "uid": "243.0.0.14",
+          "type": "gnpy-network-topology:Fiber",
+          "type_variety": "SSMF",
+          "metadata": {
+            "location": {
+              "city": "N/A",
+              "region": "N/A",
+              "latitude": 0,
+              "longitude": 0
+            }
+          },
+          "params": {
+            "length": 100,
+            "loss_coef": 0.29,
+            "length_units": "gnpy-network-topology:km",
+            "att_in": 0,
+            "con_in": 0,
+            "con_out": 0
+          }
+        }
+      ],
+      "connections": [
+        {
+          "from_node": "127.0.0.51",
+          "to_node": "127.0.0.50"
+        },
+        {
+          "from_node": "127.0.0.30",
+          "to_node": "127.0.0.31"
+        },
+        {
+          "from_node": "127.0.0.10",
+          "to_node": "243.0.0.1"
+        },
+        {
+          "from_node": "243.0.0.1",
+          "to_node": "127.0.0.30"
+        },
+        {
+          "from_node": "127.0.0.20",
+          "to_node": "127.0.0.21"
+        },
+        {
+          "from_node": "127.0.0.20",
+          "to_node": "243.0.0.2"
+        },
+        {
+          "from_node": "243.0.0.2",
+          "to_node": "127.0.0.10"
+        },
+        {
+          "from_node": "127.0.0.20",
+          "to_node": "243.0.0.3"
+        },
+        {
+          "from_node": "243.0.0.3",
+          "to_node": "127.0.0.50"
+        },
+        {
+          "from_node": "127.0.0.40",
+          "to_node": "127.0.0.41"
+        },
+        {
+          "from_node": "127.0.0.40",
+          "to_node": "243.0.0.4"
+        },
+        {
+          "from_node": "243.0.0.4",
+          "to_node": "127.0.0.30"
+        },
+        {
+          "from_node": "127.0.0.50",
+          "to_node": "243.0.0.5"
+        },
+        {
+          "from_node": "243.0.0.5",
+          "to_node": "127.0.0.30"
+        },
+        {
+          "from_node": "127.0.0.31",
+          "to_node": "127.0.0.30"
+        },
+        {
+          "from_node": "127.0.0.50",
+          "to_node": "127.0.0.51"
+        },
+        {
+          "from_node": "127.0.0.20",
+          "to_node": "243.0.0.6"
+        },
+        {
+          "from_node": "243.0.0.6",
+          "to_node": "127.0.0.30"
+        },
+        {
+          "from_node": "127.0.0.30",
+          "to_node": "243.0.0.7"
+        },
+        {
+          "from_node": "243.0.0.7",
+          "to_node": "127.0.0.40"
+        },
+        {
+          "from_node": "127.0.0.11",
+          "to_node": "127.0.0.10"
+        },
+        {
+          "from_node": "127.0.0.30",
+          "to_node": "243.0.0.8"
+        },
+        {
+          "from_node": "243.0.0.8",
+          "to_node": "127.0.0.10"
+        },
+        {
+          "from_node": "127.0.0.40",
+          "to_node": "243.0.0.9"
+        },
+        {
+          "from_node": "243.0.0.9",
+          "to_node": "127.0.0.50"
+        },
+        {
+          "from_node": "127.0.0.30",
+          "to_node": "243.0.0.10"
+        },
+        {
+          "from_node": "243.0.0.10",
+          "to_node": "127.0.0.50"
+        },
+        {
+          "from_node": "127.0.0.50",
+          "to_node": "243.0.0.11"
+        },
+        {
+          "from_node": "243.0.0.11",
+          "to_node": "127.0.0.20"
+        },
+        {
+          "from_node": "127.0.0.50",
+          "to_node": "243.0.0.12"
+        },
+        {
+          "from_node": "243.0.0.12",
+          "to_node": "127.0.0.40"
+        },
+        {
+          "from_node": "127.0.0.21",
+          "to_node": "127.0.0.20"
+        },
+        {
+          "from_node": "127.0.0.41",
+          "to_node": "127.0.0.40"
+        },
+        {
+          "from_node": "127.0.0.30",
+          "to_node": "243.0.0.13"
+        },
+        {
+          "from_node": "243.0.0.13",
+          "to_node": "127.0.0.20"
+        },
+        {
+          "from_node": "127.0.0.10",
+          "to_node": "127.0.0.11"
+        },
+        {
+          "from_node": "127.0.0.10",
+          "to_node": "243.0.0.14"
+        },
+        {
+          "from_node": "243.0.0.14",
+          "to_node": "127.0.0.20"
+        }
+      ]
+    },
+    "service-file": {
+      "path-request": [
+        {
+          "request-id": 2,
+          "bidirectional": false,
+          "source": "127.0.0.11",
+          "destination": "127.0.0.41",
+          "src-tp-id": "c3JjVHBJZA==",
+          "dst-tp-id": "ZHN0VHBJZA==",
+          "explicit-route-objects": {
+            "route-object-include-exclude": [
+              {
+                "explicit-route-usage": "gnpy-path-computation-simplified:route-include-ero",
+                "index": 0,
+                "num-unnum-hop": {
+                  "node-id": "127.0.0.20",
+                  "link-tp-id": "1",
+                  "hop-type": "STRICT"
+                }
+              },
+              {
+                "explicit-route-usage": "gnpy-path-computation-simplified:route-include-ero",
+                "index": 1,
+                "num-unnum-hop": {
+                  "node-id": "127.0.0.30",
+                  "link-tp-id": "1",
+                  "hop-type": "STRICT"
+                }
+              }
+            ]
+          },
+          "path-constraints": {
+            "te-bandwidth": {
+              "technology": "flexi-grid",
+              "trx_type": "openroadm-beta1",
+              "trx_mode": "W100G",
+              "effective-freq-slot": [
+                {
+                  "N": 0,
+                  "M": 4
+                }
+              ],
+              "spacing": 50000000000,
+              "path_bandwidth": 100
+            }
+          }
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/pce/src/test/resources/gnpy/gnpy_result_no_path.json b/pce/src/test/resources/gnpy/gnpy_result_no_path.json
new file mode 100644 (file)
index 0000000..d0b5886
--- /dev/null
@@ -0,0 +1,159 @@
+{
+    "result": {
+        "response": [
+            {
+                "response-id": 1,
+                "no-path": {
+                    "no-path": "MODE_NOT_FEASIBLE",
+                    "path-properties": {
+                        "path-metric": [
+                            {
+                                "metric-type": "SNR-bandwidth",
+                                "accumulative-value": 13.06
+                            },
+                            {
+                                "metric-type": "SNR-0.1nm",
+                                "accumulative-value": 16.57
+                            },
+                            {
+                                "metric-type": "OSNR-bandwidth",
+                                "accumulative-value": 13.43
+                            },
+                            {
+                                "metric-type": "OSNR-0.1nm",
+                                "accumulative-value": 16.93
+                            },
+                            {
+                                "metric-type": "reference_power",
+                                "accumulative-value": 0.001
+                            },
+                            {
+                                "metric-type": "path_bandwidth",
+                                "accumulative-value": 100
+                            }
+                        ],
+                        "path-route-objects": [
+                            {
+                                "path-route-object": {
+                                    "index": 0,
+                                    "num-unnum-hop": {
+                                        "node-id": "127.0.0.51",
+                                        "link-tp-id": "127.0.0.51"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 1,
+                                    "transponder": {
+                                        "transponder-type": "openroadm-beta1",
+                                        "transponder-mode": "W100G"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 2,
+                                    "num-unnum-hop": {
+                                        "node-id": "127.0.0.50",
+                                        "link-tp-id": "127.0.0.50"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 3,
+                                    "num-unnum-hop": {
+                                        "node-id": "Edfa0_127.0.0.50",
+                                        "link-tp-id": "Edfa0_127.0.0.50"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 4,
+                                    "num-unnum-hop": {
+                                        "node-id": "2.2.2.4",
+                                        "link-tp-id": "2.2.2.4"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 5,
+                                    "num-unnum-hop": {
+                                        "node-id": "Edfa0_2.2.2.4",
+                                        "link-tp-id": "Edfa0_2.2.2.4"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 6,
+                                    "num-unnum-hop": {
+                                        "node-id": "127.0.0.30",
+                                        "link-tp-id": "127.0.0.30"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 7,
+                                    "num-unnum-hop": {
+                                        "node-id": "Edfa1_127.0.0.30",
+                                        "link-tp-id": "Edfa1_127.0.0.30"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 8,
+                                    "num-unnum-hop": {
+                                        "node-id": "2.2.2.7",
+                                        "link-tp-id": "2.2.2.7"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 9,
+                                    "num-unnum-hop": {
+                                        "node-id": "Edfa0_2.2.2.7",
+                                        "link-tp-id": "Edfa0_2.2.2.7"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 10,
+                                    "num-unnum-hop": {
+                                        "node-id": "127.0.0.10",
+                                        "link-tp-id": "127.0.0.10"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 11,
+                                    "num-unnum-hop": {
+                                        "node-id": "127.0.0.11",
+                                        "link-tp-id": "127.0.0.11"
+                                    }
+                                }
+                            },
+                            {
+                                "path-route-object": {
+                                    "index": 12,
+                                    "transponder": {
+                                        "transponder-type": "openroadm-beta1",
+                                        "transponder-mode": "W100G"
+                                    }
+                                }
+                            }
+                        ]
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/pce/src/test/resources/gnpy/gnpy_result_with_path.json b/pce/src/test/resources/gnpy/gnpy_result_with_path.json
new file mode 100644 (file)
index 0000000..0a4c853
--- /dev/null
@@ -0,0 +1,399 @@
+{
+    "result": {
+        "response": [
+            {
+                "response-id": 2,
+                "path-properties": {
+                    "path-metric": [
+                        {
+                            "metric-type": "SNR-bandwidth",
+                            "accumulative-value": 15.52
+                        },
+                        {
+                            "metric-type": "SNR-0.1nm",
+                            "accumulative-value": 19.02
+                        },
+                        {
+                            "metric-type": "OSNR-bandwidth",
+                            "accumulative-value": 16.51
+                        },
+                        {
+                            "metric-type": "OSNR-0.1nm",
+                            "accumulative-value": 20.01
+                        },
+                        {
+                            "metric-type": "reference_power",
+                            "accumulative-value": 0.0015848931924611136
+                        },
+                        {
+                            "metric-type": "path_bandwidth",
+                            "accumulative-value": 100
+                        }
+                    ],
+                    "path-route-objects": [
+                        {
+                            "path-route-object": {
+                                "index": 0,
+                                "num-unnum-hop": {
+                                    "node-id": "127.0.0.11",
+                                    "link-tp-id": "127.0.0.11"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 1,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 2,
+                                "transponder": {
+                                    "transponder-type": "openroadm-beta1",
+                                    "transponder-mode": "W100G"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 3,
+                                "num-unnum-hop": {
+                                    "node-id": "127.0.0.10",
+                                    "link-tp-id": "127.0.0.10"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 4,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 5,
+                                "num-unnum-hop": {
+                                    "node-id": "Edfa1_127.0.0.10",
+                                    "link-tp-id": "Edfa1_127.0.0.10"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 6,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 7,
+                                "num-unnum-hop": {
+                                    "node-id": "243.0.0.14",
+                                    "link-tp-id": "243.0.0.14"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 8,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 9,
+                                "num-unnum-hop": {
+                                    "node-id": "Edfa0_243.0.0.14",
+                                    "link-tp-id": "Edfa0_243.0.0.14"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 10,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 11,
+                                "num-unnum-hop": {
+                                    "node-id": "127.0.0.20",
+                                    "link-tp-id": "127.0.0.20"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 12,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 13,
+                                "num-unnum-hop": {
+                                    "node-id": "Edfa1_127.0.0.20",
+                                    "link-tp-id": "Edfa1_127.0.0.20"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 14,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 15,
+                                "num-unnum-hop": {
+                                    "node-id": "243.0.0.3",
+                                    "link-tp-id": "243.0.0.3"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 16,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 17,
+                                "num-unnum-hop": {
+                                    "node-id": "Edfa0_243.0.0.3",
+                                    "link-tp-id": "Edfa0_243.0.0.3"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 18,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 19,
+                                "num-unnum-hop": {
+                                    "node-id": "127.0.0.50",
+                                    "link-tp-id": "127.0.0.50"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 20,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 21,
+                                "num-unnum-hop": {
+                                    "node-id": "Edfa0_127.0.0.50",
+                                    "link-tp-id": "Edfa0_127.0.0.50"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 22,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 23,
+                                "num-unnum-hop": {
+                                    "node-id": "243.0.0.5",
+                                    "link-tp-id": "243.0.0.5"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 24,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 25,
+                                "num-unnum-hop": {
+                                    "node-id": "Edfa0_243.0.0.5",
+                                    "link-tp-id": "Edfa0_243.0.0.5"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 26,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 27,
+                                "num-unnum-hop": {
+                                    "node-id": "127.0.0.30",
+                                    "link-tp-id": "127.0.0.30"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 28,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 29,
+                                "num-unnum-hop": {
+                                    "node-id": "Edfa0_127.0.0.30",
+                                    "link-tp-id": "Edfa0_127.0.0.30"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 30,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 31,
+                                "num-unnum-hop": {
+                                    "node-id": "243.0.0.7",
+                                    "link-tp-id": "243.0.0.7"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 32,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 33,
+                                "num-unnum-hop": {
+                                    "node-id": "Edfa0_243.0.0.7",
+                                    "link-tp-id": "Edfa0_243.0.0.7"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 34,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 35,
+                                "num-unnum-hop": {
+                                    "node-id": "127.0.0.40",
+                                    "link-tp-id": "127.0.0.40"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 36,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 37,
+                                "num-unnum-hop": {
+                                    "node-id": "127.0.0.41",
+                                    "link-tp-id": "127.0.0.41"
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 38,
+                                "label-hop": {
+                                    "N": -284,
+                                    "M": 4
+                                }
+                            }
+                        },
+                        {
+                            "path-route-object": {
+                                "index": 39,
+                                "transponder": {
+                                    "transponder-type": "openroadm-beta1",
+                                    "transponder-mode": "W100G"
+                                }
+                            }
+                        }
+                    ]
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/pce/src/test/resources/gnpy/gnpy_topology.json b/pce/src/test/resources/gnpy/gnpy_topology.json
new file mode 100644 (file)
index 0000000..649dbc2
--- /dev/null
@@ -0,0 +1,3178 @@
+{
+"ietf-network:networks":{
+    "network":
+        {
+            "network-id": "openroadm-topology",
+            "ietf-network-topology:link": [
+                {
+                    "link-id": "XPONDER-1XPDR-NW1-TX-toOpenROADM-1-SRG1-SRG1-PP1-RX",
+                    "source": {
+                        "source-node": "XPONDER-1",
+                        "source-tp": "XPDR-NW1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "destination": {
+                        "dest-node": "OpenROADM-1-SRG1",
+                        "dest-tp": "SRG1-PP1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-SRG1-SRG1-PP1-TX-to-XPONDER-1XPDR-NW1-RX"
+                },
+                {
+                    "link-id": "XPONDER-2XPDR-NW1-TX-toOpenROADM-2-SRG1-SRG1-PP1-RX",
+                    "source": {
+                        "source-node": "XPONDER-2",
+                        "source-tp": "XPDR-NW1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-SRG1",
+                        "dest-tp": "SRG1-PP1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-SRG1-SRG1-PP1-TX-to-XPONDER-2XPDR-NW1-RX"
+                },
+                {
+                    "link-id": "XPONDER-3XPDR-NW1-TX-toOpenROADM-3-SRG1-SRG1-PP1-RX",
+                    "source": {
+                        "source-node": "XPONDER-3",
+                        "source-tp": "XPDR-NW1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-SRG1",
+                        "dest-tp": "SRG1-PP1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-PP1-TX-to-XPONDER-3XPDR-NW1-RX"
+                },
+                {
+                    "link-id": "XPONDER-4XPDR-NW1-TX-toOpenROADM-4-SRG1-SRG1-PP1-RX",
+                    "source": {
+                        "source-node": "XPONDER-4",
+                        "source-tp": "XPDR-NW1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "destination": {
+                        "dest-node": "OpenROADM-4-SRG1",
+                        "dest-tp": "SRG1-PP1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-SRG1-SRG1-PP1-TX-to-XPONDER-4XPDR-NW1-RX"
+                },
+                {
+                    "link-id": "XPONDER-5XPDR-NW1-TX-toOpenROADM-5-SRG1-SRG1-PP1-RX",
+                    "source": {
+                        "source-node": "XPONDER-5",
+                        "source-tp": "XPDR-NW1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-SRG1",
+                        "dest-tp": "SRG1-PP1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-SRG1-SRG1-PP1-TX-to-XPONDER-5XPDR-NW1-RX"
+                },
+                {
+                    "link-id": "OpenROADM-1-SRG1-SRG1-PP1-TX-to-XPONDER-1XPDR-NW1-RX",
+                    "source": {
+                        "source-node": "OpenROADM-1-SRG1",
+                        "source-tp": "SRG1-PP1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "destination": {
+                        "dest-node": "XPONDER-1",
+                        "dest-tp": "XPDR-NW1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "XPONDER-1XPDR-NW1-TX-toOpenROADM-1-SRG1-SRG1-PP1-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-SRG1-SRG1-PP1-TX-to-XPONDER-2XPDR-NW1-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-SRG1",
+                        "source-tp": "SRG1-PP1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "destination": {
+                        "dest-node": "XPONDER-2",
+                        "dest-tp": "XPDR-NW1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "XPONDER-2XPDR-NW1-TX-toOpenROADM-2-SRG1-SRG1-PP1-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-SRG1-SRG1-PP1-TX-to-XPONDER-3XPDR-NW1-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-SRG1",
+                        "source-tp": "SRG1-PP1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "destination": {
+                        "dest-node": "XPONDER-3",
+                        "dest-tp": "XPDR-NW1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "XPONDER-3XPDR-NW1-TX-toOpenROADM-3-SRG1-SRG1-PP1-RX"
+                },
+                {
+                    "link-id": "OpenROADM-4-SRG1-SRG1-PP1-TX-to-XPONDER-4XPDR-NW1-RX",
+                    "source": {
+                        "source-node": "OpenROADM-4-SRG1",
+                        "source-tp": "SRG1-PP1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "destination": {
+                        "dest-node": "XPONDER-4",
+                        "dest-tp": "XPDR-NW1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "XPONDER-4XPDR-NW1-TX-toOpenROADM-4-SRG1-SRG1-PP1-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-SRG1-SRG1-PP1-TX-to-XPONDER-5XPDR-NW1-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-SRG1",
+                        "source-tp": "SRG1-PP1-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "destination": {
+                        "dest-node": "XPONDER-5",
+                        "dest-tp": "XPDR-NW1-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "XPONDER-5XPDR-NW1-TX-toOpenROADM-5-SRG1-SRG1-PP1-RX"
+                },
+                {
+                    "link-id": "OpenROADM-1-SRG1-SRG1-CP-TXtoOpenROADM-1-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-1-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-1-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-1-SRG1-SRG1-CP-TXtoOpenROADM-1-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-1-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-1-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG2-DEG2-CTP-TXtoOpenROADM-1-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG4",
+                        "dest-tp": "DEG4-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-4-SRG1-SRG1-CP-TXtoOpenROADM-4-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-4-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-4-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG1-DEG1-CTP-TXtoOpenROADM-4-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-4-SRG1-SRG1-CP-TXtoOpenROADM-4-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-4-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-4-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG2-DEG2-CTP-TXtoOpenROADM-4-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-SRG1",
+                        "source-tp": "SRG1-CP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-1-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-1-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-SRG1-SRG1-CP-TXtoOpenROADM-1-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-1-DEG2-DEG2-CTP-TXtoOpenROADM-1-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-1-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-1-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-SRG1-SRG1-CP-TXtoOpenROADM-1-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG4",
+                        "source-tp": "DEG4-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-4-DEG1-DEG1-CTP-TXtoOpenROADM-4-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-4-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-4-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-SRG1-SRG1-CP-TXtoOpenROADM-4-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-4-DEG2-DEG2-CTP-TXtoOpenROADM-4-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-4-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-4-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-SRG1-SRG1-CP-TXtoOpenROADM-4-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-SRG1",
+                        "dest-tp": "SRG1-CP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-1-DEG1-to-OpenROADM-2-DEG1",
+                    "source": {
+                        "source-node": "OpenROADM-1-DEG1",
+                        "source-tp": "DEG1-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 28.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 100000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 29,
+                            "engineered-spanloss": 30.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber12",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG1",
+                        "dest-tp": "DEG1-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG1-to-OpenROADM-1-DEG1"
+                },
+                {
+                    "link-id": "OpenROADM-1-DEG2-to-OpenROADM-3-DEG1",
+                    "source": {
+                        "source-node": "OpenROADM-1-DEG2",
+                        "source-tp": "DEG2-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 11.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 100000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 12,
+                            "engineered-spanloss": 12.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber13",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG1",
+                        "dest-tp": "DEG1-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-to-OpenROADM-1-DEG2"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG1-to-OpenROADM-1-DEG1",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG1",
+                        "source-tp": "DEG1-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 28.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 100000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 29,
+                            "engineered-spanloss": 30.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber21",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-1-DEG1",
+                        "dest-tp": "DEG1-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG1-to-OpenROADM-2-DEG1"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG2-to-OpenROADM-3-DEG2",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG2",
+                        "source-tp": "DEG2-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 28.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 140000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 29,
+                            "engineered-spanloss": 30.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber23",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG2",
+                        "dest-tp": "DEG2-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-to-OpenROADM-2-DEG2"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG3-to-OpenROADM-5-DEG3",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG3",
+                        "source-tp": "DEG3-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 7.1,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 60000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 7.2,
+                            "engineered-spanloss": 7.5,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber25",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG3",
+                        "dest-tp": "DEG3-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG3-to-OpenROADM-2-DEG3"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG1-to-OpenROADM-1-DEG2",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG1",
+                        "source-tp": "DEG1-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 11.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 100000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 12,
+                            "engineered-spanloss": 12.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber31",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-1-DEG2",
+                        "dest-tp": "DEG2-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG2-to-OpenROADM-3-DEG1"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG2-to-OpenROADM-2-DEG2",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG2",
+                        "source-tp": "DEG2-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 28.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 140000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 29,
+                            "engineered-spanloss": 30.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber32",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG2",
+                        "dest-tp": "DEG2-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG2-to-OpenROADM-3-DEG2"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG3-to-OpenROADM-5-DEG2",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG3",
+                        "source-tp": "DEG3-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 7.1,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 60000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 7.2,
+                            "engineered-spanloss": 7.5,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber35",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG2",
+                        "dest-tp": "DEG2-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG2-to-OpenROADM-3-DEG3"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG4-to-OpenROADM-4-DEG2",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG4",
+                        "source-tp": "DEG2-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 28.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 100000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 29,
+                            "engineered-spanloss": 30.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber34",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-4-DEG2",
+                        "dest-tp": "DEG2-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG2-to-OpenROADM-3-DEG4"
+                },
+                {
+                    "link-id": "OpenROADM-4-DEG1-to-OpenROADM-5-DEG1",
+                    "source": {
+                        "source-node": "OpenROADM-4-DEG1",
+                        "source-tp": "DEG1-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 28.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 100000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 29,
+                            "engineered-spanloss": 30.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber45",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG1",
+                        "dest-tp": "DEG1-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG1-to-OpenROADM-4-DEG1"
+                },
+                {
+                    "link-id": "OpenROADM-4-DEG2-to-OpenROADM-3-DEG4",
+                    "source": {
+                        "source-node": "OpenROADM-4-DEG2",
+                        "source-tp": "DEG2-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 28.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 100000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 29,
+                            "engineered-spanloss": 30.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber43",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG4",
+                        "dest-tp": "DEG4-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-to-OpenROADM-4-DEG2"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG1-to-OpenROADM-4-DEG1",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG1",
+                        "source-tp": "DEG1-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 28.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 100000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 29,
+                            "engineered-spanloss": 30.2,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber54",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-4-DEG1",
+                        "dest-tp": "DEG1-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG1-to-OpenROADM-5-DEG1"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG2-to-OpenROADM-3-DEG3",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG2",
+                        "source-tp": "DEG2-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 7.1,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 60000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 7.2,
+                            "engineered-spanloss": 7.5,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber53",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG3",
+                        "dest-tp": "DEG3-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-to-OpenROADM-5-DEG2"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG3-to-OpenROADM-2-DEG3",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG3",
+                        "source-tp": "DEG3-TTP-TX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-base": 7.1,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": 60000,
+                                    "pmd": 0.5,
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "spanloss-current": 7.2,
+                            "engineered-spanloss": 7.5,
+                            "auto-spanloss": true
+                        }
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:clfi": "fiber52",
+                    "org-openroadm-common-network:TE-metric": 10,
+                    "org-openroadm-network-topology:link-latency": 1,
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG3",
+                        "dest-tp": "DEG3-TTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG3-to-OpenROADM-5-DEG3"
+                },
+                {
+                    "link-id": "OpenROADM-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-1-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-1-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG2-DEG2-CTP-TXtoOpenROADM-1-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-1-DEG2-DEG2-CTP-TXtoOpenROADM-1-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-1-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-1-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-2-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-2-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG4",
+                        "dest-tp": "DEG4-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG4",
+                        "dest-tp": "DEG4-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG4",
+                        "dest-tp": "DEG4-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG4",
+                        "source-tp": "DEG4-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG4",
+                        "source-tp": "DEG4-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-3-DEG4",
+                        "source-tp": "DEG4-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-3-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-4-DEG1-DEG1-CTP-TXtoOpenROADM-4-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-4-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-4-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG2-DEG2-CTP-TXtoOpenROADM-4-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-4-DEG2-DEG2-CTP-TXtoOpenROADM-4-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-4-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-4-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG1-DEG1-CTP-TXtoOpenROADM-4-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG1",
+                        "source-tp": "DEG1-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG2",
+                        "source-tp": "DEG2-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG3",
+                        "dest-tp": "DEG3-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG1",
+                        "dest-tp": "DEG1-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX"
+                },
+                {
+                    "link-id": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX",
+                    "source": {
+                        "source-node": "OpenROADM-5-DEG3",
+                        "source-tp": "DEG3-CTP-TX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "OpenROADM-5-DEG2",
+                        "dest-tp": "DEG2-CTP-RX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX"
+                }
+            ],
+            "node": [
+                {
+                    "node-id": "OpenROADM-1-SRG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-CP-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-1"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-1-DEG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG1-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":1,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-1"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-1-DEG2",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":2,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-1"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-2-SRG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-CP-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-2"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node2"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-2-DEG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG1-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":1,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-2"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node2"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-2-DEG2",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":2,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-2"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node2"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-2-DEG3",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG3-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG3-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG3-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG3-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":3,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-2"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node2"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-3-SRG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-CP-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-3"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node3"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-3-DEG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG1-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":1,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-3"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node3"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-3-DEG2",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":2,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-3"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node3"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-3-DEG3",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG3-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG3-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG3-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG3-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":3,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-3"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node3"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-3-DEG4",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG4-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG4-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG4-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG4-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":4,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-3"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node3"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-4-SRG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-CP-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-4"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node4"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-4-DEG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG1-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":1,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-4"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node4"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-4-DEG2",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":2,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-4"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node4"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-5-SRG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-CP-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TX",
+                            "org-openroadm-common-network:tp-type": "SRG-TX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-RX",
+                            "org-openroadm-common-network:tp-type": "SRG-RX-PP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-5"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node5"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-5-DEG1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG1-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":1,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-5"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node5"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-5-DEG2",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":2,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-5"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node5"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "OpenROADM-5-DEG3",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG3-TTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG3-CTP-TX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG3-CTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG3-TTP-RX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number":3,
+                        "available-wavelengths": [
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "OpenROADM-5"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node5"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPONDER-1",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR-NW1-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW1-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        }
+                    ],
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "XPONDER-1"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPONDER-2",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR-NW1-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW1-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        }
+                    ],
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "XPONDER-2"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node2"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPONDER-3",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR-NW1-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW1-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        }
+                    ],
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "XPONDER-3"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node3"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPONDER-4",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR-NW1-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW1-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        }
+                    ],
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "XPONDER-4"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node4"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPONDER-5",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR-NW1-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW1-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-RX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW2-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW5-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW3-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR-NW4-TX",
+                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "Client-4",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-5",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-1",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-2",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "Client-3",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        }
+                    ],
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "supporting-node": [
+                        {
+                            "network-ref":"openroadm-network",
+                            "node-ref": "XPONDER-5"
+                        },
+                        {
+                            "network-ref":"clli-network",
+                            "node-ref": "Node5"
+                        }
+                    ]
+                }
+
+            ]
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/pce/src/test/resources/simplelogger.properties b/pce/src/test/resources/simplelogger.properties
new file mode 100644 (file)
index 0000000..6a36469
--- /dev/null
@@ -0,0 +1,37 @@
+# SLF4J's SimpleLogger configuration file
+# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
+
+# Default logging detail level for all instances of SimpleLogger.
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, defaults to "info".
+org.slf4j.simpleLogger.defaultLogLevel=info
+
+# Logging detail level for a SimpleLogger instance named "xxxxx".
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, the default logging detail level is used.
+org.slf4j.simpleLogger.log.org.opendaylight.transportpce.pce.gnpy=debug
+
+# Set to true if you want the current date and time to be included in output messages.
+# Default is false, and will output the number of milliseconds elapsed since startup.
+org.slf4j.simpleLogger.showDateTime=true
+
+# The date and time format to be used in the output messages.
+# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
+# If the format is not specified or is invalid, the default format is used.
+# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
+org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
+
+# Set to true if you want to output the current thread name.
+# Defaults to true.
+#org.slf4j.simpleLogger.showThreadName=true
+
+# Set to true if you want the Logger instance name to be included in output messages.
+# Defaults to true.
+#org.slf4j.simpleLogger.showLogName=true
+
+# Set to true if you want the last component of the name to be included in output messages.
+# Defaults to false.
+#org.slf4j.simpleLogger.showShortLogName=false
+
+#Should the level string be output in brackets? Defaults to false.
+org.slf4j.simpleLogger.levelInBrackets=true
\ No newline at end of file