Functional test for pce 400G 65/95465/10
authorChristophe Betoule <christophe.betoule@orange.com>
Thu, 11 Mar 2021 09:26:08 +0000 (10:26 +0100)
committerguillaume.lambert <guillaume.lambert@orange.com>
Wed, 17 Mar 2021 08:55:38 +0000 (09:55 +0100)
Tests the path computation request for a 400GE service between two 400G
transponders

JIRA: TRNSPRTPCE-372
Signed-off-by: Christophe Betoule <christophe.betoule@orange.com>
Change-Id: I1432d92890771786eb01c658462ca1c3876c046c

tests/sample_configs/honeynode-topo400G.json [new file with mode: 0644]
tests/sample_configs/pce_portmapping_71.json [new file with mode: 0644]
tests/transportpce_tests/7.1/common [new symlink]
tests/transportpce_tests/7.1/simulators.py [new file with mode: 0644]
tests/transportpce_tests/7.1/test_pce_400G.py [new file with mode: 0644]
tests/transportpce_tests/common/test_utils.py
tox.ini

diff --git a/tests/sample_configs/honeynode-topo400G.json b/tests/sample_configs/honeynode-topo400G.json
new file mode 100644 (file)
index 0000000..29b0e40
--- /dev/null
@@ -0,0 +1,949 @@
+{
+    "network": [
+        {
+            "network-id": "openroadm-topology",
+            "ietf-network-topology:link": [
+                {
+                    "link-id": "XPDR-C2-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP4-TXRX",
+                    "source": {
+                        "source-node": "XPDR-C2-XPDR1",
+                        "source-tp": "XPDR1-NETWORK1"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-PP4-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-PP4-TXRX",
+                        "dest-node": "ROADM-C1-SRG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG2",
+                        "source-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-TTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG1"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "auto-spanloss": true,
+                            "spanloss-current": 12,
+                            "engineered-spanloss": 12.2,
+                            "spanloss-base": 11.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "fiber-type": "smf",
+                                    "pmd": 0.5,
+                                    "SRLG-length": 100000
+                                }
+                            ]
+                        }
+                    }
+                },
+                {
+                    "link-id": "XPDR-C1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX",
+                    "source": {
+                        "source-node": "XPDR-C1-XPDR1",
+                        "source-tp": "XPDR1-NETWORK1"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C1-XPDR1-XPDR1-NETWORK1",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-PP1-TXRX",
+                        "dest-node": "ROADM-C1-SRG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-C1-SRG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG3",
+                        "source-tp": "SRG3-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG3",
+                        "source-tp": "SRG3-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG2"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG3-CP-TXRX",
+                        "dest-node": "ROADM-A1-SRG3"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG1",
+                        "source-tp": "SRG1-PP1-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "XPDR1-NETWORK1",
+                        "dest-node": "XPDR-A1-XPDR1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-SRG1-SRG1-PP4-TXRXtoXPDR-A2-XPDR1-XPDR1-NETWORK1",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG1",
+                        "source-tp": "SRG1-PP4-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP4-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "XPDR1-NETWORK1",
+                        "dest-node": "XPDR-A2-XPDR1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG1",
+                        "source-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-TTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG2"
+                    },
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "auto-spanloss": true,
+                            "spanloss-current": 12,
+                            "engineered-spanloss": 12.2,
+                            "spanloss-base": 11.4,
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "fiber-type": "smf",
+                                    "pmd": 0.5,
+                                    "SRLG-length": 100000
+                                }
+                            ]
+                        }
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-SRG1-SRG1-PP4-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1",
+                    "source": {
+                        "source-node": "ROADM-C1-SRG1",
+                        "source-tp": "SRG1-PP4-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "XPDR-C2-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP4-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "XPDR1-NETWORK1",
+                        "dest-node": "XPDR-C2-XPDR1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-C1-SRG1"
+                    }
+                },
+                {
+                    "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP4-TXRX",
+                    "source": {
+                        "source-node": "XPDR-A2-XPDR1",
+                        "source-tp": "XPDR1-NETWORK1"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-PP4-TXRXtoXPDR-A2-XPDR1-XPDR1-NETWORK1",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-PP4-TXRX",
+                        "dest-node": "ROADM-A1-SRG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-A1-SRG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG2"
+                    }
+                },
+                {
+                    "link-id": "XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX",
+                    "source": {
+                        "source-node": "XPDR-A1-XPDR1",
+                        "source-tp": "XPDR1-NETWORK1"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-OUTPUT",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-PP1-TXRX",
+                        "dest-node": "ROADM-A1-SRG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C1-XPDR1-XPDR1-NETWORK1",
+                    "source": {
+                        "source-node": "ROADM-C1-SRG1",
+                        "source-tp": "SRG1-PP1-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "XPONDER-INPUT",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "XPDR-C1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "XPDR1-NETWORK1",
+                        "dest-node": "XPDR-C1-XPDR1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG3-CP-TXRX",
+                        "dest-node": "ROADM-A1-SRG3"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG2"
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG2"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-A1-SRG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG1"
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG2"
+                    }
+                }
+            ],
+            "network-types": {
+                "org-openroadm-common-network:openroadm-common-network": {}
+            },
+            "node": [
+                {
+                    "node-id": "ROADM-A1-SRG3",
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map-granularity": 6.25,
+                                "start-edge-freq": 191.325,
+                                "effective-bits": 768,
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
+                            }
+                        ]
+                    },
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG3-PP3-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG3-PP2-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG3-CP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-CP"
+                        },
+                        {
+                            "tp-id": "SRG3-PP1-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG3-PP4-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-A1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPDR-A2-XPDR1",
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR1-CLIENT1",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK1",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-network-topology:xpdr-network-attributes": {
+                                "tail-equipment-id": "ROADM-A1-SRG1--SRG1-PP4-TXRX"
+                            },
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "XPDR-A2"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPDR-C2-XPDR1",
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR1-CLIENT1",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK1",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-network-topology:xpdr-network-attributes": {
+                                "tail-equipment-id": "ROADM-C1-SRG1--SRG1-PP4-TXRX"
+                            },
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "XPDR-C2"
+                        },
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPDR-C1-XPDR1",
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR1-CLIENT1",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-CLIENT2",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK2",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK2",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT2",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK1",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-network-topology:xpdr-network-attributes": {
+                                "tail-equipment-id": "ROADM-C1-SRG1--SRG1-PP1-TXRX"
+                            },
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "XPDR-C1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-C1-SRG1",
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map-granularity": 6.25,
+                                "start-edge-freq": 191.325,
+                                "effective-bits": 768,
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
+                            }
+                        ]
+                    },
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-PP4-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-CP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-C1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-A1-SRG1",
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map-granularity": 6.25,
+                                "start-edge-freq": 191.325,
+                                "effective-bits": 768,
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
+                            }
+                        ]
+                    },
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-PP4-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-CP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-A1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-A1-DEG1",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 1,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map-granularity": 6.25,
+                                "start-edge-freq": 191.325,
+                                "effective-bits": 768,
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
+                            }
+                        ]
+                    },
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-A1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-A1-DEG2",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 2,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map-granularity": 6.25,
+                                "start-edge-freq": 191.325,
+                                "effective-bits": 768,
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
+                            }
+                        ]
+                    },
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-TTP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-A1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "XPDR-A1-XPDR1",
+                    "org-openroadm-common-network:node-type": "XPONDER",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "XPDR1-CLIENT1",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-CLIENT2",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK2",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK2",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT2",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        },
+                        {
+                            "tp-id": "XPDR1-NETWORK1",
+                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-network-topology:xpdr-network-attributes": {
+                                "tail-equipment-id": "ROADM-A1-SRG1--SRG1-PP1-TXRX"
+                            },
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "XPDR-A1"
+                        },
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-C1-DEG1",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 1,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map-granularity": 6.25,
+                                "start-edge-freq": 191.325,
+                                "effective-bits": 768,
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
+                            }
+                        ]
+                    },
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-C1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-C1-DEG2",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 2,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map-granularity": 6.25,
+                                "start-edge-freq": 191.325,
+                                "effective-bits": 768,
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
+                            }
+                        ]
+                    },
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-TTP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP"
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TXRX",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-C1"
+                        }
+                    ]
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/sample_configs/pce_portmapping_71.json b/tests/sample_configs/pce_portmapping_71.json
new file mode 100644 (file)
index 0000000..7586834
--- /dev/null
@@ -0,0 +1,291 @@
+{
+    "network": {
+        "nodes": [
+            {
+                "node-id": "ROADM-C1",
+                "node-info": {
+                    "node-type": "rdm",
+                    "node-model": "model2",
+                    "node-ip-address": "127.0.0.13",
+                    "node-clli": "NodeC",
+                    "openroadm-version": "2.2.1",
+                    "node-vendor": "vendorA"
+                },
+                "cp-to-degree": [
+                    {
+                        "circuit-pack-name": "1/0/ETH-PLUG",
+                        "degree-number": 1,
+                        "interface-name": "1GE-interface-1"
+                    },
+                    {
+                        "circuit-pack-name": "2/0",
+                        "degree-number": 2,
+                        "interface-name": "1GE-interface-2"
+                    },
+                    {
+                        "circuit-pack-name": "2/0/ETH-PLUG",
+                        "degree-number": 2,
+                        "interface-name": "1GE-interface-2"
+                    },
+                    {
+                        "circuit-pack-name": "1/0",
+                        "degree-number": 1,
+                        "interface-name": "1GE-interface-1"
+                    }
+                ],
+                "mapping": [
+                    {
+                        "logical-connection-point": "SRG1-PP3-TXRX",
+                        "supporting-circuit-pack-name": "3/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C3"
+                    },
+                    {
+                        "logical-connection-point": "SRG1-PP1-TXRX",
+                        "supporting-circuit-pack-name": "3/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C1"
+                    },
+                    {
+                        "logical-connection-point": "DEG1-TTP-TXRX",
+                        "supporting-oms": "OMS-DEG1-TTP-TXRX",
+                        "supporting-circuit-pack-name": "1/0",
+                        "supporting-ots": "OTS-DEG1-TTP-TXRX",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "L1"
+                    },
+                    {
+                        "logical-connection-point": "SRG1-PP2-TXRX",
+                        "supporting-circuit-pack-name": "3/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C2"
+                    },
+                    {
+                        "logical-connection-point": "SRG1-PP4-TXRX",
+                        "supporting-circuit-pack-name": "3/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C4"
+                    },
+                    {
+                        "logical-connection-point": "DEG2-TTP-TXRX",
+                        "supporting-circuit-pack-name": "2/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "L1"
+                    }
+                ],
+                "mc-capabilities": [
+                    {
+                        "mc-node-name": "DEG2-TTP",
+                        "center-freq-granularity": 50,
+                        "slot-width-granularity": 50
+                    },
+                    {
+                        "mc-node-name": "DEG1-TTP",
+                        "center-freq-granularity": 50,
+                        "slot-width-granularity": 50
+                    },
+                    {
+                        "mc-node-name": "SRG1-PP",
+                        "center-freq-granularity": 50,
+                        "slot-width-granularity": 50
+                    }
+                ]
+            },
+            {
+                "node-id": "XPDR-A2",
+                "mapping": [
+                    {
+                        "logical-connection-point": "XPDR1-NETWORK1",
+                        "supporting-circuit-pack-name": "1/0/1-PLUG-NET",
+                        "supported-interface-capability": [
+                            "org-openroadm-port-types:if-OTUCn-ODUCn"
+                        ],
+                        "lcp-hash-val": "AIGiVAQ4gDil",
+                        "port-direction": "bidirectional",
+                        "xponder-type": "tpdr",
+                        "supporting-port": "L1",
+                        "port-qual": "xpdr-network",
+                        "connection-map-lcp": "XPDR1-CLIENT1"
+                    },
+                    {
+                        "logical-connection-point": "XPDR1-CLIENT1",
+                        "supporting-circuit-pack-name": "1/0/1-PLUG-CLIENT",
+                        "supported-interface-capability": [
+                            "org-openroadm-port-types:if-400GE"
+                        ],
+                        "lcp-hash-val": "AODABTVSOHH0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C1",
+                        "port-qual": "xpdr-client",
+                        "connection-map-lcp": "XPDR1-NETWORK1"
+                    }
+                ],
+                "node-info": {
+                    "node-type": "xpdr",
+                    "node-model": "model2",
+                    "node-ip-address": "1.2.3.4",
+                    "node-clli": "NodeA",
+                    "openroadm-version": "7.1.0",
+                    "node-vendor": "vendorA"
+                }
+            },
+            {
+                "node-id": "XPDR-C2",
+                "mapping": [
+                    {
+                        "logical-connection-point": "XPDR1-NETWORK1",
+                        "supporting-circuit-pack-name": "1/0/1-PLUG-NET",
+                        "supported-interface-capability": [
+                            "org-openroadm-port-types:if-OTUCn-ODUCn"
+                        ],
+                        "lcp-hash-val": "ZbICgmaBrJM=",
+                        "port-direction": "bidirectional",
+                        "xponder-type": "tpdr",
+                        "supporting-port": "L1",
+                        "port-qual": "xpdr-network",
+                        "connection-map-lcp": "XPDR1-CLIENT1"
+                    },
+                    {
+                        "logical-connection-point": "XPDR1-CLIENT1",
+                        "supporting-circuit-pack-name": "1/0/1-PLUG-CLIENT",
+                        "supported-interface-capability": [
+                            "org-openroadm-port-types:if-400GE"
+                        ],
+                        "lcp-hash-val": "M5cViLS5z3o=",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C1",
+                        "port-qual": "xpdr-client",
+                        "connection-map-lcp": "XPDR1-NETWORK1"
+                    }
+                ],
+                "node-info": {
+                    "node-type": "xpdr",
+                    "node-model": "model2",
+                    "node-ip-address": "1.2.3.4",
+                    "node-clli": "NodeC",
+                    "openroadm-version": "7.1.0",
+                    "node-vendor": "vendorA"
+                }
+            },
+            {
+                "node-id": "ROADM-A1",
+                "node-info": {
+                    "node-type": "rdm",
+                    "node-model": "model2",
+                    "node-ip-address": "127.0.0.11",
+                    "node-clli": "NodeA",
+                    "openroadm-version": "2.2.1",
+                    "node-vendor": "vendorA"
+                },
+                "cp-to-degree": [
+                    {
+                        "circuit-pack-name": "1/0/ETH-PLUG",
+                        "degree-number": 1,
+                        "interface-name": "1GE-interface-1"
+                    },
+                    {
+                        "circuit-pack-name": "2/0",
+                        "degree-number": 2,
+                        "interface-name": "1GE-interface-2"
+                    },
+                    {
+                        "circuit-pack-name": "2/0/ETH-PLUG",
+                        "degree-number": 2,
+                        "interface-name": "1GE-interface-2"
+                    },
+                    {
+                        "circuit-pack-name": "1/0",
+                        "degree-number": 1,
+                        "interface-name": "1GE-interface-1"
+                    }
+                ],
+                "mapping": [
+                    {
+                        "logical-connection-point": "SRG1-PP3-TXRX",
+                        "supporting-circuit-pack-name": "3/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C3"
+                    },
+                    {
+                        "logical-connection-point": "SRG3-PP2-TXRX",
+                        "supporting-circuit-pack-name": "5/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C2"
+                    },
+                    {
+                        "logical-connection-point": "SRG1-PP1-TXRX",
+                        "supporting-circuit-pack-name": "3/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C1"
+                    },
+                    {
+                        "logical-connection-point": "DEG1-TTP-TXRX",
+                        "supporting-circuit-pack-name": "1/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "L1"
+                    },
+                    {
+                        "logical-connection-point": "SRG3-PP1-TXRX",
+                        "supporting-circuit-pack-name": "5/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C1"
+                    },
+                    {
+                        "logical-connection-point": "SRG1-PP2-TXRX",
+                        "supporting-circuit-pack-name": "3/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C2"
+                    },
+                    {
+                        "logical-connection-point": "SRG1-PP4-TXRX",
+                        "supporting-circuit-pack-name": "3/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C4"
+                    },
+                    {
+                        "logical-connection-point": "SRG3-PP4-TXRX",
+                        "supporting-circuit-pack-name": "5/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C4"
+                    },
+                    {
+                        "logical-connection-point": "SRG3-PP3-TXRX",
+                        "supporting-circuit-pack-name": "5/0",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "C3"
+                    },
+                    {
+                        "logical-connection-point": "DEG2-TTP-TXRX",
+                        "supporting-oms": "OMS-DEG2-TTP-TXRX",
+                        "supporting-circuit-pack-name": "2/0",
+                        "supporting-ots": "OTS-DEG2-TTP-TXRX",
+                        "port-direction": "bidirectional",
+                        "supporting-port": "L1"
+                    }
+                ],
+                "mc-capabilities": [
+                    {
+                        "mc-node-name": "DEG2-TTP",
+                        "center-freq-granularity": 50,
+                        "slot-width-granularity": 50
+                    },
+                    {
+                        "mc-node-name": "DEG1-TTP",
+                        "center-freq-granularity": 50,
+                        "slot-width-granularity": 50
+                    },
+                    {
+                        "mc-node-name": "SRG3-PP",
+                        "center-freq-granularity": 50,
+                        "slot-width-granularity": 50
+                    },
+                    {
+                        "mc-node-name": "SRG1-PP",
+                        "center-freq-granularity": 50,
+                        "slot-width-granularity": 50
+                    }
+                ]
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/tests/transportpce_tests/7.1/common b/tests/transportpce_tests/7.1/common
new file mode 120000 (symlink)
index 0000000..8332399
--- /dev/null
@@ -0,0 +1 @@
+../common/
\ No newline at end of file
diff --git a/tests/transportpce_tests/7.1/simulators.py b/tests/transportpce_tests/7.1/simulators.py
new file mode 100644 (file)
index 0000000..5bdbbb5
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2020 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 os
+
+SIMS = {}
+
+HONEYNODE_EXECUTABLE = os.path.join(
+    os.path.dirname(os.path.realpath(__file__)),
+    "..", "..", "honeynode", "7.1", "honeynode-simulator", "honeycomb-tpce")
+SAMPLES_DIRECTORY = os.path.join(
+    os.path.dirname(os.path.realpath(__file__)),
+    "..", "..", "sample_configs", "openroadm", "7.1")
diff --git a/tests/transportpce_tests/7.1/test_pce_400G.py b/tests/transportpce_tests/7.1/test_pce_400G.py
new file mode 100644 (file)
index 0000000..10fb918
--- /dev/null
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2021 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
+##############################################################################
+
+# pylint: disable=no-member
+# pylint: disable=too-many-public-methods
+
+import unittest
+import os
+import sys
+import time
+import requests
+from common import test_utils
+
+
+class TransportPCE400Gtesting(unittest.TestCase):
+
+    simple_topo_bi_dir_data = None
+    port_mapping_data = None
+    processes = None
+
+    @classmethod
+    def setUpClass(cls):
+        try:
+            sample_files_parsed = False
+            TOPO_BI_DIR_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                                            "..", "..", "sample_configs", "honeynode-topo400G.json")
+            with open(TOPO_BI_DIR_FILE, 'r') as topo_bi_dir:
+                cls.simple_topo_bi_dir_data = topo_bi_dir.read()
+
+            PORT_MAPPING_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                                                     "..", "..", "sample_configs", "pce_portmapping_71.json")
+            with open(PORT_MAPPING_FILE, 'r') as port_mapping:
+                cls.port_mapping_data = port_mapping.read()
+            sample_files_parsed = True
+        except PermissionError as err:
+            print("Permission Error when trying to read sample files\n", err)
+            sys.exit(2)
+        except FileNotFoundError as err:
+            print("File Not found Error when trying to read sample files\n", err)
+            sys.exit(2)
+        except:
+            print("Unexpected error when trying to read sample files\n", sys.exc_info()[0])
+            sys.exit(2)
+        finally:
+            if sample_files_parsed:
+                print("sample files content loaded")
+        cls.processes = test_utils.start_tpce()
+
+    @classmethod
+    def tearDownClass(cls):
+        # pylint: disable=not-an-iterable
+        for process in cls.processes:
+            test_utils.shutdown_process(process)
+        print("all processes killed")
+
+    def setUp(self):  # instruction executed before each test method
+        print("execution of {}".format(self.id().split(".")[-1]))
+        time.sleep(1)
+
+    # Load port mapping
+    def test_01_load_port_mapping(self):
+        response = test_utils.put_jsonrequest(test_utils.URL_FULL_PORTMAPPING, self.port_mapping_data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    # Load simple bidirectional topology
+    def test_02_load_simple_topology_bi(self):
+        response = test_utils.put_jsonrequest(test_utils.URL_CONFIG_ORDM_TOPO, self.simple_topo_bi_dir_data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    # Path Computation success
+    def test_03_path_computation_xpdr_bi(self):
+        response = test_utils.path_computation_request("request-1", "service-1",
+                                                       {"node-id": "XPDR-A2", "service-rate": "400",
+                                                           "service-format": "Ethernet", "clli": "nodeA"},
+                                                       {"node-id": "XPDR-C2", "service-rate": "400",
+                                                           "service-format": "Ethernet", "clli": "nodeC"})
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Path is calculated',
+                      res['output']['configuration-response-common']['response-message'])
+
+        self.assertEqual(1, res['output']['response-parameters']['path-description']
+                         ['aToZ-direction']['aToZ-wavelength-number'])
+        self.assertEqual(400, res['output']['response-parameters']['path-description']
+                         ['aToZ-direction']['rate'])
+        self.assertEqual(196.0375, res['output']['response-parameters']['path-description']
+                         ['aToZ-direction']['aToZ-min-frequency'])
+        self.assertEqual(196.12500, res['output']['response-parameters']['path-description']
+                         ['aToZ-direction']['aToZ-max-frequency'])
+        self.assertEqual('dp-qam16', res['output']['response-parameters']['path-description']
+                         ['aToZ-direction']['modulation-format'])
+
+        self.assertEqual(1, res['output']['response-parameters']['path-description']
+                         ['zToA-direction']['zToA-wavelength-number'])
+        self.assertEqual(400, res['output']['response-parameters']['path-description']
+                         ['zToA-direction']['rate'])
+        self.assertEqual(196.0375, res['output']['response-parameters']['path-description']
+                         ['zToA-direction']['zToA-min-frequency'])
+        self.assertEqual(196.12500, res['output']['response-parameters']['path-description']
+                         ['zToA-direction']['zToA-max-frequency'])
+        self.assertEqual('dp-qam16', res['output']['response-parameters']['path-description']
+                         ['zToA-direction']['modulation-format'])
+        time.sleep(5)
+
+    # Test deleted complex topology
+    def test_04_test_topology_complex_deleted(self):
+        response = test_utils.get_ordm_topo_request("node/XPONDER-3-2")
+        self.assertEqual(response.status_code, requests.codes.conflict)
+        time.sleep(1)
+
+    # Delete portmapping
+    def test_05_delete_port_mapping(self):
+        response = test_utils.delete_request(test_utils.URL_FULL_PORTMAPPING)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
index 1026df7e0583d20f743b32f57bd84a11fa224be5..4e1044ebe7a2da2b18eef104a7b87db1ecf0a99e 100644 (file)
@@ -190,6 +190,12 @@ def put_xmlrequest(url, data):
         headers=TYPE_APPLICATION_XML,
         auth=(ODL_LOGIN, ODL_PWD))
 
+def put_jsonrequest(url, data):
+    return requests.request(
+        "PUT", url.format(RESTCONF_BASE_URL),
+        data=data,
+        headers=TYPE_APPLICATION_JSON,
+        auth=(ODL_LOGIN, ODL_PWD))
 
 def rawput_request(url, data):
     return requests.request(
diff --git a/tox.ini b/tox.ini
index 037d646abfde12f7c5ecc8825bfab5875d002bf7..1b29d6e837c6e88ad89d8eddde0212a4e5a961b0 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -19,23 +19,23 @@ whitelist_externals = sh
 changedir={toxinidir}/tests
 commands =
 #install maven and JDK11 on the Gate since they are not there by default
-  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,flexgrid,olm221,tapi221,otnend2end,end2end221,gnpy}: - sh -c "which mvn >/dev/null || ./installMavenCentOS.sh"
+  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,flexgrid,olm221,tapi221,otnend2end,end2end221,pce400g,gnpy}: - sh -c "which mvn >/dev/null || ./installMavenCentOS.sh"
 #install honeynode 1.2.1 simulators
   {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end}: - sh -c "./install_honeynode.sh 1.2.1"
 #patch OLM constant to speed up tests, unnecessary for PCE
   {py3,portmapping,topoPortMapping,rspn,topology,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otn-topology,olm221,otnend2end,end2end221,tapi221,nbinotifications}: - sh -c "sed -i'_' 's@=.*//#FUNCTESTVAL=@=@g' ../olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils.java"
 #build controller, source JDK_JAVA_OPTIONS to remove illegal reflective acces warnings introduced by Java11
-  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,flexgrid,olm221,tapi221,otnend2end,end2end221,gnpy,nbinotifications}: - sh -c ". $PWD/reflectwarn.sh && cd .. && mvn clean install -s tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true -Dodlparent.spotbugs.skip -Dodlparent.checkstyle.skip"
+  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,flexgrid,olm221,tapi221,otnend2end,end2end221,pce400g,gnpy,nbinotifications}: - sh -c ". $PWD/reflectwarn.sh && cd .. && mvn clean install -s tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true -Dodlparent.spotbugs.skip -Dodlparent.checkstyle.skip"
   {py3,portmapping,topoPortMapping,rspn,topology,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otn-topology,olm221,otnend2end,end2end221,tapi221,nbinotifications}: - sh -c "mv  ../olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils.java_  ../olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils.java"
 #patch Karaf exec for the same reason at runtime
-  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,flexgrid,olm221,tapi221,otnend2end,end2end221,gnpy,nbinotifications}: - sh -c "sed -i'_' 's@!/bin/sh@!/bin/sh\'$'\n. $(dirname $0)/../../../../tests/reflectwarn.sh@' ../karaf/target/assembly/bin/karaf"
+  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,flexgrid,olm221,tapi221,otnend2end,end2end221,pce400g,gnpy,nbinotifications}: - sh -c "sed -i'_' 's@!/bin/sh@!/bin/sh\'$'\n. $(dirname $0)/../../../../tests/reflectwarn.sh@' ../karaf/target/assembly/bin/karaf"
   # the following command would be the straight and right way to support both BSD and GNU sed versions
   # sh -c "sed -i'_' '1 a\'$'\n. \$(dirname \$0)/\.\./\.\./\.\./\.\./tests/reflectwarn.sh\n' ../karaf/target/assembly/bin/karaf"
   # but tox reinterprets the quotes as
   # sh -c 'sed -i'"'"'_'"'"' '"'"'1 a\'"'"'$'"'"'\n. \$(dirname \$0)/\.\./\.\./\.\./\.\./tests/reflectwarn.sh\n'"'"' ../karaf/target/assembly/bin/karaf'
   # ,what results in an unexpected different formating (with a $ on the second line and the dot on the third)
 #build Lighty if needed
-  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,flexgrid,olm221,tapi221,otnend2end,end2end221,gnpy,nbinotifications}: - sh -c 'if [ "$USE_LIGHTY" = "True" ]; then (cd ../lighty && ./build.sh); fi'
+  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,olm221,tapi221,otnend2end,end2end221,pce400g,gnpy,nbinotifications}: - sh -c 'if [ "$USE_LIGHTY" = "True" ]; then (cd ../lighty && ./build.sh); fi'
 #run 1.2.1 functional tests
   {py3,portmapping}: nosetests --with-xunit transportpce_tests/1.2.1/test_portmapping.py
   {py3,topoPortMapping}: nosetests --with-xunit transportpce_tests/1.2.1/test_topo_portmapping.py
@@ -57,6 +57,8 @@ commands =
   {py3,olm221}: nosetests --with-xunit transportpce_tests/2.2.1/test_olm.py
   {py3,tapi221}: nosetests --with-xunit transportpce_tests/2.2.1/test_tapi.py
   {py3,otnend2end}: nosetests --with-xunit transportpce_tests/2.2.1/test_otn_end2end.py
+#run 7.1 functional tests
+  {py3,pce400g}: nosetests --with-xunit transportpce_tests/7.1/test_pce_400G.py
   {py3,end2end}: nosetests --with-xunit transportpce_tests/1.2.1/test_end2end.py
   {py3,end2end221}: nosetests --with-xunit transportpce_tests/2.2.1/test_end2end.py
   #{gnpy}: - sudo docker pull atriki/gnpyrest:v1.2