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 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_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 = FlexModel( 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 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)
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 = 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([]))
def test_init_fail_neg_capacity(self): with self.assertRaises(ModelException): Interface(name='inerfaceA-to-B', cost=4, capacity=-1, node_object=self.node_a, remote_node_object=self.node_b, address=1)
def test_init_fail_neg_cost(self): with self.assertRaises(ModelException): Interface(name='inerfaceA-to-B', cost=-1, capacity=100, node_object=self.node_a, remote_node_object=self.node_b, circuit_id=1)
def test_demand_on_lsp(self): """ Ensure the demand takes an available LSP :return: """ 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_b = Demand(node_a, node_b, traffic=10) lsp_a_b = RSVP_LSP(source_node_object=node_a, dest_node_object=node_b, lsp_name="lsp_a_b") model = FlexModel( interface_objects=set([interface_a, interface_b]), node_objects=set([node_a, node_b, node_d]), demand_objects=set([dmd_a_b]), rsvp_lsp_objects=set([lsp_a_b]), ) model.update_simulation() self.assertEqual( str(dmd_a_b.path), "[[RSVP_LSP(source = nodeA, dest = nodeB, lsp_name = 'lsp_a_b')]]", )
def test_not_equal(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') circuit_id = int_a_b.circuit_id node_a_prime = Node('A') node_b_prime = Node('B') int_a_b_prime = Interface('A-to-B', 20, 125, node_a_prime, node_b_prime, circuit_id) self.assertFalse(int_a_b == int_a_b_prime)
def test_non_unique_interface_name(self): model = FlexModel.load_model_file('test/parallel_link_model_test_topology.csv') model.update_simulation() node_f = model.get_node_object('F') node_b = model.get_node_object('B') new_int = Interface('F-to-B', 100, 100, node_f, node_b, 80) model.interface_objects.add(new_int) err_msg = "No matching Interface Object found" with self.assertRaises(ModelException) as context: model.update_simulation() self.assertIn(err_msg, context.exception.args[0])
def test_int_not_in_ckt(self): model = Model.load_model_file('test/igp_routing_topology.csv') model.update_simulation() node_f = model.get_node_object('F') node_b = model.get_node_object('B') new_int = Interface('F-to-B', 100, 100, node_f, node_b, 80) model.interface_objects.add(new_int) err_msg = "WARNING: These interfaces were not matched into a circuit [('F', 'B', {'cost': 100})]" with self.assertRaises(ModelException) as context: model.update_simulation() self.assertIn(err_msg, context.exception.args[0])
def test_add_duplicate_int(self): model = Model.load_model_file('test/igp_routing_topology.csv') model.update_simulation() node_a = model.get_node_object('A') node_b = model.get_node_object('B') duplicate_int = Interface('A-to-B', 100, 100, node_a, node_b, 80) model.interface_objects.add(duplicate_int) err_msg = "Interface names must be unique per node." with self.assertRaises(ModelException) as context: model.update_simulation() self.assertIn(err_msg, context.exception.args[0])
def test_int_not_in_ckt(self): model = FlexModel.load_model_file('test/parallel_link_model_test_topology.csv') model.update_simulation() node_f = model.get_node_object('F') node_x = model.get_node_object('X') new_int = Interface('F-to-X', 100, 100, node_f, node_x, 90) model.interface_objects.add(new_int) err_msg = "WARNING: These interfaces were not matched" with self.assertRaises(ModelException) as context: model.update_simulation() self.assertIn(err_msg, context.exception.args[0])
def test_not_equal(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') address = int_a_b.address node_a_prime = Node('A') node_b_prime = Node('B') int_a_b_prime = Interface('A-to-B', 20, 125, node_a_prime, node_b_prime, address) self.assertFalse(int_a_b == int_a_b_prime)
def test_add_duplicate_int(self): model = PerformanceModel.load_model_file("test/igp_routing_topology.csv") model.update_simulation() node_a = model.get_node_object("A") node_b = model.get_node_object("B") duplicate_int = Interface("A-to-B", 100, 125, node_a, node_b, 80) model.interface_objects.add(duplicate_int) err_msg = "multiple links between nodes detected; not allowed in Model object(use Parallel_Link_Model)" with self.assertRaises(ModelException) as context: model.update_simulation() self.assertIn(err_msg, context.exception.args[0][1][0].keys())
def test_demand_on_lsp(self): """ Ensure the demand takes an available LSP :return: """ 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, address=1) interface_b = Interface(name='inerfaceB-to-A', cost=4, capacity=100, node_object=node_b, remote_node_object=node_a, address=1) dmd_a_b = Demand(node_a, node_b, traffic=10) lsp_a_b = RSVP_LSP(source_node_object=node_a, dest_node_object=node_b, lsp_name='lsp_a_b') model = Model(interface_objects=set([interface_a, interface_b]), node_objects=set([node_a, node_b, node_d]), demand_objects=set([dmd_a_b]), rsvp_lsp_objects=set([lsp_a_b])) model.update_simulation() self.assertEqual( str(dmd_a_b.path), "[RSVP_LSP(source = nodeA, dest = nodeB, lsp_name = 'lsp_a_b')]")
def test_duplicate_interface(self): model = FlexModel.load_model_file('test/parallel_link_model_test_topology.csv') model.update_simulation() node_a = model.get_node_object('A') node_b = model.get_node_object('B') int_a_b = Interface('A-to-B', 4, 100, node_a, node_b, 67) err_msg = "Interface names must be unique per node" model.interface_objects.add(int_a_b) with self.assertRaises(ModelException) as context: model._unique_interface_per_node() self.assertIn(err_msg, context.exception.args[0])
def test_duplicate_interface(self): model = FlexModel.load_model_file( 'test/parallel_link_model_test_topology.csv') model.update_simulation() node_a = model.get_node_object('A') node_b = model.get_node_object('B') int_a_b = Interface('A-to-B', 4, 100, node_a, node_b, 67) err_msg = "No matching Interface Object found: source node B, dest node A circuit_id 67" model.interface_objects.add(int_a_b) with self.assertRaises(ModelException) as context: model.update_simulation() self.assertIn(err_msg, context.exception.args[0])
def test_int_not_in_ckt(self): model = PerformanceModel.load_model_file("test/igp_routing_topology.csv") model.update_simulation() node_f = model.get_node_object("F") node_b = model.get_node_object("B") new_int = Interface("F-to-B", 100, 100, node_f, node_b, 80) model.interface_objects.add(new_int) err_msg = ( "WARNING: These interfaces were not matched into a circuit [('F', 'B', {" ) with self.assertRaises(ModelException) as context: model.update_simulation() self.assertIn(err_msg, context.exception.args[0])
def test_add_orphan_interface(self): """ Tests adding an unpaired Interface to the model's interface_objects set """ model = FlexModel.load_model_file('test/parallel_link_model_test_topology.csv') model.update_simulation() node_a = model.get_node_object('A') node_b = model.get_node_object('B') orphan_int = Interface('A-to-B', 100, 100, node_a, node_b, circuit_id=80) model.interface_objects.add(orphan_int) err_msg = "No matching Interface Object found" with self.assertRaises(ModelException) as context: model.update_simulation() self.assertIn(err_msg, context.exception.args[0])
def test_bad_int_cost(self): with self.assertRaises(ModelException) as context: (Interface('test_int', -5, 40, self.node_a, self.node_b, 50)) self.assertTrue('Interface cost cannot be less than 1' in context.exception.args[0])