def __init__(self, *args, **kwargs): super(Ryu, self).__init__(*args, **kwargs) #--- register for configuration options self.CONF.register_opts([ cfg.StrOpt('SciPassConfig', default='/etc/SciPass/SciPass.xml', help='where to find the SciPass config file'), ]) self.logger.error("Starting SciPass") self.datapaths = {} self.isactive = 1 self.statsInterval = 5 self.balanceInterval = 15 self.bal = None self.stats = {} self.stats_thread = hub.spawn(self._stats_loop) self.balance_thread = hub.spawn(self._balance_loop) self.ports = defaultdict(dict) self.prefix_bytes = defaultdict(lambda: defaultdict(int)) self.lastStatsTime = None self.flowmods = {} api = SciPass(logger=self.logger, config_file=self.CONF.SciPassConfig) api.registerForwardingStateChangeHandler( self.changeSwitchForwardingState) self.api = api wsgi = kwargs['wsgi'] wsgi.register(SciPassRest, {'api': self.api})
def setUp(self): self.api = SciPass( logger = logging.getLogger(__name__), config = str(os.getcwd()) + "/t/etc/SciPass_balancer_only.xml", readState = False) self.datapath = Mock(id=1) self.api.switchJoined(self.datapath) self.state = "/var/run/" + "%016x" % self.datapath.id + "IUPUI" + ".json"
def test_state_restore(self): net1 = ipaddr.IPv4Network("192.168.0.0/24") group = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").getPrefixGroup(net1) res = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").splitSensorPrefix(group,net1,check=False) self.assertTrue(res == 1) net2 = ipaddr.IPv6Network("2001:0DB8::/48") group = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").getPrefixGroup(net2) res = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").splitSensorPrefix(group,net2,check=False) self.assertTrue(res == 1) self.api.switchLeave(self.datapath) time.sleep(3) self.api = SciPass( logger = logging.getLogger(__name__), config = str(os.getcwd()) + "/t/etc/SciPass_balancer_only.xml", readState = True) self.api.switchJoined(self.datapath) prefixes = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").getPrefixes() prefixList = prefixes.keys() assert(net1 not in prefixList) assert(net2 not in prefixList) net = [ipaddr.IPv4Network('192.168.0.0/25'), ipaddr.IPv4Network('192.168.0.128/25')] assert(n in prefixList for n in net) net = [ipaddr.IPv6Network('2001:db8::/49'), ipaddr.IPv6Network('2001:db8:0:8000::/49')] assert(n in prefixList for n in net)
def setUp(self): self.api = SciPass( logger = logging.getLogger(__name__), config = str(os.getcwd()) + "/t/etc/Inline.xml" )
def test_switch_init(self): api = SciPass(logger=logging.getLogger(__name__), config=str(os.getcwd()) + "/t/etc/SciPass.xml") #first setup the handler to get all the flows that were sent flows = [] def flowSent(dpid=None, domain=None, header=None, actions=None, command=None, priority=None, idle_timeout=None, hard_timeout=None): obj = { 'dpid': dpid, 'header': header, 'actions': actions, 'command': command, 'priority': priority, 'idle_timeout': idle_timeout, 'hard_timeout': hard_timeout } flows.append(obj) logging.error(obj) api.registerForwardingStateChangeHandler(flowSent) datapath = Mock(id=1) api.switchJoined(datapath) self.assertTrue(len(flows) == 25) #verify all of the 'flow details are set properly' for flow in flows: self.assertEquals(flow['dpid'], "%016x" % datapath.id) self.assertEquals(flow['hard_timeout'], 0) self.assertEquals(flow['idle_timeout'], 0) flow = flows[0] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], {'phys_port': 1, 'dl_type': None}) self.assertEquals(flow['priority'], 5) flow = flows[1] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 1}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 5, 'nw_dst': ipaddr.IPv4Network('10.0.17.0/24') }) self.assertEquals(flow['priority'], 10) flow = flows[2] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 1, 'nw_src': ipaddr.IPv4Network('10.0.17.0/24') }) self.assertEquals(flow['priority'], 10) flow = flows[3] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 1}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 5, 'nw_dst': ipaddr.IPv4Network('10.0.18.0/24') }) self.assertEquals(flow['priority'], 10) flow = flows[4] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 1, 'nw_src': ipaddr.IPv4Network('10.0.18.0/24') }) self.assertEquals(flow['priority'], 10) flow = flows[5] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], {'phys_port': 2, 'dl_type': None}) self.assertEquals(flow['priority'], 5) flow = flows[6] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 2}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 5, 'nw_dst': ipaddr.IPv4Network('10.0.19.0/24') }) self.assertEquals(flow['priority'], 10) flow = flows[7] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 2, 'nw_src': ipaddr.IPv4Network('10.0.19.0/24') }) self.assertEquals(flow['priority'], 10) flow = flows[8] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 2}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 5, 'nw_dst': ipaddr.IPv4Network('10.0.20.0/24') }) self.assertEquals(flow['priority'], 10) flow = flows[9] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 2, 'nw_src': ipaddr.IPv4Network('10.0.20.0/24') }) self.assertEquals(flow['priority'], 10) flow = flows[10] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 2}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 5, 'nw_dst': ipaddr.IPv6Network('2001:0DB8::/48') }) self.assertEquals(flow['priority'], 10) flow = flows[11] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 2, 'nw_src': ipaddr.IPv6Network('2001:0DB8::/48') }) self.assertEquals(flow['priority'], 10) flow = flows[12] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 1 }, { 'type': 'output', 'port': 2 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], {'phys_port': 5, 'dl_type': None}) self.assertEquals(flow['priority'], 3) flow = flows[13] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 10}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], {'phys_port': 6, 'dl_type': None}) self.assertEquals(flow['priority'], 10) flow = flows[14] self.assertEquals(flow['actions'], [{'type': 'output', 'port': 6}]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], {'phys_port': 10, 'dl_type': None}) self.assertEquals(flow['priority'], 10) flow = flows[15] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 27 }, { 'type': 'output', 'port': 26 }, { 'type': 'output', 'port': 5 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 1, 'nw_src': ipaddr.IPv4Network('10.0.17.0/24') }) self.assertEquals(flow['priority'], 500) flow = flows[16] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 27 }, { 'type': 'output', 'port': 26 }, { 'type': 'output', 'port': 6 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 10, 'nw_dst': ipaddr.IPv4Network('10.0.17.0/24') }) self.assertEquals(flow['priority'], 500) flow = flows[17] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 21 }, { 'type': 'output', 'port': 20 }, { 'type': 'output', 'port': 5 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 1, 'nw_src': ipaddr.IPv4Network('10.0.18.0/24') }) self.assertEquals(flow['priority'], 600) flow = flows[18] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 21 }, { 'type': 'output', 'port': 20 }, { 'type': 'output', 'port': 6 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 10, 'nw_dst': ipaddr.IPv4Network('10.0.18.0/24') }) self.assertEquals(flow['priority'], 600) flow = flows[19] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 25 }, { 'type': 'output', 'port': 24 }, { 'type': 'output', 'port': 5 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 2, 'nw_src': ipaddr.IPv4Network('10.0.19.0/24') }) self.assertEquals(flow['priority'], 700) flow = flows[20] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 25 }, { 'type': 'output', 'port': 24 }, { 'type': 'output', 'port': 6 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 10, 'nw_dst': ipaddr.IPv4Network('10.0.19.0/24') }) self.assertEquals(flow['priority'], 700) flow = flows[21] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 23 }, { 'type': 'output', 'port': 22 }, { 'type': 'output', 'port': 5 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 2, 'nw_src': ipaddr.IPv4Network('10.0.20.0/24') }) self.assertEquals(flow['priority'], 800) flow = flows[22] self.assertEquals(flow['actions'], [{ 'type': 'output', 'port': 23 }, { 'type': 'output', 'port': 22 }, { 'type': 'output', 'port': 6 }]) self.assertEquals(flow['command'], "ADD") self.assertEquals(flow['header'], { 'phys_port': 10, 'nw_dst': ipaddr.IPv4Network('10.0.20.0/24') }) self.assertEquals(flow['priority'], 800)
def test_valid_config(self): api = SciPass(logger=logging.getLogger(__name__), config=str(os.getcwd()) + "/t/etc/SciPass.xml") self.assertTrue(isinstance(api, SciPass))
def setUp(self): self.api = SciPass(logger=logging.getLogger(__name__), config=str(os.getcwd()) + "/t/etc/Simple_SciPass_balancer_only.xml")