STC scenario to start/stop all apps in a minimal environment

Change-Id: I7364e0c348dcea9964124843f2cff2de9dcaafb3
diff --git a/tools/test/bin/onos-generate-activate-all-scenario b/tools/test/bin/onos-generate-activate-all-scenario
new file mode 100755
index 0000000..c12400b
--- /dev/null
+++ b/tools/test/bin/onos-generate-activate-all-scenario
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+
+import sys, os
+
+SCENARIO_HEADER = '''
+<!--
+  ~ Copyright 2019-present Open Networking Foundation
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+  
+  <!--
+     This scenario is auto generated by onos-generate-activate-all-scenario. DO NOT EDIT
+  -->
+  <scenario name="app-activate-all" description="Tests that all apps can be activated by themselves">
+    <group name="App-Activate-All">
+       <step name="App-Activate-All.Minimal-Apps"
+                 exec="onos-set-up-minimal-apps ${OCI}"/>
+'''
+
+SCENARIO_FOOTER = '''
+    </group>
+  </scenario>
+'''
+
+ACTIVATE_GROUP_TEMPLATE = '''
+        <group name="App-Activate-All.%(app_id)s" %(requires)s>
+           <step name="App-Activate-All.Activate-%(app_id)s"
+                 exec="onos ${OCI} app activate org.onosproject.%(app_id)s" %(requires)s/>
+           <group name="App-Activate-All.App-Check-%(app_id)s" requires="App-Activate-All.Activate-%(app_id)s">
+              <parallel var="${OC#}">
+                 <step name="App-Activate-All.App-Check-${#}-%(app_id)s"
+                       exec="onos-check-apps ${OC#} %(app_id)s includes"/>
+                 <step name="App-Activate-All.Check-Logs-${#}-%(app_id)s" exec="onos-check-logs ${OC#}"/>
+              </parallel>
+           </group>
+           <step name="App-Activate-All.App-Deactivate-%(app_id)s"
+                 exec="onos ${OCI} app deactivate org.onosproject.%(app_id)s" requires="App-Activate-All.App-Check-%(app_id)s"/>
+           <step name="App-Activate-All.Wait-For-Deactivate-%(app_id)s"
+                 exec="onos-check-apps ${OCI} org.onosproject.drivers" requires="App-Activate-All.App-Deactivate-%(app_id)s"/>      
+           <group name="App-Activate-All.App-Check-After-%(app_id)s" requires="App-Activate-All.Wait-For-Deactivate-%(app_id)s">
+              <parallel var="${OC#}">
+                 <step name="App-Activate-All.Check-Logs-After-${#}-%(app_id)s" exec="onos-check-logs ${OC#}"/>
+              </parallel>
+           </group>
+           <step name="App-Activate-All.Minimal-Apps-%(app_id)s" requires="App-Activate-All.App-Deactivate-%(app_id)s"
+                 exec="onos-set-up-minimal-apps ${OCI}"/>
+        </group>
+
+'''
+
+app_list = []
+app_list_file = ""
+
+if len(sys.argv) > 1:
+    app_list_file = sys.argv[1]
+else:
+    print "Usage: onos-generate-activate-all-scenario file-name-of-app-list"
+    sys.exit()
+
+with open(app_list_file) as apps:
+    for app in apps:
+        if not "#" in app:
+            normalized_app = app.strip(" \n")
+            if not normalized_app == "":
+                app_list.append(normalized_app)
+
+scenario = SCENARIO_HEADER + "\n"
+
+app_group_requires = 'requires="App-Activate-All.Minimal-Apps"'
+for app_id in app_list:
+    parameters = {
+        'requires': app_group_requires,
+        'app_id': app_id,
+    }
+    scenario = scenario + (ACTIVATE_GROUP_TEMPLATE % parameters)
+    app_group_requires = 'requires="App-Activate-All.' + app_id + '"'
+
+scenario = scenario + SCENARIO_FOOTER
+
+print scenario
+