Test: Cluster based scenarios with multiple OVS switches
and CORD apps .
Change-Id: I47068d545f7b1f3ff5f4ec08254abe7469f91b99
diff --git a/src/test/utils/ACL.py b/src/test/utils/ACL.py
index 74a9e52..55333c4 100644
--- a/src/test/utils/ACL.py
+++ b/src/test/utils/ACL.py
@@ -19,6 +19,7 @@
from scapy.all import *
from OnosCtrl import OnosCtrl, get_mac, get_controller
from OnosFlowCtrl import OnosFlowCtrl
+log.setLevel('INFO')
conf.verb = 0 # Disable Scapy verbosity
conf.checkIPaddr = 0 # Don't check response packets for matching destination IPs
@@ -49,7 +50,7 @@
self.iface_ip = iface_ip
self.device_id = OnosCtrl.get_device_id()
- def adding_acl_rule(self, ipv4Prefix, srcIp, dstIp, ipProto ='null', dstTpPort='null', action= 'include'):
+ def adding_acl_rule(self, ipv4Prefix, srcIp, dstIp, ipProto ='null', dstTpPort='null', action= 'include',controller=None):
'''This function is generating ACL json file and post to ONOS for creating a ACL rule'''
if ipv4Prefix is 'v4':
acl_dict = {}
@@ -62,21 +63,39 @@
if dstTpPort is not 'null':
acl_dict['dstTpPort'] = '{}'.format(dstTpPort)
json_data = json.dumps(acl_dict)
- resp = requests.post(self.add_acl_rule_url, auth = self.auth, data = json_data)
+ if controller is None:
+ # if controller ip is not passed, it will default controller ip
+ resp = requests.post(self.add_acl_rule_url, auth = self.auth, data = json_data)
+ else:
+ add_acl_rule_url = 'http://%s:8181/onos/v1/acl/rules' %(controller)
+ log.info('add_acl_rule_acl url is %s'%add_acl_rule_url)
+ resp = requests.post(add_acl_rule_url, auth = self.auth, data = json_data)
return resp.ok, resp.status_code
- def get_acl_rules(self):
+ def get_acl_rules(self,controller=None):
'''This function is getting a ACL rules from ONOS with json formate'''
- resp = requests.get(self.add_acl_rule_url, auth = self.auth)
+ if controller is None:
+ resp = requests.get(self.add_acl_rule_url, auth = self.auth)
+ else:
+ add_acl_rule_url = 'http://%s:8181/onos/v1/acl/rules' %(controller)
+ log.info('get_acl_rule_url is %s'%add_acl_rule_url)
+ resp = requests.get(add_acl_rule_url, auth = self.auth)
return resp
@classmethod
- def remove_acl_rule(cls,id = None):
+ def remove_acl_rule(cls,id = None,controller=None):
'''This function is delete one or all ACL rules in ONOS'''
if id is None:
- remove_acl_rule_url = 'http://%s:8181/onos/v1/acl/rules' %(cls.controller)
+ if controller is None:
+ remove_acl_rule_url = 'http://%s:8181/onos/v1/acl/rules' %(cls.controller)
+ else:
+ remove_acl_rule_url = 'http://%s:8181/onos/v1/acl/rules' %(controller)
else:
- remove_acl_rule_url = 'http://%s:8181/onos/v1/acl/rules/%s' %(cls.controller, id)
+ if controller is None:
+ remove_acl_rule_url = 'http://%s:8181/onos/v1/acl/rules/%s' %(cls.controller, id)
+ else:
+ remove_acl_rule_url = 'http://%s:8181/onos/v1/acl/rules/%s' %(controller, id)
+ log.info('remove_acl_rule_url is %s'%remove_acl_rule_url)
resp = requests.delete(remove_acl_rule_url, auth = cls.auth)
return resp.ok, resp.status_code
diff --git a/src/test/utils/Channels.py b/src/test/utils/Channels.py
index f0f5960..71cda6a 100644
--- a/src/test/utils/Channels.py
+++ b/src/test/utils/Channels.py
@@ -38,12 +38,13 @@
igmp_ip = IP(dst = IP_DST, src = IP_SRC)
ssm_list = []
- def __init__(self, iface = 'veth0', ssm_list = [], src_list = ['1.2.3.4'], delay = 2):
+ def __init__(self, iface = 'veth0', ssm_list = [], src_list = ['1.2.3.4'], delay = 2,controller=None):
+ self.controller=controller
self.iface = iface
self.ssm_list += ssm_list
self.src_list = src_list
self.delay = delay
- self.onos_ctrl = OnosCtrl('org.onosproject.igmp')
+ self.onos_ctrl = OnosCtrl('org.onosproject.igmp',controller=self.controller)
self.onos_ctrl.activate()
def igmp_load_ssm_config(self, ssm_list = []):
@@ -80,7 +81,7 @@
time.sleep(self.delay)
def onos_load_config(self, config):
- status, code = OnosCtrl.config(config)
+ status, code = OnosCtrl.config(config,controller=self.controller)
if status is False:
log.info('JSON config request returned status %d' %code)
time.sleep(2)
diff --git a/src/test/utils/Cluster.py b/src/test/utils/Cluster.py
index bb17d03..f361d4d 100644
--- a/src/test/utils/Cluster.py
+++ b/src/test/utils/Cluster.py
@@ -33,7 +33,6 @@
import collections
import requests
log.setLevel('INFO')
-
class cluster_igmp(object):
V_INF1 = 'veth0'
V_INF2 = 'veth1'
@@ -63,33 +62,33 @@
ROVER_JOIN_TIMEOUT = 60
@classmethod
- def setUpClass(cls):
+ def setUpClass(cls,controller=None):
cls.olt = OltConfig(olt_conf_file = cls.olt_conf_file)
cls.port_map, _ = cls.olt.olt_port_map()
- OnosCtrl.cord_olt_config(cls.olt.olt_device_data())
+ OnosCtrl.cord_olt_config(cls.olt.olt_device_data(),controller=controller)
@classmethod
def tearDownClass(cls): pass
- def setUp(self):
- self.setUpClass()
+ def setUp(self,controller=None):
+ self.setUpClass(controller=controller)
self.get_igmp_intf()
''' Activate the igmp app'''
- self.onos_ctrl = OnosCtrl(self.app)
+ self.onos_ctrl = OnosCtrl(self.app,controller=controller)
self.onos_ctrl.activate()
- self.igmp_channel = IgmpChannel()
+ self.igmp_channel = IgmpChannel(controller=controller)
def tearDown(self): pass
- def onos_load_config(self, config):
+ def onos_load_config(self, config,controller=None):
log.info('onos load config is %s'%config)
- status, code = OnosCtrl.config(config)
+ status, code = OnosCtrl(self.app).config(config,controller=controller)
if status is False:
log.info('JSON request returned status %d' %code)
assert_equal(status, True)
time.sleep(2)
- def onos_ssm_table_load(self, groups, src_list = ['1.2.3.4'],flag = False):
+ def onos_ssm_table_load(self, groups, src_list = ['1.2.3.4'],controller=None,flag = False):
ssm_dict = {'apps' : { 'org.onosproject.igmp' : { 'ssmTranslate' : [] } } }
ssm_xlate_list = ssm_dict['apps']['org.onosproject.igmp']['ssmTranslate']
if flag: #to maintain seperate group-source pair.
@@ -105,7 +104,7 @@
d['source'] = s or '0.0.0.0'
d['group'] = g
ssm_xlate_list.append(d)
- self.onos_load_config(ssm_dict)
+ self.onos_load_config(ssm_dict,controller=controller)
cord_port_map = {}
for g in groups:
cord_port_map[g] = (self.PORT_TX_DEFAULT, self.PORT_RX_DEFAULT)
@@ -294,22 +293,24 @@
-----END CERTIFICATE-----'''
def __init__(self):
pass
- def setUp(self):
- self.onos_ctrl = OnosCtrl(self.eap_app)
- self.onos_aaa_config()
+ def setUp(self,controller=None):
+ self.onos_ctrl = OnosCtrl(self.eap_app,controller=controller)
+ self.onos_aaa_config(controller=controller)
- def onos_aaa_config(self):
+ def onos_aaa_config(self,controller=None):
+ log.info('controller in onos_aaa_config is %s'%controller)
aaa_dict = {'apps' : { 'org.onosproject.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
'radiusIp': '172.17.0.2' } } } }
radius_ip = os.getenv('ONOS_AAA_IP') or '172.17.0.2'
aaa_dict['apps']['org.onosproject.aaa']['AAA']['radiusIp'] = radius_ip
self.onos_ctrl.activate()
time.sleep(2)
- self.onos_load_config(aaa_dict)
+ self.onos_load_config(aaa_dict,controller=controller)
- def onos_load_config(self, config):
+ def onos_load_config(self, config,controller=None):
+ log.info('controller in onos_load_config is %s'%controller)
log.info('onos load config is %s'%config)
- status, code = OnosCtrl.config(config)
+ status, code = OnosCtrl(self.eap_app).config(config,controller=controller)
if status is False:
log.info('JSON request returned status %d' %code)
assert_equal(status, True)
@@ -421,7 +422,8 @@
cls.device_id = OnosCtrl.get_device_id()
class cluster_proxyarp():
- apps = ('org.onosproject.vrouter','org.onosproject.proxyarp')
+ #apps = ('org.onosproject.vrouter','org.onosproject.proxyarp')
+ app = 'org.onosproject.proxyarp'
device_id = 'of:' + get_mac()
device_dict = { "devices" : {
"{}".format(device_id) : {
@@ -489,14 +491,14 @@
else:
config = interface_cfg
cfg = json.dumps(config)
- with open('{}/network-cfg.json'.format(cls.onos_config_path), 'w') as f:
- f.write(cfg)
- return cord_test_onos_restart(config=config)
+ #with open('{}/network-cfg.json'.format(cls.onos_config_path), 'w') as f:
+ # f.write(cfg)
+ #return cord_test_onos_restart(config=config)
@classmethod
- def host_config_load(cls, host_config = None):
+ def host_config_load(cls, host_config = None, controller=None):
for host in host_config:
- status, code = OnosCtrl.host_config(host)
+ status, code = OnosCtrl(cls.app).host_config(host,onos_ip=controller)
if status is False:
log.info('JSON request returned status %d' %code)
assert_equal(status, True)
@@ -547,9 +549,9 @@
return hosts_dict.values()
@classmethod
- def proxyarp_activate(cls, deactivate = False):
+ def proxyarp_activate(cls, deactivate = False,controller=None):
app = 'org.onosproject.proxyarp'
- onos_ctrl = OnosCtrl(app)
+ onos_ctrl = OnosCtrl(app,controller=controller)
if deactivate is True:
onos_ctrl.deactivate()
else:
@@ -557,11 +559,11 @@
time.sleep(3)
@classmethod
- def proxyarp_config(cls, hosts = 1):
+ def proxyarp_config(cls, hosts = 1,controller=None):
proxyarp_configs = cls.generate_interface_config(hosts = hosts)
cls.interface_config_load(interface_cfg = proxyarp_configs)
hostcfg = cls.generate_host_config()
- cls.host_config_load(host_config = hostcfg)
+ cls.host_config_load(host_config = hostcfg,controller=controller)
return proxyarp_configs
def proxyarp_arpreply_verify(self, ingress, hostip, hostmac, PositiveTest=True):
@@ -672,10 +674,10 @@
},
}
- def cliEnter(self):
+ def cliEnter(self,controller=None):
retries = 0
while retries < 3:
- self.cli = OnosCliDriver(connect = True)
+ self.cli = OnosCliDriver(connect = True,controller=controller)
if self.cli.handle:
break
else:
@@ -686,8 +688,8 @@
self.cli.disconnect()
@classmethod
- def onos_load_config(cls, config):
- status, code = OnosCtrl.config(config)
+ def onos_load_config(cls, config,controller=None):
+ status, code = OnosCtrl.config(config,controller=controller)
if status is False:
log.info('JSON request returned status %d' %code)
assert_equal(status, True)
@@ -700,6 +702,25 @@
return vrouter_configs
@classmethod
+ def vrouter_host_load(cls,peer_address = None,controller=None):
+ index = 1
+ hosts_dict = {}
+ peer_info = peer_address if peer_address is not None else cls.peer_list
+ for host,_ in peer_info:
+ #iface = cls.port_map[index]
+ mac = RandMAC()._fix()
+ #port = num + 1 if num < cls.MAX_PORTS - 1 else cls.MAX_PORTS - 1
+ log.info('creating host with ip %s and mac %s'%(host,mac))
+ hosts_dict[host] = {'mac':mac, 'vlan':'none', 'ipAddresses':[host], 'location':{ 'elementId' : '{}'.format(cls.device_id), 'port': index}}
+ index += 1
+ for host in hosts_dict.values():
+ status, code = OnosCtrl.host_config(host,onos_ip=controller)
+ if status is False:
+ log.info('JSON request returned status %d' %code)
+ return False
+ return True
+
+ """@classmethod
def vrouter_host_load(cls, peer_address = None):
#cls.setUpClass()
index = 1
@@ -715,7 +736,7 @@
)
for cmd in config_cmds:
os.system(cmd)
-
+ """
@classmethod
def vrouter_host_unload(cls, peer_address = None):
index = 1
@@ -737,9 +758,12 @@
config = dict(res)
else:
config = network_cfg
+ cfg = json.dumps(config)
log.info('Restarting ONOS with new network configuration %s'%config)
- #return CordTestServer().restart_onos(config)
- return cord_test_onos_restart(config = config)
+ #return cord_test_onos_restart(config = config)
+ with open('{}/network-cfg.json'.format(cls.onos_config_path), 'w') as f:
+ f.write(cfg)
+ return cord_test_onos_restart(config=config)
@classmethod
def start_quagga(cls, networks = 4, peer_address = None, router_address = None):
@@ -841,9 +865,9 @@
return cls.zebra_conf + zebra_routes
@classmethod
- def vrouter_activate(cls, deactivate = False):
+ def vrouter_activate(cls, deactivate = False,controller=None):
app = 'org.onosproject.vrouter'
- onos_ctrl = OnosCtrl(app)
+ onos_ctrl = OnosCtrl(app,controller=controller)
if deactivate is True:
onos_ctrl.deactivate()
else:
@@ -852,11 +876,11 @@
@classmethod
def vrouter_configure(cls, networks = 4, peers = 1, peer_address = None,
- route_update = None, router_address = None, time_expire = None, adding_new_routes = None):
+ route_update = None, router_address = None, time_expire = None, adding_new_routes = None,controller=None):
vrouter_configs = cls.vrouter_config_get(networks = networks, peers = peers,
peer_address = peer_address, route_update = route_update)
cls.start_onos(network_cfg = vrouter_configs)
- cls.vrouter_host_load()
+ cls.vrouter_host_load(controller=controller)
##Start quagga
cls.start_quagga(networks = networks, peer_address = peer_address, router_address = router_address)
return vrouter_configs
@@ -920,15 +944,16 @@
def vrouter_network_verify(self, networks, peers = 1, positive_test = True,
start_network = None, start_peer_address = None, route_update = None,
invalid_peers = None, time_expire = None, unreachable_route_traffic = None,
- deactivate_activate_vrouter = None, adding_new_routes = None):
+ deactivate_activate_vrouter = None, adding_new_routes = None,controller=None):
_, ports_map, egress_map = self.vrouter_configure(networks = networks, peers = peers,
peer_address = start_peer_address,
route_update = route_update,
router_address = start_network,
time_expire = time_expire,
- adding_new_routes = adding_new_routes)
- self.cliEnter()
+ adding_new_routes = adding_new_routes,
+ controller=controller)
+ self.cliEnter(controller=controller)
##Now verify
hosts = json.loads(self.cli.hosts(jsonFormat = True))
log.info('Discovered hosts: %s' %hosts)
@@ -1000,7 +1025,7 @@
return cord_test_quagga_shell(quagga_cmd)
class cluster_acl(object):
- app = ('org.onosproject.acl')
+ app = 'org.onosproject.acl'
device_id = 'of:' + get_mac('ovsbr0')
test_path = os.path.dirname(os.path.realpath(__file__))
onos_config_path = os.path.join(test_path, '..', 'setup/onos-config')
@@ -1032,11 +1057,11 @@
@classmethod
def tearDownClass(cls):
'''Deactivate the acl app'''
- def setUp(self):
+ def setUp(self,controller=None):
self.setUpClass()
''' Activate the acl app'''
self.maxDiff = None ##for assert_equal compare outputs on failure
- self.onos_ctrl = OnosCtrl(self.app)
+ self.onos_ctrl = OnosCtrl(self.app,controller=controller)
status, _ = self.onos_ctrl.activate()
assert_equal(status, True)
time.sleep(1)
@@ -1132,8 +1157,8 @@
assert_equal(self.success, True)
@classmethod
- def onos_load_config(cls, config):
- status, code = OnosCtrl.config(config)
+ def onos_load_config(cls, config,controller=None):
+ status, code = OnosCtrl.config(config,controller=controller)
if status is False:
log.info('JSON request returned status %d' %code)
assert_equal(status, True)
@@ -1176,31 +1201,33 @@
onos_restartable = bool(int(os.getenv('ONOS_RESTART', 0)))
@classmethod
- def setUpClass(cls):
+ def setUpClass(cls,controller=None):
+ log.info('controller ip in dhcp setup def is %s'%controller)
''' Activate the dhcprelay app'''
- OnosCtrl(cls.app_dhcp).deactivate()
+ OnosCtrl(cls.app_dhcp,controller=controller).deactivate()
time.sleep(3)
- cls.onos_ctrl = OnosCtrl(cls.app)
+ cls.onos_ctrl = OnosCtrl(cls.app,controller=controller)
status, _ = cls.onos_ctrl.activate()
assert_equal(status, True)
time.sleep(3)
- cls.dhcp_relay_setup()
+ cls.dhcp_relay_setup(controller=controller)
##start dhcpd initially with default config
- cls.dhcpd_start()
+ cls.dhcpd_start(controller=controller)
@classmethod
- def tearDownClass(cls):
+ def tearDownClass(cls,controller=None):
'''Deactivate the dhcp relay app'''
try:
os.unlink('{}/dhcpd.conf'.format(cls.dhcp_data_dir))
os.unlink('{}/dhcpd.leases'.format(cls.dhcp_data_dir))
except: pass
- cls.onos_ctrl.deactivate()
+ OnosCtrl(cls.app,controller=controller).deactivate()
+ #cls.onos_ctrl.deactivate()
cls.dhcpd_stop()
- cls.dhcp_relay_cleanup()
+ #cls.dhcp_relay_cleanup()
@classmethod
- def dhcp_relay_setup(cls):
+ def dhcp_relay_setup(cls,controller=None):
did = OnosCtrl.get_device_id()
cls.relay_device_id = did
cls.olt = OltConfig(olt_conf_file = cls.olt_conf_file)
@@ -1232,7 +1259,7 @@
relay_ip = cls.get_host_ip(interface_list[0][0])
relay_mac = cls.get_mac(cls.port_map[cls.relay_interface_port])
interface_list.append((cls.relay_interface_port, relay_ip, relay_mac))
- cls.onos_interface_load(interface_list)
+ cls.onos_interface_load(interface_list,controller=controller)
@classmethod
def dhcp_relay_cleanup(cls):
@@ -1242,15 +1269,16 @@
return cord_test_onos_restart(config = {})
@classmethod
- def onos_load_config(cls, config):
- status, code = OnosCtrl.config(config)
+ def onos_load_config(cls, config,controller=None):
+ log.info('loading onos config in controller %s'%controller)
+ status, code = OnosCtrl.config(config,controller=controller)
if status is False:
log.info('JSON request returned status %d' %code)
assert_equal(status, True)
time.sleep(2)
@classmethod
- def onos_interface_load(cls, interface_list):
+ def onos_interface_load(cls, interface_list,controller=None):
interface_dict = { 'ports': {} }
for port_num, ip, mac in interface_list:
port_map = interface_dict['ports']
@@ -1263,10 +1291,10 @@
}
interface_list.append(interface_map)
- cls.onos_load_config(interface_dict)
+ cls.onos_load_config(interface_dict,controller=controller)
@classmethod
- def onos_dhcp_relay_load(cls, server_ip, server_mac):
+ def onos_dhcp_relay_load(cls, server_ip, server_mac,controller=None):
relay_device_map = '{}/{}'.format(cls.relay_device_id, cls.relay_interface_port)
dhcp_dict = {'apps':{'org.onosproject.dhcp-relay':{'dhcprelay':
{'dhcpserverConnectPoint':relay_device_map,
@@ -1276,7 +1304,7 @@
}
}
}
- cls.onos_load_config(dhcp_dict)
+ cls.onos_load_config(dhcp_dict,controller=controller)
@classmethod
def get_host_ip(cls, port):
@@ -1317,7 +1345,7 @@
@classmethod
def dhcpd_start(cls, intf_list = None,
config = default_config, options = default_options,
- subnet = default_subnet_config):
+ subnet = default_subnet_config,controller=None):
'''Start the dhcpd server by generating the conf file'''
if intf_list is None:
intf_list = cls.relay_interfaces
@@ -1352,7 +1380,7 @@
time.sleep(3)
cls.relay_interfaces_last = cls.relay_interfaces
cls.relay_interfaces = intf_list
- cls.onos_dhcp_relay_load(*intf_info[0])
+ cls.onos_dhcp_relay_load(*intf_info[0],controller=controller)
@classmethod
def dhcpd_stop(cls):
@@ -1658,7 +1686,8 @@
return did
@classmethod
- def setUpClass(cls):
+ def setUpClass(cls,controller=None):
+ log.info('controller ip in cluster.py setupclass is %s'%controller)
'''Load the OLT config and activate relevant apps'''
did = cls.load_device_id()
network_cfg = { "devices" : {
@@ -1677,47 +1706,47 @@
# log.info('JSON config request for app %s returned status %d' %(app, code))
#assert_equal(status, True)
#time.sleep(2)
- cls.install_app_table()
+ cls.install_app_table(controller=controller)
cls.olt = OltConfig(olt_conf_file = cls.olt_conf_file)
- OnosCtrl.cord_olt_config(cls.olt.olt_device_data())
+ OnosCtrl.cord_olt_config(cls.olt.olt_device_data(),controller=controller)
cls.port_map, cls.port_list = cls.olt.olt_port_map()
- cls.activate_apps(cls.apps + cls.olt_apps)
+ cls.activate_apps(cls.apps + cls.olt_apps,controller=controller)
@classmethod
- def tearDownClass(cls):
+ def tearDownClass(cls,controller=None):
'''Deactivate the olt apps and restart OVS back'''
apps = cls.olt_apps + ( cls.table_app,)
for app in apps:
- onos_ctrl = OnosCtrl(app)
+ onos_ctrl = OnosCtrl(app,controller=controller)
onos_ctrl.deactivate()
cls.uninstall_app_table()
- #cls.start_onos(network_cfg = {})
+ cls.start_onos(network_cfg = {})
@classmethod
- def activate_apps(cls, apps):
+ def activate_apps(cls, apps,controller=None):
for app in apps:
- onos_ctrl = OnosCtrl(app)
+ onos_ctrl = OnosCtrl(app,controller=controller)
status, _ = onos_ctrl.activate()
assert_equal(status, True)
time.sleep(2)
@classmethod
- def install_app_table(cls):
+ def install_app_table(cls,controller=None):
##Uninstall the existing app if any
- OnosCtrl.uninstall_app(cls.table_app)
+ OnosCtrl.uninstall_app(cls.table_app,onos_ip=controller)
time.sleep(2)
log.info('Installing the multi table app %s for subscriber test' %(cls.table_app_file))
- OnosCtrl.install_app(cls.table_app_file)
+ OnosCtrl.install_app(cls.table_app_file,onos_ip=controller)
time.sleep(3)
#onos_ctrl = OnosCtrl(cls.vtn_app)
#onos_ctrl.deactivate()
@classmethod
- def uninstall_app_table(cls):
+ def uninstall_app_table(cls,controller=None):
##Uninstall the table app on class exit
- OnosCtrl.uninstall_app(cls.table_app)
+ OnosCtrl.uninstall_app(cls.table_app,onos_ip=controller)
time.sleep(2)
log.info('Installing back the cord igmp app %s for subscriber test on exit' %(cls.app_file))
- OnosCtrl.install_app(cls.app_file)
+ OnosCtrl.install_app(cls.app_file,onos_ip=controller)
#onos_ctrl = OnosCtrl(cls.vtn_app)
#onos_ctrl.activate()
@@ -1737,7 +1766,7 @@
else:
config = network_cfg
log.info('Restarting ONOS with new network configuration')
- return cord_test_onos_restart(config = config)
+ #return cord_test_onos_restart(config = config)
@classmethod
def remove_onos_config(cls):
@@ -1772,27 +1801,30 @@
os.system(cmd)
except: pass
- def onos_aaa_load(self):
+ def onos_aaa_load(self,controller=None):
+ log.info('controller ip in cluster.py onos_aaa_load is %s'%controller)
if self.aaa_loaded:
return
aaa_dict = {'apps' : { 'org.onosproject.aaa' : { 'AAA' : { 'radiusSecret': 'radius_password',
'radiusIp': '172.17.0.2' } } } }
radius_ip = os.getenv('ONOS_AAA_IP') or '172.17.0.2'
aaa_dict['apps']['org.onosproject.aaa']['AAA']['radiusIp'] = radius_ip
- self.onos_load_config('org.onosproject.aaa', aaa_dict)
+ self.onos_load_config('org.onosproject.aaa', aaa_dict,controller=controller)
self.aaa_loaded = True
- def onos_dhcp_table_load(self, config = None):
+ def onos_dhcp_table_load(self, config = None,controller=None):
+ log.info('controller ip in cluster.py onos_dhcp_table_load is %s'%controller)
dhcp_dict = {'apps' : { 'org.onosproject.dhcp' : { 'dhcp' : copy.copy(self.dhcp_server_config) } } }
dhcp_config = dhcp_dict['apps']['org.onosproject.dhcp']['dhcp']
if config:
for k in config.keys():
if dhcp_config.has_key(k):
dhcp_config[k] = config[k]
- self.onos_load_config('org.onosproject.dhcp', dhcp_dict)
+ self.onos_load_config('org.onosproject.dhcp', dhcp_dict,controller=controller)
- def onos_load_config(self, app, config):
- status, code = OnosCtrl.config(config)
+ def onos_load_config(self, app, config,controller=None):
+ log.info('controller ip in cluster.py onos_load_config is %s'%controller)
+ status, code = OnosCtrl(controller=controller).config(config)
if status is False:
log.info('JSON config request for app %s returned status %d' %(app, code))
assert_equal(status, True)
@@ -1942,7 +1974,7 @@
def generate_port_list(self, subscribers, channels):
return self.port_list[:subscribers]
- def subscriber_load(self, create = True, num = 10, num_channels = 1, channel_start = 0, port_list = []):
+ def subscriber_load(self, create = True, num = 10, num_channels = 1, channel_start = 0, port_list = [],controller=None):
'''Load the subscriber from the database'''
self.subscriber_db = SubscriberDB(create = create, services = self.test_services)
if create is True:
@@ -1966,19 +1998,20 @@
index += 1
#load the ssm list for all subscriber channels
- igmpChannel = IgmpChannel()
+ igmpChannel = IgmpChannel(controller=controller)
ssm_groups = map(lambda sub: sub.channels, self.subscriber_list)
ssm_list = reduce(lambda ssm1, ssm2: ssm1+ssm2, ssm_groups)
igmpChannel.igmp_load_ssm_config(ssm_list)
def subscriber_join_verify( self, num_subscribers = 10, num_channels = 1,
- channel_start = 0, cbs = None, port_list = [], negative_subscriber_auth = None):
+ channel_start = 0, cbs = None, port_list = [], negative_subscriber_auth = None,controller=None):
+ log.info('controller ip in cluster.py subscriber_join_verify is %s'%controller)
self.test_status = False
self.ovs_cleanup()
subscribers_count = num_subscribers
sub_loop_count = num_subscribers
self.subscriber_load(create = True, num = num_subscribers,
- num_channels = num_channels, channel_start = channel_start, port_list = port_list)
- self.onos_aaa_load()
+ num_channels = num_channels, channel_start = channel_start, port_list = port_list,controller=controller)
+ self.onos_aaa_load(controller=controller)
self.thread_pool = ThreadPool(min(100, subscribers_count), queue_size=1, wait_timeout=1)
chan_leave = False #for single channel, multiple subscribers
@@ -2492,7 +2525,6 @@
subscriber.src_list = ['10.10.10.{}'.format(subscriber.rx_port)]
self.test_status = True
return self.test_status
-
def subscriber_dhcp_specific_lease_packet(self, iface = INTF_RX_DEFAULT):
''' Client sends DHCP Discover packet for particular lease time.'''
config = {'startip':'20.20.20.30', 'endip':'20.20.20.69',
diff --git a/src/test/utils/OnosCtrl.py b/src/test/utils/OnosCtrl.py
index 29f9080..5e6dcdf 100644
--- a/src/test/utils/OnosCtrl.py
+++ b/src/test/utils/OnosCtrl.py
@@ -56,10 +56,16 @@
self.auth = ('karaf', 'karaf')
@classmethod
- def config(cls, config):
+ def config(cls, config,controller=None):
if config is not None:
json_data = json.dumps(config)
- resp = requests.post(cls.cfg_url, auth = cls.auth, data = json_data)
+ if controller is None:
+ print('default Onos config url is %s'%cls.cfg_url)
+ resp = requests.post(cls.cfg_url, auth = cls.auth, data = json_data)
+ else:
+ cfg_url = 'http://%s:8181/onos/v1/network/configuration/' %(controller)
+ print('non-default Onos config url is %s'%cfg_url)
+ resp = requests.post(cfg_url, auth = cls.auth, data = json_data)
return resp.ok, resp.status_code
return False, 400
@@ -99,15 +105,19 @@
return did
@classmethod
- def get_flows(cls, device_id):
- url = 'http://%s:8181/onos/v1/flows/' %(cls.controller) + device_id
+ def get_flows(cls, device_id,controller=None):
+ if controller is None:
+ url = 'http://%s:8181/onos/v1/flows/' %(cls.controller) + device_id
+ else:
+ url = 'http://%s:8181/onos/v1/flows/' %(controller) + device_id
+ print('get flows url is %s'%url)
result = requests.get(url, auth = cls.auth)
if result.ok:
return result.json()['flows']
return None
@classmethod
- def cord_olt_config(cls, olt_device_data = None):
+ def cord_olt_config(cls, olt_device_data = None,controller=None):
'''Configures OLT data for existing devices/switches'''
if olt_device_data is None:
return
@@ -123,7 +133,7 @@
did_dict[did] = access_device_dict
##configure the device list with access information
- return cls.config(config)
+ return cls.config(config,controller=controller)
@classmethod
def install_app(cls, app_file, onos_ip = None):
@@ -134,6 +144,7 @@
result = requests.post(url, auth = cls.auth,
params = params, headers = headers,
data = payload)
+ print('result.ok, result.status_code are %s and %s'%(result.ok, result.status_code))
return result.ok, result.status_code
@classmethod
@@ -159,9 +170,10 @@
return resp.ok, resp.status_code
@classmethod
- def host_config(cls, config):
+ def host_config(cls, config,onos_ip=None):
if config:
json_data = json.dumps(config)
+ url = cls.host_cfg_url if onos_ip is None else 'http://%s:8181/onos/v1/hosts/'.format(onos_ip)
resp = requests.post(cls.host_cfg_url, auth = cls.auth, data = json_data)
return resp.ok, resp.status_code
return False, 400