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_unroutable_demand(self): node_a = Node(name='nodeA', lat=0, lon=0) node_b = Node(name='nodeB', lat=0, lon=0) node_d = Node(name='nodeD') interface_a = Interface(name='inerfaceA-to-B', cost=4, capacity=100, node_object=node_a, remote_node_object=node_b, circuit_id=1) interface_b = Interface(name='inerfaceB-to-A', cost=4, capacity=100, node_object=node_b, remote_node_object=node_a, circuit_id=1) dmd_a_d = Demand(node_a, node_d, traffic=10) model = PerformanceModel(interface_objects=set( [interface_a, interface_b]), node_objects=set([node_a, node_b, node_d]), demand_objects=set([dmd_a_d]), rsvp_lsp_objects=set([])) model.update_simulation() self.assertEqual(dmd_a_d.path, 'Unrouted')
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_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_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_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_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_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 setUpClass(self): self.maxDiff = None self.node_a = Node(name='nodeA', lat=0, lon=0) self.node_b = Node(name='nodeB', lat=0, lon=0) self.interface_a = Interface(name='inerfaceA-to-B', cost=4, capacity=100, node_object=self.node_a, remote_node_object=self.node_b, circuit_id=1) self.interface_b = Interface(name='inerfaceB-to-A', cost=4, capacity=100, node_object=self.node_b, remote_node_object=self.node_a, circuit_id=1) self.rsvp_lsp_a = RSVP_LSP(source_node_object=self.node_a, dest_node_object=self.node_b, lsp_name='A-to-B') self.model = PerformanceModel( interface_objects=set([self.interface_a, self.interface_b]), node_objects=set([self.node_a, self.node_b]), demand_objects=set([]), rsvp_lsp_objects=set([self.rsvp_lsp_a])) self.demand = Demand(source_node_object=self.node_a, dest_node_object=self.node_b, traffic=10, name='A-to-B')
def setUpClass(self): self.maxDiff = None self.node_a = Node(name="nodeA", lat=0, lon=0) self.node_b = Node(name="nodeB", lat=0, lon=0) self.interface_a = Interface( name="inerfaceA-to-B", cost=4, capacity=100, node_object=self.node_a, remote_node_object=self.node_b, circuit_id=1, ) self.interface_b = Interface( name="inerfaceB-to-A", cost=4, capacity=100, node_object=self.node_b, remote_node_object=self.node_a, circuit_id=1, ) self.model = PerformanceModel( interface_objects=set([self.interface_a, self.interface_b]), node_objects=set([self.node_a, self.node_b]), demand_objects=set([]), rsvp_lsp_objects=set([]), ) self.circuit = Circuit(self.interface_a, self.interface_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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])
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_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())