GNPy functional tests 91/82691/7
authorAhmed Triki <ahmed.triki@orange.com>
Mon, 24 Jun 2019 16:07:43 +0000 (18:07 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Wed, 26 Jun 2019 14:00:37 +0000 (16:00 +0200)
create a test python script for GNPy that performs the following steps:
- mount clli-topology, openroadm-network and openroadm-topology
- oms-attributes are added in the description of openroadm-topology
- test the gnpy-response in the output of transportpce-pce:path-
  computation-request
- unmount the topologies

modify tox.ini to add the corresponding gnpy profile (not launched in
releng) to additionally :
- retrieve the GNPy REST server docker image on dockerhub if needed
- run the docker image
- maps the container port 5000 to localhost:8008
  because 5000 is a default port already used by Jenkins
  and 8008 is an official alternate HTTP port

changes GNPy server port harcoded in project code from 5000 to 8008

JIRA: TRNSPRTPCE-131

Change-Id: I68211b31bdb65a4491f456ac78838d9f02ca8a92
Signed-off-by: Ahmed Triki <ahmed.triki@orange.com>
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/ConnectToGnpyServer.java
tests/transportpce_tests/1.2.1/test_gnpy.py [new file with mode: 0644]
tox.ini

index 6a6a0d8860c19c00a99a42afe85134e7dca0839a..94c632fcc1d2670d88a8ccd4a6f649b12240bf5c 100644 (file)
@@ -30,7 +30,7 @@ import org.slf4j.LoggerFactory;
 public class ConnectToGnpyServer {
 
     private static final Logger LOG = LoggerFactory.getLogger(ConnectToGnpyServer.class);
-    static final String URL_GNPY = "http://127.0.0.1:5000/gnpy/api/v1.0/files";
+    static final String URL_GNPY = "http://127.0.0.1:8008/gnpy/api/v1.0/files";
 
     public String gnpyCnx(String jsonTxt) {
         String jsonRespTxt = null;
diff --git a/tests/transportpce_tests/1.2.1/test_gnpy.py b/tests/transportpce_tests/1.2.1/test_gnpy.py
new file mode 100644 (file)
index 0000000..9ff056b
--- /dev/null
@@ -0,0 +1,3833 @@
+#!/usr/bin/env python
+
+##############################################################################
+#Copyright (c) 2017 Orange, Inc. and others.  All rights reserved.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+import json
+import os
+import psutil
+import requests
+import signal
+import shutil
+import subprocess
+import time
+import unittest
+import logging
+
+class TransportGNPYtesting(unittest.TestCase):
+
+    gnpy_process = None
+    odl_process = None
+    restconf_baseurl = "http://localhost:8181/restconf"
+
+    @classmethod
+    def __init_logfile(cls):
+        if os.path.isfile("./transportpce_tests/gnpy.log"):
+            os.remove("transportpce_tests/gnpy.log")
+
+    @classmethod
+    def __start_odl(cls):
+        executable = "../karaf/target/assembly/bin/karaf"
+        with open('transportpce_tests/odl.log', 'w') as outfile:
+            cls.odl_process = subprocess.Popen(
+                ["bash", executable, "server"], stdout=outfile,
+                stdin=open(os.devnull))
+
+    @classmethod
+    def setUpClass(cls):
+        cls.__start_odl()
+        time.sleep(30)
+
+    @classmethod
+    def tearDownClass(cls):
+        for child in psutil.Process(cls.odl_process.pid).children():
+            child.send_signal(signal.SIGINT)
+            child.wait()
+        cls.odl_process.send_signal(signal.SIGINT)
+        cls.odl_process.wait()
+
+    def setUp(self):
+        time.sleep(2)
+
+    #Connect the different topology
+    def test_01_connect_clliNetwork(self):
+        #Config ROADMA
+        url = ("{}/config/ietf-network:networks/network/clli-network"
+               .format(self.restconf_baseurl))
+        data = {"network": [{
+            "network-id": "clli-network",
+            "network-types": {
+                "org-openroadm-clli-network:clli-network": {}
+            },
+            "node": [
+                {
+                    "node-id": "NodeA",
+                    "org-openroadm-clli-network:clli": "NodeA"
+                },
+                {
+                    "node-id": "NodeB",
+                    "org-openroadm-clli-network:clli": "NodeB"
+                },
+                {
+                    "node-id": "NodeC",
+                    "org-openroadm-clli-network:clli": "NodeC"
+                }
+            ]
+            }]
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "PUT", url, data=json.dumps(data), headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+    def test_02_connect_openroadmNetwork(self):
+        #Config ROADMA
+        url = ("{}/config/ietf-network:networks/network/openroadm-network"
+               .format(self.restconf_baseurl))
+        data = {"network": [{
+            "network-id": "openroadm-network",
+            "network-types": {
+                "org-openroadm-common-network:openroadm-common-network": {}
+            },
+            "node": [
+                {
+                    "node-id": "ROADMB",
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeB"
+                        }
+                    ],
+                    "org-openroadm-network:node-type": "ROADM",
+                    "org-openroadm-network:vendor": "vendorA",
+                    "org-openroadm-network:ip": "127.0.0.12",
+                    "org-openroadm-network:model": "2"
+                },
+                {
+                    "node-id": "ROADMC",
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        }
+                    ],
+                    "org-openroadm-network:node-type": "ROADM",
+                    "org-openroadm-network:vendor": "vendorA",
+                    "org-openroadm-network:ip": "127.0.0.13",
+                    "org-openroadm-network:model": "2"
+                },
+                {
+                    "node-id": "XPDRB",
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeB"
+                        }
+                    ],
+                    "org-openroadm-network:node-type": "XPONDER",
+                    "org-openroadm-network:vendor": "vendorA",
+                    "org-openroadm-network:ip": "127.0.0.14",
+                    "org-openroadm-network:model": "1"
+                },
+                {
+                    "node-id": "ROADMA",
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        }
+                    ],
+                    "org-openroadm-network:node-type": "ROADM",
+                    "org-openroadm-network:vendor": "vendorA",
+                    "org-openroadm-network:ip": "127.0.0.11",
+                    "org-openroadm-network:model": "2"
+                },
+                {
+                    "node-id": "XPDRA",
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        }
+                    ],
+                    "org-openroadm-network:node-type": "XPONDER",
+                    "org-openroadm-network:vendor": "vendorA",
+                    "org-openroadm-network:ip": "127.0.0.10",
+                    "org-openroadm-network:model": "1"
+                }
+            ]
+            }]
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "PUT", url, data=json.dumps(data), headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+    def test_03_connect_openroadmTopology(self):
+        #Config ROADMA
+        url = ("{}/config/ietf-network:networks/network/openroadm-topology"
+               .format(self.restconf_baseurl))
+        data = {"network": [{
+            "network-id": "openroadm-topology",
+            "node": [
+                {
+                    "node-id": "XPDRA-XPDR1",
+                    "org-openroadm-network-topology:node-type": "XPONDER",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR1-CLIENT2",
+                            "org-openroadm-network-topology:xpdr-client-attributes": {
+                                "tail-equipment-id": "XPDR1-NETWORK2"
+                            },
+                            "org-openroadm-network-topology:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-CLIENT1",
+                            "org-openroadm-network-topology:xpdr-client-attributes": {
+                                "tail-equipment-id": "XPDR1-NETWORK1"
+                            },
+                            "org-openroadm-network-topology:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK2",
+                            "org-openroadm-network-topology:xpdr-client-attributes": {
+                                "tail-equipment-id": "XPDR1-NETWORK1"
+                            },
+                            "org-openroadm-network-topology:tp-type": "XPONDER-NETWORK",
+                            "org-openroadm-network-topology:xpdr-network-attributes": {
+                                "tail-equipment-id": "XPDR1-CLIENT2"
+                            }
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK1",
+                            "org-openroadm-network-topology:xpdr-client-attributes": {
+                                "tail-equipment-id": "XPDR1-NETWORK1"
+                            },
+                            "org-openroadm-network-topology:tp-type": "XPONDER-NETWORK",
+                            "org-openroadm-network-topology:xpdr-network-attributes": {
+                                "tail-equipment-id": "XPDR1-CLIENT1"
+                            }
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "XPDRA"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMC-DEG2",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 2,
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "DEGREE",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-CTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-TTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMC"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMC-SRG1",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "SRG",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-PP16-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP10-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP6-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP9-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP13-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP7-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP11-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP15-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP8-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP12-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP14-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMC"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMA-DEG1",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 1,
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "DEGREE",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-TTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG1-CTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-CTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMA"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMA-DEG2",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 2,
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "DEGREE",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-CTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-TTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMA"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMB-SRG1",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "SRG",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-PP16-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP10-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP6-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP9-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP13-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP7-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP11-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP15-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP8-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP12-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP14-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMB"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMC-DEG1",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 1,
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "DEGREE",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-TTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG1-CTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-CTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMC"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPDRB-XPDR1",
+                    "org-openroadm-network-topology:node-type": "XPONDER",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR1-CLIENT2",
+                            "org-openroadm-network-topology:xpdr-client-attributes": {
+                                "tail-equipment-id": "XPDR1-NETWORK2"
+                            },
+                            "org-openroadm-network-topology:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-CLIENT1",
+                            "org-openroadm-network-topology:xpdr-client-attributes": {
+                                "tail-equipment-id": "XPDR1-NETWORK1"
+                            },
+                            "org-openroadm-network-topology:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK2",
+                            "org-openroadm-network-topology:xpdr-client-attributes": {
+                                "tail-equipment-id": "XPDR1-NETWORK1"
+                            },
+                            "org-openroadm-network-topology:tp-type": "XPONDER-NETWORK",
+                            "org-openroadm-network-topology:xpdr-network-attributes": {
+                                "tail-equipment-id": "XPDR1-CLIENT2"
+                            }
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK1",
+                            "org-openroadm-network-topology:xpdr-client-attributes": {
+                                "tail-equipment-id": "XPDR1-NETWORK1"
+                            },
+                            "org-openroadm-network-topology:tp-type": "XPONDER-NETWORK",
+                            "org-openroadm-network-topology:xpdr-network-attributes": {
+                                "tail-equipment-id": "XPDR1-CLIENT1"
+                            }
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "XPDRB"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMB-DEG1",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 1,
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "DEGREE",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-TTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG1-CTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-CTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMB"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMA-SRG1",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "SRG",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-PP16-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP10-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP6-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP9-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP13-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP4-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP7-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP11-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP15-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP8-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-CP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP12-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP14-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP5-TXRX",
+                            "org-openroadm-network-topology:tp-type": "SRG-TXRX-PP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMA"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADMB-DEG2",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 2,
+                        "available-wavelengths": [
+                            {
+                                "index": 94
+                            },
+                            {
+                                "index": 93
+                            },
+                            {
+                                "index": 96
+                            },
+                            {
+                                "index": 95
+                            },
+                            {
+                                "index": 42
+                            },
+                            {
+                                "index": 41
+                            },
+                            {
+                                "index": 44
+                            },
+                            {
+                                "index": 43
+                            },
+                            {
+                                "index": 38
+                            },
+                            {
+                                "index": 37
+                            },
+                            {
+                                "index": 40
+                            },
+                            {
+                                "index": 39
+                            },
+                            {
+                                "index": 34
+                            },
+                            {
+                                "index": 33
+                            },
+                            {
+                                "index": 36
+                            },
+                            {
+                                "index": 35
+                            },
+                            {
+                                "index": 30
+                            },
+                            {
+                                "index": 29
+                            },
+                            {
+                                "index": 32
+                            },
+                            {
+                                "index": 31
+                            },
+                            {
+                                "index": 58
+                            },
+                            {
+                                "index": 57
+                            },
+                            {
+                                "index": 60
+                            },
+                            {
+                                "index": 59
+                            },
+                            {
+                                "index": 54
+                            },
+                            {
+                                "index": 53
+                            },
+                            {
+                                "index": 56
+                            },
+                            {
+                                "index": 55
+                            },
+                            {
+                                "index": 50
+                            },
+                            {
+                                "index": 49
+                            },
+                            {
+                                "index": 52
+                            },
+                            {
+                                "index": 51
+                            },
+                            {
+                                "index": 46
+                            },
+                            {
+                                "index": 45
+                            },
+                            {
+                                "index": 48
+                            },
+                            {
+                                "index": 47
+                            },
+                            {
+                                "index": 74
+                            },
+                            {
+                                "index": 73
+                            },
+                            {
+                                "index": 76
+                            },
+                            {
+                                "index": 75
+                            },
+                            {
+                                "index": 70
+                            },
+                            {
+                                "index": 69
+                            },
+                            {
+                                "index": 72
+                            },
+                            {
+                                "index": 71
+                            },
+                            {
+                                "index": 66
+                            },
+                            {
+                                "index": 65
+                            },
+                            {
+                                "index": 68
+                            },
+                            {
+                                "index": 67
+                            },
+                            {
+                                "index": 62
+                            },
+                            {
+                                "index": 61
+                            },
+                            {
+                                "index": 64
+                            },
+                            {
+                                "index": 63
+                            },
+                            {
+                                "index": 90
+                            },
+                            {
+                                "index": 89
+                            },
+                            {
+                                "index": 92
+                            },
+                            {
+                                "index": 91
+                            },
+                            {
+                                "index": 86
+                            },
+                            {
+                                "index": 85
+                            },
+                            {
+                                "index": 88
+                            },
+                            {
+                                "index": 87
+                            },
+                            {
+                                "index": 82
+                            },
+                            {
+                                "index": 81
+                            },
+                            {
+                                "index": 84
+                            },
+                            {
+                                "index": 83
+                            },
+                            {
+                                "index": 78
+                            },
+                            {
+                                "index": 77
+                            },
+                            {
+                                "index": 80
+                            },
+                            {
+                                "index": 79
+                            },
+                            {
+                                "index": 10
+                            },
+                            {
+                                "index": 9
+                            },
+                            {
+                                "index": 12
+                            },
+                            {
+                                "index": 11
+                            },
+                            {
+                                "index": 6
+                            },
+                            {
+                                "index": 5
+                            },
+                            {
+                                "index": 8
+                            },
+                            {
+                                "index": 7
+                            },
+                            {
+                                "index": 2
+                            },
+                            {
+                                "index": 1
+                            },
+                            {
+                                "index": 4
+                            },
+                            {
+                                "index": 3
+                            },
+                            {
+                                "index": 26
+                            },
+                            {
+                                "index": 25
+                            },
+                            {
+                                "index": 28
+                            },
+                            {
+                                "index": 27
+                            },
+                            {
+                                "index": 22
+                            },
+                            {
+                                "index": 21
+                            },
+                            {
+                                "index": 24
+                            },
+                            {
+                                "index": 23
+                            },
+                            {
+                                "index": 18
+                            },
+                            {
+                                "index": 17
+                            },
+                            {
+                                "index": 20
+                            },
+                            {
+                                "index": 19
+                            },
+                            {
+                                "index": 14
+                            },
+                            {
+                                "index": 13
+                            },
+                            {
+                                "index": 16
+                            },
+                            {
+                                "index": 15
+                            }
+                        ]
+                    },
+                    "org-openroadm-network-topology:node-type": "DEGREE",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-CTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG2-TTP-TXRX",
+                            "org-openroadm-network-topology:tp-type": "DEGREE-TXRX-TTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADMB"
+                        }
+                    ]
+                }
+            ],
+            "network-types": {
+                "org-openroadm-common-network:openroadm-common-network": {}
+            },
+            "ietf-network-topology:link": [
+                {
+                    "link-id": "ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADMA-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "ROADMA-SRG1",
+                        "dest-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADMA-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "ROADMA-SRG1",
+                        "dest-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMA-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "ROADMA-DEG2",
+                        "dest-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADMC-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "ROADMC-SRG1",
+                        "dest-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-DEG1-DEG1-CTP-TXRXtoROADMB-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADMB-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "ROADMB-SRG1",
+                        "dest-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-SRG1-SRG1-CP-TXRXtoROADMB-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-DEG2-DEG2-CTP-TXRXtoROADMB-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADMB-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "ROADMB-SRG1",
+                        "dest-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-SRG1-SRG1-CP-TXRXtoROADMB-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADMC-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "DROP-LINK",
+                    "destination": {
+                        "dest-node": "ROADMC-SRG1",
+                        "dest-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMC-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "ROADMC-DEG2",
+                        "dest-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-DEG1-DEG1-CTP-TXRXtoROADMB-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMB-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "ROADMB-DEG2",
+                        "dest-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-DEG2-DEG2-CTP-TXRXtoROADMB-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMA-DEG1-DEG1-TTP-TXRXtoROADMC-DEG2-DEG2-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMA-DEG1",
+                        "source-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "opposite-link": "ROADMC-DEG2-DEG2-TTP-TXRXtoROADMA-DEG1-DEG1-TTP-TXRX",
+                        "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,
+                            "clfi": "fiber1",
+                            "auto-spanloss": "true"
+                        }
+                    },
+                    "org-openroadm-network-topology:link-type": "ROADM-TO-ROADM",
+                    "destination": {
+                        "dest-node": "ROADMC-DEG2",
+                        "dest-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMC-DEG2-DEG2-TTP-TXRXtoROADMA-DEG1-DEG1-TTP-TXRX"
+                },
+                {
+                    "link-id": "XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX",
+                    "source": {
+                        "source-node": "XPDRA-XPDR1",
+                        "source-tp": "XPDR1-NETWORK1"
+                    },
+                    "org-openroadm-network-topology:opposite-link": "ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1",
+                    "org-openroadm-network-topology:link-type": "XPONDER-OUTPUT",
+                    "destination": {
+                        "dest-node": "ROADMA-SRG1",
+                        "dest-tp": "SRG1-PP1-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1"
+                },
+                {
+                    "link-id": "ROADMC-DEG1-DEG1-TTP-TXRXtoROADMB-DEG2-DEG2-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMC-DEG1",
+                        "source-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "opposite-link": "ROADMB-DEG2-DEG2-TTP-TXRXtoROADMC-DEG1-DEG1-TTP-TXRX",
+                        "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,
+                            "clfi": "fiber2",
+                            "auto-spanloss": "true"
+                        }
+                    },
+                    "org-openroadm-network-topology:link-type": "ROADM-TO-ROADM",
+                    "destination": {
+                        "dest-node": "ROADMB-DEG2",
+                        "dest-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-DEG2-DEG2-TTP-TXRXtoROADMC-DEG1-DEG1-TTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-DEG1-DEG1-TTP-TXRXtoROADMA-DEG2-DEG2-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMB-DEG1",
+                        "source-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "opposite-link": "ROADMA-DEG2-DEG2-TTP-TXRXtoROADMB-DEG1-DEG1-TTP-TXRX",
+                        "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,
+                            "clfi": "fiber3",
+                            "auto-spanloss": "true"
+                        }
+                    },
+                    "org-openroadm-network-topology:link-type": "ROADM-TO-ROADM",
+                    "destination": {
+                        "dest-node": "ROADMA-DEG2",
+                        "dest-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-DEG2-DEG2-TTP-TXRXtoROADMB-DEG1-DEG1-TTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMA-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "ROADMA-DEG2",
+                        "dest-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMA-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "ROADMA-DEG1",
+                        "dest-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "XPDRB-XPDR1-XPDR1-NETWORK1toROADMB-SRG1-SRG1-PP1-TXRX",
+                    "source": {
+                        "source-node": "XPDRB-XPDR1",
+                        "source-tp": "XPDR1-NETWORK1"
+                    },
+                    "org-openroadm-network-topology:opposite-link": "ROADMB-SRG1-SRG1-PP1-TXRXtoXPDRB-XPDR1-XPDR1-NETWORK1",
+                    "org-openroadm-network-topology:link-type": "XPONDER-OUTPUT",
+                    "destination": {
+                        "dest-node": "ROADMB-SRG1",
+                        "dest-tp": "SRG1-PP1-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-SRG1-SRG1-PP1-TXRXtoXPDRB-XPDR1-XPDR1-NETWORK1"
+                },
+                {
+                    "link-id": "ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMA-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "ROADMA-DEG1",
+                        "dest-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1",
+                    "source": {
+                        "source-node": "ROADMA-SRG1",
+                        "source-tp": "SRG1-PP1-TXRX"
+                    },
+                    "org-openroadm-network-topology:opposite-link": "XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX",
+                    "org-openroadm-network-topology:link-type": "XPONDER-INPUT",
+                    "destination": {
+                        "dest-node": "XPDRA-XPDR1",
+                        "dest-tp": "XPDR1-NETWORK1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX"
+                },
+                {
+                    "link-id": "ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMC-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "ROADMC-DEG1",
+                        "dest-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-DEG2-DEG2-TTP-TXRXtoROADMC-DEG1-DEG1-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMB-DEG2",
+                        "source-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "opposite-link": "ROADMC-DEG1-DEG1-TTP-TXRXtoROADMB-DEG2-DEG2-TTP-TXRX",
+                        "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,
+                            "clfi": "fiber4",
+                            "auto-spanloss": "true"
+                        }
+                    },
+                    "org-openroadm-network-topology:link-type": "ROADM-TO-ROADM",
+                    "destination": {
+                        "dest-node": "ROADMC-DEG1",
+                        "dest-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMC-DEG1-DEG1-TTP-TXRXtoROADMB-DEG2-DEG2-TTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-DEG2-DEG2-CTP-TXRXtoROADMB-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMB-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "EXPRESS-LINK",
+                    "destination": {
+                        "dest-node": "ROADMB-DEG1",
+                        "dest-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-DEG1-DEG1-CTP-TXRXtoROADMB-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMA-DEG2-DEG2-TTP-TXRXtoROADMB-DEG1-DEG1-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMA-DEG2",
+                        "source-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "opposite-link": "ROADMB-DEG1-DEG1-TTP-TXRXtoROADMA-DEG2-DEG2-TTP-TXRX",
+                        "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,
+                            "clfi": "fiber5",
+                            "auto-spanloss": "true"
+                        }
+                    },
+                    "org-openroadm-network-topology:link-type": "ROADM-TO-ROADM",
+                    "destination": {
+                        "dest-node": "ROADMB-DEG1",
+                        "dest-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-DEG1-DEG1-TTP-TXRXtoROADMA-DEG2-DEG2-TTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMC-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "ROADMC-DEG2",
+                        "dest-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADMC-DEG2-DEG2-TTP-TXRXtoROADMA-DEG1-DEG1-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMC-DEG2",
+                        "source-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "opposite-link": "ROADMA-DEG1-DEG1-TTP-TXRXtoROADMC-DEG2-DEG2-TTP-TXRX",
+                        "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,
+                            "clfi": "fiber6",
+                            "auto-spanloss": "true"
+                        }
+                    },
+                    "org-openroadm-network-topology:link-type": "ROADM-TO-ROADM",
+                    "destination": {
+                        "dest-node": "ROADMA-DEG1",
+                        "dest-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMA-DEG1-DEG1-TTP-TXRXtoROADMC-DEG2-DEG2-TTP-TXRX"
+                },
+                {
+                    "link-id": "ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMC-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "ROADMC-DEG1",
+                        "dest-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-SRG1-SRG1-CP-TXRXtoROADMB-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMB-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "ROADMB-DEG1",
+                        "dest-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-DEG1-DEG1-CTP-TXRXtoROADMB-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-SRG1-SRG1-CP-TXRXtoROADMB-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADMB-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-network-topology:link-type": "ADD-LINK",
+                    "destination": {
+                        "dest-node": "ROADMB-DEG2",
+                        "dest-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADMB-DEG2-DEG2-CTP-TXRXtoROADMB-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADMB-SRG1-SRG1-PP1-TXRXtoXPDRB-XPDR1-XPDR1-NETWORK1",
+                    "source": {
+                        "source-node": "ROADMB-SRG1",
+                        "source-tp": "SRG1-PP1-TXRX"
+                    },
+                    "org-openroadm-network-topology:opposite-link": "XPDRB-XPDR1-XPDR1-NETWORK1toROADMB-SRG1-SRG1-PP1-TXRX",
+                    "org-openroadm-network-topology:link-type": "XPONDER-INPUT",
+                    "destination": {
+                        "dest-node": "XPDRB-XPDR1",
+                        "dest-tp": "XPDR1-NETWORK1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "XPDRB-XPDR1-XPDR1-NETWORK1toROADMB-SRG1-SRG1-PP1-TXRX"
+                }
+            ]
+            }]
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "PUT", url, data=json.dumps(data), headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+    #Test the gnpy
+    def test_04_path_computation_xpdr_bi(self):
+        url = ("{}/operations/transportpce-pce:path-computation-request"
+              .format(self.restconf_baseurl))
+        body = {"input": {
+                "service-name": "service-1",
+                "resource-reserve": "true",
+                "pce-metric": "hop-count",
+                "service-handler-header": {
+                    "request-id": "request-1"
+                },
+                "service-a-end": {
+                    "node-id": "XPDRA",
+                    "service-rate": "100",
+                    "clli": "nodeA"
+                },
+                "service-z-end": {
+                    "node-id": "XPDRB",
+                    "service-rate": "100",
+                    "clli": "nodeB"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "POST", url, data=json.dumps(body), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(res['output']['gnpy-response'][0]['path-dir'], 'A-to-Z')
+        self.assertEqual(res['output']['gnpy-response'][0]['feasibility'],True)
+        self.assertEqual(res['output']['gnpy-response'][1]['path-dir'], 'Z-to-A')
+        self.assertEqual(res['output']['gnpy-response'][1]['feasibility'],True)
+        time.sleep(5)
+
+    #Disconnect the different topology
+    def test_05_disconnect_openroadmTopology(self):
+        url = ("{}/config/ietf-network:networks/network/openroadm-topology"
+               .format(self.restconf_baseurl))
+        data = {}
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "DELETE", url, data=json.dumps(data), headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+    def test_06_disconnect_openroadmNetwork(self):
+        #Config ROADMA
+        url = ("{}/config/ietf-network:networks/network/openroadm-network"
+               .format(self.restconf_baseurl))
+        data = {}
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "DELETE", url, data=json.dumps(data), headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+    def test_07_disconnect_clliNetwork(self):
+        url = ("{}/config/ietf-network:networks/network/clli-network"
+               .format(self.restconf_baseurl))
+        data = {}
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "DELETE", url, data=json.dumps(data), headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+if __name__ == "__main__":
+    #logging.basicConfig(filename='./transportpce_tests/log/response.log',filemode='w',level=logging.DEBUG)
+    unittest.main(verbosity=2)
diff --git a/tox.ini b/tox.ini
index a2b03df381cf22f97e1dac9b9be2aec5fb072f27..f9166c80fa2db014139c895f8941a1d707ac2a9a 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -13,11 +13,12 @@ deps =
   -r{toxinidir}/tests/requirements.txt
   -r{toxinidir}/tests/test-requirements.txt
 whitelist_externals = bash
+                      sudo
 changedir={toxinidir}/tests
 commands =
-  {py27,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,topology221,olm221,end2end221}: - bash -c "if [ ! `which mvn` ]; then ./installMavenCentOS.sh  ; fi"
-  {py27,portmapping,topoPortMapping,rspn,topology,olm,end2end,portmapping221,rspn221,topology221,olm221,end2end221}: - bash -c "sed 's@=.*//#FUNCTESTVAL=@=@g' ../olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils.java >/tmp/pivot; mv /tmp/pivot ../olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils.java"
-  {py27,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,topology221,olm221,end2end221}: - bash -c "(cd .. && mvn clean install -s tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true)"
+  {py27,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,topology221,olm221,end2end221,gnpy}: - bash -c "if [ ! `which mvn` ]; then ./installMavenCentOS.sh  ; fi"
+  {py27,portmapping,topoPortMapping,rspn,topology,olm,end2end,portmapping221,rspn221,topology221,olm221,end2end221,gnpy}: - bash -c "sed 's@=.*//#FUNCTESTVAL=@=@g' ../olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils.java >/tmp/pivot; mv /tmp/pivot ../olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils.java"
+  {py27,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,topology221,olm221,end2end221,gnpy}: - bash -c "(cd .. && mvn clean install -s tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true)"
   {py27,portmapping,topoPortMapping,rspn,topology,olm,end2end}: - ./buildHoneynode.sh
   {py27,portmapping}: nosetests --with-xunit transportpce_tests/1.2.1/test_portmapping.py
   {py27,topoPortMapping}: nosetests --with-xunit transportpce_tests/1.2.1/test_topoPortMapping.py
@@ -32,6 +33,10 @@ commands =
   {py27,rspn221}: nosetests --with-xunit transportpce_tests/2.2.1/test_renderer_service_path_nominal.py
   {py27,olm221}: nosetests --with-xunit transportpce_tests/2.2.1/test_olm.py
   {py27,end2end221}: - nosetests --with-xunit transportpce_tests/2.2.1/test_end2end.py
+  #{gnpy}: - sudo docker pull atriki/gnpyrest:v1.1
+  {gnpy}: - sudo docker run -d -p 8008:5000 --name gnpy_tpce_rest1 atriki/gnpyrest:v1.1
+  {gnpy}: nosetests --with-xunit transportpce_tests/1.2.1/test_gnpy.py
+  #{gnpy}: - sudo docker container rm -f gnpy_tpce_rest1
 
 
 [testenv:docs]