Changes to docker file and cluster creation, complete stc test on single instance, but not yet on multi-instances Alao, we add detailed checking for every step in ODTN testing.

Change-Id: Id074e2db89a8892ed263880cfa670c4861e011b9
diff --git a/tools/test/scenarios/net-setup-odtn.xml b/tools/test/scenarios/net-setup-odtn.xml
index 9b6aa08..8d6f811 100644
--- a/tools/test/scenarios/net-setup-odtn.xml
+++ b/tools/test/scenarios/net-setup-odtn.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0"?>
 <!--
   ~ Copyright 2015-present Open Networking Foundation
   ~
@@ -13,81 +14,58 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-
 <scenario name="net-setup-odtn" description="ODTN network setup steps">
-
-    <group name="ODTN-Net-Setup">
-
-        <!-- Clean -->
-        <step name="ODTN-Net-Setup.Wipe-Out-Data-Before" exec="onos-wipe-out"/>
-
-        <!-- Make sure that there is no data in the system -->
-        <step name="ODTN-Net-Setup.Initial-Summary-Check" requires="~ODTN-Net-Setup.Wipe-Out-Data-Before"
-              exec="onos-check-summary ${OC1} [0-9]* 0 0 0"/>
-
-        <!-- Deactivate unneeded apps -->
-        <group name="ODTN-Net-Setup.Deactivate-Apps" requires="ODTN-Net-Setup.Initial-Summary-Check">
-            <step name="App-Deactivate-fwd"
-                  exec="onos ${OCI} app deactivate org.onosproject.fwd"
-                  requires="ODTN-Net-Setup.Initial-Summary-Check"/>
-            <step name="App-Deactivate-Openflow"
-                  exec="onos ${OCI} app deactivate org.onosproject.openflow"
-                  requires="ODTN-Net-Setup.Initial-Summary-Check"/>
-            <step name="App-Deactivate-Drivers"
-                  exec="onos ${OCI} app deactivate org.onosproject.drivers"
-                  requires="ODTN-Net-Setup.Initial-Summary-Check"/>
-            <step name="App-Deactivate-Mobility"
-                  exec="onos ${OCI} app deactivate org.onosproject.mobility"
-                  requires="ODTN-Net-Setup.Initial-Summary-Check"/>
-            <step name="App-Deactivate-ProxyArp"
-                  exec="onos ${OCI} app deactivate org.onosproject.proxyarp"
-                  requires="ODTN-Net-Setup.Initial-Summary-Check"/>
-            <step name="App-Deactivate-RouteService"
-                  exec="onos ${OCI} app deactivate org.onosproject.route-service"
-                  requires="ODTN-Net-Setup.Initial-Summary-Check"/>
-        </group>
-
-        <!-- Active required apps and yang models-->
-        <group name="ODTN-Net-Setup.Activate-Apps" requires="ODTN-Net-Setup.Deactivate-Apps">
-            <step name="App-Activate-Odtn-Service"
-                  exec="onos ${OCI} app activate org.onosproject.odtn-service"
-                  requires="ODTN-Net-Setup.Deactivate-Apps"/>
-        </group>
-
-        <group name="ODTN-Net-Setup.Verify-Apps" requires="ODTN-Net-Setup.Activate-Apps" delay="40">
-            <parallel var="${OC#}">
-                <step name="Check-Apps-${#}" exec="onos-check-apps ${OC#} optical-model,yang,config,configsync,faultmanagement,
-                netconf,configsync-netconf,gui,drivers,drivers.netconf,drivers.optical,restconf,protocols.restconfserver,
-                odtn-api,drivers.odtn-driver,odtn-service,models.tapi,models.ietf,models.openconfig,models.openconfig-infinera,
-                models.openconfig-odtn includes"
-                      requires="ODTN-Net-Setup.Activate-Apps"/>
-            </parallel>
-        </group>
-
-        <group name="ODTN-Net-Setup.Verify-Logs" requires="ODTN-Net-Setup.Verify-Apps">
-            <parallel var="${OC#}">
-                <step name="Check-Logs-${#}" exec="onos-check-logs ${OC#}"/>
-            </parallel>
-        </group>
-
-        <step name="ODTN-Net-Setup.Tapi-context" requires="ODTN-Net-Setup.Verify-Logs"
-              exec="execute-tapi-context-get-call.py ${OC1} empty"/>
-
-        <group name="ODTN-Net-Setup.Verify-Logs-2" requires="ODTN-Net-Setup.Tapi-context">
-            <parallel var="${OC#}">
-                <step name="Check-Logs-2-${#}" exec="onos-check-logs ${OC#}"/>
-            </parallel>
-        </group>
-
-        <!-- Verify empty connectivity service -->
-
-        <step name="ODTN-Net-Setup.Tapi-connectivity" requires="ODTN-Net-Setup.Tapi-context"
-              exec="execute-tapi-post-call.py ${OC1} tapi-connectivity:get-connectivity-service-list empty"/>
-
-        <!--TODO include check for empty connectivity service-->
-        <!--TODO include 2 or more docker emulators to setup the network for phase 1.0-->
-        <!--TODO push netcfg links between emulated devices -->
-        <!--TODO push emulated links between emulated devices -->
-        <!--TODO check logs -->
+  <group name="ODTN-Net-Setup">
+    <!-- Clean -->
+    <step name="ODTN-Net-Setup.Wipe-Out-Data-Before" exec="onos-wipe-out"/>
+    <!-- Make sure that there is no data in the system -->
+    <step name="ODTN-Net-Setup.Initial-Summary-Check" requires="~ODTN-Net-Setup.Wipe-Out-Data-Before" exec="onos-check-summary ${OC1} [0-9]* 0 0 0"/>
+    <step name="ODTN-Net-Setup.Activate-Apps" exec="onos ${OC1} app activate odtn-service" requires="ODTN-Net-Setup.Initial-Summary-Check" delay="30" />
+    <group name="ODTN-Net-Setup.Verify-Apps" requires="ODTN-Net-Setup.Activate-Apps" delay="30">
+      <parallel var="${OC#}">
+        <step name="Check-Apps-${#}" exec="onos-check-apps ${OC#} optical-model,yang,config,configsync,faultmanagement,netconf,configsync-netconf,drivers,drivers.netconf,drivers.optical,restconf,protocols.restconfserver,odtn-api,drivers.odtn-driver,odtn-service,models.tapi,models.ietf,models.openconfig,models.openconfig-infinera,models.openconfig-odtn includes" requires="ODTN-Net-Setup.Activate-Apps"/>
+      </parallel>
     </group>
+    <group name="ODTN-Net-Setup.Tapi-context" requires="ODTN-Net-Setup.Verify-Apps">
+      <parallel var="${OC#}">
+        <step name="ODTN-Net-Setup.Tapi-context-${#}" exec="${ONOS_SCENARIOS}/odtn/checkUntilSucc.sh ${ONOS_SCENARIOS}/bin/execute-tapi-context-get-call.py+${OC#}+empty"/>
+      </parallel>
+    </group>
+    <!-- Verify empty connectivity service -->
+    <step name="ODTN-Net-Setup.Tapi-connectivity" requires="ODTN-Net-Setup.Tapi-context" exec="${ONOS_SCENARIOS}/odtn/checkUntilSucc.sh ${ONOS_SCENARIOS}/bin/execute-tapi-post-call.py+${OC1}+tapi-connectivity:get-connectivity-service-list+empty"/>
+    <group name="ODTN-Net-Setup.Verify-Logs-1" requires="ODTN-Net-Setup.Tapi-connectivity">
+      <parallel var="${OC#}">
+        <step name="Check-Logs-Odtn-Setup-1-${#}" exec="onos-check-logs ${OC#}"/>
+      </parallel>
+    </group>
+    <!-- include 2 or more docker emulators to setup the network for phase 1.0-->
+    <group name="ODTN-Net-Setup.Init-network" requires="ODTN-Net-Setup.Verify-Logs-1">
+      <step name="ODTN-Net-Setup.Start-emulators" exec="docker-compose -f /home/sdn/emulator/docker-compose.yaml up -d"/>
+      <step name="ODTN-Net-Setup.Generate-cfg-files" requires="ODTN-Net-Setup.Start-emulators" exec="${ONOS_SCENARIOS}/odtn/createNetCfg.sh"/>
+      <step name="ODTN-Net-Setup.Put-nodes" requires="ODTN-Net-Setup.Generate-cfg-files" exec="onos-netcfg ${OC1} /tmp/odtn/openconfig-devices.json"/>
+      <group name="ODTN-Net-Setup.Wait-nodes" requires="ODTN-Net-Setup.Put-nodes">
+        <parallel var="${OC#}">
+          <step name="ODTN-Net-Setup.Wait-node-${#}" exec="${ONOS_SCENARIOS}/odtn/checkNetInit.sh device ${OC#}"/>
+          <step name="ODTN-Net-Setup.Wait-port-${#}" exec="${ONOS_SCENARIOS}/odtn/checkNetInit.sh port ${OC#}" requires="ODTN-Net-Setup.Wait-node-${#}"/>
+        </parallel>
+      </group>
+      <group name="ODTN-Net-Setup.Verify-Logs-2" requires="ODTN-Net-Setup.Wait-nodes">
+        <parallel var="${OC#}">
+          <step name="Check-Logs-Odtn-Setup-2-${#}" exec="onos-check-logs ${OC#}"/>
+        </parallel>
+      </group>
+      <step name="ODTN-Net-Setup.Put-links" requires="ODTN-Net-Setup.Verify-Logs-2" exec="onos-netcfg ${OC1} /tmp/odtn/openconfig-device-link.json"/>
+      <group name="ODTN-Net-Setup.Wait-links" requires="ODTN-Net-Setup.Put-links" delay="30">
+        <parallel var="${OC#}">
+          <step name="ODTN-Net-Setup.Wait-link-${#}" exec="${ONOS_SCENARIOS}/odtn/checkNetInit.sh link ${OC#}"/>
+        </parallel>
+      </group>
+    </group>
+    <!-- check logs to verify -->
+    <group name="ODTN-Net-Setup.Verify-Logs-3" requires="ODTN-Net-Setup.Wait-links">
+      <parallel var="${OC#}">
+        <step name="Check-Logs-Odtn-Setup-3-${#}" exec="onos-check-logs ${OC#}"/>
+      </parallel>
+    </group>
+  </group>
 </scenario>