def test_for_bad_node_in_lsp_data(self): err_msg = "No Node with name Y in Model" with self.assertRaises(ModelException) as context: Model.load_model_file('test/model_bad_node_in_lsp.csv') self.assertIn(err_msg, context.exception.args[0])
def test_get_bad_dmd(self): model = Model.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 = Model.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_demands_non_failed_int(self): model = Model.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.demands(model) != [])
def test_ckt_non_failure(self): model = Model.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_equality(self): model = Model.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_remove_interface_from_srlg(self): model = Model.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_ckt_mismatch_int_capacity_file_load(self): err_msg = 'circuits_with_mismatched_interface_capacity' model = Model.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_duplicate_srlg_2(self): model = Model.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_failed_int_node_srlg(self): model = Model.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(self): model = Model.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 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 = Model(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 test_shortest_path(self): model = Model.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_get_unrouted_dmds(self): model = Model.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_demands_non_failed(self): model = Model.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_bad_ckt(self): model = Model.load_model_file('test/igp_routing_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_all_paths_needed_bw(self): model = Model.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_srlg_uniqueness_in_node_srlgs(self): model = Model.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) new_srlg = model.get_srlg_object('new_srlg') self.assertTrue(new_srlg in node_a.srlgs)
def test_get_bad_node(self): model = Model.load_model_file('test/igp_routing_topology.csv') model.update_simulation() err_msg = 'No node with name ZZ exists in the model' with self.assertRaises(ModelException) as context: model.get_node_object('ZZ') self.assertTrue(err_msg in context.exception.args[0])
def test_add_node_to_new_srlg_create(self): model = Model.load_model_file('test/igp_routing_topology.csv') node_a = model.get_node_object('A') node_a.add_to_srlg('new_srlg', model, create_if_not_present=True) srlg = model.get_srlg_object('new_srlg') self.assertIn(node_a, model.get_srlg_object('new_srlg').node_objects) self.assertIn(srlg, node_a.srlgs)
def test_legacy_model_repr(self): """ Tests the legacy Model class instantiation """ model = Model.load_model_file('test/model_test_topology.csv') self.assertEqual( model.__repr__(), 'PerformanceModel(Interfaces: 18, Nodes: 7, Demands: 4, RSVP_LSPs: 3)' )
def setUpClass(self): self.model = Model.load_model_file('test/model_test_topology_2.csv') self.lsp_a_d_1 = self.model.get_rsvp_lsp('A', 'D', 'lsp_a_d_1') self.lsp_e_a_1 = self.model.get_rsvp_lsp('E', 'A', 'lsp_e_a_1') self.int_a_d = self.model.get_interface_object('A-to-D', 'A') self.dmd_a_d_1 = self.model.get_demand_object('A', 'D', 'dmd_a_d_1') self.model.update_simulation()
def test_remove_node_bad_srlg(self): model = Model.load_model_file('test/igp_routing_topology.csv') node_a = model.get_node_object('A') err_msg = 'An SRLG with name bad_srlg does not exist in the Model' with self.assertRaises(ModelException) as context: node_a.remove_from_srlg('bad_srlg', model) self.assertTrue(err_msg in context.exception.args[0])
def test_traffic_failed_int(self): model = Model.load_model_file('test/igp_routing_topology.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_failed_ints_2(self): model = Model.load_model_file('test/model_test_topology.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') int_b_a = model.get_interface_object('B-to-A', 'B') failed_int_list = model.get_failed_interface_objects() self.assertEqual(set(failed_int_list), set([int_a_b, int_b_a]))
def test_get_ckt(self): model = Model.load_model_file('test/igp_routing_topology.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)
def test_int_name_change(self): model = Model.load_model_file('test/igp_routing_topology.csv') model.update_simulation() interface = model.get_interface_object('A-to-B', 'A') model.change_interface_name('A', 'A-to-B', 'A-to-B-changed') self.assertEqual(interface.name, 'A-to-B-changed')
def test_get_bad_lsp(self): model = Model.load_model_file('test/igp_routing_topology.csv') model.update_simulation() err_msg = "LSP with source node A, dest node B, and name bad_lsp does not exist in model" with self.assertRaises(ModelException) as context: model.get_rsvp_lsp('A', 'B', 'bad_lsp') self.assertIn(err_msg, context.exception.args[0])
def test_add_duplicate_lsp(self): model = Model.load_model_file('test/model_test_topology.csv') model.update_simulation() err_msg = 'already exists in rsvp_lsp_objects' with self.assertRaises(ModelException) as context: model.add_rsvp_lsp('F', 'E', 'lsp_f_e_1') self.assertIn(err_msg, context.exception.args[0])
def open_file(): """Opens the file that describes the Model and allows user to save a diagram of the network graph""" if selected_model_file.get() == '': selected_model_file.set( filedialog.askopenfilename(initialdir="/", title="Select file", filetypes=(("csv files", "*.csv"), ("all files", "*.*")))) global model selected_file_label = ttk.Label(label_frame, text="Network Model file is:") selected_file_label.grid(row=1, column=0, sticky='W') selected_file_display = ttk.Label(label_frame, text=' ' * 30) selected_file_display = ttk.Label(label_frame, text=selected_model_file.get()) selected_file_display.grid(row=6, column=0) if selected_model_file.get() != '': model = Model.load_model_file(selected_model_file.get()) model.update_simulation() model_status_label = ttk.Label(label_frame, text="Model is:") model_status_label.grid(row=8, column=0, sticky='W') model_file_display = ttk.Label(label_frame, text=model) model_file_display.grid(row=9, column=0, sticky='W') # Update the Node Explorer tab examine_selected_node() # Update the Demand Explorer tab examine_selected_demand() # Update the Interface Explorer tab examine_selected_interface() # Update the Path Explorer tab examine_paths() # Update the LSP Explorer tab examine_selected_lsp() # Create a button to produce a network graph graph_network_button = Button(label_frame) graph_network_button.grid(row=12, column=0, padx=5, pady=5, sticky='W') graph_network_button["text"] = "Push to create network graph" # Don't add the trailing () or this will execute immediately/automatically graph_network_button[ "command"] = create_interactive_network_graph_and_refresh if network_graph_file.get() != '': graph_label_text = "Graph file saved at: " + network_graph_file.get() graph_file_label = Label(label_frame, text=graph_label_text) graph_file_label.grid(row=13, column=0, sticky='W')