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