End-to-end functional tests 42/78542/9
authorGilles Thouenon <gilles.thouenon@orange.com>
Thu, 6 Dec 2018 08:46:42 +0000 (09:46 +0100)
committerGilles Thouenon <gilles.thouenon@orange.com>
Mon, 4 Feb 2019 15:26:31 +0000 (16:26 +0100)
- adapt ROADM configuration files of honeynode with ots-oms interfaces
and SRG3
- adapt XPDR configuration files of honeynode with addition of Network2
port for XPDRC and bug correction in config of XPDRA
- add a new functional test suite that check the whole TransportPCE
modules  (with basic checks of renderer, topology, pce and service
handler for 'service' and 'roadm-line' connection-type)
- adapt tox.ini consequently
- bugs corrections on the end-to-end test suite

NB: with current version of TransportPCE code, some tests may fail:
- test_15 with test_17 and test_18
- test_16
- test_22 with test_23 and test_24
- test_47

Change-Id: I725e9021f3a6e8da768218de60882079c4c9ef6e
JIRA: TRNSPRTPCE-54
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Co-authored-by: Christophe Betoule <christophe.betoule@orange.com>
tests/sample_configs/ord_2.1/oper-ROADMA-full.xml
tests/sample_configs/ord_2.1/oper-ROADMC-full.xml
tests/sample_configs/ord_2.1/oper-XPDRA.xml
tests/sample_configs/ord_2.1/oper-XPDRC.xml
tests/transportpce_tests/test_end2end.py [new file with mode: 0644]
tox.ini

index 2979e52bc47472425bb201a8e35b10477866cfe7..9ce63a6c6247c1d7dc1a3f37227810239d247d83 100644 (file)
@@ -80,7 +80,7 @@
         <provisioned-circuit-pack>3/0</provisioned-circuit-pack>
       </slots>
     </shelves>
-        <shelves>
+    <shelves>
       <shelf-name>ssrg</shelf-name>
       <shelf-type>pizza</shelf-type>
       <rack>XYZ</rack>
           <port-power-capability-max-rx>14.0</port-power-capability-max-rx>
           <port-power-capability-max-tx>21.82</port-power-capability-max-tx>
         </roadm-port>
+        <interfaces>
+          <interface-name>OTS-DEG1-TTP-TXRX</interface-name>
+        </interfaces>
+        <interfaces>
+          <interface-name>OMS-DEG1-TTP-TXRX</interface-name>
+        </interfaces>
       </ports>
       <ports>
         <port-name>LOG1</port-name>
         <logical-connection-point>SRG1-CP-TXRX</logical-connection-point>
       </ports>
     </circuit-packs>
+    <circuit-packs>
+      <circuit-pack-name>5/0</circuit-pack-name>
+      <circuit-pack-type>ADDDROP</circuit-pack-type>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorA</vendor>
+      <model>16CX4D</model>
+      <clei>cccccccc</clei>
+      <operational-state>inService</operational-state>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>NORMAL</circuit-pack-mode>
+      <shelf>4</shelf>
+      <slot>0</slot>
+      <subSlot>0</subSlot>
+      <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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP1</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C10</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP10</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C11</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP11</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C12</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP12</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C13</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP13</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C14</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP14</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C15</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP15</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C16</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP16</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP2</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP3</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP4</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C5</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG5-PP5</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C6</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP6</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C7</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP7</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C8</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP8</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C9</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP9</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </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>SRG3-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>SRG3-CP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>AD-DEG3</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>SRG3-CP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>AD-DEG4</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>SRG3-CP-TXRX</logical-connection-point>
+      </ports>
+    </circuit-packs>
     <interface>
       <name>eth-2/0/ETH-PLUG</name>
       <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:ethernetCsmacd</type>
         <curr-duplex>FULL</curr-duplex>
       </ethernet>
     </interface>
+    <interface>
+      <name>OMS-DEG1-TTP-TXRX</name>
+      <operational-state>inService</operational-state>
+      <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:openROADMOpticalMultiplex</type>
+      <supporting-interface>OTS-DEG1-TTP-TXRX</supporting-interface>
+      <description>TBD</description>
+      <supporting-port>L1</supporting-port>
+      <circuit-id>TBD</circuit-id>
+      <administrative-state>inService</administrative-state>
+      <supporting-circuit-pack-name>2/0</supporting-circuit-pack-name>
+    </interface>
+    <interface>
+      <name>OTS-DEG1-TTP-TXRX</name>
+      <operational-state>inService</operational-state>
+      <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:opticalTransport</type>
+      <description>TBD</description>
+      <supporting-port>L1</supporting-port>
+      <circuit-id>TBD</circuit-id>
+      <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>
+      </ots>
+      <administrative-state>inService</administrative-state>
+      <supporting-circuit-pack-name>2/0</supporting-circuit-pack-name>
+    </interface>
     <protocols>
       <lldp xmlns="http://org/openroadm/lldp">
         <global-config>
         <circuit-pack-name>4/0</circuit-pack-name>
       </circuit-packs>
     </shared-risk-group>
+    <shared-risk-group>
+      <srg-number>3</srg-number>
+      <max-add-drop-ports>16</max-add-drop-ports>
+      <wavelengthDuplication>onePerSRG</wavelengthDuplication>
+      <circuit-packs>
+        <index>1</index>
+        <circuit-pack-name>5/0</circuit-pack-name>
+      </circuit-packs>
+    </shared-risk-group>
     <connection-map>
       <connection-map-number>1</connection-map-number>
       <source>
     </resource>
   </currentPm>
 </currentPmlist>
-</data>
\ No newline at end of file
+</data>
index 7a082a2495e9a3633ac61ff6917f87a8ca3ab4a1..057f4de79c69416af89d9b34c98bce3a4a74a3ba 100644 (file)
           <port-power-capability-max-rx>14.0</port-power-capability-max-rx>
           <port-power-capability-max-tx>21.82</port-power-capability-max-tx>
         </roadm-port>
+        <interfaces>
+          <interface-name>OTS-DEG2-TTP-TXRX</interface-name>
+        </interfaces>
+        <interfaces>
+          <interface-name>OMS-DEG2-TTP-TXRX</interface-name>
+        </interfaces>
       </ports>
       <ports>
         <port-name>LOG1</port-name>
         <logical-connection-point>SRG1-CP-TXRX</logical-connection-point>
       </ports>
     </circuit-packs>
+    <circuit-packs>
+      <circuit-pack-name>5/0</circuit-pack-name>
+      <circuit-pack-type>ADDDROP</circuit-pack-type>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorA</vendor>
+      <model>16CX4D</model>
+      <clei>cccccccc</clei>
+      <operational-state>inService</operational-state>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>NORMAL</circuit-pack-mode>
+      <shelf>4</shelf>
+      <slot>0</slot>
+      <subSlot>0</subSlot>
+      <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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP1</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C10</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP10</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C11</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP11</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C12</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP12</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C13</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP13</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C14</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP14</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C15</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP15</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C16</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP16</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP2</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP3</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP4</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C5</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG5-PP5</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C6</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP6</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C7</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP7</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C8</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP8</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </ports>
+      <ports>
+        <port-name>C9</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>
+        <administrative-state>inService</administrative-state>
+        <operational-state>inService</operational-state>
+        <logical-connection-point>SRG3-PP9</logical-connection-point>
+        <roadm-port>
+          <port-power-capability-min-rx>-15.0</port-power-capability-min-rx>
+          <port-power-capability-min-tx>-28.0</port-power-capability-min-tx>
+          <port-power-capability-max-rx>10.0</port-power-capability-max-rx>
+          <port-power-capability-max-tx>15.0</port-power-capability-max-tx>
+        </roadm-port>
+      </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>SRG3-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>SRG3-CP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>AD-DEG3</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>SRG3-CP-TXRX</logical-connection-point>
+      </ports>
+      <ports>
+        <port-name>AD-DEG4</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>SRG3-CP-TXRX</logical-connection-point>
+      </ports>
+    </circuit-packs>
     <interface>
       <name>eth-2/0/ETH-PLUG</name>
       <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:ethernetCsmacd</type>
         <curr-duplex>FULL</curr-duplex>
       </ethernet>
     </interface>
+    <interface>
+      <name>OTS-DEG2-TTP-TXRX</name>
+      <operational-state>inService</operational-state>
+      <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:opticalTransport</type>
+      <description>TBD</description>
+      <supporting-port>L1</supporting-port>
+      <circuit-id>TBD</circuit-id>
+      <ots xmlns="http://org/openroadm/optical-transport-interfaces">
+        <fiber-type>smf</fiber-type>
+        <span-loss-transmit>15</span-loss-transmit>
+        <span-loss-receive>6</span-loss-receive>
+      </ots>
+      <administrative-state>inService</administrative-state>
+      <supporting-circuit-pack-name>3/0</supporting-circuit-pack-name>
+    </interface>
+    <interface>
+      <name>OMS-DEG2-TTP-TXRX</name>
+      <operational-state>inService</operational-state>
+      <type xmlns:openROADM-if="http://org/openroadm/interfaces">openROADM-if:openROADMOpticalMultiplex</type>
+      <supporting-interface>OTS-DEG2-TTP-TXRX</supporting-interface>
+      <description>TBD</description>
+      <supporting-port>L1</supporting-port>
+      <circuit-id>TBD</circuit-id>
+      <administrative-state>inService</administrative-state>
+      <supporting-circuit-pack-name>3/0</supporting-circuit-pack-name>
+    </interface>
     <protocols>
       <lldp xmlns="http://org/openroadm/lldp">
         <global-config>
         <circuit-pack-name>4/0</circuit-pack-name>
       </circuit-packs>
     </shared-risk-group>
+    <shared-risk-group>
+      <srg-number>3</srg-number>
+      <max-add-drop-ports>16</max-add-drop-ports>
+      <wavelengthDuplication>onePerSRG</wavelengthDuplication>
+      <circuit-packs>
+        <index>1</index>
+        <circuit-pack-name>5/0</circuit-pack-name>
+      </circuit-packs>
+    </shared-risk-group>
     <connection-map>
       <connection-map-number>1</connection-map-number>
       <source>
index 34c963daa24f7bceee7c37a227d3c036d4a325b0..a2d3a01f9e51f69287de5b0819792001bb168e9e 100644 (file)
         <cp-slot-name>2</cp-slot-name>
       </parent-circuit-pack>
       <ports>
-        <port-name>2</port-name>
+        <port-name>1</port-name>
         <port-type>CFP2</port-type>
         <port-qual>xpdr-network</port-qual>
         <port-direction>bidirectional</port-direction>
       <connection-map-number>1</connection-map-number>
       <source>
         <circuit-pack-name>1/0/C1-PLUG-CLIENT</circuit-pack-name>
-        <port-name>1</port-name>
+        <port-name>C1</port-name>
       </source>
       <destination>
         <circuit-pack-name>1/0/1-PLUG-NET</circuit-pack-name>
       </source>
       <destination>
         <circuit-pack-name>1/0/C1-PLUG-CLIENT</circuit-pack-name>
-        <port-name>1</port-name>
+        <port-name>C1</port-name>
       </destination>
     </connection-map>
     <connection-map>
       <connection-map-number>3</connection-map-number>
       <source>
         <circuit-pack-name>1/0/C3-PLUG-CLIENT</circuit-pack-name>
-        <port-name>1</port-name>
+        <port-name>C3</port-name>
       </source>
       <destination>
         <circuit-pack-name>1/0/2-PLUG-NET</circuit-pack-name>
       </source>
       <destination>
         <circuit-pack-name>1/0/C3-PLUG-CLIENT</circuit-pack-name>
-        <port-name>1</port-name>
+        <port-name>C3</port-name>
       </destination>
     </connection-map>
   </org-openroadm-device>
index c15e28fd12409404586894ddd77c2d4819dc5dd4..9f38b483f40f9fd717a24215314c6b9b60526013 100644 (file)
         <administrative-state>inService</administrative-state>
         <logical-connection-point>NETWORK1</logical-connection-point>
         <transponder-port>
+            <port-power-capability-min-tx>-10</port-power-capability-min-tx>
+            <port-power-capability-max-tx>0</port-power-capability-max-tx>
+            <port-power-capability-min-rx>-10</port-power-capability-min-rx>
+            <port-power-capability-max-rx>0</port-power-capability-max-rx>
         </transponder-port>
       </ports>
     </circuit-packs>
     <circuit-packs>
-      <circuit-pack-name>1/0/2-PLUG-CLIENT</circuit-pack-name>
+      <circuit-pack-name>1/0/C1-PLUG-CLIENT</circuit-pack-name>
       <circuit-pack-type>pluggable</circuit-pack-type>
       <administrative-state>inService</administrative-state>
       <vendor>vendorA</vendor>
         <cp-slot-name>2</cp-slot-name>
       </parent-circuit-pack>
       <ports>
-        <port-name>1</port-name>
+        <port-name>C1</port-name>
         <port-type>QSFP28</port-type>
         <port-qual>xpdr-client</port-qual>
         <port-direction>bidirectional</port-direction>
         </transponder-port>
       </ports>
     </circuit-packs>
+    <circuit-packs>
+      <circuit-pack-name>1/0/C3-PLUG-CLIENT</circuit-pack-name>
+      <circuit-pack-type>pluggable</circuit-pack-type>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorA</vendor>
+      <model>QSFP28</model>
+      <serial-id>xxxx</serial-id>
+      <type>QSFP28</type>
+      <product-code>100GELR4</product-code>
+      <manufacture-date>2017-03-01T00:00:00+00:00</manufacture-date>
+      <clei>ccccc</clei>
+      <hardware-version>01</hardware-version>
+      <circuit-pack-category>
+        <type>other</type>
+      </circuit-pack-category>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>NORMAL</circuit-pack-mode>
+      <shelf>1</shelf>
+      <slot>0</slot>
+      <subSlot>2</subSlot>
+      <due-date>2017-04-14T15:56:10+00:00</due-date>
+      <parent-circuit-pack>
+        <circuit-pack-name>1/0</circuit-pack-name>
+        <cp-slot-name>C2</cp-slot-name>
+      </parent-circuit-pack>
+      <ports>
+        <port-name>C3</port-name>
+        <port-type>QSFP28</port-type>
+        <port-qual>xpdr-client</port-qual>
+        <port-direction>bidirectional</port-direction>
+        <circuit-id>XPDRC-CLIENT3</circuit-id>
+        <administrative-state>inService</administrative-state>
+        <logical-connection-point>XPDR1-CLIENT1</logical-connection-point>
+        <transponder-port>
+        </transponder-port>
+      </ports>
+    </circuit-packs>
+    <circuit-packs>
+      <circuit-pack-name>1/0/2-PLUG-NET</circuit-pack-name>
+      <circuit-pack-type>pluggable</circuit-pack-type>
+      <administrative-state>inService</administrative-state>
+      <vendor>vendorA</vendor>
+      <model>CFP2</model>
+      <serial-id>ssss</serial-id>
+      <type>Coherent</type>
+      <product-code>T100N</product-code>
+      <manufacture-date>2017-04-01T00:00:00+00:00</manufacture-date>
+      <clei>tttt</clei>
+      <hardware-version>01</hardware-version>
+      <operational-state>inService</operational-state>
+      <circuit-pack-category>
+        <type>other</type>
+      </circuit-pack-category>
+      <equipment-state>not-reserved-available</equipment-state>
+      <circuit-pack-mode>NORMAL</circuit-pack-mode>
+      <shelf>1</shelf>
+      <slot>0</slot>
+      <subSlot>2</subSlot>
+      <due-date>2017-04-14T15:56:10+00:00</due-date>
+      <parent-circuit-pack>
+        <circuit-pack-name>1/0</circuit-pack-name>
+        <cp-slot-name>2</cp-slot-name>
+      </parent-circuit-pack>
+      <ports>
+        <port-name>1</port-name>
+        <port-type>CFP2</port-type>
+        <port-qual>xpdr-network</port-qual>
+        <port-direction>bidirectional</port-direction>
+        <administrative-state>inService</administrative-state>
+        <logical-connection-point></logical-connection-point>
+        <transponder-port>
+            <port-power-capability-min-tx>-10</port-power-capability-min-tx>
+            <port-power-capability-max-tx>0</port-power-capability-max-tx>
+            <port-power-capability-min-rx>-10</port-power-capability-min-rx>
+            <port-power-capability-max-rx>0</port-power-capability-max-rx>
+        </transponder-port>
+      </ports>
+    </circuit-packs>
     <wavelength-map>
       <wavelengths>
         <wavelength-number>1</wavelength-number>
     <connection-map>
       <connection-map-number>1</connection-map-number>
       <source>
-        <circuit-pack-name>1/0/2-PLUG-CLIENT</circuit-pack-name>
-        <port-name>1</port-name>
+        <circuit-pack-name>1/0/C1-PLUG-CLIENT</circuit-pack-name>
+        <port-name>C1</port-name>
       </source>
       <destination>
         <circuit-pack-name>1/0/1-PLUG-NET</circuit-pack-name>
         <port-name>1</port-name>
       </destination>
     </connection-map>
+    <connection-map>
+      <connection-map-number>2</connection-map-number>
+      <source>
+        <circuit-pack-name>1/0/1-PLUG-NET</circuit-pack-name>
+        <port-name>1</port-name>
+      </source>
+      <destination>
+        <circuit-pack-name>1/0/C1-PLUG-CLIENT</circuit-pack-name>
+        <port-name>C1</port-name>
+      </destination>
+    </connection-map>
+    <connection-map>
+      <connection-map-number>3</connection-map-number>
+      <source>
+        <circuit-pack-name>1/0/C3-PLUG-CLIENT</circuit-pack-name>
+        <port-name>C3</port-name>
+      </source>
+      <destination>
+        <circuit-pack-name>1/0/2-PLUG-NET</circuit-pack-name>
+        <port-name>1</port-name>
+      </destination>
+    </connection-map>
+    <connection-map>
+      <connection-map-number>4</connection-map-number>
+      <source>
+        <circuit-pack-name>1/0/2-PLUG-NET</circuit-pack-name>
+        <port-name>1</port-name>
+      </source>
+      <destination>
+        <circuit-pack-name>1/0/C3-PLUG-CLIENT</circuit-pack-name>
+        <port-name>C3</port-name>
+      </destination>
+    </connection-map>
   </org-openroadm-device>
 </data>
diff --git a/tests/transportpce_tests/test_end2end.py b/tests/transportpce_tests/test_end2end.py
new file mode 100644 (file)
index 0000000..bb02b6f
--- /dev/null
@@ -0,0 +1,1564 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2017 Orange, Inc. and others.  All rights reserved.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+
+import json
+import os
+import psutil
+import requests
+import signal
+import shutil
+import subprocess
+import time
+import unittest
+
+
+class TransportPCEFulltesting(unittest.TestCase):
+
+    odl_process = None
+    honeynode_process1 = None
+    honeynode_process2 = None
+    honeynode_process3 = None
+    honeynode_process4 = None
+    restconf_baseurl = "http://localhost:8181/restconf"
+
+    @classmethod
+    def __start_honeynode1(cls):
+        executable = ("./honeynode/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
+                      "/honeynode-distribution-1.18.01/honeycomb-tpce")
+        if os.path.isfile(executable):
+            with open('honeynode1.log', 'w') as outfile:
+                cls.honeynode_process1 = subprocess.Popen(
+                    [executable, "17830", "sample_configs/ord_2.1/oper-ROADMA-full.xml"],
+                    stdout=outfile)
+
+    @classmethod
+    def __start_honeynode2(cls):
+        executable = ("./honeynode/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
+                      "/honeynode-distribution-1.18.01/honeycomb-tpce")
+        if os.path.isfile(executable):
+            with open('honeynode2.log', 'w') as outfile:
+                cls.honeynode_process2 = subprocess.Popen(
+                    [executable, "17831", "sample_configs/ord_2.1/oper-XPDRA.xml"],
+                    stdout=outfile)
+
+    @classmethod
+    def __start_honeynode3(cls):
+        executable = ("./honeynode/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
+                      "/honeynode-distribution-1.18.01/honeycomb-tpce")
+        if os.path.isfile(executable):
+            with open('honeynode3.log', 'w') as outfile:
+                cls.honeynode_process3 = subprocess.Popen(
+                    [executable, "17833", "sample_configs/ord_2.1/oper-ROADMC-full.xml"],
+                    stdout=outfile)
+
+    @classmethod
+    def __start_honeynode4(cls):
+        executable = ("./honeynode/honeynode-distribution/target/honeynode-distribution-1.18.01-hc"
+                      "/honeynode-distribution-1.18.01/honeycomb-tpce")
+        if os.path.isfile(executable):
+            with open('honeynode4.log', 'w') as outfile:
+                cls.honeynode_process4 = subprocess.Popen(
+                    [executable, "17834", "sample_configs/ord_2.1/oper-XPDRC.xml"],
+                    stdout=outfile)
+
+    @classmethod
+    def __start_odl(cls):
+        executable = "../karaf/target/assembly/bin/karaf"
+        with open('odl.log', 'w') as outfile:
+            cls.odl_process = subprocess.Popen(
+                ["bash", executable, "server"], stdout=outfile,
+                stdin=open(os.devnull))
+
+    @classmethod
+    def setUpClass(cls):
+        print ("starting honeynode1")
+        cls.__start_honeynode1()
+        time.sleep(40)
+        print ("starting honeynode2")
+        cls.__start_honeynode2()
+        time.sleep(40)
+        print ("starting honeynode3")
+        cls.__start_honeynode3()
+        time.sleep(40)
+        print ("starting honeynode4")
+        cls.__start_honeynode4()
+        time.sleep(40)
+        print ("starting opendaylight")
+        cls.__start_odl()
+        time.sleep(80)
+
+    @classmethod
+    def tearDownClass(cls):
+        for child in psutil.Process(cls.odl_process.pid).children():
+            child.send_signal(signal.SIGINT)
+            child.wait()
+        cls.odl_process.send_signal(signal.SIGINT)
+        cls.odl_process.wait()
+        for child in psutil.Process(cls.honeynode_process1.pid).children():
+            child.send_signal(signal.SIGINT)
+            child.wait()
+        cls.honeynode_process1.send_signal(signal.SIGINT)
+        cls.honeynode_process1.wait()
+        for child in psutil.Process(cls.honeynode_process2.pid).children():
+            child.send_signal(signal.SIGINT)
+            child.wait()
+        cls.honeynode_process2.send_signal(signal.SIGINT)
+        cls.honeynode_process2.wait()
+        for child in psutil.Process(cls.honeynode_process3.pid).children():
+            child.send_signal(signal.SIGINT)
+            child.wait()
+        cls.honeynode_process3.send_signal(signal.SIGINT)
+        cls.honeynode_process3.wait()
+        for child in psutil.Process(cls.honeynode_process4.pid).children():
+            child.send_signal(signal.SIGINT)
+            child.wait()
+        cls.honeynode_process4.send_signal(signal.SIGINT)
+        cls.honeynode_process4.wait()
+        print ("all processes killed")
+
+    def setUp(self):  # instruction executed before each test method
+        print ("execution of {}".format(self.id().split(".")[-1]))
+
+#  connect netconf devices
+    def test_01_connect_xpdrA(self):
+        url = ("{}/config/network-topology:"
+               "network-topology/topology/topology-netconf/node/XPDRA"
+              .format(self.restconf_baseurl))
+        data = {"node": [{
+            "node-id": "XPDRA",
+            "netconf-node-topology:username": "admin",
+            "netconf-node-topology:password": "admin",
+            "netconf-node-topology:host": "127.0.0.1",
+            "netconf-node-topology:port": "17831",
+            "netconf-node-topology:tcp-only": "false",
+            "netconf-node-topology:pass-through": {}}]}
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+            "PUT", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.created)
+        time.sleep(20)
+
+    def test_02_connect_xpdrC(self):
+        url = ("{}/config/network-topology:"
+               "network-topology/topology/topology-netconf/node/XPDRC"
+              .format(self.restconf_baseurl))
+        data = {"node": [{
+            "node-id": "XPDRC",
+            "netconf-node-topology:username": "admin",
+            "netconf-node-topology:password": "admin",
+            "netconf-node-topology:host": "127.0.0.1",
+            "netconf-node-topology:port": "17834",
+            "netconf-node-topology:tcp-only": "false",
+            "netconf-node-topology:pass-through": {}}]}
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+            "PUT", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.created)
+        time.sleep(20)
+
+    def test_03_connect_rdmA(self):
+        url = ("{}/config/network-topology:"
+               "network-topology/topology/topology-netconf/node/ROADMA"
+               .format(self.restconf_baseurl))
+        data = {"node": [{
+             "node-id": "ROADMA",
+             "netconf-node-topology:username": "admin",
+             "netconf-node-topology:password": "admin",
+             "netconf-node-topology:host": "127.0.0.1",
+             "netconf-node-topology:port": "17830",
+             "netconf-node-topology:tcp-only": "false",
+             "netconf-node-topology:pass-through": {}}]}
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "PUT", url, data=json.dumps(data), headers=headers,
+              auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.created)
+        time.sleep(20)
+
+    def test_04_connect_rdmC(self):
+        url = ("{}/config/network-topology:"
+               "network-topology/topology/topology-netconf/node/ROADMC"
+               .format(self.restconf_baseurl))
+        data = {"node": [{
+             "node-id": "ROADMC",
+             "netconf-node-topology:username": "admin",
+             "netconf-node-topology:password": "admin",
+             "netconf-node-topology:host": "127.0.0.1",
+             "netconf-node-topology:port": "17833",
+             "netconf-node-topology:tcp-only": "false",
+             "netconf-node-topology:pass-through": {}}]}
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "PUT", url, data=json.dumps(data), headers=headers,
+              auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.created)
+        time.sleep(20)
+
+    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+        url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
+        data = {
+            "networkutils:input": {
+                "networkutils:links-input": {
+                    "networkutils:xpdr-node": "XPDRA",
+                    "networkutils:xpdr-num": "1",
+                    "networkutils:network-num": "1",
+                    "networkutils:rdm-node": "ROADMA",
+                    "networkutils:srg-num": "1",
+                    "networkutils:termination-point-num": "SRG1-PP1-TXRX"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "POST", url, data=json.dumps(data),
+             headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_06_connect_xprdA_N2_to_roadmA_PP2(self):
+        url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
+        data = {
+            "networkutils:input": {
+                "networkutils:links-input": {
+                    "networkutils:xpdr-node": "XPDRA",
+                    "networkutils:xpdr-num": "1",
+                    "networkutils:network-num": "2",
+                    "networkutils:rdm-node": "ROADMA",
+                    "networkutils:srg-num": "1",
+                    "networkutils:termination-point-num": "SRG1-PP2-TXRX"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "POST", url, data=json.dumps(data),
+             headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_07_connect_roadmA_PP1_to_xpdrA_N1(self):
+        url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
+        data = {
+            "networkutils:input": {
+                "networkutils:links-input": {
+                    "networkutils:xpdr-node": "XPDRA",
+                    "networkutils:xpdr-num": "1",
+                    "networkutils:network-num": "1",
+                    "networkutils:rdm-node": "ROADMA",
+                    "networkutils:srg-num": "1",
+                    "networkutils:termination-point-num": "SRG1-PP1-TXRX"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "POST", url, data=json.dumps(data),
+             headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_08_connect_roadmA_PP2_to_xpdrA_N2(self):
+        url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
+        data = {
+            "networkutils:input": {
+                "networkutils:links-input": {
+                    "networkutils:xpdr-node": "XPDRA",
+                    "networkutils:xpdr-num": "1",
+                    "networkutils:network-num": "2",
+                    "networkutils:rdm-node": "ROADMA",
+                    "networkutils:srg-num": "1",
+                    "networkutils:termination-point-num": "SRG1-PP2-TXRX"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "POST", url, data=json.dumps(data),
+             headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_09_connect_xprdC_N1_to_roadmC_PP1(self):
+        url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
+        data = {
+            "networkutils:input": {
+                "networkutils:links-input": {
+                    "networkutils:xpdr-node": "XPDRC",
+                    "networkutils:xpdr-num": "1",
+                    "networkutils:network-num": "1",
+                    "networkutils:rdm-node": "ROADMC",
+                    "networkutils:srg-num": "1",
+                    "networkutils:termination-point-num": "SRG1-PP1-TXRX"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "POST", url, data=json.dumps(data),
+             headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_10_connect_xprdC_N2_to_roadmC_PP2(self):
+        url = "{}/operations/transportpce-networkutils:init-xpdr-rdm-links".format(self.restconf_baseurl)
+        data = {
+            "networkutils:input": {
+                "networkutils:links-input": {
+                    "networkutils:xpdr-node": "XPDRC",
+                    "networkutils:xpdr-num": "1",
+                    "networkutils:network-num": "2",
+                    "networkutils:rdm-node": "ROADMC",
+                    "networkutils:srg-num": "1",
+                    "networkutils:termination-point-num": "SRG1-PP2-TXRX"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "POST", url, data=json.dumps(data),
+             headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_11_connect_roadmC_PP1_to_xpdrC_N1(self):
+        url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
+        data = {
+            "networkutils:input": {
+                "networkutils:links-input": {
+                    "networkutils:xpdr-node": "XPDRC",
+                    "networkutils:xpdr-num": "1",
+                    "networkutils:network-num": "1",
+                    "networkutils:rdm-node": "ROADMC",
+                    "networkutils:srg-num": "1",
+                    "networkutils:termination-point-num": "SRG1-PP1-TXRX"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "POST", url, data=json.dumps(data),
+             headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_12_connect_roadmC_PP2_to_xpdrC_N2(self):
+        url = "{}/operations/transportpce-networkutils:init-rdm-xpdr-links".format(self.restconf_baseurl)
+        data = {
+            "networkutils:input": {
+                "networkutils:links-input": {
+                    "networkutils:xpdr-node": "XPDRC",
+                    "networkutils:xpdr-num": "1",
+                    "networkutils:network-num": "2",
+                    "networkutils:rdm-node": "ROADMC",
+                    "networkutils:srg-num": "1",
+                    "networkutils:termination-point-num": "SRG1-PP2-TXRX"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "POST", url, data=json.dumps(data),
+             headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
+        time.sleep(2)
+
+#test service-create for Eth service from xpdr to xpdr
+    def test_13_create_eth_service1(self):
+        url = ("{}/operations/org-openroadm-service:service-create"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-create",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-name": "service1",
+                "common-id": "ASATT1234567",
+                "connection-type": "service",
+                "service-a-end": {
+                    "service-rate": "100",
+                    "node-id": "XPDRA",
+                    "service-format": "Ethernet",
+                    "clli": "SNJSCAMCJP8",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.3",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.4",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "service-z-end": {
+                    "service-rate": "100",
+                    "node-id": "XPDRC",
+                    "service-format": "Ethernet",
+                    "clli": "SNJSCAMCJT4",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.29",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.30",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "due-date": "2016-11-28T00:00:01Z",
+                "operator-contact": "pw1234"
+            }
+        }
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service rendered successfully !',
+            res['output']['configuration-response-common']['response-message'])
+        time.sleep(10)
+
+    def test_14_get_eth_service1(self):
+        url = ("{}/operational/org-openroadm-service:service-list/services/service1"
+              .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['administrative-state'],
+            'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], 'service1')
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'service')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        time.sleep(2)
+
+    def test_15_check_xc1_ROADMA(self):
+        url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
+               "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
+               "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertDictContainsSubset(
+             {'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
+              'wavelength-number': 1,
+              'opticalControlMode': 'gainLoss',
+              'target-output-power': -3.0},
+             res['roadm-connections'][0])
+        self.assertDictEqual(
+             {'src-if': 'SRG1-PP1-TXRX-1'},
+             res['roadm-connections'][0]['source'])
+        self.assertDictEqual(
+             {'dst-if': 'DEG1-TTP-TXRX-1'},
+             res['roadm-connections'][0]['destination'])
+        time.sleep(5)
+
+    def test_16_check_xc1_ROADMC(self):
+        url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
+               "node/ROADMC/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
+               "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertDictContainsSubset(
+             {'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
+              'wavelength-number': 1,
+              'opticalControlMode': 'gainLoss',
+              'target-output-power': 2.0},
+             res['roadm-connections'][0])
+        self.assertDictEqual(
+             {'src-if': 'SRG1-PP1-TXRX-1'},
+             res['roadm-connections'][0]['source'])
+        self.assertDictEqual(
+             {'dst-if': 'DEG2-TTP-TXRX-1'},
+             res['roadm-connections'][0]['destination'])
+        time.sleep(5)
+
+    def test_17_check_topo_XPDRA(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/XPDRA-XPDR1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele['tp-id'] == 'XPDR1-CLIENT1':
+                self.assertEqual({u'index': 1}, ele['org-openroadm-network-topology:xpdr-client-attributes']['wavelength'])
+            if ele['tp-id'] == 'XPDR1-NETWORK1':
+                self.assertEqual({u'index': 1}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
+            if ele['tp-id'] == 'XPDR1-CLIENT2':
+                self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes']))
+            if ele['tp-id'] == 'XPDR1-NETWORK2':
+                self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes']))
+        time.sleep(3)
+
+    def test_18_check_topo_ROADMA_SRG1(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-SRG1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele['tp-id'] == 'SRG1-PP1-TXRX':
+                self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
+            if ele['tp-id'] == 'SRG1-PP2-TXRX':
+                self.assertNotIn('used-wavelength', dict.keys(ele))
+        time.sleep(3)
+
+    def test_19_check_topo_ROADMA_DEG1(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-DEG1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele['tp-id'] == 'DEG1-CTP-TXRX':
+                self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
+            if ele['tp-id'] == 'DEG1-TTP-TXRX':
+                self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
+        time.sleep(3)
+
+    def test_20_create_eth_service2(self):
+        url = ("{}/operations/org-openroadm-service:service-create"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-create",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-name": "service2",
+                "common-id": "ASATT1234567",
+                "connection-type": "service",
+                "service-a-end": {
+                    "service-rate": "100",
+                    "node-id": "XPDRA",
+                    "service-format": "Ethernet",
+                    "clli": "SNJSCAMCJP8",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.3",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.4",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "service-z-end": {
+                    "service-rate": "100",
+                    "node-id": "XPDRC",
+                    "service-format": "Ethernet",
+                    "clli": "SNJSCAMCJT4",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.29",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.30",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "due-date": "2016-11-28T00:00:01Z",
+                "operator-contact": "pw1234"
+            }
+        }
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service rendered successfully !',
+            res['output']['configuration-response-common']['response-message'])
+        time.sleep(10)
+
+    def test_21_get_eth_service2(self):
+        url = ("{}/operational/org-openroadm-service:service-list/services/service2"
+              .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['administrative-state'],
+            'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], 'service2')
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'service')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        time.sleep(1)
+
+    def test_22_check_xc2_ROADMA(self):
+        url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
+               "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
+               "roadm-connections/DEG1-TTP-TXRX-SRG1-PP2-TXRX-2"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertDictContainsSubset(
+             {'connection-number': 'DEG1-TTP-TXRX-SRG1-PP2-TXRX-2',
+              'wavelength-number': 2,
+              'opticalControlMode': 'power'},
+             res['roadm-connections'][0])
+        self.assertDictEqual(
+             {'src-if': 'DEG1-TTP-TXRX-2'},
+             res['roadm-connections'][0]['source'])
+        self.assertDictEqual(
+             {'dst-if': 'SRG1-PP2-TXRX-2'},
+             res['roadm-connections'][0]['destination'])
+
+    def test_23_check_topo_XPDRA(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/XPDRA-XPDR1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele['tp-id'] == 'XPDR1-CLIENT1':
+                self.assertEqual({u'index': 1}, ele['org-openroadm-network-topology:xpdr-client-attributes']['wavelength'])
+            if ele['tp-id'] == 'XPDR1-NETWORK1':
+                self.assertEqual({u'index': 1}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
+            if ele['tp-id'] == 'XPDR1-CLIENT2':
+                self.assertEqual({u'index': 2}, ele['org-openroadm-network-topology:xpdr-client-attributes']['wavelength'])
+            if ele['tp-id'] == 'XPDR1-NETWORK2':
+                self.assertEqual({u'index': 2}, ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength'])
+        time.sleep(10)
+
+    def test_24_check_topo_ROADMA_SRG1(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-SRG1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
+        self.assertNotIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele['tp-id'] == 'SRG1-PP1-TXRX':
+                self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
+                self.assertNotIn({u'index': 2}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
+            if ele['tp-id'] == 'SRG1-PP2-TXRX':
+                self.assertIn({u'index': 2}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
+                self.assertNotIn({u'index': 1}, ele['org-openroadm-network-topology:pp-attributes']['used-wavelength'])
+            if ele['tp-id'] == 'SRG1-PP3-TXRX':
+                self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
+        time.sleep(10)
+
+
+    def test_25_check_topo_ROADMA_DEG1(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-DEG1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertNotIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
+        self.assertNotIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele['tp-id'] == 'DEG1-CTP-TXRX':
+                self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
+                self.assertIn({u'index': 2}, ele['org-openroadm-network-topology:ctp-attributes']['used-wavelengths'])
+            if ele['tp-id'] == 'DEG1-TTP-TXRX':
+                self.assertIn({u'index': 1}, ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
+                self.assertIn({u'index': 2}, ele['org-openroadm-network-topology:tx-ttp-attributes']['used-wavelengths'])
+        time.sleep(10)
+
+#     creation service test on a non-available resource
+    def test_26_create_eth_service3(self):
+        url = ("{}/operations/org-openroadm-service:service-create"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-create",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-name": "service3",
+                "common-id": "ASATT1234567",
+                "connection-type": "service",
+                "service-a-end": {
+                    "service-rate": "100",
+                    "node-id": "XPDRA",
+                    "service-format": "Ethernet",
+                    "clli": "SNJSCAMCJP8",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.3",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.4",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "service-z-end": {
+                    "service-rate": "100",
+                    "node-id": "XPDRC",
+                    "service-format": "Ethernet",
+                    "clli": "SNJSCAMCJT4",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.29",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.30",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "due-date": "2016-11-28T00:00:01Z",
+                "operator-contact": "pw1234"
+            }
+        }
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('No path available',
+            res['output']['configuration-response-common']['response-message'])
+        self.assertIn('500', res['output']['configuration-response-common']['response-code'])
+        time.sleep(10)
+
+# add a test that check the openroadm-service-list still only contains 2 elements
+
+    def test_27_delete_eth_service3(self):
+        url = ("{}/operations/org-openroadm-service:service-delete"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-delete",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-delete-req-info": {
+                    "service-name": "service3",
+                    "tail-retention": "no"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service \'service3\' does not exist in datastore',
+            res['output']['configuration-response-common']['response-message'])
+        self.assertIn('500', res['output']['configuration-response-common']['response-code'])
+        time.sleep(1)
+
+    def test_28_delete_eth_service1(self):
+        url = ("{}/operations/org-openroadm-service:service-delete"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-delete",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-delete-req-info": {
+                    "service-name": "service1",
+                    "tail-retention": "no"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service delete was successful!',
+            res['output']['configuration-response-common']['response-message'])
+        time.sleep(1)
+
+    def test_29_delete_eth_service2(self):
+        url = ("{}/operations/org-openroadm-service:service-delete"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-delete",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-delete-req-info": {
+                    "service-name": "service2",
+                    "tail-retention": "no"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service delete was successful!',
+            res['output']['configuration-response-common']['response-message'])
+        time.sleep(1)
+
+    def test_30_check_no_xc_ROADMA(self):
+        url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
+               "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url, auth=('admin', 'admin'))
+        res = response.json()
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertNotIn('roadm-connections', dict.keys(res['org-openroadm-device']))
+        time.sleep(2)
+
+    def test_31_check_topo_XPDRA(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/XPDRA-XPDR1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele[u'org-openroadm-network-topology:tp-type'] == 'XPONDER-CLIENT':
+                self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-client-attributes']))
+            elif ele[u'org-openroadm-network-topology:tp-type'] == 'XPONDER-NETWORK':
+                self.assertNotIn('wavelength', dict.keys(ele['org-openroadm-network-topology:xpdr-network-attributes']))
+        time.sleep(10)
+
+    def test_32_check_topo_ROADMA_SRG1(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-SRG1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
+        self.assertIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:srg-attributes']['available-wavelengths'])
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele['tp-id'] == 'SRG1-PP1-TXRX':
+                self.assertEqual({}, ele['org-openroadm-network-topology:pp-attributes'])
+            elif ele['tp-id'] == 'SRG1-PP2-TXRX':
+                self.assertEqual({}, ele['org-openroadm-network-topology:pp-attributes'])
+            else:
+                self.assertNotIn('org-openroadm-network-topology:pp-attributes', dict.keys(ele))
+        time.sleep(10)
+
+    def test_33_check_topo_ROADMA_DEG1(self):
+        url1 = ("{}/config/ietf-network:network/openroadm-topology/node/ROADMA-DEG1"
+               .format(self.restconf_baseurl))
+        response = requests.request(
+             "GET", url1, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn({u'index': 1}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
+        self.assertIn({u'index': 2}, res['node'][0][u'org-openroadm-network-topology:degree-attributes']['available-wavelengths'])
+        liste_tp = res['node'][0]['ietf-network-topology:termination-point']
+        for ele in liste_tp:
+            if ele['tp-id'] == 'DEG1-CTP-TXRX':
+                self.assertEqual({}, ele['org-openroadm-network-topology:ctp-attributes'])
+            if ele['tp-id'] == 'DEG1-TTP-TXRX':
+                self.assertEqual({}, ele['org-openroadm-network-topology:tx-ttp-attributes'])
+        time.sleep(10)
+
+
+# test service-create for Optical Channel (OC) service from srg-pp to srg-pp
+    def test_34_create_oc_service1(self):
+        url = ("{}/operations/org-openroadm-service:service-create"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-create",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-name": "service1",
+                "common-id": "ASATT1234567",
+                "connection-type": "roadm-line",
+                "service-a-end": {
+                    "service-rate": "100",
+                    "node-id": "ROADMA",
+                    "service-format": "OC",
+                    "clli": "SNJSCAMCJP8",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.3",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.4",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "service-z-end": {
+                    "service-rate": "100",
+                    "node-id": "ROADMC",
+                    "service-format": "OC",
+                    "clli": "SNJSCAMCJT4",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.29",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.30",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "due-date": "2016-11-28T00:00:01Z",
+                "operator-contact": "pw1234"
+            }
+        }
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service rendered successfully !',
+            res['output']['configuration-response-common']['response-message'])
+        time.sleep(10)
+
+    def test_35_get_oc_service1(self):
+        url = ("{}/operational/org-openroadm-service:service-list/services/service1"
+              .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['administrative-state'],
+            'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], 'service1')
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'roadm-line')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        time.sleep(1)
+
+    def test_36_check_xc1_ROADMA(self):
+        url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
+               "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
+               "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertDictContainsSubset(
+             {'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1',
+              'wavelength-number': 1,
+              'opticalControlMode': 'gainLoss',
+              'target-output-power': -3.0},
+             res['roadm-connections'][0])
+        self.assertDictEqual(
+             {'src-if': 'SRG1-PP1-TXRX-1'},
+             res['roadm-connections'][0]['source'])
+        self.assertDictEqual(
+             {'dst-if': 'DEG1-TTP-TXRX-1'},
+             res['roadm-connections'][0]['destination'])
+        time.sleep(7)
+
+    def test_37_check_xc1_ROADMC(self):
+        url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
+               "node/ROADMC/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
+               "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertDictContainsSubset(
+             {'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1',
+              'wavelength-number': 1,
+              'opticalControlMode': 'gainLoss',
+              'target-output-power': 2.0},
+             res['roadm-connections'][0])
+        self.assertDictEqual(
+             {'src-if': 'SRG1-PP1-TXRX-1'},
+             res['roadm-connections'][0]['source'])
+        self.assertDictEqual(
+             {'dst-if': 'DEG2-TTP-TXRX-1'},
+             res['roadm-connections'][0]['destination'])
+        time.sleep(7)
+
+    def test_38_create_oc_service2(self):
+        url = ("{}/operations/org-openroadm-service:service-create"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-create",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-name": "service2",
+                "common-id": "ASATT1234567",
+                "connection-type": "roadm-line",
+                "service-a-end": {
+                    "service-rate": "100",
+                    "node-id": "ROADMA",
+                    "service-format": "OC",
+                    "clli": "SNJSCAMCJP8",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.3",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
+                            "lgx-port-name": "LGX Back.4",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "service-z-end": {
+                    "service-rate": "100",
+                    "node-id": "ROADMC",
+                    "service-format": "OC",
+                    "clli": "SNJSCAMCJT4",
+                    "tx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.29",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "rx-direction": {
+                        "port": {
+                            "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
+                            "port-type": "router",
+                            "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
+                            "port-rack": "000000.00",
+                            "port-shelf": "00"
+                        },
+                        "lgx": {
+                            "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
+                            "lgx-port-name": "LGX Back.30",
+                            "lgx-port-rack": "000000.00",
+                            "lgx-port-shelf": "00"
+                        }
+                    },
+                    "optic-type": "gray"
+                },
+                "due-date": "2016-11-28T00:00:01Z",
+                "operator-contact": "pw1234"
+            }
+        }
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service rendered successfully !',
+            res['output']['configuration-response-common']['response-message'])
+        time.sleep(10)
+
+    def test_39_get_oc_service2(self):
+        url = ("{}/operational/org-openroadm-service:service-list/services/service2"
+              .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['administrative-state'],
+            'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], 'service2')
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'roadm-line')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        time.sleep(2)
+
+    def test_40_check_xc2_ROADMA(self):
+        url = ("{}/config/network-topology:network-topology/topology/topology-netconf/"
+               "node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
+               "roadm-connections/SRG1-PP2-TXRX-DEG1-TTP-TXRX-2"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertDictContainsSubset(
+             {'connection-number': 'SRG1-PP2-TXRX-DEG1-TTP-TXRX-2',
+              'wavelength-number': 2,
+              'opticalControlMode': 'gainLoss',
+              'target-output-power': -3.0},
+             res['roadm-connections'][0])
+        self.assertDictEqual(
+             {'src-if': 'SRG1-PP2-TXRX-2'},
+             res['roadm-connections'][0]['source'])
+        self.assertDictEqual(
+             {'dst-if': 'DEG1-TTP-TXRX-2'},
+             res['roadm-connections'][0]['destination'])
+        time.sleep(2)
+
+    def test_41_check_topo_ROADMA(self):
+        self.test_24_check_topo_ROADMA_SRG1()
+        self.test_25_check_topo_ROADMA_DEG1()
+        time.sleep(3)
+
+
+    def test_42_delete_oc_service1(self):
+        url = ("{}/operations/org-openroadm-service:service-delete"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-delete",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-delete-req-info": {
+                    "service-name": "service1",
+                    "tail-retention": "no"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service delete was successful!',
+            res['output']['configuration-response-common']['response-message'])
+        time.sleep(7)
+
+    def test_43_delete_oc_service2(self):
+        url = ("{}/operations/org-openroadm-service:service-delete"
+              .format(self.restconf_baseurl))
+        data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-delete",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+                },
+                "service-delete-req-info": {
+                    "service-name": "service2",
+                    "tail-retention": "no"
+                }
+            }
+        }
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+            "POST", url, data=json.dumps(data), headers=headers,
+            auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Service delete was successful!',
+            res['output']['configuration-response-common']['response-message'])
+        time.sleep(1)
+
+    def test_44_get_no_oc_services(self):
+        print ("start test")
+        url = ("{}/operational/org-openroadm-service:service-list"
+              .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual({u'service-list': {}}, res)
+        time.sleep(1)
+
+    def test_45_get_no_xc_ROADMA(self):
+        url = ("{}/config/network-topology:network-topology/topology/topology-netconf"
+               "/node/ROADMA/yang-ext:mount/org-openroadm-device:org-openroadm-device/"
+              .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json',
+        "Accept": "application/json"}
+        response = requests.request(
+            "GET", url, headers=headers, auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertNotIn(['roadm-connections'][0], res['org-openroadm-device'])
+        time.sleep(1)
+
+    def test_46_check_topo_ROADMA(self):
+        self.test_32_check_topo_ROADMA_SRG1()
+        self.test_33_check_topo_ROADMA_DEG1()
+
+    def test_47_loop_create_eth_service(self):
+        for i in range(1,6):
+            print ("trial number {}".format(i))
+            print("eth service creation")
+            self.test_13_create_eth_service1()
+            print ("check xc in ROADMA")
+            self.test_15_check_xc1_ROADMA()
+            print ("check xc in ROADMC")
+            self.test_16_check_xc1_ROADMC()
+            print ("eth service deletion\n")
+            self.test_28_delete_eth_service1()
+
+    def test_48_loop_create_oc_service(self):
+        url = ("{}/operational/org-openroadm-service:service-list/services/service1"
+               .format(self.restconf_baseurl))
+        response = requests.request("GET", url, auth=('admin', 'admin'))
+        if response.status_code != 404:
+            url = ("{}/operations/org-openroadm-service:service-delete"
+                   .format(self.restconf_baseurl))
+            data = {"input": {
+                "sdnc-request-header": {
+                    "request-id": "e3028bae-a90f-4ddd-a83f-cf224eba0e58",
+                    "rpc-action": "service-delete",
+                    "request-system-id": "appname",
+                    "notification-url": "http://localhost:8585/NotificationServer/notify"
+            },
+                "service-delete-req-info": {
+                    "service-name": "service1",
+                    "tail-retention": "no"
+            }
+                }
+            }
+            headers = {'content-type': 'application/json'}
+            requests.request("POST", url, data=json.dumps(data), headers=headers, auth=('admin', 'admin'))
+            time.sleep(5)
+
+        for i in range(1,6):
+            print ("trial number {}".format(i))
+            print("oc service creation")
+            self.test_34_create_oc_service1()
+            print ("check xc in ROADMA")
+            self.test_36_check_xc1_ROADMA()
+            print ("check xc in ROADMC")
+            self.test_37_check_xc1_ROADMC()
+            print ("oc service deletion\n")
+            self.test_42_delete_oc_service1()
+
+
+    def test_49_disconnect_XPDRA(self):
+        url = ("{}/config/network-topology:"
+                "network-topology/topology/topology-netconf/node/XPDRA"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "DELETE", url, headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(10)
+
+    def test_50_disconnect_XPDRC(self):
+        url = ("{}/config/network-topology:"
+                "network-topology/topology/topology-netconf/node/XPDRC"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "DELETE", url, headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(10)
+
+    def test_51_disconnect_ROADMA(self):
+        url = ("{}/config/network-topology:"
+                "network-topology/topology/topology-netconf/node/ROADMA"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "DELETE", url, headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(10)
+
+    def test_52_disconnect_ROADMC(self):
+        url = ("{}/config/network-topology:"
+                "network-topology/topology/topology-netconf/node/ROADMC"
+               .format(self.restconf_baseurl))
+        headers = {'content-type': 'application/json'}
+        response = requests.request(
+             "DELETE", url, headers=headers,
+             auth=('admin', 'admin'))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(10)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
diff --git a/tox.ini b/tox.ini
index da2e28de6fe2fff316b42c4af65e545dd8e29b03..f095042413abab3b4d819a7582e8077d3d40ba93 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -15,10 +15,10 @@ deps =
 whitelist_externals = bash
 changedir={toxinidir}/tests
 commands =
-  {py27,portmapping,topoPortMapping,rspn,topology,pce,olm}: - bash -c "if [ ! `which mvn` ]; then ./installMavenCentOS.sh  ; fi"
-  {py27,portmapping,topoPortMapping,rspn,topology,pce,olm}: - bash -c "(cd .. && mvn clean install -s tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true)"
+  {py27,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end}: - bash -c "if [ ! `which mvn` ]; then ./installMavenCentOS.sh  ; fi"
+  {py27,portmapping,topoPortMapping,rspn,topology,pce,olm,end2end}: - bash -c "(cd .. && mvn clean install -s tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true)"
   {py27,topology,topoPortMapping}: - ./buildTesttool.sh
-  {py27,portmapping,rspn,olm}: - ./buildHoneynode.sh
+  {py27,portmapping,rspn,olm,end2end}: - ./buildHoneynode.sh
   #py27: nosetests --with-xunit transportpce_tests/
   {py27,portmapping}: - nosetests --with-xunit transportpce_tests/test_portmapping.py
   {py27,topoPortMapping}: - nosetests --with-xunit transportpce_tests/test_topoPortMapping.py
@@ -26,8 +26,9 @@ commands =
   {py27,rspn}: - nosetests --with-xunit transportpce_tests/test_renderer_service_path_nominal.py
   {py27,pce}: - nosetests --with-xunit transportpce_tests/test_pce.py
   {py27,olm}: - nosetests --with-xunit transportpce_tests/test_olm.py
-  {py27,servicehandler}: - ./SH_func_tests.sh
-  {py27,servicehandler}: - nosetests --with-xunit transportpce_tests/test_servicehandler.py
+  {servicehandler}: - ./SH_func_tests.sh
+  {servicehandler}: - nosetests --with-xunit transportpce_tests/test_servicehandler.py
+  {py27,end2end}: - nosetests --with-xunit transportpce_tests/test_end2end.py
 
 
 [testenv:docs]