More cleanup for scale test.
Re-use the code from vsg test and add interfaces in vsg test case to be usable from scale tests.

Change-Id: I7213151d5186ee2f5f96733fe1a0231d63c4391c
diff --git a/src/test/scale/__init__.py b/src/test/scale/__init__.py
index ec5e91b..3d1e823 100644
--- a/src/test/scale/__init__.py
+++ b/src/test/scale/__init__.py
@@ -21,6 +21,7 @@
 subscriber_dir = os.path.join(working_dir, '../subscriber')
 tls_dir = os.path.join(working_dir, '../tls')
 vrouter_dir = os.path.join(working_dir, '../vrouter')
+vsg_dir = os.path.join(working_dir, '../vsg')
 __path__.append(utils_dir)
 __path__.append(fsm_dir)
 __path__.append(subscriber_dir)
@@ -28,3 +29,4 @@
 __path__.append(cli_dir)
 __path__.append(tls_dir)
 __path__.append(vrouter_dir)
+__path__.append(vsg_dir)
diff --git a/src/test/scale/scaleTest.py b/src/test/scale/scaleTest.py
index f5eff3a..19740ad 100644
--- a/src/test/scale/scaleTest.py
+++ b/src/test/scale/scaleTest.py
@@ -35,6 +35,7 @@
 from OnosCtrl import OnosCtrl
 from CordContainer import Onos
 from CordSubscriberUtils import CordSubscriberUtils, XosUtils
+from vsgTest import vsg_exchange
 log.setLevel('INFO')
 
 class scale_exchange(CordLogger):
@@ -45,14 +46,10 @@
     HEAD_NODE = head_node + '.cord.lab' if len(head_node.split('.')) == 1 else head_node
     test_path = os.path.dirname(os.path.realpath(__file__))
     olt_conf_file = os.getenv('OLT_CONFIG_FILE', os.path.join(test_path, '..', 'setup/olt_config.json'))
-    restApiXos =  None
-    cord_subscriber = None
     SUBSCRIBER_ACCOUNT_NUM = 100
     SUBSCRIBER_S_TAG = 500
     SUBSCRIBER_C_TAG = 500
     SUBSCRIBERS_PER_S_TAG = 8
-    subscriber_info = []
-    volt_subscriber_info = []
     restore_methods = []
     TIMEOUT=120
     NUM_SUBSCRIBERS = 100
@@ -115,81 +112,18 @@
 7cp7jLRL7T+i4orZiAXpeEpAeOrP8r0DYTJi/8A=
 -----END CERTIFICATE-----'''
 
-
-    @classmethod
-    def setUpCordApi(cls):
-        num_subscribers = max(cls.NUM_SUBSCRIBERS, 10)
-        cls.cord_subscriber = CordSubscriberUtils(num_subscribers,
-                                                  account_num = cls.SUBSCRIBER_ACCOUNT_NUM,
-                                                  s_tag = cls.SUBSCRIBER_S_TAG,
-                                                  c_tag = cls.SUBSCRIBER_C_TAG,
-                                                  subscribers_per_s_tag = cls.SUBSCRIBERS_PER_S_TAG)
-        cls.restApiXos = XosUtils.getRestApi()
-
     @classmethod
     def setUpClass(cls):
-        cls.controllers = get_controllers()
-        cls.controller = cls.controllers[0]
-        cls.cli = None
-        cls.on_pod = running_on_pod()
-        cls.on_ciab = running_on_ciab()
-        cls.olt = OltConfig(olt_conf_file = cls.olt_conf_file)
-        cls.vcpes = cls.olt.get_vcpes()
-        cls.vcpes_dhcp = cls.olt.get_vcpes_by_type('dhcp')
-        cls.vcpes_reserved = cls.olt.get_vcpes_by_type('reserved')
-        cls.dhcp_vcpes_reserved = [ 'vcpe{}.{}.{}'.format(i, cls.vcpes_reserved[i]['s_tag'], cls.vcpes_reserved[i]['c_tag'])
-                                    for i in xrange(len(cls.vcpes_reserved)) ]
-        cls.untagged_dhcp_vcpes_reserved = [ 'vcpe{}'.format(i) for i in xrange(len(cls.vcpes_reserved)) ]
-        cls.container_vcpes_reserved = [ 'vcpe-{}-{}'.format(vcpe['s_tag'], vcpe['c_tag']) for vcpe in cls.vcpes_reserved ]
-        vcpe_dhcp_reserved = None
-        vcpe_container_reserved = None
-        if cls.vcpes_reserved:
-            vcpe_dhcp_reserved = cls.dhcp_vcpes_reserved[0]
-            if cls.on_pod is False:
-                vcpe_dhcp_reserved = cls.untagged_dhcp_vcpes_reserved[0]
-            vcpe_container_reserved = cls.container_vcpes_reserved[0]
-
-        cls.vcpe_dhcp_reserved = vcpe_dhcp_reserved
-        cls.vcpe_container_reserved = vcpe_container_reserved
-        dhcp_vcpe_offset = len(cls.vcpes_reserved)
-        cls.dhcp_vcpes = [ 'vcpe{}.{}.{}'.format(i+dhcp_vcpe_offset, cls.vcpes_dhcp[i]['s_tag'], cls.vcpes_dhcp[i]['c_tag'])
-                           for i in xrange(len(cls.vcpes_dhcp))  ]
-        cls.untagged_dhcp_vcpes = [ 'vcpe{}'.format(i+dhcp_vcpe_offset) for i in xrange(len(cls.vcpes_dhcp)) ]
-        cls.container_vcpes = [ 'vcpe-{}-{}'.format(vcpe['s_tag'], vcpe['c_tag']) for vcpe in cls.vcpes_dhcp ]
-        vcpe_dhcp = None
-        vcpe_container = None
-        #cache the first dhcp vcpe in the class for quick testing
-        if cls.vcpes_dhcp:
-            vcpe_container = cls.container_vcpes[0]
-            vcpe_dhcp = cls.dhcp_vcpes[0]
-            if cls.on_pod is False:
-                vcpe_dhcp = cls.untagged_dhcp_vcpes[0]
-        cls.vcpe_container = vcpe_container_reserved or vcpe_container
-        cls.vcpe_dhcp = vcpe_dhcp_reserved or vcpe_dhcp
-        VSGAccess.setUp()
-        cls.setUpCordApi()
-        if cls.on_pod is True:
-            cls.openVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
-	cls.activate_apps()
-
-    @classmethod
-    def activate_apps(cls, deactivate = False):
-        for app in cls.vrouter_apps:
-            onos_ctrl = OnosCtrl(app)
-            if deactivate is False:
-                onos_ctrl.activate()
-            else:
-                onos_ctrl.deactivate()
-            time.sleep(2)
-	OnosCtrl(cls.igmp_app).activate()
-	OnosCtrl(cls.acl_app).activate()
-	OnosCtrl(cls.aaa_app).activate()
+        num_subscribers = max(cls.NUM_SUBSCRIBERS, 10)
+        vsg_exchange.vsgSetup(num_subscribers = num_subscribers,
+                              account_num = cls.SUBSCRIBER_ACCOUNT_NUM,
+                              s_tag = cls.SUBSCRIBER_S_TAG,
+                              c_tag = cls.SUBSCRIBER_C_TAG,
+                              subscribers_per_s_tag = cls.SUBSCRIBERS_PER_S_TAG)
 
     @classmethod
     def tearDownClass(cls):
-        VSGAccess.tearDown()
-        if cls.on_pod is True:
-            cls.closeVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
+        vsg_exchange.vsgTeardown()
 
     def log_set(self, level = None, app = 'org.onosproject'):
         CordLogger.logSet(level = level, app = app, controllers = self.controllers, forced = True)
@@ -208,65 +142,6 @@
         assert_equal(status, True)
         return float(output)
 
-    def vsg_for_external_connectivity(self, subscriber_index, reserved = False):
-        if reserved is True:
-            if self.on_pod is True:
-                vcpe = self.dhcp_vcpes_reserved[subscriber_index]
-            else:
-                vcpe = self.untagged_dhcp_vcpes_reserved[subscriber_index]
-        else:
-            if self.on_pod is True:
-                vcpe = self.dhcp_vcpes[subscriber_index]
-            else:
-                vcpe = self.untagged_dhcp_vcpes[subscriber_index]
-        mgmt = 'eth0'
-        host = '8.8.8.8'
-        self.success = False
-        assert_not_equal(vcpe, None)
-        vcpe_ip = VSGAccess.vcpe_get_dhcp(vcpe, mgmt = mgmt)
-        assert_not_equal(vcpe_ip, None)
-        log.info('Got DHCP IP %s for %s' %(vcpe_ip, vcpe))
-        log.info('Sending icmp echo requests to external network 8.8.8.8')
-        st, _ = getstatusoutput('ping -c 3 8.8.8.8')
-        VSGAccess.restore_interface_config(mgmt, vcpe = vcpe)
-        assert_equal(st, 0)
-
-    def vsg_xos_subscriber_create(self, index, subscriber_info = None, volt_subscriber_info = None):
-        if self.on_pod is False:
-            return ''
-        if subscriber_info is None:
-            subscriber_info = self.cord_subscriber.subscriber_info[index]
-        if volt_subscriber_info is None:
-            volt_subscriber_info = self.cord_subscriber.volt_subscriber_info[index]
-        s_tag = int(volt_subscriber_info['voltTenant']['s_tag'])
-        c_tag = int(volt_subscriber_info['voltTenant']['c_tag'])
-        vcpe = 'vcpe-{}-{}'.format(s_tag, c_tag)
-        subId = self.cord_subscriber.subscriberCreate(index, subscriber_info, volt_subscriber_info)
-        if subId:
-            #if the vsg instance was already instantiated, then reduce delay
-            if c_tag % self.SUBSCRIBERS_PER_S_TAG == 0:
-                delay = 350
-            else:
-                delay = 90
-            log.info('Delaying %d seconds for the VCPE to be provisioned' %(delay))
-            time.sleep(delay)
-            log.info('Testing for external connectivity to VCPE %s' %(vcpe))
-            self.vsg_for_external_connectivity(index)
-
-        return subId
-
-    def vsg_xos_subscriber_delete(self, index, subId = '', voltId = '', subscriber_info = None, volt_subscriber_info = None):
-        if self.on_pod is False:
-            return
-        self.cord_subscriber.subscriberDelete(index, subId = subId, voltId = voltId,
-                                              subscriber_info = subscriber_info,
-                                              volt_subscriber_info = volt_subscriber_info)
-
-    def vsg_xos_subscriber_id(self, index):
-        if self.on_pod is False:
-            return ''
-        return self.cord_subscriber.subscriberId(index)
-
     def onos_load_config(self, config):
         #log_test.info('onos load config is %s'%config)
         status, code = OnosCtrl.config(config)
@@ -451,44 +326,44 @@
             time.sleep(3)
 
     def test_scale_for_vsg_vm_creations(self):
-        for index in xrange(len(self.cord_subscriber.subscriber_info)):
-            #check if the index exists
-            subId = self.vsg_xos_subscriber_id(index)
-            log.info('test_vsg_xos_subscriber_creation')
-            if subId and subId != '0':
-                self.vsg_xos_subscriber_delete(index, subId = subId)
-            subId = self.vsg_xos_subscriber_create(index)
-            log.info('Created Subscriber %s' %(subId))
+        vsg = vsg_exchange('test_vsg_xos_subscriber_create_all')
+        vsg.test_vsg_xos_subscriber_create_all()
 
     def test_scale_for_vcpe_creations(self):
-        for index in xrange(len(self.cord_subscriber.subscriber_info)):
-            #check if the index exists
-            subId = self.vsg_xos_subscriber_id(index)
-            log.info('test_vsg_xos_subscriber_creation')
-            if subId and subId != '0':
-                self.vsg_xos_subscriber_delete(index, subId = subId)
-            subId = self.vsg_xos_subscriber_create(index)
-            log.info('Created Subscriber %s' %(subId))
+        vsg = vsg_exchange('test_vsg_xos_subscriber_create_all')
+        vsg.test_vsg_xos_subscriber_create_all()
 
     def test_scale_of_subcriber_vcpe_creations_in_single_vsg_vm(self):
-        subId = self.vsg_xos_subscriber_create(100)
-        if subId and subId != '0':
-            self.vsg_xos_subscriber_delete(100, subId)
+        #create 100 subscribers and delete them after creation
+        vsg = vsg_exchange('vsg_create')
+        try:
+            vsg.vsg_create(100)
+        finally:
+            vsg.vsg_delete(100)
 
     def test_scale_of_subcriber_vcpe_creations_in_multiple_vsg_vm(self):
-        subId = self.vsg_xos_subscriber_create(100)
-        if subId and subId != '0':
-            self.vsg_xos_subscriber_delete(100, subId)
+        #create 100 subscribers and delete them after creation
+        vsg = vsg_exchange('vsg_create')
+        try:
+            vsg.vsg_create(100)
+        finally:
+            vsg.vsg_delete(100)
 
     def test_scale_of_subcriber_vcpe_creations_with_one_vcpe_in_one_vsg_vm(self):
-        subId = self.vsg_xos_subscriber_create(100)
-        if subId and subId != '0':
-            self.vsg_xos_subscriber_delete(100, subId)
+        #create 100 subscribers and delete them after creation
+        vsg = vsg_exchange('vsg_create')
+        try:
+            vsg.vsg_create(100)
+        finally:
+            vsg.vsg_delete(100)
 
     def test_scale_for_cord_subscriber_creation_and_deletion(self):
-        subId = self.vsg_xos_subscriber_create(100)
-        if subId and subId != '0':
-            self.vsg_xos_subscriber_delete(100, subId)
+        #create 100 subscribers and delete them after creation
+        vsg = vsg_exchange('vsg_create')
+        try:
+            vsg.vsg_create(100)
+        finally:
+            vsg.vsg_delete(100)
 
     def test_cord_for_scale_of_subscriber_containers_per_compute_node(self):
         pass
diff --git a/src/test/vsg/vsgTest.py b/src/test/vsg/vsgTest.py
index 6fa22f1..ee192ba 100644
--- a/src/test/vsg/vsgTest.py
+++ b/src/test/vsg/vsgTest.py
@@ -62,13 +62,17 @@
     NUM_SUBSCRIBERS = 5
 
     @classmethod
-    def setUpCordApi(cls):
-        num_subscribers = max(cls.NUM_SUBSCRIBERS, 5)
+    def setUpCordApi(cls, **subscriber_config):
+        num_subscribers = subscriber_config.get('num_subscribers', cls.NUM_SUBSCRIBERS)
+        account_num = subscriber_config.get('account_num', cls.SUBSCRIBER_ACCOUNT_NUM)
+        s_tag = subscriber_config.get('s_tag', cls.SUBSCRIBER_S_TAG)
+        c_tag = subscriber_config.get('c_tag', cls.SUBSCRIBER_C_TAG)
+        subscribers_per_s_tag = subscriber_config.get('subscribers_per_s_tag', cls.SUBSCRIBERS_PER_S_TAG)
         cls.cord_subscriber = CordSubscriberUtils(num_subscribers,
-                                                  account_num = cls.SUBSCRIBER_ACCOUNT_NUM,
-                                                  s_tag = cls.SUBSCRIBER_S_TAG,
-                                                  c_tag = cls.SUBSCRIBER_C_TAG,
-                                                  subscribers_per_s_tag = cls.SUBSCRIBERS_PER_S_TAG)
+                                                  account_num = account_num,
+                                                  s_tag = s_tag,
+                                                  c_tag = c_tag,
+                                                  subscribers_per_s_tag = subscribers_per_s_tag)
         cls.restApiXos = XosUtils.getRestApi()
 
     @classmethod
@@ -110,7 +114,7 @@
             OnosCtrl.config(cfg, controller = cls.HEAD_NODE)
 
     @classmethod
-    def setUpClass(cls):
+    def vsgSetup(cls, **subscriber_config):
         cls.controllers = get_controllers()
         cls.controller = cls.controllers[0]
         cls.cli = None
@@ -150,16 +154,25 @@
         cls.vcpe_container = vcpe_container_reserved or vcpe_container
         cls.vcpe_dhcp = vcpe_dhcp_reserved or vcpe_dhcp
         VSGAccess.setUp()
-        cls.setUpCordApi()
+        cls.setUpCordApi(**subscriber_config)
         if cls.on_pod is True:
             cls.openVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
 
     @classmethod
-    def tearDownClass(cls):
+    def setUpClass(cls):
+        num_subscribers = max(cls.NUM_SUBSCRIBERS, 5)
+        cls.vsgSetup(num_subscribers = num_subscribers)
+
+    @classmethod
+    def vsgTeardown(cls):
         VSGAccess.tearDown()
         if cls.on_pod is True:
             cls.closeVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
 
+    @classmethod
+    def tearDownClass(cls):
+        cls.vsgTeardown()
+
     def onos_shutdown(self, controller = None):
         status = True
         cli = Onos.cliEnter(onos_ip = controller)
@@ -2314,10 +2327,11 @@
                                                    volt_subscriber_info = volt_subscriber_info)
             log.info('Created reserved subscriber %s' %(subId))
 
-    def test_vsg_xos_subscriber_create_all(self):
+    def vsg_create(self, num_subscribers):
         if self.on_pod is False:
             return
-        for index in xrange(len(self.cord_subscriber.subscriber_info)):
+        num_subscribers = min(num_subscribers, len(self.cord_subscriber.subscriber_info))
+        for index in xrange(num_subscribers):
             #check if the index exists
             subId = self.vsg_xos_subscriber_id(index)
             if subId and subId != '0':
@@ -2325,14 +2339,21 @@
             subId = self.vsg_xos_subscriber_create(index)
             log.info('Created Subscriber %s' %(subId))
 
-    def test_vsg_xos_subscriber_delete_all(self):
+    def test_vsg_xos_subscriber_create_all(self):
+        self.vsg_create(len(self.cord_subscriber.subscriber_info))
+
+    def vsg_delete(self, num_subscribers):
         if self.on_pod is False:
             return
-        for index in xrange(len(self.cord_subscriber.subscriber_info)):
+        num_subscribers = min(num_subscribers, len(self.cord_subscriber.subscriber_info))
+        for index in xrange(num_subscribers):
             subId = self.vsg_xos_subscriber_id(index)
             if subId and subId != '0':
                 self.vsg_xos_subscriber_delete(index, subId = subId)
 
+    def test_vsg_xos_subscriber_delete_all(self):
+        self.vsg_delete(len(self.cord_subscriber.subscriber_info))
+
     def test_vsg_xos_subscriber_create_and_delete(self):
         subId = self.vsg_xos_subscriber_create(0)
         if subId and subId != '0':
@@ -3074,3 +3095,4 @@
 	9.Extract all dns stats
 	10.Verify dns stats for queries sent, queries received for dns host resolve success and failed scenarios
         """
+        pass