Test suite for flex-grid support 41/91441/15
authorBalagangadhar Bathula <bb4341@att.com>
Mon, 20 Jul 2020 05:04:07 +0000 (01:04 -0400)
committerGuillaume Lambert <guillaume.lambert@orange.com>
Fri, 18 Sep 2020 07:20:33 +0000 (07:20 +0000)
- Add new config with mc-capabilities
- New functional tests to check the flex-grid interfaces
- Functional tests for updaed portmapping
- Functional test for device-renderer

JIRA: TRNSPRTPCE-253 TRNSPRTPCE-307
Change-Id: Ic4999c1b117d762ba2fe0f6b959a513f65235580
Signed-off-by: guillaume.lambert <guillaume.lambert@orange.com>
tests/Xtesting/DockerSims/dockercmd_profile.sh
tests/sample_configs/openroadm/2.2.1/oper-ROADMD.xml [new file with mode: 0644]
tests/transportpce_tests/2.2.1/simulators.py
tests/transportpce_tests/2.2.1/test_flex_grid.py [new file with mode: 0644]
tox.ini

index 48f473c600f04fd62886a0bdf1c92a5678ad976a..2f1c6cb3ca6a20894f5330503e2b3bd5099b832c 100755 (executable)
@@ -21,6 +21,7 @@ IMAGE221_LIST="40:xpdra-2.2.1:2.2.1/oper-XPDRA.xml
 41:roadma-2.2.1:2.2.1/oper-ROADMA.xml
 42:roadmb-2.2.1:2.2.1/oper-ROADMB.xml
 43:roadmc-2.2.1:2.2.1/oper-ROADMC.xml
+47:roadmd-2.2.1:2.2.1/oper-ROADMD.xml
 44:xpdrc-2.2.1:2.2.1/oper-XPDRC.xml
 45:spdra-2.2.1:2.2.1/oper-SPDRA.xml
 46:spdrc-2.2.1:2.2.1/oper-SPDRC.xml
diff --git a/tests/sample_configs/openroadm/2.2.1/oper-ROADMD.xml b/tests/sample_configs/openroadm/2.2.1/oper-ROADMD.xml
new file mode 100644 (file)
index 0000000..8a9be59
--- /dev/null
@@ -0,0 +1,715 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <netconf xmlns="urn:ietf:params:xml:ns:netmod:notification">
+    <streams>
+      <stream>
+        <name>OPENROADM</name>
+      </stream>
+    </streams>
+  </netconf>
+  <org-openroadm-device xmlns="http://org/openroadm/device">
+    <info>
+      <node-id>ROADM-D1</node-id>
+      <node-number>4</node-number>
+      <node-type>rdm</node-type>
+      <clli>NodeD</clli>
+      <vendor>vendorD</vendor>
+      <model>model2</model>
+      <serial-id>0002</serial-id>
+      <ipAddress>127.0.0.14</ipAddress>
+      <prefix-length>28</prefix-length>
+      <defaultGateway>127.0.0.20</defaultGateway>
+      <source>static</source>
+      <current-ipAddress>127.0.0.14</current-ipAddress>
+      <current-prefix-length>28</current-prefix-length>
+      <current-defaultGateway>127.0.0.20</current-defaultGateway>
+      <macAddress>00:01:02:03:04:05</macAddress>
+      <softwareVersion>swversion1234</softwareVersion>
+      <openroadm-version>2.2.1</openroadm-version>
+      <template>template_1</template>
+      <current-datetime>2017-10-22T15:23:43Z</current-datetime>
+      <max-degrees>2</max-degrees>
+      <max-srgs>3</max-srgs>
+      <geoLocation>
+        <latitude>1.0000</latitude>
+        <longitude>2.0000</longitude>
+      </geoLocation>
+      <max-num-bin-15min-historical-pm>32</max-num-bin-15min-historical-pm>
+      <max-num-bin-24hour-historical-pm>7</max-num-bin-24hour-historical-pm>
+    </info>
+    <users>
+      <user>
+        <name>openroadm</name>
+        <password>openroadm</password>
+        <group>sudo</group>
+      </user>
+    </users>
+    <circuit-packs>
+      <is-pluggable-optics>true</is-pluggable-optics>
+      <circuit-pack-name>1/0</circuit-pack-name>
+      <circuit-pack-type>WSSDEG</circuit-pack-type>
+      <circuit-pack-product-code>DegW</circuit-pack-product-code>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorD</vendor>
+      <model>WSS9</model>
+      <serial-id>nodeid-1234</serial-id>
+      <type>Dir1</type>
+      <product-code>DegRxTx</product-code>
+      <manufacture-date>2017-08-08T10:47:04.698808+00:00</manufacture-date>
+      <clei>wss1</clei>
+      <hardware-version>0.1</hardware-version>
+      <operational-state>inService</operational-state>
+      <circuit-pack-category>
+        <type>circuitPack</type>
+      </circuit-pack-category>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>inServiceMode</circuit-pack-mode>
+      <shelf>1</shelf>
+      <slot>1</slot>
+      <cp-slots>
+        <slot-name>OSC-SLOT</slot-name>
+        <label>OSC-SLOT</label>
+        <provisioned-circuit-pack>1/0/OSC-PLUG</provisioned-circuit-pack>
+      </cp-slots>
+      <cp-slots>
+        <slot-name>ETH-PLUG</slot-name>
+        <label>ETH-PLUG</label>
+        <provisioned-circuit-pack>1/0/ETH-PLUG</provisioned-circuit-pack>
+      </cp-slots>
+      <ports>
+        <port-name>C1</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>DEG1-CTP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C2</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>DEG1-CTP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C3</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>DEG1-CTP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C4</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>DEG1-CTP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>L1</port-name>
+        <port-type>LINE</port-type>
+        <port-qual>roadm-external</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <label>Dir1-RxTxAMP port</label>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <partner-port>
+          <circuit-pack-name/>
+          <port-name/>
+        </partner-port>
+        <interfaces>
+          <interface-name>OTS-DEG1-TTP-TXRX</interface-name>
+        </interfaces>
+        <interfaces>
+          <interface-name>OMS-DEG1-TTP-TXRX</interface-name>
+        </interfaces>
+        <logical-connection-point>DEG1-TTP-TXRX</logical-connection-point>
+        <supported-interface-capability xmlns:x="http://org/openroadm/port/types">x:if-OTS</supported-interface-capability>
+        <supported-interface-capability xmlns:x="http://org/openroadm/port/types">x:if-OMS</supported-interface-capability>
+        <supported-interface-capability xmlns:x="http://org/openroadm/port/types">x:if-OCH</supported-interface-capability>
+      </ports>
+    </circuit-packs>
+    <circuit-packs>
+      <is-pluggable-optics>true</is-pluggable-optics>
+      <circuit-pack-name>1/0/ETH-PLUG</circuit-pack-name>
+      <circuit-pack-type>port</circuit-pack-type>
+      <circuit-pack-product-code>Eth</circuit-pack-product-code>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorD</vendor>
+      <model>GIGAETHMGT</model>
+      <serial-id>nodeid-1234</serial-id>
+      <type>eth</type>
+      <product-code>eth</product-code>
+      <manufacture-date>2017-08-08T10:47:04.698808+00:00</manufacture-date>
+      <clei>ETHE</clei>
+      <hardware-version>0.1</hardware-version>
+      <operational-state>inService</operational-state>
+      <circuit-pack-category>
+        <type>circuitPack</type>
+      </circuit-pack-category>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>inServiceMode</circuit-pack-mode>
+      <shelf>1</shelf>
+      <slot>1</slot>
+      <subSlot>0</subSlot>
+      <parent-circuit-pack>
+        <circuit-pack-name>1/0</circuit-pack-name>
+        <cp-slot-name>ETH-PLUG</cp-slot-name>
+      </parent-circuit-pack>
+      <ports>
+        <port-name>ETH-PLUG</port-name>
+        <port-type>1GEX</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+      </ports>
+    </circuit-packs>
+    <circuit-packs>
+      <is-pluggable-optics>true</is-pluggable-optics>
+      <circuit-pack-category>
+        <type>circuitPack</type>
+      </circuit-pack-category>
+      <circuit-pack-name>1/0/OSC-PLUG</circuit-pack-name>
+      <circuit-pack-type>port</circuit-pack-type>
+      <administrative-state>inService</administrative-state>
+      <vendor></vendor>
+      <model>SFP/SFP+</model>
+      <serial-id>00000163600843</serial-id>
+      <product-code>oooooo</product-code>
+      <manufacture-date>2017-08-08T10:47:04.698808+00:00</manufacture-date>
+      <clei>oscplug</clei>
+      <hardware-version>01</hardware-version>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>NORMAL</circuit-pack-mode>
+      <shelf>2</shelf>
+      <slot>0</slot>
+      <subSlot>0</subSlot>
+      <parent-circuit-pack>
+        <circuit-pack-name>1/0</circuit-pack-name>
+        <cp-slot-name>OSC-SLOT</cp-slot-name>
+      </parent-circuit-pack>
+      <ports>
+        <port-name>OSC-PORT</port-name>
+        <port-type>1GEX</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+      </ports>
+    </circuit-packs>
+    <circuit-packs>
+      <is-pluggable-optics>true</is-pluggable-optics>
+      <circuit-pack-name>2/0</circuit-pack-name>
+      <circuit-pack-type>WSSDEG</circuit-pack-type>
+      <circuit-pack-product-code>DegW</circuit-pack-product-code>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorD</vendor>
+      <model>WSS9</model>
+      <serial-id>nodeid-1234</serial-id>
+      <type>Dir2</type>
+      <product-code>DegRxTx</product-code>
+      <manufacture-date>2017-08-08T10:47:04.698808+00:00</manufacture-date>
+      <clei>wss1</clei>
+      <hardware-version>0.1</hardware-version>
+      <operational-state>inService</operational-state>
+      <circuit-pack-category>
+        <type>circuitPack</type>
+      </circuit-pack-category>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>inServiceMode</circuit-pack-mode>
+      <shelf>1</shelf>
+      <slot>2</slot>
+      <cp-slots>
+        <slot-name>OSC-SLOT</slot-name>
+        <label>OSC-SLOT</label>
+        <provisioned-circuit-pack>2/0/OSC-PLUG</provisioned-circuit-pack>
+      </cp-slots>
+      <cp-slots>
+        <slot-name>ETH-PLUG</slot-name>
+        <label>ETH-PLUG</label>
+        <provisioned-circuit-pack>1/0/ETH-PLUG</provisioned-circuit-pack>
+      </cp-slots>
+      <ports>
+        <port-name>C1</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>DEG2-CTP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C2</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>DEG2-CTP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C3</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>DEG2-CTP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C4</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>DEG2-CTP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>L1</port-name>
+        <port-type>LINE</port-type>
+        <port-qual>roadm-external</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <label>Dir2-RxTxAMP port</label>
+        <circuit-id>1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <partner-port>
+          <circuit-pack-name/>
+          <port-name/>
+        </partner-port>
+        <logical-connection-point>DEG2-TTP-TXRX</logical-connection-point>
+        <supported-interface-capability xmlns:x="http://org/openroadm/port/types">x:if-OTS</supported-interface-capability>
+        <supported-interface-capability xmlns:x="http://org/openroadm/port/types">x:if-OMS</supported-interface-capability>
+        <supported-interface-capability xmlns:x="http://org/openroadm/port/types">x:if-OCH</supported-interface-capability>
+      </ports>
+    </circuit-packs>
+    <circuit-packs>
+      <is-pluggable-optics>true</is-pluggable-optics>
+      <circuit-pack-name>2/0/ETH-PLUG</circuit-pack-name>
+      <circuit-pack-type>port</circuit-pack-type>
+      <circuit-pack-product-code>Eth</circuit-pack-product-code>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorD</vendor>
+      <model>GIGAETHMGT</model>
+      <serial-id>nodeid-1234</serial-id>
+      <type>eth</type>
+      <product-code>eth</product-code>
+      <manufacture-date>2017-08-08T10:47:04.698808+00:00</manufacture-date>
+      <clei>ETHE</clei>
+      <hardware-version>0.1</hardware-version>
+      <operational-state>inService</operational-state>
+      <circuit-pack-category>
+        <type>circuitPack</type>
+      </circuit-pack-category>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>inServiceMode</circuit-pack-mode>
+      <shelf>1</shelf>
+      <slot>2</slot>
+      <subSlot>0</subSlot>
+      <parent-circuit-pack>
+        <circuit-pack-name>2/0</circuit-pack-name>
+        <cp-slot-name>ETH-PLUG</cp-slot-name>
+      </parent-circuit-pack>
+      <ports>
+        <port-name>ETH-PLUG</port-name>
+        <port-type>1GEX</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+      </ports>
+    </circuit-packs>
+    <circuit-packs>
+      <is-pluggable-optics>true</is-pluggable-optics>
+      <circuit-pack-category>
+        <type>circuitPack</type>
+      </circuit-pack-category>
+      <circuit-pack-name>2/0/OSC-PLUG</circuit-pack-name>
+      <circuit-pack-type>port</circuit-pack-type>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorD</vendor>
+      <model>SFP/SFP+</model>
+      <serial-id>00000163600843</serial-id>
+      <product-code>oooooo</product-code>
+      <manufacture-date>2017-08-08T10:47:04.698808+00:00</manufacture-date>
+      <clei>oscplug</clei>
+      <hardware-version>01</hardware-version>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>NORMAL</circuit-pack-mode>
+      <shelf>2</shelf>
+      <slot>0</slot>
+      <subSlot>0</subSlot>
+      <parent-circuit-pack>
+        <circuit-pack-name>1/0</circuit-pack-name>
+        <cp-slot-name>OSC-SLOT</cp-slot-name>
+      </parent-circuit-pack>
+      <ports>
+        <port-name>OSC-PORT</port-name>
+        <port-type>1GEX</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+      </ports>
+    </circuit-packs>
+    <circuit-packs>
+      <is-pluggable-optics>true</is-pluggable-optics>
+      <circuit-pack-name>3/0</circuit-pack-name>
+      <circuit-pack-type>ADDDROP</circuit-pack-type>
+      <circuit-pack-product-code>SRGRx</circuit-pack-product-code>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorD</vendor>
+      <model>WSS</model>
+      <serial-id>nodeid-1234</serial-id>
+      <type>SRG1</type>
+      <product-code>SRGRx</product-code>
+      <manufacture-date>2007-10-10T00:00:00Z</manufacture-date>
+      <clei>12345678901</clei>
+      <hardware-version>0.1</hardware-version>
+      <operational-state>inService</operational-state>
+      <circuit-pack-category>
+        <type>circuitPack</type>
+      </circuit-pack-category>
+      <equipment-state>reserved-for-facility-available</equipment-state>
+      <circuit-pack-mode>inServiceMode</circuit-pack-mode>
+      <shelf>1</shelf>
+      <slot>2</slot>
+      <ports>
+        <port-name>C1</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-external</port-qual>
+        <port-wavelength-type>wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <label>SRG1-client port 1</label>
+        <circuit-id>SRG1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <partner-port>
+          <circuit-pack-name/>
+          <port-name/>
+        </partner-port>
+        <logical-connection-point>SRG1-PP1</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C2</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-external</port-qual>
+        <port-wavelength-type>wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <label>SRG1-client port 2</label>
+        <circuit-id>SRG1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <partner-port>
+          <circuit-pack-name/>
+          <port-name/>
+        </partner-port>
+        <logical-connection-point>SRG1-PP2</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C3</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-external</port-qual>
+        <port-wavelength-type>wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <label>SRG1-client port 3</label>
+        <circuit-id>SRG1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <partner-port>
+          <circuit-pack-name/>
+          <port-name/>
+        </partner-port>
+        <logical-connection-point>SRG1-PP3</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>C4</port-name>
+        <port-type>Client</port-type>
+        <port-qual>roadm-external</port-qual>
+        <port-wavelength-type>wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <label>SRG1-client port 4</label>
+        <circuit-id>SRG1</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <partner-port>
+          <circuit-pack-name/>
+          <port-name/>
+        </partner-port>
+        <logical-connection-point>SRG1-PP4</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>AD-DEG1</port-name>
+        <port-type>Edge</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG1-CP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>AD-DEG2</port-name>
+        <port-type>Edge</port-type>
+        <port-qual>roadm-internal</port-qual>
+        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-direction>bidirectional</port-direction>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG1-CP-TXRX</logical-connection-point>
+      </ports>
+    </circuit-packs>
+    <interface>
+      <name>1GE-interface-1</name>
+      <supporting-circuit-pack-name>1/0/ETH-PLUG</supporting-circuit-pack-name>
+      <supporting-port>ETH-PLUG</supporting-port>
+      <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:ethernetCsmacd</type>
+      <operational-state>inService</operational-state>
+      <administrative-state>inService</administrative-state>
+      <ethernet xmlns="http://org/openroadm/ethernet-interfaces">
+        <speed>1000</speed>
+        <duplex>full</duplex>
+        <mtu>1800</mtu>
+        <auto-negotiation>enabled</auto-negotiation>
+        <curr-speed>1000</curr-speed>
+        <curr-duplex>FULL</curr-duplex>
+      </ethernet>
+    </interface>
+    <interface>
+      <name>1GE-interface-2</name>
+      <supporting-circuit-pack-name>2/0/ETH-PLUG</supporting-circuit-pack-name>
+      <supporting-port>ETH-PLUG</supporting-port>
+      <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:ethernetCsmacd</type>
+      <operational-state>inService</operational-state>
+      <administrative-state>inService</administrative-state>
+      <ethernet xmlns="http://org/openroadm/ethernet-interfaces">
+        <speed>1000</speed>
+        <duplex>full</duplex>
+        <mtu>1800</mtu>
+        <auto-negotiation>enabled</auto-negotiation>
+        <curr-speed>1000</curr-speed>
+        <curr-duplex>FULL</curr-duplex>
+      </ethernet>
+    </interface>
+    <interface>
+      <name>OTS-DEG1-TTP-TXRX</name>
+      <supporting-circuit-pack-name>1/0</supporting-circuit-pack-name>
+      <supporting-port>L1</supporting-port>
+      <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:opticalTransport</type>
+      <operational-state>inService</operational-state>
+      <administrative-state>inService</administrative-state>
+      <ots xmlns="http://org/openroadm/optical-transport-interfaces">
+        <fiber-type>smf</fiber-type>
+        <span-loss-transmit>6</span-loss-transmit>
+        <span-loss-receive>15</span-loss-receive>
+        <ingress-span-loss-aging-margin>0</ingress-span-loss-aging-margin>
+      </ots>
+    </interface>
+    <interface>
+      <name>OMS-DEG1-TTP-TXRX</name>
+      <supporting-circuit-pack-name>1/0</supporting-circuit-pack-name>
+      <supporting-port>L1</supporting-port>
+      <supporting-interface>OTS-DEG1-TTP-TXRX</supporting-interface>
+      <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:openROADMOpticalMultiplex</type>
+      <description>TBD</description>
+      <circuit-id>TBD</circuit-id>
+      <operational-state>inService</operational-state>
+      <administrative-state>inService</administrative-state>
+    </interface>
+    <protocols>
+      <lldp xmlns="http://org/openroadm/lldp">
+        <global-config>
+          <adminStatus>enable</adminStatus>
+          <msgTxHoldMultiplier>4</msgTxHoldMultiplier>
+          <msgTxInterval>20</msgTxInterval>
+        </global-config>
+        <nbr-list>
+          <if-name>
+            <ifName>1GE-interface-1</ifName>
+            <remoteSysName>ROADM-C1</remoteSysName>
+            <remoteMgmtAddress>1.1.1.1</remoteMgmtAddress>
+            <remoteChassisId>1?</remoteChassisId>
+            <remotePortId>1GE-interface-2</remotePortId>
+            <remoteChassisIdSubType>chassiscomponent</remoteChassisIdSubType>
+            <remotePortIdSubType>ifalias</remotePortIdSubType>
+            <remoteMgmtAddressSubType>ipV4</remoteMgmtAddressSubType>
+          </if-name>
+          <if-name>
+            <ifName>1GE-interface-2</ifName>
+            <remoteSysName>ROADM-B1</remoteSysName>
+            <remoteMgmtAddress>1.1.1.1</remoteMgmtAddress>
+            <remoteChassisId>1?</remoteChassisId>
+            <remotePortId>1GE-interface-2</remotePortId>
+            <remoteChassisIdSubType>chassiscomponent</remoteChassisIdSubType>
+            <remotePortIdSubType>ifalias</remotePortIdSubType>
+            <remoteMgmtAddressSubType>ipV4</remoteMgmtAddressSubType>
+          </if-name>
+        </nbr-list>
+        <port-config>
+          <ifName>1GE-interface-1</ifName>
+          <adminStatus>txandrx</adminStatus>
+        </port-config>
+        <port-config>
+          <ifName>1GE-interface-2</ifName>
+          <adminStatus>txandrx</adminStatus>
+        </port-config>
+      </lldp>
+    </protocols>
+    <degree>
+      <degree-number>1</degree-number>
+      <max-wavelengths>96</max-wavelengths>
+      <mc-capabilities>
+        <slot-width-granularity>12.5</slot-width-granularity>
+        <center-freq-granularity>6.25</center-freq-granularity>
+        <min-slots>3</min-slots>
+        <max-slots>384</max-slots>
+      </mc-capabilities>
+      <circuit-packs>
+        <index>1</index>
+        <circuit-pack-name>1/0</circuit-pack-name>
+      </circuit-packs>
+      <circuit-packs>
+        <index>2</index>
+        <circuit-pack-name>1/0/ETH-PLUG</circuit-pack-name>
+      </circuit-packs>
+      <connection-ports>
+        <index>1</index>
+        <circuit-pack-name>1/0</circuit-pack-name>
+        <port-name>L1</port-name>
+      </connection-ports>
+    </degree>
+    <degree>
+      <degree-number>2</degree-number>
+      <max-wavelengths>96</max-wavelengths>
+      <mc-capabilities>
+        <slot-width-granularity>12.5</slot-width-granularity>
+        <center-freq-granularity>6.25</center-freq-granularity>
+        <min-slots>3</min-slots>
+        <max-slots>384</max-slots>
+      </mc-capabilities>
+      <circuit-packs>
+        <index>1</index>
+        <circuit-pack-name>2/0</circuit-pack-name>
+      </circuit-packs>
+      <circuit-packs>
+        <index>2</index>
+        <circuit-pack-name>2/0/ETH-PLUG</circuit-pack-name>
+      </circuit-packs>
+      <connection-ports>
+        <index>1</index>
+        <circuit-pack-name>2/0</circuit-pack-name>
+        <port-name>L1</port-name>
+      </connection-ports>
+    </degree>
+    <shared-risk-group>
+      <srg-number>1</srg-number>
+      <max-add-drop-ports>4</max-add-drop-ports>
+      <wavelength-duplication>one-per-srg</wavelength-duplication>
+      <mc-capabilities>
+        <slot-width-granularity>12.5</slot-width-granularity>
+        <center-freq-granularity>6.25</center-freq-granularity>
+        <min-slots>3</min-slots>
+        <max-slots>384</max-slots>
+      </mc-capabilities>
+      <circuit-packs>
+        <index>1</index>
+        <circuit-pack-name>3/0</circuit-pack-name>
+      </circuit-packs>
+      <current-provisioned-add-drop-ports>4</current-provisioned-add-drop-ports>
+    </shared-risk-group>
+  </org-openroadm-device>
+  <current-pm-list xmlns="http://org/openroadm/pm">
+    <current-pm-entry>
+      <pm-resource-instance xmlns:d="http://org/openroadm/device">/d:org-openroadm-device/d:interface[d:name='OTS-DEG1-TTP-TXRX']</pm-resource-instance>
+      <pm-resource-type>interface</pm-resource-type>
+      <pm-resource-type-extension/>
+      <retrieval-time>2018-06-07T13:22:58+00:00</retrieval-time>
+      <current-pm>
+        <type>opticalPowerOutput</type>
+        <extension/>
+        <location>nearEnd</location>
+        <direction>tx</direction>
+        <measurement>
+          <granularity>15min</granularity>
+          <pmParameterValue>4.6</pmParameterValue>
+          <pmParameterUnit>dBm</pmParameterUnit>
+          <validity>complete</validity>
+        </measurement>
+        <measurement>
+          <granularity>24Hour</granularity>
+          <pmParameterValue>3.26</pmParameterValue>
+          <pmParameterUnit>dBm</pmParameterUnit>
+          <validity>complete</validity>
+        </measurement>
+      </current-pm>
+      <current-pm>
+        <type>opticalPowerInput</type>
+        <extension/>
+        <location>nearEnd</location>
+        <direction>rx</direction>
+        <measurement>
+          <granularity>15min</granularity>
+          <pmParameterValue>-15.1</pmParameterValue>
+          <pmParameterUnit>dBm</pmParameterUnit>
+          <validity>complete</validity>
+        </measurement>
+        <measurement>
+          <granularity>24Hour</granularity>
+          <pmParameterValue>-17.3</pmParameterValue>
+          <pmParameterUnit>dBm</pmParameterUnit>
+          <validity>complete</validity>
+        </measurement>
+      </current-pm>
+      <current-pm>
+        <type>opticalReturnLoss</type>
+        <extension/>
+        <location>nearEnd</location>
+        <direction>rx</direction>
+        <measurement>
+          <granularity>15min</granularity>
+          <pmParameterValue>49.1</pmParameterValue>
+          <pmParameterUnit>dBm</pmParameterUnit>
+          <validity>complete</validity>
+        </measurement>
+        <measurement>
+          <granularity>24Hour</granularity>
+          <pmParameterValue>45</pmParameterValue>
+          <pmParameterUnit>dBm</pmParameterUnit>
+          <validity>complete</validity>
+        </measurement>
+      </current-pm>
+    </current-pm-entry>
+  </current-pm-list>
+</data>
\ No newline at end of file
index 294859aea905c90496c4a618d024d0442e13c60b..dd1ac0ca53c6b9968e9338d5eae047edd2165631 100644 (file)
@@ -15,6 +15,7 @@ SIMS = {
     'roadma': {'port': '17841', 'configfile': 'oper-ROADMA.xml', 'logfile': 'oper-ROADMA.log'},
     'roadmb': {'port': '17842', 'configfile': 'oper-ROADMB.xml', 'logfile': 'oper-ROADMB.log'},
     'roadmc': {'port': '17843', 'configfile': 'oper-ROADMC.xml', 'logfile': 'oper-ROADMC.log'},
+    'roadmd': {'port': '17847', 'configfile': 'oper-ROADMD.xml', 'logfile': 'oper-ROADMD.log'},
     'xpdrc': {'port': '17844', 'configfile': 'oper-XPDRC.xml', 'logfile': 'oper-XPDRC.log'},
     'spdra': {'port': '17845', 'configfile': 'oper-SPDRA.xml', 'logfile': 'oper-SPDRA.log'},
     'spdrc': {'port': '17846', 'configfile': 'oper-SPDRC.xml', 'logfile': 'oper-SPDRC.log'}
diff --git a/tests/transportpce_tests/2.2.1/test_flex_grid.py b/tests/transportpce_tests/2.2.1/test_flex_grid.py
new file mode 100644 (file)
index 0000000..4bf94c0
--- /dev/null
@@ -0,0 +1,263 @@
+#!/usr/bin/env python
+
+##############################################################################
+# Copyright (c) 2019 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 unittest
+import time
+import requests
+from common import test_utils
+
+
+class TransportPCEPortMappingTesting(unittest.TestCase):
+
+    processes = None
+
+    @classmethod
+    def setUpClass(cls):
+        cls.processes = test_utils.start_tpce()
+        cls.processes = test_utils.start_sims(['roadmd'])
+
+    @classmethod
+    def tearDownClass(cls):
+        for process in cls.processes:
+            test_utils.shutdown_process(process)
+        print("all processes killed")
+
+    def setUp(self):
+        print("execution of {}".format(self.id().split(".")[-1]))
+        time.sleep(10)
+
+    def test_01_rdm_device_connection(self):
+        response = test_utils.mount_device("ROADM-D1", 'roadmd')
+        self.assertEqual(response.status_code, requests.codes.created,
+                         test_utils.CODE_SHOULD_BE_201)
+
+    def test_02_rdm_device_connected(self):
+        response = test_utils.get_netconf_oper_request("ROADM-D1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['node'][0]['netconf-node-topology:connection-status'],
+            'connected')
+        time.sleep(10)
+
+    def test_03_rdm_portmapping_info(self):
+        response = test_utils.portmapping_request("ROADM-D1/node-info")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            {u'node-info': {u'node-type': u'rdm',
+                            u'node-ip-address': u'127.0.0.14',
+                            u'node-clli': u'NodeD',
+                            u'openroadm-version': u'2.2.1', u'node-vendor': u'vendorD',
+                            u'node-model': u'model2',
+                            }},
+            res)
+        time.sleep(3)
+
+    def test_04_rdm_deg1_lcp(self):
+        response = test_utils.portmapping_request("ROADM-D1/mc-capabilities/DEG1-TTP")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            {
+              "mc-capabilities": [
+                {
+                  "mc-node-name": "DEG1-TTP",
+                  "center-freq-granularity": 6.25,
+                  "slot-width-granularity": 12.5
+                }
+              ]
+            }, res)
+        time.sleep(3)
+
+    def test_05_rdm_deg2_lcp(self):
+        response = test_utils.portmapping_request("ROADM-D1/mc-capabilities/DEG2-TTP")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            {
+              "mc-capabilities": [
+                {
+                  "mc-node-name": "DEG2-TTP",
+                  "center-freq-granularity": 6.25,
+                  "slot-width-granularity": 12.5
+                }
+              ]
+            }, res)
+        time.sleep(3)
+
+    def test_06_rdm_srg1_lcp(self):
+        response = test_utils.portmapping_request("ROADM-D1/mc-capabilities/SRG1-PP")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            {
+              "mc-capabilities": [
+                {
+                  "mc-node-name": "SRG1-PP",
+                  "center-freq-granularity": 6.25,
+                  "slot-width-granularity": 12.5
+                }
+              ]
+            }, res)
+        time.sleep(3)
+
+    # Renderer interface creations
+    def test_07_device_renderer(self):
+        data = {
+            "transportpce-device-renderer:input": {
+            "transportpce-device-renderer:modulation-format": "dp-qpsk",
+            "transportpce-device-renderer:operation": "create",
+            "transportpce-device-renderer:service-name": "testNMC-MC",
+            "transportpce-device-renderer:wave-number": "2",
+            "transportpce-device-renderer:center-freq": "196.05",
+            "transportpce-device-renderer:slot-width": "87.5",
+            "transportpce-device-renderer:nodes": [
+              {
+                "transportpce-device-renderer:node-id": "ROADM-D1",
+                "transportpce-device-renderer:src-tp": "SRG1-PP1-TXRX",
+                "transportpce-device-renderer:dest-tp": "DEG1-TTP-TXRX"
+              }
+            ]
+          }
+        }
+        url = test_utils.RESTCONF_BASE_URL + \
+              "/operations/transportpce-device-renderer:service-path"
+        response = test_utils.post_request(url, data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm-connection successfully created for nodes',
+                      res['output']['result'])
+        time.sleep(10)
+
+    # Get Degree MC interface and check
+    def test_08_degree_mc_interface(self):
+        response = test_utils.check_netconf_node_request("ROADM-D1",
+                                                         "interface/DEG1-TTP-TXRX-mc-2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertDictEqual(
+            dict({"name": "DEG1-TTP-TXRX-mc-2",
+                  "supporting-interface": "OMS-DEG1-TTP-TXRX",
+                  "supporting-circuit-pack-name": "1/0",
+                  "circuit-id": "TBD",
+                  "description": "TBD",
+                  "supporting-port": "L1",
+                  "type": "org-openroadm-interfaces:mediaChannelTrailTerminationPoint"},
+                  **res['interface'][0]),
+            res['interface'][0])
+
+        # Check the mc-ttp max and min-freq
+        self.assertEqual({
+                          "min-freq": 196.00625,
+                          "max-freq": 196.09375
+                          },
+            res['interface'][0]['org-openroadm-media-channel-interfaces:mc-ttp'])
+        time.sleep(3)
+
+    # get DEG-NMC interface and check
+    def test_09_degree_nmc_interface(self):
+        response = test_utils.check_netconf_node_request("ROADM-D1",
+                                                         "interface/DEG1-TTP-TXRX-nmc-2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertDictEqual(
+            dict({"name": "DEG1-TTP-TXRX-nmc-2",
+                  "supporting-interface": "DEG1-TTP-TXRX-mc-2",
+                  "supporting-circuit-pack-name": "1/0",
+                  "circuit-id": "TBD",
+                  "description": "TBD",
+                  "supporting-port": "L1",
+                  "type": "org-openroadm-interfaces:networkMediaChannelConnectionTerminationPoint"},
+                 **res['interface'][0]),
+            res['interface'][0])
+
+        # Check the mc-ttp max and min-freq
+        self.assertEqual({
+          "frequency": 196.05,
+          "width": 75
+        },
+        res['interface'][0]['org-openroadm-network-media-channel-interfaces:nmc-ctp'])
+        time.sleep(3)
+
+    # get SRG-NMC interface
+    def test_10_srg_nmc_interface(self):
+        response = test_utils.check_netconf_node_request("ROADM-D1",
+                                                         "interface/SRG1-PP1-TXRX-nmc-2")
+        res = response.json()
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertEqual(
+            dict({"name": "SRG1-PP1-TXRX-nmc-2",
+                  "supporting-circuit-pack-name": "3/0",
+                  "circuit-id": "TBD",
+                  "description": "TBD",
+                  "supporting-port": "C1",
+                  "type": "org-openroadm-interfaces:networkMediaChannelConnectionTerminationPoint"},
+                 **res['interface'][0]), res['interface'][0])
+        self.assertEqual({"frequency": 196.05, "width": 75},
+                         res['interface'][0]['org-openroadm-network-media-channel-interfaces:nmc-ctp'])
+        time.sleep(3)
+
+    # Create ROADM-connection
+    def test_11_roadm_connection(self):
+        response = test_utils.check_netconf_node_request("ROADM-D1",
+                                          "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual("SRG1-PP1-TXRX-DEG1-TTP-TXRX-2",
+                         res['roadm-connections'][0]['connection-name'])
+        self.assertEqual("SRG1-PP1-TXRX-nmc-2",
+                         res['roadm-connections'][0]['source']['src-if'])
+        self.assertEqual("DEG1-TTP-TXRX-nmc-2",
+                         res['roadm-connections'][0]['destination']['dst-if'])
+        time.sleep(3)
+
+    # Delete ROADM connections and interfaces
+
+    # delete ROADM connection
+    def test_12_delete_roadm_connection(self):
+        response = test_utils.delete_request(test_utils.URL_CONFIG_NETCONF_TOPO +
+                   "node/ROADM-D1/yang-ext:mount/" +
+                   "org-openroadm-device:org-openroadm-device/" +
+                   "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+    # Delete NMC SRG interface
+    def test_13_delete_srg_interface(self):
+        response = test_utils.delete_request(test_utils.URL_CONFIG_NETCONF_TOPO +
+                                           "node/ROADM-D1/yang-ext:mount/" +
+                                           "org-openroadm-device:org-openroadm-device/" +
+                                           "interface/SRG1-PP1-TXRX-nmc-2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+    # Delete NMC Degree interface
+    def test_14_delete_degree_interface(self):
+        response = test_utils.delete_request(test_utils.URL_CONFIG_NETCONF_TOPO +
+                                             "node/ROADM-D1/yang-ext:mount/" +
+                                             "org-openroadm-device:org-openroadm-device/" +
+                                             "interface/DEG1-TTP-TXRX-nmc-2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+    # Delete MC Degree interface
+    def test_15_delete_degree_interface(self):
+        response = test_utils.delete_request(test_utils.URL_CONFIG_NETCONF_TOPO +
+                                             "node/ROADM-D1/yang-ext:mount/" +
+                                             "org-openroadm-device:org-openroadm-device/" +
+                                             "interface/DEG1-TTP-TXRX-mc-2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(3)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
diff --git a/tox.ini b/tox.ini
index 6aee9f78424503bde276259f9fc4bc126846f87a..5e6b31a236f4ccbfc7d0ec19e7a5018e010bfd7f 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -18,23 +18,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,olm221,tapi221,otnend2end,end2end221,gnpy}: - sh -c "if [ ! `which mvn` ]; then ./installMavenCentOS.sh  ; fi"
+  {py3,portmapping,topoPortMapping,flexgrid,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,olm221,tapi221,otnend2end,end2end221,gnpy}: - sh -c "if [ ! `which mvn` ]; then ./installMavenCentOS.sh  ; fi"
 #install honeynode simulators
-  {py3,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,olm221,tapi221,otnend2end,end2end221,gnpy}: - sh -c "./install_honeynode.sh"
+  {py3,portmapping,topoPortMapping,flexgrid,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,olm221,tapi221,otnend2end,end2end221,gnpy}: - sh -c "./install_honeynode.sh"
 #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}: - 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,olm221,tapi221,otnend2end,end2end221,gnpy}: - 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,flexgrid,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,olm221,tapi221,otnend2end,end2end221,gnpy}: - 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}: - 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,olm221,tapi221,otnend2end,end2end221,gnpy}: - sh -c "sed -i'_' 's@!/bin/sh@!/bin/sh\'$'\n. $(dirname $0)/../../../../tests/reflectwarn.sh@' ../karaf/target/assembly/bin/karaf"
+  {py3,portmapping,topoPortMapping,flexgrid,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,olm221,tapi221,otnend2end,end2end221,gnpy}: - 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,olm221,tapi221,otnend2end,end2end221,gnpy}: - sh -c 'if [ "$USE_LIGHTY" = "True" ]; then (cd ../lighty && ./build.sh); fi'
+  {py3,portmapping,topoPortMapping,flexgrid,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,olm221,tapi221,otnend2end,end2end221,gnpy}: - 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_topoPortMapping.py
@@ -47,6 +47,7 @@ commands =
   {py3,portmapping221}: nosetests --with-xunit transportpce_tests/2.2.1/test_portmapping.py
   {py3,topology221}: nosetests --with-xunit transportpce_tests/2.2.1/test_topology.py
   {py3,otntopology}: nosetests --with-xunit transportpce_tests/2.2.1/test_otn_topology.py
+  {py3,flexgrid}: nosetests --with-xunit transportpce_tests/2.2.1/test_flex_grid.py
   {py3,rspn221}: nosetests --with-xunit transportpce_tests/2.2.1/test_renderer_service_path_nominal.py
   {py3,otnrenderer}: nosetests --with-xunit transportpce_tests/2.2.1/test_otn_renderer.py
   {py3,otnshrenderer}: nosetests --with-xunit transportpce_tests/2.2.1/test_otn_sh_renderer.py