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_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 = Parallel_Link_Model(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:
            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_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 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_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)
Exemplo n.º 9
0
 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_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_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 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 = Parallel_Link_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_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)
Exemplo n.º 15
0
    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_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_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_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])
Exemplo n.º 20
0
    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_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_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])
Exemplo n.º 23
0
    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)
Exemplo n.º 24
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))
Exemplo n.º 25
0
 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_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_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_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])
Exemplo n.º 29
0
    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])
Exemplo n.º 30
0
 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)",
     )