def test_validate_lsp_routing(self): """ Test that all 4 LSPs between A and D route """ model1 = Model() model1.rsvp_lsp_objects = set([]) model1.demand_objects = set([]) int_list = [{'name': 'E-to-A', 'cost': 10, 'capacity': 300, 'node': 'E', 'remote_node': 'A', 'address': 1, 'failed': False}, {'name': 'C-to-D', 'cost': 30, 'capacity': 150, 'node': 'C', 'remote_node': 'D', 'address': 5, 'failed': False}, {'name': 'D-to-C', 'cost': 30, 'capacity': 150, 'node': 'D', 'remote_node': 'C', 'address': 5, 'failed': False}, {'name': 'A-to-E', 'cost': 10, 'capacity': 300, 'node': 'A', 'remote_node': 'E', 'address': 1, 'failed': False}, {'name': 'A-to-D', 'cost': 40, 'capacity': 20, 'node': 'A', 'remote_node': 'D', 'address': 2, 'failed': False}, {'name': 'D-to-A', 'cost': 40, 'capacity': 20, 'node': 'D', 'remote_node': 'A', 'address': 2, 'failed': False}, {'name': 'G-to-D', 'cost': 10, 'capacity': 100, 'node': 'G', 'remote_node': 'D', 'address': 7, 'failed': False}, {'name': 'C-to-A', 'cost': 30, 'capacity': 150, 'node': 'C', 'remote_node': 'A', 'address': 3, 'failed': False}, {'name': 'D-to-F', 'cost': 10, 'capacity': 300, 'node': 'D', 'remote_node': 'F', 'address': 6, 'failed': False}, {'name': 'F-to-D', 'cost': 10, 'capacity': 300, 'node': 'F', 'remote_node': 'D', 'address': 6, 'failed': False}, {'name': 'D-to-G', 'cost': 10, 'capacity': 100, 'node': 'D', 'remote_node': 'G', 'address': 7, 'failed': False}, {'name': 'B-to-A', 'cost': 20, 'capacity': 125, 'node': 'B', 'remote_node': 'A', 'address': 4, 'failed': False}, {'name': 'D-to-B', 'cost': 20, 'capacity': 125, 'node': 'D', 'remote_node': 'B', 'address': 8, 'failed': False}, {'name': 'B-to-G', 'cost': 10, 'capacity': 100, 'node': 'B', 'remote_node': 'G', 'address': 9, 'failed': False}, {'name': 'A-to-C', 'cost': 30, 'capacity': 150, 'node': 'A', 'remote_node': 'C', 'address': 3, 'failed': False}, {'name': 'B-to-D', 'cost': 20, 'capacity': 125, 'node': 'B', 'remote_node': 'D', 'address': 8, 'failed': False}, {'name': 'G-to-B', 'cost': 10, 'capacity': 100, 'node': 'G', 'remote_node': 'B', 'address': 9, 'failed': False}, {'name': 'A-to-B', 'cost': 20, 'capacity': 125, 'node': 'A', 'remote_node': 'B', 'address': 4, 'failed': False}] model1.add_network_interfaces_from_list(int_list) model1.add_rsvp_lsp('A', 'D', 'lsp_a_d_1') model1.add_rsvp_lsp('A', 'D', 'lsp_a_d_2') model1.add_rsvp_lsp('A', 'D', 'lsp_a_d_3') model1.add_rsvp_lsp('A', 'D', 'lsp_a_d_4') demands = [{'source': 'A', 'dest': 'D', 'traffic': 100, 'name': 'dmd_a_d_3'}, {'source': 'A', 'dest': 'D', 'traffic': 70, 'name': 'dmd_a_d_2'}, {'source': 'A', 'dest': 'D', 'traffic': 80, 'name': 'dmd_a_d_1'}, {'source': 'F', 'dest': 'E', 'traffic': 400, 'name': 'dmd_f_e_1'}, {'source': 'A', 'dest': 'F', 'traffic': 40, 'name': 'dmd_a_f_1'}, ] for demand in demands: model1.add_demand(demand['source'], demand['dest'], demand['traffic'], demand['name']) model1.update_simulation() # All the paths for each LSP from Node('A') to Node('D') paths = [lsp.path for lsp in model1.rsvp_lsp_objects if lsp.source_node_object.name == 'A' and lsp.dest_node_object.name == 'D'] # Ensure all LSPs route self.assertNotIn("Unrouted", paths)
def test_lsp_failover(self): model1 = Model() model1.rsvp_lsp_objects = set() model1.demand_objects = set() int_list = [{ 'name': 'E-to-A', 'cost': 10, 'capacity': 300, 'node': 'E', 'remote_node': 'A', 'circuit_id': 1, 'failed': False }, { 'name': 'C-to-D', 'cost': 30, 'capacity': 150, 'node': 'C', 'remote_node': 'D', 'circuit_id': 5, 'failed': False }, { 'name': 'D-to-C', 'cost': 30, 'capacity': 150, 'node': 'D', 'remote_node': 'C', 'circuit_id': 5, 'failed': False }, { 'name': 'A-to-E', 'cost': 10, 'capacity': 300, 'node': 'A', 'remote_node': 'E', 'circuit_id': 1, 'failed': False }, { 'name': 'A-to-D', 'cost': 40, 'capacity': 20, 'node': 'A', 'remote_node': 'D', 'circuit_id': 2, 'failed': False }, { 'name': 'D-to-A', 'cost': 40, 'capacity': 20, 'node': 'D', 'remote_node': 'A', 'circuit_id': 2, 'failed': False }, { 'name': 'G-to-D', 'cost': 10, 'capacity': 100, 'node': 'G', 'remote_node': 'D', 'circuit_id': 7, 'failed': False }, { 'name': 'C-to-A', 'cost': 30, 'capacity': 150, 'node': 'C', 'remote_node': 'A', 'circuit_id': 3, 'failed': False }, { 'name': 'D-to-F', 'cost': 10, 'capacity': 300, 'node': 'D', 'remote_node': 'F', 'circuit_id': 6, 'failed': False }, { 'name': 'F-to-D', 'cost': 10, 'capacity': 300, 'node': 'F', 'remote_node': 'D', 'circuit_id': 6, 'failed': False }, { 'name': 'D-to-G', 'cost': 10, 'capacity': 100, 'node': 'D', 'remote_node': 'G', 'circuit_id': 7, 'failed': False }, { 'name': 'B-to-A', 'cost': 20, 'capacity': 125, 'node': 'B', 'remote_node': 'A', 'circuit_id': 4, 'failed': False }, { 'name': 'D-to-B', 'cost': 20, 'capacity': 125, 'node': 'D', 'remote_node': 'B', 'circuit_id': 8, 'failed': False }, { 'name': 'B-to-G', 'cost': 10, 'capacity': 100, 'node': 'B', 'remote_node': 'G', 'circuit_id': 9, 'failed': False }, { 'name': 'A-to-C', 'cost': 30, 'capacity': 150, 'node': 'A', 'remote_node': 'C', 'circuit_id': 3, 'failed': False }, { 'name': 'B-to-D', 'cost': 20, 'capacity': 125, 'node': 'B', 'remote_node': 'D', 'circuit_id': 8, 'failed': False }, { 'name': 'G-to-B', 'cost': 10, 'capacity': 100, 'node': 'G', 'remote_node': 'B', 'circuit_id': 9, 'failed': False }, { 'name': 'A-to-B', 'cost': 20, 'capacity': 125, 'node': 'A', 'remote_node': 'B', 'circuit_id': 4, 'failed': False }] model1.add_network_interfaces_from_list(int_list) model1.add_rsvp_lsp('A', 'D', 'lsp_a_d_1') model1.add_rsvp_lsp('A', 'D', 'lsp_a_d_2') model1.fail_interface('A-to-B', 'A') int_a_b = model1.get_interface_object('A-to-B', 'A') int_a_c = model1.get_interface_object('A-to-C', 'A') demands = [ { 'source': 'A', 'dest': 'D', 'traffic': 70, 'name': 'dmd_a_d_2' }, { 'source': 'A', 'dest': 'D', 'traffic': 80, 'name': 'dmd_a_d_1' }, { 'source': 'F', 'dest': 'E', 'traffic': 400, 'name': 'dmd_f_e_1' }, { 'source': 'A', 'dest': 'F', 'traffic': 40, 'name': 'dmd_a_f_1' }, ] for demand in demands: model1.add_demand(demand['source'], demand['dest'], demand['traffic'], demand['name']) model1.update_simulation() self.assertTrue(int_a_b.failed) # int_a_b should not have any LSPs lsps_on_int_a_b = [lsp for lsp in int_a_b.lsps(model1)] self.assertTrue(len(lsps_on_int_a_b) == 0) # int_a_c should have lsp_a_d_1 and lsp_a_d_2 lsp_names_on_int_a_c = [lsp.lsp_name for lsp in int_a_c.lsps(model1)] self.assertIn('lsp_a_d_1', lsp_names_on_int_a_c) self.assertIn('lsp_a_d_2', lsp_names_on_int_a_c) # reservable_bandwidth on int_a_c self.assertEqual(int_a_c.reserved_bandwidth, 150.0) self.assertEqual(int_a_c.reservable_bandwidth, 0.0)
def test_setup_bandwidth(self): model = Model() model.rsvp_lsp_objects = set([]) model.demand_objects = set([]) int_list = [{'name': 'E-to-A', 'cost': 10, 'capacity': 300, 'node': 'E', 'remote_node': 'A', 'address': 1, 'failed': False}, {'name': 'C-to-D', 'cost': 30, 'capacity': 150, 'node': 'C', 'remote_node': 'D', 'address': 5, 'failed': False}, {'name': 'D-to-C', 'cost': 30, 'capacity': 150, 'node': 'D', 'remote_node': 'C', 'address': 5, 'failed': False}, {'name': 'A-to-E', 'cost': 10, 'capacity': 300, 'node': 'A', 'remote_node': 'E', 'address': 1, 'failed': False}, {'name': 'A-to-D', 'cost': 40, 'capacity': 20, 'node': 'A', 'remote_node': 'D', 'address': 2, 'failed': False}, {'name': 'D-to-A', 'cost': 40, 'capacity': 20, 'node': 'D', 'remote_node': 'A', 'address': 2, 'failed': False}, {'name': 'G-to-D', 'cost': 10, 'capacity': 100, 'node': 'G', 'remote_node': 'D', 'address': 7, 'failed': False}, {'name': 'C-to-A', 'cost': 30, 'capacity': 150, 'node': 'C', 'remote_node': 'A', 'address': 3, 'failed': False}, {'name': 'D-to-F', 'cost': 10, 'capacity': 300, 'node': 'D', 'remote_node': 'F', 'address': 6, 'failed': False}, {'name': 'F-to-D', 'cost': 10, 'capacity': 300, 'node': 'F', 'remote_node': 'D', 'address': 6, 'failed': False}, {'name': 'D-to-G', 'cost': 10, 'capacity': 100, 'node': 'D', 'remote_node': 'G', 'address': 7, 'failed': False}, {'name': 'B-to-A', 'cost': 20, 'capacity': 125, 'node': 'B', 'remote_node': 'A', 'address': 4, 'failed': False}, {'name': 'D-to-B', 'cost': 20, 'capacity': 125, 'node': 'D', 'remote_node': 'B', 'address': 8, 'failed': False}, {'name': 'B-to-G', 'cost': 10, 'capacity': 100, 'node': 'B', 'remote_node': 'G', 'address': 9, 'failed': False}, {'name': 'A-to-C', 'cost': 30, 'capacity': 150, 'node': 'A', 'remote_node': 'C', 'address': 3, 'failed': False}, {'name': 'B-to-D', 'cost': 20, 'capacity': 125, 'node': 'B', 'remote_node': 'D', 'address': 8, 'failed': False}, {'name': 'G-to-B', 'cost': 10, 'capacity': 100, 'node': 'G', 'remote_node': 'B', 'address': 9, 'failed': False}, {'name': 'A-to-B', 'cost': 20, 'capacity': 125, 'node': 'A', 'remote_node': 'B', 'address': 4, 'failed': False}] model.add_network_interfaces_from_list(int_list) model.add_rsvp_lsp('A', 'D', 'lsp_a_d_1') model.add_rsvp_lsp('A', 'D', 'lsp_a_d_2') demands = [{'source': 'A', 'dest': 'D', 'traffic': 100, 'name': 'dmd_a_d_3'}, {'source': 'A', 'dest': 'D', 'traffic': 70, 'name': 'dmd_a_d_2'}, {'source': 'A', 'dest': 'D', 'traffic': 80, 'name': 'dmd_a_d_1'}, {'source': 'F', 'dest': 'E', 'traffic': 400, 'name': 'dmd_f_e_1'}, {'source': 'A', 'dest': 'F', 'traffic': 40, 'name': 'dmd_a_f_1'}, ] for demand in demands: model.add_demand(demand['source'], demand['dest'], demand['traffic'], demand['name']) lsp_a_d_1 = model.get_rsvp_lsp('A', 'D', 'lsp_a_d_1') lsp_a_d_2 = model.get_rsvp_lsp('A', 'D', 'lsp_a_d_2') model.update_simulation() self.assertEqual(lsp_a_d_1.setup_bandwidth, 125.0) self.assertEqual(lsp_a_d_2.setup_bandwidth, 125.0)
def test_int_bw(self): model = Model() model.rsvp_lsp_objects = set([]) model.demand_objects = set([]) int_list = [{ 'name': 'E-to-A', 'cost': 10, 'capacity': 300, 'node': 'E', 'remote_node': 'A', 'circuit_id': 1, 'failed': False }, { 'name': 'C-to-D', 'cost': 30, 'capacity': 150, 'node': 'C', 'remote_node': 'D', 'circuit_id': 5, 'failed': False }, { 'name': 'D-to-C', 'cost': 30, 'capacity': 150, 'node': 'D', 'remote_node': 'C', 'circuit_id': 5, 'failed': False }, { 'name': 'A-to-E', 'cost': 10, 'capacity': 300, 'node': 'A', 'remote_node': 'E', 'circuit_id': 1, 'failed': False }, { 'name': 'A-to-D', 'cost': 40, 'capacity': 20, 'node': 'A', 'remote_node': 'D', 'circuit_id': 2, 'failed': False }, { 'name': 'D-to-A', 'cost': 40, 'capacity': 20, 'node': 'D', 'remote_node': 'A', 'circuit_id': 2, 'failed': False }, { 'name': 'G-to-D', 'cost': 10, 'capacity': 100, 'node': 'G', 'remote_node': 'D', 'circuit_id': 7, 'failed': False }, { 'name': 'C-to-A', 'cost': 30, 'capacity': 150, 'node': 'C', 'remote_node': 'A', 'circuit_id': 3, 'failed': False }, { 'name': 'D-to-F', 'cost': 10, 'capacity': 300, 'node': 'D', 'remote_node': 'F', 'circuit_id': 6, 'failed': False }, { 'name': 'F-to-D', 'cost': 10, 'capacity': 300, 'node': 'F', 'remote_node': 'D', 'circuit_id': 6, 'failed': False }, { 'name': 'D-to-G', 'cost': 10, 'capacity': 100, 'node': 'D', 'remote_node': 'G', 'circuit_id': 7, 'failed': False }, { 'name': 'B-to-A', 'cost': 20, 'capacity': 125, 'node': 'B', 'remote_node': 'A', 'circuit_id': 4, 'failed': False }, { 'name': 'D-to-B', 'cost': 20, 'capacity': 125, 'node': 'D', 'remote_node': 'B', 'circuit_id': 8, 'failed': False }, { 'name': 'B-to-G', 'cost': 10, 'capacity': 100, 'node': 'B', 'remote_node': 'G', 'circuit_id': 9, 'failed': False }, { 'name': 'A-to-C', 'cost': 30, 'capacity': 150, 'node': 'A', 'remote_node': 'C', 'circuit_id': 3, 'failed': False }, { 'name': 'B-to-D', 'cost': 20, 'capacity': 125, 'node': 'B', 'remote_node': 'D', 'circuit_id': 8, 'failed': False }, { 'name': 'G-to-B', 'cost': 10, 'capacity': 100, 'node': 'G', 'remote_node': 'B', 'circuit_id': 9, 'failed': False }, { 'name': 'A-to-B', 'cost': 20, 'capacity': 125, 'node': 'A', 'remote_node': 'B', 'circuit_id': 4, 'failed': False }] model.add_network_interfaces_from_list(int_list) model.add_rsvp_lsp('A', 'D', 'lsp_a_d_1') model.add_rsvp_lsp('A', 'D', 'lsp_a_d_2') demands = [ { 'source': 'A', 'dest': 'D', 'traffic': 100, 'name': 'dmd_a_d_3' }, { 'source': 'A', 'dest': 'D', 'traffic': 70, 'name': 'dmd_a_d_2' }, { 'source': 'A', 'dest': 'D', 'traffic': 80, 'name': 'dmd_a_d_1' }, { 'source': 'F', 'dest': 'E', 'traffic': 400, 'name': 'dmd_f_e_1' }, { 'source': 'A', 'dest': 'F', 'traffic': 40, 'name': 'dmd_a_f_1' }, ] for demand in demands: model.add_demand(demand['source'], demand['dest'], demand['traffic'], demand['name']) int_a_c = model.get_interface_object('A-to-C', 'A') model.update_simulation() print("int_a_c reserved and reservable bw = {} and {}".format( int_a_c.reserved_bandwidth, int_a_c.reservable_bandwidth)) self.assertEqual(int_a_c.reserved_bandwidth, 125.0) self.assertEqual(int_a_c.reservable_bandwidth, 25.0)