def test_interface_fields_missing_model_file_load(self): err_msg = 'node_name, remote_node_name, name, cost, capacity, circuit_id must be defined for line' with self.assertRaises(ModelException) as context: Parallel_Link_Model.load_model_file( 'test/interface_field_info_missing_routing_topology_multidigraph.csv' ) self.assertTrue(err_msg in err_msg in context.exception.args[0])
def test_for_bad_node_in_lsp_data(self): err_msg = "No Node with name Y in Model" with self.assertRaises(ModelException) as context: Parallel_Link_Model.load_model_file( 'test/parallel_link_model_bad_node_in_lsp.csv') self.assertIn(err_msg, context.exception.args[0])
def test_mismatched_circuit_id(self): """ Check that each circuit_id value appears exactly twice in the model file """ msg = ( "Each circuit_id value must appear exactly twice; the following circuit_id values do not meet " "that criteria:") with self.assertRaises(ModelException) as context: Parallel_Link_Model.load_model_file( 'test/parallel_link_model_bad_circuit_id.csv') self.assertIn(msg, context.exception.args[0])
def test_failed_node_interfaces(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() model.fail_node('A') model.update_simulation() self.assertEqual(len(model.get_failed_interface_objects()), 10)
def test_fail_node(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() model.fail_node('A') model.update_simulation() self.assertTrue(model.get_node_object('A').failed)
def test_ckt_mismatch_int_capacity_file_load(self): err_msg = 'circuits_with_mismatched_interface_capacity' model = Parallel_Link_Model.load_model_file( 'test/mismatched_ckt_int_capacity_topology_parallel_links.csv') with self.assertRaises(ModelException) as context: model.update_simulation() self.assertTrue(err_msg in context.exception.args[0][1][0].keys())
def setUpClass(self): self.model = Parallel_Link_Model.load_model_file( 'test/test_rsvp_3rd_lsp_2_paths_parallel_links.csv') self.lsp_a_e_1 = self.model.get_rsvp_lsp('A', 'E', 'lsp_a_e_1') self.lsp_a_e_2 = self.model.get_rsvp_lsp('A', 'E', 'lsp_a_e_2') self.lsp_a_e_3 = self.model.get_rsvp_lsp('A', 'E', 'lsp_a_e_3') self.model.update_simulation()
def test_failed_int_node_srlg(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() int_a_b = model.get_interface_object('A-to-B', 'A') int_b_a = int_a_b.get_remote_interface(model) node_a = model.get_node_object('A') model.add_srlg('new_srlg') model.update_simulation() int_a_b.add_to_srlg('new_srlg', model) model.update_simulation() srlg = model.get_srlg_object('new_srlg') model.fail_node('A') model.fail_srlg('new_srlg') model.update_simulation() self.assertTrue(int_a_b.failed) self.assertTrue(int_b_a.failed) # Unfail the SRLG, int_a_b and int_b_a should stay failed model.unfail_srlg('new_srlg') model.update_simulation() self.assertFalse(srlg.failed) self.assertTrue(node_a.failed) self.assertTrue(int_a_b.failed) self.assertTrue(int_b_a.failed)
def test_get_unfailed_ints_2(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() model.fail_interface('A-to-B', 'A') model.update_simulation() self.assertEqual(len(model.get_unfailed_interface_objects()), 38)
def test_get_bad_srlg_no_exception(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') bad_srlg = model.get_srlg_object('bad_srlg', raise_exception=False) self.assertEqual(bad_srlg, None)
def test_complex_topology_demand_path_2(self): # Functional test for demand path across a topology where demand takes # multiple ECMP paths. Some paths have parallel links, the other paths # have multiple IGP shortcut LSPs model = Parallel_Link_Model.load_model_file( "test/igp_shortcuts_model_mult_lsps_in_path_parallel_links_2.csv") model.update_simulation() dmd_a_f = model.get_demand_object("A", "F", "dmd_a_f_1") int_a_g = model.get_interface_object("A-G", "A") int_g_f = model.get_interface_object("G-F", "G") int_g_f_2 = model.get_interface_object("G-F_2", "G") int_a_b = model.get_interface_object("A-B", "A") int_d_e = model.get_interface_object("D-E", "D") lsp_b_d_1 = model.get_rsvp_lsp("B", "D", "lsp_b_d_1") lsp_b_d_2 = model.get_rsvp_lsp("B", "D", "lsp_b_d_2") lsp_d_f_1 = model.get_rsvp_lsp("D", "F", "lsp_d_f_1") dmd_a_f_path_1 = [int_a_g, int_g_f] dmd_a_f_path_2 = [int_a_g, int_g_f_2] dmd_a_f_path_3 = [int_a_b, lsp_b_d_1, lsp_d_f_1] dmd_a_f_path_4 = [int_a_b, lsp_b_d_2, lsp_d_f_1] self.assertIn(dmd_a_f_path_1, dmd_a_f.path) self.assertIn(dmd_a_f_path_2, dmd_a_f.path) self.assertIn(dmd_a_f_path_3, dmd_a_f.path) self.assertIn(dmd_a_f_path_4, dmd_a_f.path) self.assertEqual(4, len(dmd_a_f.path)) self.assertEqual(80, int_d_e.utilization)
def test_int_in_SRLG_failed_node(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() int_a_b = model.get_interface_object('A-to-B', 'A') int_b_a = int_a_b.get_remote_interface(model) int_a_b.add_to_srlg('new_srlg', model, create_if_not_present=True) int_a_b.add_to_srlg('new_srlg_2', model, create_if_not_present=True) new_srlg = model.get_srlg_object('new_srlg') model.fail_node('A') model.fail_srlg('new_srlg') model.update_simulation() self.assertTrue(new_srlg.failed) self.assertTrue(int_a_b.failed) model.unfail_srlg('new_srlg') model.update_simulation() # int_a_b and int_b_a should stay failed since Node('A') is also failed self.assertTrue(int_a_b.failed) self.assertTrue(int_b_a.failed)
def test_implied_node(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') node_x = model.get_node_object('X') self.assertTrue(node_x in model.node_objects)
def test_remove_interface_from_srlg(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() int_a_b = model.get_interface_object('A-to-B', 'A') int_b_a = int_a_b.get_remote_interface(model) model.add_srlg('new_srlg') model.update_simulation() int_a_b.add_to_srlg('new_srlg', model) model.update_simulation() srlg = model.get_srlg_object('new_srlg') self.assertIn(int_a_b, srlg.interface_objects) self.assertIn(int_b_a, srlg.interface_objects) self.assertIn(srlg, int_a_b.srlgs) self.assertIn(srlg, int_b_a.srlgs) int_b_a.remove_from_srlg('new_srlg', model) model.update_simulation() self.assertNotIn(int_a_b, srlg.interface_objects) self.assertNotIn(int_b_a, srlg.interface_objects) self.assertNotIn(srlg, int_a_b.srlgs) self.assertNotIn(srlg, int_b_a.srlgs)
def test_int_in_two_SRLGs(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') int_a_b = model.get_interface_object('A-to-B', 'A') model.update_simulation() int_a_b.add_to_srlg('new_srlg', model, create_if_not_present=True) int_a_b.add_to_srlg('new_srlg_2', model, create_if_not_present=True) new_srlg = model.get_srlg_object('new_srlg') new_srlg_2 = model.get_srlg_object('new_srlg_2') model.fail_srlg('new_srlg') model.fail_srlg('new_srlg_2') model.update_simulation() self.assertTrue(new_srlg.failed) self.assertTrue(new_srlg_2.failed) self.assertTrue(int_a_b.failed) model.unfail_srlg('new_srlg') model.update_simulation() # node_a should stay failed since it's part of another SRLG # that is still failed self.assertTrue(int_a_b.failed)
def test_duplicate_srlg_2(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.add_srlg('new_srlg') err_msg = 'SRLG with name new_srlg already exists in Model' with self.assertRaises(ModelException) as context: model.add_srlg('new_srlg') self.assertTrue(err_msg in context.exception.args[0])
def test_get_ckt(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() ckt = model.get_circuit_object_from_interface('A-to-B', 'A') self.assertIn(ckt, model.circuit_objects)
def test_equality(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology_igp_only.csv') model.update_simulation() ckt_1 = model.get_circuit_object_from_interface('A-to-B', 'A') int_a, int_b = ckt_1.get_circuit_interfaces(model) self.assertNotEqual(int_a, int_b)
def test_get_bad_dmd(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() with self.assertRaises(ModelException) as context: model.get_demand_object('F', 'A', 'bad_demand') self.assertIn('no matching demand', context.exception.args[0])
def test_get_bad_srlg(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') err_msg = 'No SRLG with name bad_srlg exists in Model' with self.assertRaises(ModelException) as context: model.get_srlg_object('bad_srlg') self.assertTrue(err_msg in context.exception.args[0])
def test_ckt_non_failure(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology_igp_only.csv') model.update_simulation() ckt_1 = model.get_circuit_object_from_interface('A-to-B', 'A') self.assertFalse(ckt_1.failed(model))
def test_traffic_non_failed_int(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology_igp_only.csv') model.update_simulation() int_b_e = model.get_interface_object('B-to-E', 'B') self.assertTrue(int_b_e.traffic, 10)
def test_parallel_link_model_repr(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.add_demand('A', 'B', 40, 'dmd_a_b') model.update_simulation() self.assertEqual( self.model.__repr__(), 'FlexModel(Interfaces: 40, Nodes: 10, Demands: 15, RSVP_LSPs: 4)')
def test_bad_ckt(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() with self.assertRaises(ModelException) as context: model.get_circuit_object_from_interface('A-to-Z', 'A') self.assertTrue( 'specified interface does not exist' in context.exception.args[0])
def test_get_unrouted_dmds(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() model.fail_node('X') model.update_simulation() dmd_a_y = model.get_demand_object('A', 'Y', 'dmd_a_y_1') self.assertTrue(dmd_a_y, model.get_unrouted_demand_objects())
def test_all_paths_needed_bw(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() all_paths = model.get_all_paths_reservable_bw('A', 'D', False, 3, 105) self.assertEqual(len(all_paths['path']), 1) path_lengths = [len(path) for path in all_paths['path']] path_lengths.sort() self.assertEqual(path_lengths, [2])
def test_parallel_link_model_repr(self): model = Parallel_Link_Model.load_model_file( "test/parallel_link_model_test_topology.csv") model.add_demand("A", "B", 40, "dmd_a_b") model.update_simulation() self.assertEqual( self.model.__repr__(), "FlexModel(Interfaces: 40, Nodes: 10, Demands: 15, RSVP_LSPs: 4)", )
def test_demands_non_failed(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology_igp_only.csv') model.update_simulation() int_b_e = model.get_interface_object('B-to-E', 'B') dmd_a_e_1 = model.get_demand_object('A', 'E', 'dmd_a_e_1') self.assertEqual(int_b_e.demands(model), [dmd_a_e_1])
def test_traffic_failed_int(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology_igp_only.csv') model.update_simulation() model.fail_interface('A-to-B', 'A') model.update_simulation() int_a_b = model.get_interface_object('A-to-B', 'A') self.assertEqual(int_a_b.traffic, 'Down')
def test_get_ckt(self): model = Parallel_Link_Model.load_model_file( 'test/parallel_link_model_test_topology_igp_only.csv') model.update_simulation() int_a_b = model.get_interface_object('A-to-B', 'A') ckt1 = model.get_circuit_object_from_interface('A-to-B', 'A') ckt2 = int_a_b.get_circuit_object(model) self.assertEqual(ckt1, ckt2)