cord test cleanup for vsg and scale tests to use a cord subscriber interface when sharing code.
Change-Id: I0a869fb162f58dd5aeb9898f80af4cb2f3b45957
diff --git a/src/test/scale/scaleTest.py b/src/test/scale/scaleTest.py
index 8a96d01..1cd491f 100644
--- a/src/test/scale/scaleTest.py
+++ b/src/test/scale/scaleTest.py
@@ -34,6 +34,7 @@
from CordTestConfig import setup_module, running_on_ciab
from OnosCtrl import OnosCtrl
from CordContainer import Onos
+from CordSubscriberUtils import CordSubscriberUtils, XosUtils
log.setLevel('INFO')
class scale_exchange(CordLogger):
@@ -45,11 +46,11 @@
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
- subscriber_account_num = 100
- subscriber_s_tag = 500
- subscriber_c_tag = 500
- subscribers_per_s_tag = 8
- subscriber_map = {}
+ 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 = []
@@ -74,116 +75,15 @@
PORT_RX_DEFAULT = 1
igmp_app = 'org.opencord.igmp'
-
- @classmethod
- def getSubscriberCredentials(cls, subId):
- """Generate our own account num, s_tag and c_tags"""
- if subId in cls.subscriber_map:
- return cls.subscriber_map[subId]
- account_num = cls.subscriber_account_num
- cls.subscriber_account_num += 1
- s_tag, c_tag = cls.subscriber_s_tag, cls.subscriber_c_tag
- cls.subscriber_c_tag += 1
- if cls.subscriber_c_tag % cls.subscribers_per_s_tag == 0:
- cls.subscriber_s_tag += 1
- cls.subscriber_map[subId] = account_num, s_tag, c_tag
- return cls.subscriber_map[subId]
-
- @classmethod
- def getXosCredentials(cls):
- onos_cfg = OnosCtrl.get_config()
- if onos_cfg is None:
- return None
- if 'apps' in onos_cfg and \
- 'org.opencord.vtn' in onos_cfg['apps'] and \
- 'cordvtn' in onos_cfg['apps']['org.opencord.vtn'] and \
- 'xos' in onos_cfg['apps']['org.opencord.vtn']['cordvtn']:
- xos_cfg = onos_cfg['apps']['org.opencord.vtn']['cordvtn']['xos']
- endpoint = xos_cfg['endpoint']
- user = xos_cfg['user']
- password = xos_cfg['password']
- xos_endpoints = endpoint.split(':')
- xos_host = xos_endpoints[1][len('//'):]
- xos_port = xos_endpoints[2][:-1]
- #log.info('xos_host: %s, port: %s, user: %s, password: %s' %(xos_host, xos_port, user, password))
- return dict(host = xos_host, port = xos_port, user = user, password = password)
-
- return None
-
- @classmethod
- def getSubscriberConfig(cls, num_subscribers):
- features = {
- 'cdn': True,
- 'uplink_speed': 1000000000,
- 'downlink_speed': 1000000000,
- 'uverse': True,
- 'status': 'enabled'
- }
- subscriber_map = []
- for i in xrange(num_subscribers):
- subId = 'sub{}'.format(i)
- account_num, _, _ = cls.getSubscriberCredentials(subId)
- identity = { 'account_num' : str(account_num),
- 'name' : 'My House {}'.format(i)
- }
- sub_info = { 'features' : features,
- 'identity' : identity
- }
- subscriber_map.append(sub_info)
-
- return subscriber_map
-
- @classmethod
- def getVoltSubscriberConfig(cls, num_subscribers):
- voltSubscriberMap = []
- for i in xrange(num_subscribers):
- subId = 'sub{}'.format(i)
- account_num, s_tag, c_tag = cls.getSubscriberCredentials(subId)
- voltSubscriberInfo = {}
- voltSubscriberInfo['voltTenant'] = dict(s_tag = str(s_tag),
- c_tag = str(c_tag),
- subscriber = '')
- voltSubscriberInfo['account_num'] = account_num
- voltSubscriberMap.append(voltSubscriberInfo)
-
- return voltSubscriberMap
-
@classmethod
def setUpCordApi(cls):
- our_path = os.path.dirname(os.path.realpath(__file__))
- cord_api_path = os.path.join(our_path, '..', 'cord-api')
- framework_path = os.path.join(cord_api_path, 'Framework')
- utils_path = os.path.join(framework_path, 'utils')
- data_path = os.path.join(cord_api_path, 'Tests', 'data')
- subscriber_cfg = os.path.join(data_path, 'Subscriber.json')
- volt_tenant_cfg = os.path.join(data_path, 'VoltTenant.json')
num_subscribers = max(cls.NUM_SUBSCRIBERS, 10)
- cls.subscriber_info = cls.getSubscriberConfig(num_subscribers)
- cls.volt_subscriber_info = cls.getVoltSubscriberConfig(num_subscribers)
-
- sys.path.append(utils_path)
- sys.path.append(framework_path)
- from restApi import restApi
- restApiXos = restApi()
- xos_credentials = cls.getXosCredentials()
- if xos_credentials is None:
- restApiXos.controllerIP = cls.HEAD_NODE
- restApiXos.controllerPort = '9000'
- else:
- restApiXos.controllerIP = xos_credentials['host']
- restApiXos.controllerPort = xos_credentials['port']
- restApiXos.user = xos_credentials['user']
- restApiXos.password = xos_credentials['password']
- cls.restApiXos = restApiXos
-
- @classmethod
- def getVoltId(cls, result, subId):
- if type(result) is not type([]):
- return None
- for tenant in result:
- if str(tenant['subscriber']) == str(subId):
- return str(tenant['id'])
- return None
+ 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):
@@ -226,15 +126,15 @@
cls.vcpe_container = vcpe_container_reserved or vcpe_container
cls.vcpe_dhcp = vcpe_dhcp_reserved or vcpe_dhcp
VSGAccess.setUp()
- #cls.setUpCordApi()
+ cls.setUpCordApi()
if cls.on_pod is True:
- cls.openVCPEAccess(cls.volt_subscriber_info)
+ cls.openVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
@classmethod
def tearDownClass(cls):
VSGAccess.tearDown()
if cls.on_pod is True:
- cls.closeVCPEAccess(cls.volt_subscriber_info)
+ cls.closeVCPEAccess(cls.cord_subscriber.volt_subscriber_info)
def log_set(self, level = None, app = 'org.onosproject'):
CordLogger.logSet(level = level, app = app, controllers = self.controllers, forced = True)
@@ -253,41 +153,43 @@
assert_equal(status, True)
return float(output)
- def vsg_xos_subscriber_id(self, index):
- log.info('index and its type are %s, %s'%(index, type(index)))
- volt_subscriber_info = self.volt_subscriber_info[index]
- result = self.restApiXos.ApiGet('TENANT_SUBSCRIBER')
- assert_not_equal(result, None)
- subId = self.restApiXos.getSubscriberId(result, volt_subscriber_info['account_num'])
- return subId
+ 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.subscriber_info[index]
+ subscriber_info = self.cord_subscriber.subscriber_info[index]
if volt_subscriber_info is None:
- volt_subscriber_info = self.volt_subscriber_info[index]
+ 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)
- log.info('Creating tenant with s_tag: %d, c_tag: %d' %(s_tag, c_tag))
- """subId = ''
- try:
- result = self.restApiXos.ApiPost('TENANT_SUBSCRIBER', subscriber_info)
- assert_equal(result, True)
- result = self.restApiXos.ApiGet('TENANT_SUBSCRIBER')
- assert_not_equal(result, None)
- subId = self.restApiXos.getSubscriberId(result, volt_subscriber_info['account_num'])
- assert_not_equal(subId, '0')
- log.info('Subscriber ID for account num %s = %s' %(str(volt_subscriber_info['account_num']), subId))
- volt_tenant = volt_subscriber_info['voltTenant']
- #update the subscriber id in the tenant info before making the rest
- volt_tenant['subscriber'] = subId
- result = self.restApiXos.ApiPost('TENANT_VOLT', volt_tenant)
- assert_equal(result, True)
+ 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:
+ if c_tag % self.SUBSCRIBERS_PER_S_TAG == 0:
delay = 350
else:
delay = 90
@@ -295,38 +197,20 @@
time.sleep(delay)
log.info('Testing for external connectivity to VCPE %s' %(vcpe))
self.vsg_for_external_connectivity(index)
- finally:
- return subId"""
+
+ 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
- if subscriber_info is None:
- subscriber_info = self.subscriber_info[index]
- if volt_subscriber_info is None:
- volt_subscriber_info = self.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)
- log.info('Deleting tenant with s_tag: %d, c_tag: %d' %(s_tag, c_tag))
- if not subId:
- #get the subscriber id first
- result = self.restApiXos.ApiGet('TENANT_SUBSCRIBER')
- assert_not_equal(result, None)
- subId = self.restApiXos.getSubscriberId(result, volt_subscriber_info['account_num'])
- assert_not_equal(subId, '0')
- if not voltId:
- #get the volt id for the subscriber
- result = self.restApiXos.ApiGet('TENANT_VOLT')
- assert_not_equal(result, None)
- voltId = self.getVoltId(result, subId)
- assert_not_equal(voltId, None)
- log.info('Deleting subscriber ID %s for account num %s' %(subId, str(volt_subscriber_info['account_num'])))
- status = self.restApiXos.ApiDelete('TENANT_SUBSCRIBER', subId)
- assert_equal(status, True)
- #Delete the tenant
- log.info('Deleting VOLT Tenant ID %s for subscriber %s' %(voltId, subId))
- self.restApiXos.ApiDelete('TENANT_VOLT', voltId)
+ 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)
@@ -431,7 +315,7 @@
return self.success
def test_scale_for_vsg_vm_creations(self):
- for index in xrange(len(self.subscriber_info)):
+ 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')
@@ -441,7 +325,7 @@
log.info('Created Subscriber %s' %(subId))
def test_scale_for_vcpe_creations(self):
- for index in xrange(len(self.subscriber_info)):
+ 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')
@@ -574,4 +458,3 @@
time.sleep(1)
cpu_usage = self.get_system_cpu_usage()
log.info('CPU usage is %s for multicast group entries %s after igmp app deactivated'%(cpu_usage,index+1))
-