def test_for_bad_node_in_lsp_data(self): err_msg = "No Node with name Y in Model" with self.assertRaises(ModelException) as context: PerformanceModel.load_model_file('test/model_bad_node_in_lsp.csv') self.assertIn(err_msg, context.exception.args[0])
def test_interface_fields_missing_model_file_load(self): err_msg = "node_name, remote_node_name, name, cost, and capacity must be defined for line" with self.assertRaises(ModelException) as context: PerformanceModel.load_model_file( "test/interface_field_info_missing_routing_topology.csv" ) self.assertTrue(err_msg in err_msg in context.exception.args[0])
def test_traffic_non_failed_int(self): model = PerformanceModel.load_model_file('test/igp_routing_topology.csv') model.update_simulation() int_a_b = model.get_interface_object('A-to-B', 'A') self.assertTrue(int_a_b.traffic, 20)
def test_equality(self): model = PerformanceModel.load_model_file('test/igp_routing_topology.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_ckt_non_failure(self): model = PerformanceModel.load_model_file('test/igp_routing_topology.csv') model.update_simulation() ckt_1 = model.get_circuit_object_from_interface('A-to-B', 'A') self.assertFalse(ckt_1.failed(model))
def test_ckt_mismatch_int_capacity_file_load(self): err_msg = 'circuits_with_mismatched_interface_capacity' model = PerformanceModel.load_model_file( 'test/mismatched_ckt_int_capacity_topology_file.csv') with self.assertRaises(ModelException) as context: model.update_simulation() self.assertTrue(err_msg in context.exception.args[0][1][0].keys())
def test_remove_interface_from_srlg(self): model = PerformanceModel.load_model_file( "test/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 = PerformanceModel.load_model_file( "test/igp_routing_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_get_unfailed_ints_2(self): model = PerformanceModel.load_model_file( 'test/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()), 16)
def test_fail_node(self): model = PerformanceModel.load_model_file( 'test/model_test_topology.csv') model.update_simulation() model.fail_node('A') model.update_simulation() self.assertTrue(model.get_node_object('A').failed)
def test_demand_behavior(self): model = PerformanceModel.load_model_file( "test/igp_routing_topology.csv") model.update_simulation() dmd_a_f = model.get_demand_object("A", "F", "dmd_a_f_1") # Demand routes initially self.assertNotEqual(dmd_a_f.path, "Unrouted") # Demand should not route if source node is down model.fail_node("A") model.update_simulation() self.assertEqual(dmd_a_f.path, "Unrouted") # Demand should route when source node unfails model.unfail_node("A") model.update_simulation() self.assertNotEqual(dmd_a_f.path, "Unrouted") # Demand should not route when dest node fails model.fail_node("F") model.update_simulation() self.assertEqual(dmd_a_f.path, "Unrouted") # Demand should route when dest node unfails model.unfail_node("F") model.update_simulation() self.assertNotEqual(dmd_a_f.path, "Unrouted")
def test_failed_node_interfaces(self): model = PerformanceModel.load_model_file( 'test/model_test_topology.csv') model.update_simulation() model.fail_node('A') model.update_simulation() self.assertEqual(len(model.get_failed_interface_objects()), 8)
def test_model_load_perf_model(self): model = PerformanceModel.load_model_file( 'test/lsp_manual_metric_test_model.csv') model.update_simulation() 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') lsp_a_d_3 = model.get_rsvp_lsp('A', 'D', 'lsp_a_d_3') lsp_a_d_4 = model.get_rsvp_lsp('A', 'D', 'lsp_a_d_4') self.assertEqual(lsp_a_d_1.effective_metric(model), 5) self.assertEqual(lsp_a_d_1.manual_metric, 5) self.assertEqual(lsp_a_d_1.topology_metric(model), 40) self.assertEqual(lsp_a_d_1.configured_setup_bandwidth, 4) self.assertEqual(lsp_a_d_1.setup_bandwidth, 4) self.assertNotEqual(lsp_a_d_1.path, 'Unrouted') self.assertEqual(lsp_a_d_2.effective_metric(model), 10) self.assertEqual(lsp_a_d_2.manual_metric, 10) self.assertEqual(lsp_a_d_2.topology_metric(model), 40) self.assertNotEqual(lsp_a_d_2.path, 'Unrouted') self.assertEqual(lsp_a_d_3.effective_metric(model), 40) self.assertEqual(lsp_a_d_3.topology_metric(model), 40) self.assertEqual(lsp_a_d_3.manual_metric, 'not set') self.assertNotEqual(lsp_a_d_3.path, 'Unrouted') self.assertEqual(lsp_a_d_4.effective_metric(model), 40) self.assertEqual(lsp_a_d_4.manual_metric, 'not set') self.assertEqual(lsp_a_d_4.topology_metric(model), 40) self.assertEqual(lsp_a_d_4.configured_setup_bandwidth, 4) self.assertEqual(lsp_a_d_4.setup_bandwidth, 4) self.assertNotEqual(lsp_a_d_4.path, 'Unrouted')
def test_int_in_SRLG_failed_node(self): model = PerformanceModel.load_model_file( "test/igp_routing_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_failed_int_node_srlg(self): model = PerformanceModel.load_model_file( "test/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_bad_srlg_no_exception(self): model = PerformanceModel.load_model_file( "test/igp_routing_topology.csv") bad_srlg = model.get_srlg_object("bad_srlg", raise_exception=False) self.assertEqual(bad_srlg, None)
def test_get_ckt(self): model = PerformanceModel.load_model_file("test/igp_routing_topology.csv") model.update_simulation() ckt = model.get_circuit_object_from_interface("A-to-B", "A") self.assertIn(ckt, model.circuit_objects)
def test_model_load_perf_model(self): model = PerformanceModel.load_model_file( "test/lsp_manual_metric_test_model.csv") model.update_simulation() 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") lsp_a_d_3 = model.get_rsvp_lsp("A", "D", "lsp_a_d_3") lsp_a_d_4 = model.get_rsvp_lsp("A", "D", "lsp_a_d_4") self.assertEqual(lsp_a_d_1.effective_metric(model), 5) self.assertEqual(lsp_a_d_1.manual_metric, 5) self.assertEqual(lsp_a_d_1.topology_metric(model), 40) self.assertEqual(lsp_a_d_1.configured_setup_bandwidth, 4) self.assertEqual(lsp_a_d_1.setup_bandwidth, 4) self.assertNotEqual(lsp_a_d_1.path, "Unrouted") self.assertEqual(lsp_a_d_2.effective_metric(model), 10) self.assertEqual(lsp_a_d_2.manual_metric, 10) self.assertEqual(lsp_a_d_2.topology_metric(model), 40) self.assertNotEqual(lsp_a_d_2.path, "Unrouted") self.assertEqual(lsp_a_d_3.effective_metric(model), 40) self.assertEqual(lsp_a_d_3.topology_metric(model), 40) self.assertEqual(lsp_a_d_3.manual_metric, "not set") self.assertNotEqual(lsp_a_d_3.path, "Unrouted") self.assertEqual(lsp_a_d_4.effective_metric(model), 40) self.assertEqual(lsp_a_d_4.manual_metric, "not set") self.assertEqual(lsp_a_d_4.topology_metric(model), 40) self.assertEqual(lsp_a_d_4.configured_setup_bandwidth, 4) self.assertEqual(lsp_a_d_4.setup_bandwidth, 4) self.assertNotEqual(lsp_a_d_4.path, "Unrouted")
def test_interface_in_failed_srlg(self): model = PerformanceModel.load_model_file( 'test/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) self.assertFalse(int_a_b.failed) self.assertFalse(int_b_a.failed) model.fail_srlg('new_srlg') model.update_simulation() self.assertTrue(int_a_b.failed) self.assertTrue(int_b_a.failed)
def test_node_in_two_srlgs(self): model = PerformanceModel.load_model_file( 'test/igp_routing_topology.csv') node_a = model.get_node_object('A') model.update_simulation() node_a.add_to_srlg('new_srlg', model, create_if_not_present=True) node_a.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(node_a.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(node_a.failed)
def test_get_bad_dmd(self): model = PerformanceModel.load_model_file("test/igp_routing_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 = PerformanceModel.load_model_file( "test/igp_routing_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_duplicate_srlg(self): model = PerformanceModel.load_model_file( 'test/igp_routing_topology.csv') SRLG('new_srlg', model) err_msg = 'SRLG with name new_srlg already exists in Model' with self.assertRaises(ModelException) as context: SRLG('new_srlg', model) self.assertTrue(err_msg in context.exception.args[0])
def test_duplicate_srlg_2(self): model = PerformanceModel.load_model_file( "test/igp_routing_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_bad_dmd(self): model = PerformanceModel.load_model_file( 'test/igp_routing_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_shortest_path(self): model = PerformanceModel.load_model_file( 'test/lsp_configured_setup_bw_model.csv') model.update_simulation() lsp_a_d_3 = model.get_rsvp_lsp('A', 'D', 'lsp_a_d_3') self.assertEqual(len(lsp_a_d_3.path['interfaces']), 1) self.assertEqual(lsp_a_d_3.path['interfaces'][0]._key, ('A-to-D', 'A'))
def test_demands_non_failed(self): model = PerformanceModel.load_model_file('test/igp_routing_topology.csv') model.update_simulation() int_a_b = model.get_interface_object('A-to-B', 'A') dmd_a_f_1 = model.get_demand_object('A', 'F', 'dmd_a_f_1') self.assertEqual(int_a_b.demands(model), [dmd_a_f_1])
def test_get_unrouted_dmds(self): model = PerformanceModel.load_model_file("test/igp_routing_topology.csv") model.update_simulation() model.fail_node("D") model.update_simulation() dmd_a_f = model.get_demand_object("A", "F", "dmd_a_f_1") self.assertTrue(dmd_a_f, model.get_unrouted_demand_objects())
def test_config_setup_bw_model_load(self): model = PerformanceModel.load_model_file( 'test/lsp_configured_setup_bw_model.csv') model.update_simulation() self.assertEqual( model.__repr__(), 'PerformanceModel(Interfaces: 18, Nodes: 7, Demands: 4, RSVP_LSPs: 4)' )
def test_all_paths_needed_bw(self): model = PerformanceModel.load_model_file("test/model_test_topology.csv") model.update_simulation() all_paths = model.get_all_paths_reservable_bw("A", "D", False, 10) self.assertEqual(len(all_paths["path"]), 4) path_lengths = [len(path) for path in all_paths["path"]] path_lengths.sort() self.assertEqual(path_lengths, [1, 2, 2, 3])