Changes to subscriber test to generate a cord port map for igmp to use different ports for subscribers that would have different OVS flows configured by ONOS ciena-cordigmp app
diff --git a/src/test/subscriber/subscriberTest.py b/src/test/subscriber/subscriberTest.py
index 6b7e9ff..feae799 100644
--- a/src/test/subscriber/subscriberTest.py
+++ b/src/test/subscriber/subscriberTest.py
@@ -15,6 +15,8 @@
from Channels import Channels, IgmpChannel
from subscriberDb import SubscriberDB
from threadPool import ThreadPool
+from portmaps import g_subscriber_port_map
+from portmaps import g_subscriber_reverse_port_map
log.setLevel('INFO')
class Subscriber(Channels):
@@ -25,10 +27,15 @@
STATS_LEAVE = 3
SUBSCRIBER_SERVICES = 'DHCP IGMP TLS'
def __init__(self, name = 'sub', service = SUBSCRIBER_SERVICES, num = 1, channel_start = 0,
+ tx_port = 2, rx_port = 1,
iface = 'veth0', iface_mcast = 'veth2',
mcast_cb = None, loginType = 'wireless'):
+ self.tx_port = tx_port
+ self.rx_port = rx_port
+ self.tx_intf = g_subscriber_port_map[tx_port]
+ self.rx_intf = g_subscriber_port_map[rx_port]
Channels.__init__(self, num, channel_start = channel_start,
- iface = iface, iface_mcast = iface_mcast, mcast_cb = mcast_cb)
+ iface = self.rx_intf, iface_mcast = self.tx_intf, mcast_cb = mcast_cb)
self.name = name
self.service = service
self.service_map = {}
@@ -182,21 +189,21 @@
assert_equal(status, True)
time.sleep(2)
- def dhcp_sndrcv(self, update_seed = False):
- cip, sip = self.dhcp.discover(update_seed = update_seed)
+ def dhcp_sndrcv(self, dhcp, update_seed = False):
+ cip, sip = dhcp.discover(update_seed = update_seed)
assert_not_equal(cip, None)
assert_not_equal(sip, None)
log.info('Got dhcp client IP %s from server %s for mac %s' %
- (cip, sip, self.dhcp.get_mac(cip)[0]))
+ (cip, sip, dhcp.get_mac(cip)[0]))
return cip,sip
- def dhcp_request(self, seed_ip = '10.10.10.1', iface = 'veth0', update_seed = False):
+ def dhcp_request(self, subscriber, seed_ip = '10.10.10.1', update_seed = False):
config = {'startip':'10.10.10.20', 'endip':'10.10.10.69',
'ip':'10.10.10.2', 'mac': "ca:fe:ca:fe:ca:fe",
'subnet': '255.255.255.0', 'broadcast':'10.10.10.255', 'router':'10.10.10.1'}
self.onos_dhcp_table_load(config)
- self.dhcp = DHCPTest(seed_ip = seed_ip, iface = iface)
- cip, sip = self.dhcp_sndrcv(update_seed = update_seed)
+ dhcp = DHCPTest(seed_ip = seed_ip, iface = subscriber.iface)
+ cip, sip = self.dhcp_sndrcv(dhcp, update_seed = update_seed)
return cip, sip
def recv_channel_cb(self, pkt):
@@ -220,19 +227,19 @@
self.test_status = True
def dhcp_verify(self, subscriber):
- cip, sip = self.dhcp_request(iface = subscriber.iface, update_seed = True)
+ cip, sip = self.dhcp_request(subscriber, update_seed = True)
log.info('Subscriber %s got client ip %s from server %s' %(subscriber.name, cip, sip))
subscriber.src_list = [cip]
self.test_status = True
def dhcp_jump_verify(self, subscriber):
- cip, sip = self.dhcp_request(seed_ip = '10.10.200.1', iface = subscriber.iface)
+ cip, sip = self.dhcp_request(subscriber, seed_ip = '10.10.200.1')
log.info('Subscriber %s got client ip %s from server %s' %(subscriber.name, cip, sip))
subscriber.src_list = [cip]
self.test_status = True
def dhcp_next_verify(self, subscriber):
- cip, sip = self.dhcp_request(seed_ip = '10.10.150.1', iface = subscriber.iface)
+ cip, sip = self.dhcp_request(subscriber, seed_ip = '10.10.150.1')
log.info('Subscriber %s got client ip %s from server %s' %(subscriber.name, cip, sip))
subscriber.src_list = [cip]
self.test_status = True
@@ -247,7 +254,7 @@
log.info('Leaving channel %d for subscriber %s' %(chan, subscriber.name))
subscriber.channel_leave(chan)
time.sleep(3)
- log.info('Join RX stats for subscriber %s, %s' %(subscriber.name,subscriber.join_rx_stats))
+ log.info('Interface %s Join RX stats for subscriber %s, %s' %(subscriber.iface, subscriber.name,subscriber.join_rx_stats))
self.test_status = True
def igmp_jump_verify(self, subscriber):
@@ -258,7 +265,7 @@
subscriber.channel_receive(chan, cb = subscriber.recv_channel_cb, count = 1)
log.info('Verified receive for channel %d, subscriber %s' %(chan, subscriber.name))
time.sleep(3)
- log.info('Join RX stats for subscriber %s, %s' %(subscriber.name, subscriber.join_rx_stats))
+ log.info('Interface %s Jump RX stats for subscriber %s, %s' %(subscriber.iface, subscriber.name, subscriber.join_rx_stats))
self.test_status = True
def igmp_next_verify(self, subscriber):
@@ -272,35 +279,57 @@
subscriber.channel_receive(chan, cb = subscriber.recv_channel_cb, count=1)
log.info('Verified receive for channel %d, subscriber %s' %(chan, subscriber.name))
time.sleep(3)
- log.info('Join Next RX stats for subscriber %s, %s' %(subscriber.name, subscriber.join_rx_stats))
+ log.info('Interface %s Join Next RX stats for subscriber %s, %s' %(subscriber.iface, subscriber.name, subscriber.join_rx_stats))
self.test_status = True
- def subscriber_load(self, create = True, num = 10, num_channels = 1, channel_start = 0):
+ def generate_port_list(self, num):
+ port_list = []
+ for i in xrange(num):
+ rx_port = 2*i+1
+ tx_port = 2*i+2
+ port_list.append((tx_port, rx_port))
+ return port_list
+
+ def subscriber_load(self, create = True, num = 10, num_channels = 1, channel_start = 0, port_list = []):
'''Load the subscriber from the database'''
self.subscriber_db = SubscriberDB(create = create)
if create is True:
self.subscriber_db.generate(num)
self.subscriber_info = self.subscriber_db.read(num)
self.subscriber_list = []
+ if not port_list:
+ port_list = self.generate_port_list(num)
+
+ index = 0
for info in self.subscriber_info:
self.subscriber_list.append(Subscriber(name=info['Name'],
service=info['Service'],
num=num_channels,
- channel_start = channel_start))
+ channel_start = channel_start,
+ tx_port = port_list[index][0],
+ rx_port = port_list[index][1]))
channel_start += num_channels
-
+ index += 1
+
#load the ssm list for all subscriber channels
igmpChannel = IgmpChannel()
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)
+ #load the subscriber to mcast port map for cord
+ cord_port_map = {}
+ for sub in self.subscriber_list:
+ for chan in sub.channels:
+ cord_port_map[chan] = (sub.tx_port, sub.rx_port)
+
+ igmpChannel.cord_port_table_load(cord_port_map)
def subscriber_join_verify( self, num_subscribers = 10, num_channels = 1,
- channel_start = 0, cbs = None):
+ channel_start = 0, cbs = None, port_list = []):
self.test_status = False
self.num_subscribers = num_subscribers
self.subscriber_load(create = True, num = self.num_subscribers,
- num_channels = num_channels, channel_start = channel_start)
+ num_channels = num_channels, channel_start = channel_start, port_list = port_list)
self.onos_aaa_load()
self.thread_pool = ThreadPool(min(100, self.num_subscribers), queue_size=1, wait_timeout=1)
if cbs is None:
@@ -315,20 +344,26 @@
return self.test_status
def test_subscriber_join_recv(self):
- """Test subscriber join and receive"""
- test_status = self.subscriber_join_verify(num_subscribers = 50, num_channels = 1)
+ """Test subscriber join and receive"""
+ num_subscribers = 50
+ test_status = self.subscriber_join_verify(num_subscribers = num_subscribers,
+ num_channels = 1, port_list = self.generate_port_list(num_subscribers))
assert_equal(test_status, True)
def test_subscriber_join_jump(self):
"""Test subscriber join and receive for channel surfing"""
- test_status = self.subscriber_join_verify(num_subscribers = 5,
+ num_subscribers = 5
+ test_status = self.subscriber_join_verify(num_subscribers = num_subscribers,
num_channels = 50,
- cbs = (self.tls_verify, self.dhcp_jump_verify, self.igmp_jump_verify))
+ cbs = (self.tls_verify, self.dhcp_jump_verify, self.igmp_jump_verify),
+ port_list = self.generate_port_list(num_subscribers))
assert_equal(test_status, True)
def test_subscriber_join_next(self):
"""Test subscriber join next for channels"""
- test_status = self.subscriber_join_verify(num_subscribers = 5,
+ num_subscribers = 5
+ test_status = self.subscriber_join_verify(num_subscribers = num_subscribers,
num_channels = 50,
- cbs = (self.tls_verify, self.dhcp_next_verify, self.igmp_next_verify))
+ cbs = (self.tls_verify, self.dhcp_next_verify, self.igmp_next_verify),
+ port_list = self.generate_port_list(num_subscribers))
assert_equal(test_status, True)