Initial commit for scale out tests
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.params b/TestON/tests/IntentsLoad/IntentsLoad.params
new file mode 100644
index 0000000..b60621c
--- /dev/null
+++ b/TestON/tests/IntentsLoad/IntentsLoad.params
@@ -0,0 +1,49 @@
+<PARAMS>
+
+    <testcases>1,2,4</testcases>
+
+    <ENV>
+    <cellName>cam_cells</cellName>
+    </ENV>
+
+    <SCALE>1</SCALE>
+
+    <GIT>
+        <autopull>off</autopull>
+        <checkout>master</checkout>
+    </GIT>
+
+    <CTRL>
+        <USER>admin</USER>
+        <ip1>10.128.5.51</ip1>
+        <port1>6633</port1>
+        <ip2>10.128.5.52</ip2>
+        <port2>6633</port2>
+        <ip3>10.128.5.53</ip3>
+        <port3>6633</port3>
+    </CTRL>
+
+    <MN>
+        <ip1>10.128.5.59</ip1>
+        <ip2>10.128.5.59</ip2>
+    </MN>
+
+    <BENCH>
+        <user>admin</user>
+        <ip1>10.128.5.55</ip1>
+    </BENCH>
+
+    <TEST>
+    <loadstart>curl --fail http://localhost:8181/onos/demo/intents/setup -H "Content-Type:application/json" -d '{"type" : "random"}'</loadstart>
+    <loadstop>curl --fail http://localhost:8181/onos/demo/intents/teardown</loadstop>
+    <arping>py [h.cmd("arping -c 1 -w 1 10.0.0.225") for h in net.hosts]</arping>
+    <metric1>intents-events-metrics|grep "Intent Installed Events"</metric1>
+    <duration>90</duration>
+    <log_interval>5</log_interval>
+    </TEST>
+
+    <JSON>
+        <intents_rate>intentInstalledRate</intents_rate>
+    </JSON>
+
+</PARAMS>
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.py b/TestON/tests/IntentsLoad/IntentsLoad.py
new file mode 100644
index 0000000..f13e60d
--- /dev/null
+++ b/TestON/tests/IntentsLoad/IntentsLoad.py
@@ -0,0 +1,263 @@
+# ScaleOutTemplate --> IntentsLoad
+#
+# CASE1 starts number of nodes specified in param file
+#
+# cameron@onlab.us
+
+import sys 
+import os 
+
+
+class IntentsLoad:
+    def __init__(self):
+        self.default = ''
+   
+    def CASE1(self, main):
+        
+        global cluster_count 
+        cluster_count = 1        
+
+        checkout_branch = main.params['GIT']['checkout']
+        git_pull = main.params['GIT']['autopull']
+        cell_name = main.params['ENV']['cellName']
+        BENCH_ip = main.params['BENCH']['ip1']
+        BENCH_user = main.params['BENCH']['user']
+        ONOS1_ip = main.params['CTRL']['ip1']
+        ONOS2_ip = main.params['CTRL']['ip2']
+        ONOS3_ip = main.params['CTRL']['ip3']
+        MN1_ip = main.params['MN']['ip1']
+
+        main.log.step("Cleaning Enviornment...")
+        main.ONOSbench.onos_uninstall(ONOS1_ip)
+        main.ONOSbench.onos_uninstall(ONOS2_ip)
+        main.ONOSbench.onos_uninstall(ONOS3_ip)                                     
+        
+        main.step("Git checkout and pull "+checkout_branch)
+        if git_pull == 'on':
+            checkout_result = main.ONOSbench.git_checkout(checkout_branch)       
+            pull_result = main.ONOSbench.git_pull()
+            
+        else:
+            checkout_result = main.TRUE
+            pull_result = main.TRUE
+            main.log.info("Skipped git checkout and pull")
+
+        #mvn_result = main.ONOSbench.clean_install()
+                                                                   
+        main.step("Set cell for ONOS cli env")
+        main.ONOS1cli.set_cell(cell_name)
+        main.ONOS2cli.set_cell(cell_name)
+        main.ONOS3cli.set_cell(cell_name)
+
+        main.step("Creating ONOS package")
+        package_result = main.ONOSbench.onos_package()                             #no file or directory 
+
+        main.step("Installing ONOS package")
+        install1_result = main.ONOSbench.onos_install(node=ONOS1_ip)
+
+        cell_name = main.params['ENV']['cellName']
+        main.step("Applying cell file to environment")
+        cell_apply_result = main.ONOSbench.set_cell(cell_name)
+        main.step("verify cells")
+        verify_cell_result = main.ONOSbench.verify_cell()
+
+        main.step("Set cell for ONOS cli env")
+        main.ONOS1cli.set_cell(cell_name) 
+ 
+        cli1 = main.ONOS1cli.start_onos_cli(ONOS1_ip) 
+
+    def CASE2(self, main):
+
+        '''  
+        Increase number of nodes and initiate CLI
+        '''
+        import time 
+        
+        global cluster_count
+        
+        ONOS1_ip = main.params['CTRL']['ip1']
+        ONOS2_ip = main.params['CTRL']['ip2']
+        ONOS3_ip = main.params['CTRL']['ip3']
+        #ONOS4_ip = main.params['CTRL']['ip4']
+        #ONOS5_ip = main.params['CTRL']['ip5']
+        #ONOS6_ip = main.params['CTRL']['ip6']
+        #ONOS7_ip = main.params['CTRL']['ip7']
+        cell_name = main.params['ENV']['cellName']
+        scale = int(main.params['SCALE'])
+
+
+        #Cluster size increased everytime the case is defined
+        cluster_count += scale
+ 
+        main.log.report("Increasing cluster size to "+
+                str(cluster_count))
+        install_result = main.FALSE
+        
+        if scale == 2:
+            if cluster_count == 3:
+                main.log.info("Installing nodes 2 and 3")
+                install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
+                install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
+                cli2 = main.ONOS2cli.start_onos_cli(ONOS2_ip)
+                cli3 = main.ONOS3cli.start_onos_cli(ONOS3_ip) 
+            '''
+            elif cluster_count == 5:
+
+                main.log.info("Installing nodes 4 and 5")
+                node4_result = main.ONOSbench.onos_install(node=ONOS4_ip)
+                node5_result = main.ONOSbench.onos_install(node=ONOS5_ip)
+                install_result = node4_result and node5_result
+                time.sleep(5)
+
+                main.ONOS4cli.start_onos_cli(ONOS4_ip)
+                main.ONOS5cli.start_onos_cli(ONOS5_ip)
+
+            elif cluster_count == 7:
+
+                main.log.info("Installing nodes 4 and 5")
+                node6_result = main.ONOSbench.onos_install(node=ONOS6_ip)
+                node7_result = main.ONOSbench.onos_install(node=ONOS7_ip)
+                install_result = node6_result and node7_result
+                time.sleep(5)
+
+                main.ONOS6cli.start_onos_cli(ONOS6_ip)
+                main.ONOS7cli.start_onos_cli(ONOS7_ip)
+            '''
+        if scale == 1: 
+            if cluster_count == 2:
+                main.log.info("Installing node 2")
+                install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
+                cli2 = main.ONOS2cli.start_onos_cli(ONOS2_ip)
+
+            if cluster_count == 3:
+                main.log.info("Installing node 3")
+                install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
+                cli3 = main.ONOS3cli.start_onos_cli(ONOS3_ip)
+    
+    
+    
+    def CASE3(self,main):
+        import time 
+        import json
+        import string
+        
+        intents_rate = main.params['JSON']['intents_rate']
+
+        default_sw_port = main.params[ 'CTRL' ][ 'port1' ]
+
+        main.Mininet1.assign_sw_controller(sw="1", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="2", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="3", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="4", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="5", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="6", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="7", ip1=ONOS1_ip, port1=default_sw_port )
+        
+        mn_arp = main.params['TEST']['arping']
+        main.Mininet1.handle.sendline(mn_arp)
+
+        generate_load = main.params['TEST']['loadstart']
+   
+        main.ONOS1.handle.sendline(generate_load)
+        main.ONOS1.handle.expect("sdn")
+        print("before: ", main.ONOS1.handle.before)
+        print("after: ",main.ONOS1.handle.after)
+        
+        load_confirm = main.ONOS1.handle.after
+        if load_confirm == "{}":
+            main.log.info("Load started")
+
+        else: 
+            main.log.error("Load start failure")
+            main.log.error("expected '{}', got: " + str(load_confirm))
+     
+        devices_json_str = main.ONOS1cli.devices()
+        devices_json_obj = json.loads(devices_json_str)
+
+        get_metric = main.params['TEST']['metric1']
+        test_duration = main.params['TEST']['duration']
+        stop = time.time() + float(test_duration)
+
+
+        main.log.info("Starting test loop...")
+        log_interval = main.params['TEST']['log_interval']
+
+        while time.time() < stop: 
+            time.sleep(float(log_interval))
+         
+            intents_json_str_1 = main.ONOS1cli.intents_events_metrics()
+            intents_json_obj_1 = json.loads(intents_json_str_1)
+            main.log.info("Node 1 rate: " + str(intents_json_obj_1[intents_rate]['m1_rate']))
+            last_rate_1 = intents_json_obj_1[intents_rate]['m1_rate']
+        
+        stop_load = main.params['TEST']['loadstop']
+        main.ONOS1.handle.sendline(stop_load)
+        
+        
+        msg = ("Final rate on node 1: " + str(last_rate_1))
+        main.log.report(msg)
+
+    def CASE4(self, main):      #2 node scale 
+        import time
+        import json
+        import string
+
+        intents_rate = main.params['JSON']['intents_rate']
+        
+        default_sw_port = main.params[ 'CTRL' ][ 'port1' ]
+
+        main.Mininet1.assign_sw_controller(sw="1", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="2", ip1=ONOS2_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="3", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="4", ip1=ONOS2_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="5", ip1=ONOS1_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="6", ip1=ONOS2_ip, port1=default_sw_port )
+        main.Mininet1.assign_sw_controller(sw="7", ip1=ONOS1_ip, port1=default_sw_port )
+
+        mn_arp = main.params['TEST']['arping']
+        main.Mininet1.handle.sendline(mn_arp)
+
+        generate_load = main.params['TEST']['loadstart']
+
+        main.ONOS1.handle.sendline(generate_load)
+        main.ONOS2.handle.sendline(generate_load)
+
+        devices_json_str_1 = main.ONOS1cli.devices()
+        devices_json_obj_1 = json.loads(devices_json_str_1)
+        devices_json_str_2 = main.ONOS2cli.devices()
+        devices_json_obj_2 = json.loads(devices_json_str_2)
+
+        get_metric = main.params['TEST']['metric1']
+        test_duration = main.params['TEST']['duration']
+        stop = time.time() + float(test_duration)
+
+
+        main.log.info("Starting test loop...")
+        log_interval = main.params['TEST']['log_interval']
+
+        while time.time() < stop:
+            time.sleep(float(log_interval))
+
+            intents_json_str_1 = main.ONOS1cli.intents_events_metrics()
+            intents_json_obj_1 = json.loads(intents_json_str_1)
+            main.log.info("Node 1 rate: " + str(intents_json_obj_1[intents_rate]['m1_rate']))
+            last_rate_1 = intents_json_obj_1[intents_rate]['m1_rate']
+            
+            intents_json_str_2 = main.ONOS2cli.intents_events_metrics()
+            intents_json_obj_2 = json.loads(intents_json_str_2)
+            main.log.info("Node 2 rate: " + str(intents_json_obj_2[intents_rate]['m1_rate']))
+            last_rate_2 = intents_json_obj_2[intents_rate]['m1_rate']
+
+        stop_load = main.params['TEST']['loadstop']
+        main.ONOS1.handle.sendline(stop_load)
+        main.ONOS2.handle.sendline(stop_load)
+
+
+        msg = ("Final rate on node 1: " + str(last_rate_1))
+        main.log.report(msg)
+    
+        msg = ("Final rate on node 2: " + str(last_rate_2))
+        main.log.report(msg)
+
+
+
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.topo b/TestON/tests/IntentsLoad/IntentsLoad.topo
new file mode 100644
index 0000000..985baf9
--- /dev/null
+++ b/TestON/tests/IntentsLoad/IntentsLoad.topo
@@ -0,0 +1,94 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+
+        <ONOSbench>
+            <host>10.128.5.55</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOSbench>
+
+        <ONOS1cli>
+            <host>10.128.5.55</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS1cli>
+        
+        <ONOS2cli>
+            <host>10.128.5.55</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS2cli>
+
+        <ONOS3cli>
+            <host>10.128.5.55</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS3cli>
+
+        <ONOS1>
+            <host>10.128.5.51</host>
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>OnosDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS1>
+
+        <ONOS2>
+            <host>10.128.5.52</host>
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>OnosDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS2>
+
+        <ONOS3>
+            <host>10.128.5.53</host>
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>OnosDriver</type>
+            <connect_order>7</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS3>
+
+        <Mininet1>
+            <host>10.128.5.59</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>8</connect_order>
+            <COMPONENTS>
+                <arg1> --custom ~/topo-intentTPtest.py </arg1>
+                <arg2> --mac --topo mytopo </arg2>
+                <arg3> </arg3>
+                <controller> remote </controller>
+            </COMPONENTS>
+        </Mininet1>
+        
+        <Mininet2>
+            <host>10.128.5.59</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>9</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </Mininet2>
+
+    </COMPONENT>
+
+</TOPOLOGY>
+
diff --git a/TestON/tests/IntentsLoad/__init__.py b/TestON/tests/IntentsLoad/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/IntentsLoad/__init__.py
diff --git a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params
new file mode 100644
index 0000000..4dacc99
--- /dev/null
+++ b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params
@@ -0,0 +1,41 @@
+<PARAMS>
+
+    <testcases>1,2</testcases>
+
+    <ENV>
+    <cellName>cam_cells</cellName>
+    </ENV>
+
+    <SCALE>2</SCALE>
+
+    <GIT>
+        <autopull>on</autopull>
+        <checkout>master</checkout>
+    </GIT>
+
+    <CTRL>
+        <USER>admin</USER>
+        <ip1>10.128.5.51</ip1>
+        <port1>6633</port1>
+        <ip2>10.128.5.52</ip2>
+        <port2>6633</port2>
+        <ip3>10.128.5.53</ip3>
+        <port3>6633</port3>
+    </CTRL>
+
+    <MN>
+        <ip1>10.128.5.59</ip1>
+    </MN>
+
+    <BENCH>
+        <user>admin</user>
+        <ip1>10.128.5.55</ip1>
+    </BENCH>
+
+    <TEST>
+    </TEST>
+
+    <JSON>
+    </JSON>
+
+</PARAMS>
diff --git a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py
new file mode 100644
index 0000000..a75d694
--- /dev/null
+++ b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py
@@ -0,0 +1,136 @@
+# ScaleOutTemplate
+#
+# CASE1 starts number of nodes specified in param file
+#
+# cameron@onlab.us
+
+import sys 
+import os 
+
+
+class ScaleOutTemplate:
+    def __init__(self):
+        self.default = ''
+   
+    def CASE1(self, main):
+        
+        global cluster_count 
+        cluster_count = 1        
+
+        checkout_branch = main.params['GIT']['checkout']
+        git_pull = main.params['GIT']['autopull']
+        cell_name = main.params['ENV']['cellName']
+        BENCH_ip = main.params['BENCH']['ip1']
+        BENCH_user = main.params['BENCH']['user']
+        ONOS1_ip = main.params['CTRL']['ip1']
+        ONOS2_ip = main.params['CTRL']['ip2']
+        ONOS3_ip = main.params['CTRL']['ip3']
+        MN1_ip = main.params['MN']['ip1']
+
+        main.log.step("Cleaning Enviornment...")
+        main.ONOSbench.onos_uninstall(ONOS1_ip)
+        main.ONOSbench.onos_uninstall(ONOS2_ip)
+        main.ONOSbench.onos_uninstall(ONOS3_ip)                                     
+        
+        main.step("Git checkout and pull "+checkout_branch)
+        if git_pull == 'on':
+            checkout_result = main.ONOSbench.git_checkout(checkout_branch)       
+            pull_result = main.ONOSbench.git_pull()
+            
+        else:
+            checkout_result = main.TRUE
+            pull_result = main.TRUE
+            main.log.info("Skipped git checkout and pull")
+
+        mvn_result = main.ONOSbench.clean_install()
+                                                                   
+        main.step("Set cell for ONOS cli env")
+        main.ONOS1cli.set_cell(cell_name)
+        main.ONOS2cli.set_cell(cell_name)
+        main.ONOS3cli.set_cell(cell_name)
+
+        main.step("Creating ONOS package")
+        package_result = main.ONOSbench.onos_package()                             #no file or directory 
+
+        main.step("Installing ONOS package")
+        install1_result = main.ONOSbench.onos_install(node=ONOS1_ip)
+
+        cell_name = main.params['ENV']['cellName']
+        main.step("Applying cell file to environment")
+        cell_apply_result = main.ONOSbench.set_cell(cell_name)
+        main.step("verify cells")
+        verify_cell_result = main.ONOSbench.verify_cell()
+
+        main.step("Set cell for ONOS cli env")
+        main.ONOS1cli.set_cell(cell_name) 
+        cli1 = main.ONOS1cli.start_onos_cli(ONOS1_ip)  
+       
+
+    def CASE2(self, main):
+
+        '''  
+        Increase number of nodes and initiate CLI
+        '''
+        import time 
+        
+        global cluster_count
+        
+        ONOS1_ip = main.params['CTRL']['ip1']
+        ONOS2_ip = main.params['CTRL']['ip2']
+        ONOS3_ip = main.params['CTRL']['ip3']
+        #ONOS4_ip = main.params['CTRL']['ip4']
+        #ONOS5_ip = main.params['CTRL']['ip5']
+        #ONOS6_ip = main.params['CTRL']['ip6']
+        #ONOS7_ip = main.params['CTRL']['ip7']
+        cell_name = main.params['ENV']['cellName']
+        scale = int(main.params['SCALE'])
+       
+        #Cluster size increased everytime the case is defined
+        cluster_count += scale
+ 
+        main.log.report("Increasing cluster size to "+
+                str(cluster_count))
+        install_result = main.FALSE
+        
+        if scale == 2:
+            if cluster_count == 3:
+                main.log.info("Installing nodes 2 and 3")
+                install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
+                install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
+                cli2 = main.ONOS1cli.start_onos_cli(ONOS2_ip)
+                cli3 = main.ONOS1cli.start_onos_cli(ONOS3_ip)
+
+            '''
+            elif cluster_count == 5:
+
+                main.log.info("Installing nodes 4 and 5")
+                node4_result = main.ONOSbench.onos_install(node=ONOS4_ip)
+                node5_result = main.ONOSbench.onos_install(node=ONOS5_ip)
+                install_result = node4_result and node5_result
+                time.sleep(5)
+
+                main.ONOS4cli.start_onos_cli(ONOS4_ip)
+                main.ONOS5cli.start_onos_cli(ONOS5_ip)
+
+            elif cluster_count == 7:
+
+                main.log.info("Installing nodes 4 and 5")
+                node6_result = main.ONOSbench.onos_install(node=ONOS6_ip)
+                node7_result = main.ONOSbench.onos_install(node=ONOS7_ip)
+                install_result = node6_result and node7_result
+                time.sleep(5)
+
+                main.ONOS6cli.start_onos_cli(ONOS6_ip)
+                main.ONOS7cli.start_onos_cli(ONOS7_ip)
+            '''
+        if scale == 1: 
+            if cluster_count == 2:
+                main.log.info("Installing node 2")
+                install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
+                cli2 = main.ONOS1cli.start_onos_cli(ONOS2_ip)
+
+            if cluster_count == 3:
+                main.log.info("Installing node 3")
+                install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
+                cli3 = main.ONOS1cli.start_onos_cli(ONOS3_ip)
+
diff --git a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.topo b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.topo
new file mode 100644
index 0000000..88c4d35
--- /dev/null
+++ b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.topo
@@ -0,0 +1,85 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+
+        <ONOSbench>
+            <host>10.128.5.55</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOSbench>
+
+        <ONOS1cli>
+            <host>10.128.5.55</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS1cli>
+        
+        <ONOS2cli>
+            <host>10.128.5.55</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS2cli>
+
+        <ONOS3cli>
+            <host>10.128.5.55</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS3cli>
+
+        <ONOS1>
+            <host>10.128.5.51</host>
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>OnosDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS1>
+
+        <ONOS2>
+            <host>10.128.5.52</host>
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>OnosDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS2>
+
+        <ONOS3>
+            <host>10.128.5.53</host>
+            <user>sdn</user>
+            <password>rocks</password>
+            <type>OnosDriver</type>
+            <connect_order>7</connect_order>
+            <COMPONENTS> </COMPONENTS>
+        </ONOS3>
+
+        <Mininet1>
+            <host>10.128.5.59</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>8</connect_order>
+            <COMPONENTS>
+                <arg1> --custom ~/mininet/custom/topo-2sw-2host.py </arg1>
+                <arg2> --arp --mac --topo mytopo</arg2>
+                <arg3> </arg3>
+                <controller> remote </controller>
+            </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+
+</TOPOLOGY>
+
diff --git a/TestON/tests/ScaleOutTemplate/__init__.py b/TestON/tests/ScaleOutTemplate/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/ScaleOutTemplate/__init__.py