def test_multi_isl_port_down(self): sw_alpha = make_datapath_id(1) sw_beta = make_datapath_id(2) sw_gamma = make_datapath_id(3) isl_alpha_beta = model.InterSwitchLink( model.NetworkEndpoint(sw_alpha, 2), model.NetworkEndpoint(sw_beta, 2), None) isl_beta_alpha = isl_alpha_beta.reversed() isl_beta_gamma = model.InterSwitchLink( model.NetworkEndpoint(sw_beta, 2), model.NetworkEndpoint(sw_gamma, 3), None) isl_gamma_beta = isl_beta_gamma.reversed() for dpid in sw_alpha, sw_beta, sw_gamma: self.assertTrue(make_switch_add(dpid)) self.assertTrue(share.exec_isl_discovery(isl_alpha_beta)) self.assertTrue(share.exec_isl_discovery(isl_beta_alpha)) self.assertTrue(share.exec_isl_discovery(isl_beta_gamma)) self.assertTrue(share.exec_isl_discovery(isl_gamma_beta)) self.assertTrue(make_port_down(isl_alpha_beta.dest)) self.ensure_isl_props(neo4j_connect, isl_alpha_beta, ISL_STATUS_PROPS_HALF_UP) self.ensure_isl_props(neo4j_connect, isl_beta_alpha, ISL_STATUS_PROPS_DOWN) self.ensure_isl_props(neo4j_connect, isl_beta_gamma, ISL_STATUS_PROPS_DOWN) self.ensure_isl_props(neo4j_connect, isl_gamma_beta, ISL_STATUS_PROPS_HALF_UP)
def test_isl_status(self): src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint forward = model.InterSwitchLink(src_endpoint, dst_endpoint, None) reverse = forward.reversed() make_switch_add(src_endpoint.dpid) make_switch_add(dst_endpoint.dpid) status_down = { 'actual': ISL_STATUS_INACTIVE, 'status': ISL_STATUS_INACTIVE } status_half_up = { 'actual': ISL_STATUS_ACTIVE, 'status': ISL_STATUS_INACTIVE } status_up = {'actual': ISL_STATUS_ACTIVE, 'status': ISL_STATUS_ACTIVE} # 0 0 self.assertTrue(share.exec_isl_discovery(forward)) # 1 0 self.ensure_isl_props(neo4j_connect, forward, status_half_up) self.ensure_isl_props(neo4j_connect, reverse, status_down) self.assertTrue(share.exec_isl_discovery(reverse)) # 1 1 self.ensure_isl_props(neo4j_connect, forward, status_up) self.ensure_isl_props(neo4j_connect, reverse, status_up) self.assertTrue(make_isl_failed(src_endpoint)) # 0 1 self.ensure_isl_props(neo4j_connect, forward, status_down) self.ensure_isl_props(neo4j_connect, reverse, status_half_up) self.assertTrue(share.exec_isl_discovery(forward)) # 1 1 self.ensure_isl_props(neo4j_connect, forward, status_up) self.ensure_isl_props(neo4j_connect, reverse, status_up) self.assertTrue(make_isl_failed(dst_endpoint)) # 1 0 self.ensure_isl_props(neo4j_connect, forward, status_half_up) self.ensure_isl_props(neo4j_connect, reverse, status_down) self.assertTrue(share.exec_isl_discovery(reverse)) # 1 1 self.ensure_isl_props(neo4j_connect, forward, status_up) self.ensure_isl_props(neo4j_connect, reverse, status_up) self.assertTrue(make_isl_failed(src_endpoint)) # 0 1 self.ensure_isl_props(neo4j_connect, forward, status_down) self.ensure_isl_props(neo4j_connect, reverse, status_half_up) self.assertTrue(make_isl_failed(dst_endpoint)) # 0 0 self.ensure_isl_props(neo4j_connect, forward, status_down) self.ensure_isl_props(neo4j_connect, reverse, status_down)
def test_switch_unplug(self): src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint forward = model.InterSwitchLink(src_endpoint, dst_endpoint, None) reverse = forward.reversed() self.assertTrue(make_switch_add(src_endpoint.dpid)) self.assertTrue(make_switch_add(dst_endpoint.dpid)) self.assertTrue(share.exec_isl_discovery(forward)) self.assertTrue(share.exec_isl_discovery(reverse)) self.ensure_isl_props(neo4j_connect, forward, ISL_STATUS_PROPS_UP) self.ensure_isl_props(neo4j_connect, reverse, ISL_STATUS_PROPS_UP) self.assertTrue(make_switch_remove(src_endpoint.dpid)) self.ensure_isl_props(neo4j_connect, forward, ISL_STATUS_PROPS_DOWN) self.ensure_isl_props(neo4j_connect, reverse, ISL_STATUS_PROPS_HALF_UP)
def test_isl_without_life_cycle_fields(self): sw_alpha = make_datapath_id(1) sw_beta = make_datapath_id(2) isl_alpha_beta = model.InterSwitchLink( model.NetworkEndpoint(sw_alpha, 2), model.NetworkEndpoint(sw_beta, 2), None) self.assertTrue(make_switch_add(sw_alpha)) self.assertTrue(make_switch_add(sw_beta)) self.assertTrue(share.exec_isl_discovery(isl_alpha_beta)) with neo4j_connect.begin() as tx: neo4j_connect.pull(isl_utils.fetch(tx, isl_alpha_beta)) isl_utils.set_props(tx, isl_alpha_beta, { 'time_create': None, 'time_modify': None }) self.assertTrue(share.exec_isl_discovery(isl_alpha_beta))
def test_port_down_with_cost_as_string(self): sw_alpha = make_datapath_id(1) sw_beta = make_datapath_id(2) isl_alpha_beta = model.InterSwitchLink( model.NetworkEndpoint(sw_alpha, 2), model.NetworkEndpoint(sw_beta, 2), None) self.assertTrue(share.exec_isl_discovery(isl_alpha_beta)) with neo4j_connect.begin() as tx: isl_utils.set_props(tx, isl_alpha_beta, {"cost": "10"}) self.assertTrue(make_port_down(isl_alpha_beta.source))
def _cost_raise_on_port_down(self, initial, down, recover): src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint isl = model.InterSwitchLink(src_endpoint, dst_endpoint, None) self.ensure_isl_costs((src_endpoint, initial), (dst_endpoint, initial)) self.assertTrue(make_port_down(src_endpoint), 'Port DOWN command have failed') self.ensure_isl_costs((src_endpoint, down), (dst_endpoint, down)) self.assertTrue(share.exec_isl_discovery(isl), 'ISL discovery command have failed') self.ensure_isl_costs((src_endpoint, recover), (dst_endpoint, recover))
def test_no_cost_raise_on_isl_down(self): self.setup_initial_data() src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint isl = model.InterSwitchLink(src_endpoint, dst_endpoint, None) self.ensure_isl_costs((src_endpoint, 10), (dst_endpoint, 10)) self.assertTrue(make_isl_failed(src_endpoint), 'Port DOWN command have failed') self.ensure_isl_costs((src_endpoint, 10), (dst_endpoint, 10)) self.assertTrue(share.exec_isl_discovery(isl), 'ISL discovery command have failed') self.ensure_isl_costs((src_endpoint, 10), (dst_endpoint, 10))
def test_isl_replug(self): sw_alpha = make_datapath_id(1) sw_beta = make_datapath_id(2) sw_gamma = make_datapath_id(3) sw_delta = make_datapath_id(4) isl_alpha_beta = model.InterSwitchLink( model.NetworkEndpoint(sw_alpha, 2), model.NetworkEndpoint(sw_beta, 2), None) isl_beta_alpha = isl_alpha_beta.reversed() isl_beta_gamma = model.InterSwitchLink( model.NetworkEndpoint(sw_beta, 2), model.NetworkEndpoint(sw_gamma, 3), None) isl_gamma_beta = isl_beta_gamma.reversed() isl_gamma_delta = model.InterSwitchLink( model.NetworkEndpoint(sw_gamma, 3), model.NetworkEndpoint(sw_delta, 3), None) isl_delta_gamma = isl_gamma_delta.reversed() for dpid in sw_alpha, sw_beta, sw_gamma, sw_delta: self.assertTrue(make_switch_add(dpid)) self.assertTrue(share.exec_isl_discovery(isl_alpha_beta)) self.assertTrue(share.exec_isl_discovery(isl_beta_alpha)) self.assertTrue(share.exec_isl_discovery(isl_gamma_delta)) self.assertTrue(share.exec_isl_discovery(isl_delta_gamma)) self.ensure_isl_props(neo4j_connect, isl_alpha_beta, ISL_STATUS_PROPS_UP) self.ensure_isl_props(neo4j_connect, isl_beta_alpha, ISL_STATUS_PROPS_UP) self.ensure_isl_props(neo4j_connect, isl_gamma_delta, ISL_STATUS_PROPS_UP) self.ensure_isl_props(neo4j_connect, isl_delta_gamma, ISL_STATUS_PROPS_UP) self.assertRaises(exc.DBRecordNotFound, isl_utils.fetch, neo4j_connect, isl_beta_gamma) self.assertRaises(exc.DBRecordNotFound, isl_utils.fetch, neo4j_connect, isl_gamma_beta) # replug self.assertTrue(share.exec_isl_discovery(isl_beta_gamma)) # alpha <-> beta is down self.ensure_isl_props(neo4j_connect, isl_alpha_beta, ISL_STATUS_PROPS_HALF_UP) self.ensure_isl_props(neo4j_connect, isl_beta_alpha, ISL_STATUS_PROPS_DOWN) # gamma -> delta is down self.ensure_isl_props(neo4j_connect, isl_gamma_delta, ISL_STATUS_PROPS_DOWN) self.ensure_isl_props(neo4j_connect, isl_delta_gamma, ISL_STATUS_PROPS_HALF_UP) # beta <-> gamma is half up self.ensure_isl_props(neo4j_connect, isl_beta_gamma, ISL_STATUS_PROPS_HALF_UP) self.ensure_isl_props(neo4j_connect, isl_gamma_beta, ISL_STATUS_PROPS_DOWN) self.assertTrue(share.exec_isl_discovery(isl_gamma_beta)) # alpha <-> beta is down self.ensure_isl_props(neo4j_connect, isl_alpha_beta, ISL_STATUS_PROPS_HALF_UP) self.ensure_isl_props(neo4j_connect, isl_beta_alpha, ISL_STATUS_PROPS_DOWN) # gamma -> delta is down self.ensure_isl_props(neo4j_connect, isl_gamma_delta, ISL_STATUS_PROPS_DOWN) self.ensure_isl_props(neo4j_connect, isl_delta_gamma, ISL_STATUS_PROPS_HALF_UP) # beta <-> gamma is up self.ensure_isl_props(neo4j_connect, isl_beta_gamma, ISL_STATUS_PROPS_UP) self.ensure_isl_props(neo4j_connect, isl_gamma_beta, ISL_STATUS_PROPS_UP)
def make_isl_pair(source, dest): forward = model.InterSwitchLink(source, dest, None) share.exec_isl_discovery(forward) share.exec_isl_discovery(forward.reversed())