Beispiel #1
0
    def test_lsp_failover(self):
        model1 = PerformanceModel()
        model1.rsvp_lsp_objects = set()
        model1.demand_objects = set()

        int_list = [{
            'name': 'E-to-A',
            'cost': 10,
            'capacity': 300,
            'node': 'E',
            'remote_node': 'A',
            'circuit_id': 1,
            'failed': False
        }, {
            'name': 'C-to-D',
            'cost': 30,
            'capacity': 150,
            'node': 'C',
            'remote_node': 'D',
            'circuit_id': 5,
            'failed': False
        }, {
            'name': 'D-to-C',
            'cost': 30,
            'capacity': 150,
            'node': 'D',
            'remote_node': 'C',
            'circuit_id': 5,
            'failed': False
        }, {
            'name': 'A-to-E',
            'cost': 10,
            'capacity': 300,
            'node': 'A',
            'remote_node': 'E',
            'circuit_id': 1,
            'failed': False
        }, {
            'name': 'A-to-D',
            'cost': 40,
            'capacity': 20,
            'node': 'A',
            'remote_node': 'D',
            'circuit_id': 2,
            'failed': False
        }, {
            'name': 'D-to-A',
            'cost': 40,
            'capacity': 20,
            'node': 'D',
            'remote_node': 'A',
            'circuit_id': 2,
            'failed': False
        }, {
            'name': 'G-to-D',
            'cost': 10,
            'capacity': 100,
            'node': 'G',
            'remote_node': 'D',
            'circuit_id': 7,
            'failed': False
        }, {
            'name': 'C-to-A',
            'cost': 30,
            'capacity': 150,
            'node': 'C',
            'remote_node': 'A',
            'circuit_id': 3,
            'failed': False
        }, {
            'name': 'D-to-F',
            'cost': 10,
            'capacity': 300,
            'node': 'D',
            'remote_node': 'F',
            'circuit_id': 6,
            'failed': False
        }, {
            'name': 'F-to-D',
            'cost': 10,
            'capacity': 300,
            'node': 'F',
            'remote_node': 'D',
            'circuit_id': 6,
            'failed': False
        }, {
            'name': 'D-to-G',
            'cost': 10,
            'capacity': 100,
            'node': 'D',
            'remote_node': 'G',
            'circuit_id': 7,
            'failed': False
        }, {
            'name': 'B-to-A',
            'cost': 20,
            'capacity': 125,
            'node': 'B',
            'remote_node': 'A',
            'circuit_id': 4,
            'failed': False
        }, {
            'name': 'D-to-B',
            'cost': 20,
            'capacity': 125,
            'node': 'D',
            'remote_node': 'B',
            'circuit_id': 8,
            'failed': False
        }, {
            'name': 'B-to-G',
            'cost': 10,
            'capacity': 100,
            'node': 'B',
            'remote_node': 'G',
            'circuit_id': 9,
            'failed': False
        }, {
            'name': 'A-to-C',
            'cost': 30,
            'capacity': 150,
            'node': 'A',
            'remote_node': 'C',
            'circuit_id': 3,
            'failed': False
        }, {
            'name': 'B-to-D',
            'cost': 20,
            'capacity': 125,
            'node': 'B',
            'remote_node': 'D',
            'circuit_id': 8,
            'failed': False
        }, {
            'name': 'G-to-B',
            'cost': 10,
            'capacity': 100,
            'node': 'G',
            'remote_node': 'B',
            'circuit_id': 9,
            'failed': False
        }, {
            'name': 'A-to-B',
            'cost': 20,
            'capacity': 125,
            'node': 'A',
            'remote_node': 'B',
            'circuit_id': 4,
            'failed': False
        }]

        model1.add_network_interfaces_from_list(int_list)
        model1.add_rsvp_lsp('A', 'D', 'lsp_a_d_1')
        model1.add_rsvp_lsp('A', 'D', 'lsp_a_d_2')
        model1.fail_interface('A-to-B', 'A')
        int_a_b = model1.get_interface_object('A-to-B', 'A')
        int_a_c = model1.get_interface_object('A-to-C', 'A')

        demands = [
            {
                'source': 'A',
                'dest': 'D',
                'traffic': 70,
                'name': 'dmd_a_d_2'
            },
            {
                'source': 'A',
                'dest': 'D',
                'traffic': 80,
                'name': 'dmd_a_d_1'
            },
            {
                'source': 'F',
                'dest': 'E',
                'traffic': 400,
                'name': 'dmd_f_e_1'
            },
            {
                'source': 'A',
                'dest': 'F',
                'traffic': 40,
                'name': 'dmd_a_f_1'
            },
        ]

        for demand in demands:
            model1.add_demand(demand['source'], demand['dest'],
                              demand['traffic'], demand['name'])

        model1.update_simulation()

        self.assertTrue(int_a_b.failed)

        # int_a_b should not have any LSPs
        lsps_on_int_a_b = [lsp for lsp in int_a_b.lsps(model1)]
        self.assertTrue(len(lsps_on_int_a_b) == 0)

        # int_a_c should have lsp_a_d_1 and lsp_a_d_2
        lsp_names_on_int_a_c = [lsp.lsp_name for lsp in int_a_c.lsps(model1)]
        self.assertIn('lsp_a_d_1', lsp_names_on_int_a_c)
        self.assertIn('lsp_a_d_2', lsp_names_on_int_a_c)

        # reservable_bandwidth on int_a_c
        self.assertEqual(int_a_c.reserved_bandwidth, 150.0)
        self.assertEqual(int_a_c.reservable_bandwidth, 0.0)
demands = [{'source': 'A', 'dest': 'B', 'traffic': 50},
           {'source': 'A', 'dest': 'F', 'traffic': 22},
           {'source': 'A', 'dest': 'E', 'traffic': 24},
           {'source': 'F', 'dest': 'E', 'traffic': 80},
           {'source': 'F', 'dest': 'B', 'traffic': 50},
           {'source': 'A', 'dest': 'D', 'traffic': 120}
           ]


source = 'A'
dest = 'B'

# Define a network model and load interfaces
model1 = PerformanceModel()
model1.add_network_interfaces_from_list(network_interfaces)
print('model1 is type', type(model1))
print()

# Assign lat/lon info to nodes
print('Assigning lat/lon info to nodes')
lat_lon_info = [(180, 20), (30, 40), (120, 50), (35, 67), (77, 88), (45, 56)]
node_names = [node.name for node in model1.node_objects]
counter = 0
for name in node_names:
    node = model1.get_node_object(name)
    lat, lon = lat_lon_info[counter]
    node.lat = lat
    node.lon = lon
    counter = counter + 1
print()
Beispiel #3
0
    def test_int_bw(self):

        model = PerformanceModel()
        model.rsvp_lsp_objects = set([])
        model.demand_objects = set([])

        int_list = [{
            'name': 'E-to-A',
            'cost': 10,
            'capacity': 300,
            'node': 'E',
            'remote_node': 'A',
            'circuit_id': 1,
            'failed': False
        }, {
            'name': 'C-to-D',
            'cost': 30,
            'capacity': 150,
            'node': 'C',
            'remote_node': 'D',
            'circuit_id': 5,
            'failed': False
        }, {
            'name': 'D-to-C',
            'cost': 30,
            'capacity': 150,
            'node': 'D',
            'remote_node': 'C',
            'circuit_id': 5,
            'failed': False
        }, {
            'name': 'A-to-E',
            'cost': 10,
            'capacity': 300,
            'node': 'A',
            'remote_node': 'E',
            'circuit_id': 1,
            'failed': False
        }, {
            'name': 'A-to-D',
            'cost': 40,
            'capacity': 20,
            'node': 'A',
            'remote_node': 'D',
            'circuit_id': 2,
            'failed': False
        }, {
            'name': 'D-to-A',
            'cost': 40,
            'capacity': 20,
            'node': 'D',
            'remote_node': 'A',
            'circuit_id': 2,
            'failed': False
        }, {
            'name': 'G-to-D',
            'cost': 10,
            'capacity': 100,
            'node': 'G',
            'remote_node': 'D',
            'circuit_id': 7,
            'failed': False
        }, {
            'name': 'C-to-A',
            'cost': 30,
            'capacity': 150,
            'node': 'C',
            'remote_node': 'A',
            'circuit_id': 3,
            'failed': False
        }, {
            'name': 'D-to-F',
            'cost': 10,
            'capacity': 300,
            'node': 'D',
            'remote_node': 'F',
            'circuit_id': 6,
            'failed': False
        }, {
            'name': 'F-to-D',
            'cost': 10,
            'capacity': 300,
            'node': 'F',
            'remote_node': 'D',
            'circuit_id': 6,
            'failed': False
        }, {
            'name': 'D-to-G',
            'cost': 10,
            'capacity': 100,
            'node': 'D',
            'remote_node': 'G',
            'circuit_id': 7,
            'failed': False
        }, {
            'name': 'B-to-A',
            'cost': 20,
            'capacity': 125,
            'node': 'B',
            'remote_node': 'A',
            'circuit_id': 4,
            'failed': False
        }, {
            'name': 'D-to-B',
            'cost': 20,
            'capacity': 125,
            'node': 'D',
            'remote_node': 'B',
            'circuit_id': 8,
            'failed': False
        }, {
            'name': 'B-to-G',
            'cost': 10,
            'capacity': 100,
            'node': 'B',
            'remote_node': 'G',
            'circuit_id': 9,
            'failed': False
        }, {
            'name': 'A-to-C',
            'cost': 30,
            'capacity': 150,
            'node': 'A',
            'remote_node': 'C',
            'circuit_id': 3,
            'failed': False
        }, {
            'name': 'B-to-D',
            'cost': 20,
            'capacity': 125,
            'node': 'B',
            'remote_node': 'D',
            'circuit_id': 8,
            'failed': False
        }, {
            'name': 'G-to-B',
            'cost': 10,
            'capacity': 100,
            'node': 'G',
            'remote_node': 'B',
            'circuit_id': 9,
            'failed': False
        }, {
            'name': 'A-to-B',
            'cost': 20,
            'capacity': 125,
            'node': 'A',
            'remote_node': 'B',
            'circuit_id': 4,
            'failed': False
        }]

        model.add_network_interfaces_from_list(int_list)
        model.add_rsvp_lsp('A', 'D', 'lsp_a_d_1')
        model.add_rsvp_lsp('A', 'D', 'lsp_a_d_2')

        demands = [
            {
                'source': 'A',
                'dest': 'D',
                'traffic': 100,
                'name': 'dmd_a_d_3'
            },
            {
                'source': 'A',
                'dest': 'D',
                'traffic': 70,
                'name': 'dmd_a_d_2'
            },
            {
                'source': 'A',
                'dest': 'D',
                'traffic': 80,
                'name': 'dmd_a_d_1'
            },
            {
                'source': 'F',
                'dest': 'E',
                'traffic': 400,
                'name': 'dmd_f_e_1'
            },
            {
                'source': 'A',
                'dest': 'F',
                'traffic': 40,
                'name': 'dmd_a_f_1'
            },
        ]

        for demand in demands:
            model.add_demand(demand['source'], demand['dest'],
                             demand['traffic'], demand['name'])

        int_a_c = model.get_interface_object('A-to-C', 'A')

        model.update_simulation()

        print("int_a_c reserved and reservable bw = {} and {}".format(
            int_a_c.reserved_bandwidth, int_a_c.reservable_bandwidth))
        self.assertEqual(int_a_c.reserved_bandwidth, 125.0)
        self.assertEqual(int_a_c.reservable_bandwidth, 25.0)
Beispiel #4
0
    def test_ecmp(self):

        model8 = PerformanceModel()
        model8.rsvp_lsp_objects = set([])
        model8.demand_objects = set([])

        int_list = [
            {
                "name": "E-to-A",
                "cost": 10,
                "capacity": 300,
                "node": "E",
                "remote_node": "A",
                "circuit_id": 1,
                "failed": False,
            },
            {
                "name": "C-to-D",
                "cost": 30,
                "capacity": 150,
                "node": "C",
                "remote_node": "D",
                "circuit_id": 5,
                "failed": False,
            },
            {
                "name": "D-to-C",
                "cost": 30,
                "capacity": 150,
                "node": "D",
                "remote_node": "C",
                "circuit_id": 5,
                "failed": False,
            },
            {
                "name": "A-to-E",
                "cost": 10,
                "capacity": 300,
                "node": "A",
                "remote_node": "E",
                "circuit_id": 1,
                "failed": False,
            },
            {
                "name": "A-to-D",
                "cost": 40,
                "capacity": 20,
                "node": "A",
                "remote_node": "D",
                "circuit_id": 2,
                "failed": False,
            },
            {
                "name": "D-to-A",
                "cost": 40,
                "capacity": 20,
                "node": "D",
                "remote_node": "A",
                "circuit_id": 2,
                "failed": False,
            },
            {
                "name": "G-to-D",
                "cost": 10,
                "capacity": 100,
                "node": "G",
                "remote_node": "D",
                "circuit_id": 7,
                "failed": False,
            },
            {
                "name": "C-to-A",
                "cost": 30,
                "capacity": 150,
                "node": "C",
                "remote_node": "A",
                "circuit_id": 3,
                "failed": False,
            },
            {
                "name": "D-to-F",
                "cost": 10,
                "capacity": 300,
                "node": "D",
                "remote_node": "F",
                "circuit_id": 6,
                "failed": False,
            },
            {
                "name": "F-to-D",
                "cost": 10,
                "capacity": 300,
                "node": "F",
                "remote_node": "D",
                "circuit_id": 6,
                "failed": False,
            },
            {
                "name": "D-to-G",
                "cost": 10,
                "capacity": 100,
                "node": "D",
                "remote_node": "G",
                "circuit_id": 7,
                "failed": False,
            },
            {
                "name": "B-to-A",
                "cost": 20,
                "capacity": 125,
                "node": "B",
                "remote_node": "A",
                "circuit_id": 4,
                "failed": False,
            },
            {
                "name": "D-to-B",
                "cost": 20,
                "capacity": 125,
                "node": "D",
                "remote_node": "B",
                "circuit_id": 8,
                "failed": False,
            },
            {
                "name": "B-to-G",
                "cost": 10,
                "capacity": 100,
                "node": "B",
                "remote_node": "G",
                "circuit_id": 9,
                "failed": False,
            },
            {
                "name": "A-to-C",
                "cost": 30,
                "capacity": 150,
                "node": "A",
                "remote_node": "C",
                "circuit_id": 3,
                "failed": False,
            },
            {
                "name": "B-to-D",
                "cost": 20,
                "capacity": 125,
                "node": "B",
                "remote_node": "D",
                "circuit_id": 8,
                "failed": False,
            },
            {
                "name": "G-to-B",
                "cost": 10,
                "capacity": 100,
                "node": "G",
                "remote_node": "B",
                "circuit_id": 9,
                "failed": False,
            },
            {
                "name": "A-to-B",
                "cost": 20,
                "capacity": 125,
                "node": "A",
                "remote_node": "B",
                "circuit_id": 4,
                "failed": False,
            },
        ]

        model8.add_network_interfaces_from_list(int_list)

        demands = [
            {
                "source": "A",
                "dest": "F",
                "traffic": 40,
                "name": "dmd_a_f_1"
            },
        ]

        for demand in demands:
            model8.add_demand(demand["source"], demand["dest"],
                              demand["traffic"], demand["name"])

        int_a_b = model8.get_interface_object("A-to-B", "A")
        int_b_d = model8.get_interface_object("B-to-D", "B")
        int_b_g = model8.get_interface_object("B-to-G", "B")
        int_g_d = model8.get_interface_object("G-to-D", "G")
        int_d_f = model8.get_interface_object("D-to-F", "D")
        int_a_c = model8.get_interface_object("A-to-C", "A")
        int_c_d = model8.get_interface_object("C-to-D", "C")
        int_a_d = model8.get_interface_object("A-to-D", "A")

        model8.update_simulation()

        self.assertEqual(int_a_b.traffic, 20)
        self.assertEqual(int_b_d.traffic, 10)
        self.assertEqual(int_d_f.traffic, 40)
        self.assertEqual(int_b_g.traffic, 10)
        self.assertEqual(int_g_d.traffic, 10)
        self.assertEqual(int_a_c.traffic, 0)
        self.assertEqual(int_c_d.traffic, 0)
        self.assertEqual(int_a_d.traffic, 20)
Beispiel #5
0
    def test_lsp_failover(self):
        model1 = PerformanceModel()
        model1.rsvp_lsp_objects = set()
        model1.demand_objects = set()

        int_list = [
            {
                "name": "E-to-A",
                "cost": 10,
                "capacity": 300,
                "node": "E",
                "remote_node": "A",
                "circuit_id": 1,
                "failed": False,
            },
            {
                "name": "C-to-D",
                "cost": 30,
                "capacity": 150,
                "node": "C",
                "remote_node": "D",
                "circuit_id": 5,
                "failed": False,
            },
            {
                "name": "D-to-C",
                "cost": 30,
                "capacity": 150,
                "node": "D",
                "remote_node": "C",
                "circuit_id": 5,
                "failed": False,
            },
            {
                "name": "A-to-E",
                "cost": 10,
                "capacity": 300,
                "node": "A",
                "remote_node": "E",
                "circuit_id": 1,
                "failed": False,
            },
            {
                "name": "A-to-D",
                "cost": 40,
                "capacity": 20,
                "node": "A",
                "remote_node": "D",
                "circuit_id": 2,
                "failed": False,
            },
            {
                "name": "D-to-A",
                "cost": 40,
                "capacity": 20,
                "node": "D",
                "remote_node": "A",
                "circuit_id": 2,
                "failed": False,
            },
            {
                "name": "G-to-D",
                "cost": 10,
                "capacity": 100,
                "node": "G",
                "remote_node": "D",
                "circuit_id": 7,
                "failed": False,
            },
            {
                "name": "C-to-A",
                "cost": 30,
                "capacity": 150,
                "node": "C",
                "remote_node": "A",
                "circuit_id": 3,
                "failed": False,
            },
            {
                "name": "D-to-F",
                "cost": 10,
                "capacity": 300,
                "node": "D",
                "remote_node": "F",
                "circuit_id": 6,
                "failed": False,
            },
            {
                "name": "F-to-D",
                "cost": 10,
                "capacity": 300,
                "node": "F",
                "remote_node": "D",
                "circuit_id": 6,
                "failed": False,
            },
            {
                "name": "D-to-G",
                "cost": 10,
                "capacity": 100,
                "node": "D",
                "remote_node": "G",
                "circuit_id": 7,
                "failed": False,
            },
            {
                "name": "B-to-A",
                "cost": 20,
                "capacity": 125,
                "node": "B",
                "remote_node": "A",
                "circuit_id": 4,
                "failed": False,
            },
            {
                "name": "D-to-B",
                "cost": 20,
                "capacity": 125,
                "node": "D",
                "remote_node": "B",
                "circuit_id": 8,
                "failed": False,
            },
            {
                "name": "B-to-G",
                "cost": 10,
                "capacity": 100,
                "node": "B",
                "remote_node": "G",
                "circuit_id": 9,
                "failed": False,
            },
            {
                "name": "A-to-C",
                "cost": 30,
                "capacity": 150,
                "node": "A",
                "remote_node": "C",
                "circuit_id": 3,
                "failed": False,
            },
            {
                "name": "B-to-D",
                "cost": 20,
                "capacity": 125,
                "node": "B",
                "remote_node": "D",
                "circuit_id": 8,
                "failed": False,
            },
            {
                "name": "G-to-B",
                "cost": 10,
                "capacity": 100,
                "node": "G",
                "remote_node": "B",
                "circuit_id": 9,
                "failed": False,
            },
            {
                "name": "A-to-B",
                "cost": 20,
                "capacity": 125,
                "node": "A",
                "remote_node": "B",
                "circuit_id": 4,
                "failed": False,
            },
        ]

        model1.add_network_interfaces_from_list(int_list)
        model1.add_rsvp_lsp("A", "D", "lsp_a_d_1")
        model1.add_rsvp_lsp("A", "D", "lsp_a_d_2")
        model1.fail_interface("A-to-B", "A")
        int_a_b = model1.get_interface_object("A-to-B", "A")
        int_a_c = model1.get_interface_object("A-to-C", "A")

        demands = [
            {
                "source": "A",
                "dest": "D",
                "traffic": 70,
                "name": "dmd_a_d_2"
            },
            {
                "source": "A",
                "dest": "D",
                "traffic": 80,
                "name": "dmd_a_d_1"
            },
            {
                "source": "F",
                "dest": "E",
                "traffic": 400,
                "name": "dmd_f_e_1"
            },
            {
                "source": "A",
                "dest": "F",
                "traffic": 40,
                "name": "dmd_a_f_1"
            },
        ]

        for demand in demands:
            model1.add_demand(demand["source"], demand["dest"],
                              demand["traffic"], demand["name"])

        model1.update_simulation()

        self.assertTrue(int_a_b.failed)

        # int_a_b should not have any LSPs
        lsps_on_int_a_b = [lsp for lsp in int_a_b.lsps(model1)]
        self.assertTrue(len(lsps_on_int_a_b) == 0)

        # int_a_c should have lsp_a_d_1 and lsp_a_d_2
        lsp_names_on_int_a_c = [lsp.lsp_name for lsp in int_a_c.lsps(model1)]
        self.assertIn("lsp_a_d_1", lsp_names_on_int_a_c)
        self.assertIn("lsp_a_d_2", lsp_names_on_int_a_c)

        # reservable_bandwidth on int_a_c
        self.assertEqual(int_a_c.reserved_bandwidth, 150.0)
        self.assertEqual(int_a_c.reservable_bandwidth, 0.0)
Beispiel #6
0
    def test_validate_lsp_routing(self):
        """
        Test that all 4 LSPs between A and D route
        """

        model1 = PerformanceModel()
        model1.rsvp_lsp_objects = set([])
        model1.demand_objects = set([])

        int_list = [
            {
                "name": "E-to-A",
                "cost": 10,
                "capacity": 300,
                "node": "E",
                "remote_node": "A",
                "circuit_id": 1,
                "failed": False,
            },
            {
                "name": "C-to-D",
                "cost": 30,
                "capacity": 150,
                "node": "C",
                "remote_node": "D",
                "circuit_id": 5,
                "failed": False,
            },
            {
                "name": "D-to-C",
                "cost": 30,
                "capacity": 150,
                "node": "D",
                "remote_node": "C",
                "circuit_id": 5,
                "failed": False,
            },
            {
                "name": "A-to-E",
                "cost": 10,
                "capacity": 300,
                "node": "A",
                "remote_node": "E",
                "circuit_id": 1,
                "failed": False,
            },
            {
                "name": "A-to-D",
                "cost": 40,
                "capacity": 20,
                "node": "A",
                "remote_node": "D",
                "circuit_id": 2,
                "failed": False,
            },
            {
                "name": "D-to-A",
                "cost": 40,
                "capacity": 20,
                "node": "D",
                "remote_node": "A",
                "circuit_id": 2,
                "failed": False,
            },
            {
                "name": "G-to-D",
                "cost": 10,
                "capacity": 100,
                "node": "G",
                "remote_node": "D",
                "circuit_id": 7,
                "failed": False,
            },
            {
                "name": "C-to-A",
                "cost": 30,
                "capacity": 150,
                "node": "C",
                "remote_node": "A",
                "circuit_id": 3,
                "failed": False,
            },
            {
                "name": "D-to-F",
                "cost": 10,
                "capacity": 300,
                "node": "D",
                "remote_node": "F",
                "circuit_id": 6,
                "failed": False,
            },
            {
                "name": "F-to-D",
                "cost": 10,
                "capacity": 300,
                "node": "F",
                "remote_node": "D",
                "circuit_id": 6,
                "failed": False,
            },
            {
                "name": "D-to-G",
                "cost": 10,
                "capacity": 100,
                "node": "D",
                "remote_node": "G",
                "circuit_id": 7,
                "failed": False,
            },
            {
                "name": "B-to-A",
                "cost": 20,
                "capacity": 125,
                "node": "B",
                "remote_node": "A",
                "circuit_id": 4,
                "failed": False,
            },
            {
                "name": "D-to-B",
                "cost": 20,
                "capacity": 125,
                "node": "D",
                "remote_node": "B",
                "circuit_id": 8,
                "failed": False,
            },
            {
                "name": "B-to-G",
                "cost": 10,
                "capacity": 100,
                "node": "B",
                "remote_node": "G",
                "circuit_id": 9,
                "failed": False,
            },
            {
                "name": "A-to-C",
                "cost": 30,
                "capacity": 150,
                "node": "A",
                "remote_node": "C",
                "circuit_id": 3,
                "failed": False,
            },
            {
                "name": "B-to-D",
                "cost": 20,
                "capacity": 125,
                "node": "B",
                "remote_node": "D",
                "circuit_id": 8,
                "failed": False,
            },
            {
                "name": "G-to-B",
                "cost": 10,
                "capacity": 100,
                "node": "G",
                "remote_node": "B",
                "circuit_id": 9,
                "failed": False,
            },
            {
                "name": "A-to-B",
                "cost": 20,
                "capacity": 125,
                "node": "A",
                "remote_node": "B",
                "circuit_id": 4,
                "failed": False,
            },
        ]

        model1.add_network_interfaces_from_list(int_list)
        model1.add_rsvp_lsp("A", "D", "lsp_a_d_1")
        model1.add_rsvp_lsp("A", "D", "lsp_a_d_2")
        model1.add_rsvp_lsp("A", "D", "lsp_a_d_3")
        model1.add_rsvp_lsp("A", "D", "lsp_a_d_4")

        demands = [
            {
                "source": "A",
                "dest": "D",
                "traffic": 100,
                "name": "dmd_a_d_3"
            },
            {
                "source": "A",
                "dest": "D",
                "traffic": 70,
                "name": "dmd_a_d_2"
            },
            {
                "source": "A",
                "dest": "D",
                "traffic": 80,
                "name": "dmd_a_d_1"
            },
            {
                "source": "F",
                "dest": "E",
                "traffic": 400,
                "name": "dmd_f_e_1"
            },
            {
                "source": "A",
                "dest": "F",
                "traffic": 40,
                "name": "dmd_a_f_1"
            },
        ]

        for demand in demands:
            model1.add_demand(demand["source"], demand["dest"],
                              demand["traffic"], demand["name"])

        model1.update_simulation()

        # All the paths for each LSP from Node('A') to Node('D')
        paths = [
            lsp.path for lsp in model1.rsvp_lsp_objects
            if lsp.source_node_object.name == "A"
            and lsp.dest_node_object.name == "D"
        ]

        # Ensure all LSPs route
        self.assertNotIn("Unrouted", paths)
    def test_int_bw(self):

        model = PerformanceModel()
        model.rsvp_lsp_objects = set([])
        model.demand_objects = set([])

        int_list = [
            {
                "name": "E-to-A",
                "cost": 10,
                "capacity": 300,
                "node": "E",
                "remote_node": "A",
                "circuit_id": 1,
                "failed": False,
            },
            {
                "name": "C-to-D",
                "cost": 30,
                "capacity": 150,
                "node": "C",
                "remote_node": "D",
                "circuit_id": 5,
                "failed": False,
            },
            {
                "name": "D-to-C",
                "cost": 30,
                "capacity": 150,
                "node": "D",
                "remote_node": "C",
                "circuit_id": 5,
                "failed": False,
            },
            {
                "name": "A-to-E",
                "cost": 10,
                "capacity": 300,
                "node": "A",
                "remote_node": "E",
                "circuit_id": 1,
                "failed": False,
            },
            {
                "name": "A-to-D",
                "cost": 40,
                "capacity": 20,
                "node": "A",
                "remote_node": "D",
                "circuit_id": 2,
                "failed": False,
            },
            {
                "name": "D-to-A",
                "cost": 40,
                "capacity": 20,
                "node": "D",
                "remote_node": "A",
                "circuit_id": 2,
                "failed": False,
            },
            {
                "name": "G-to-D",
                "cost": 10,
                "capacity": 100,
                "node": "G",
                "remote_node": "D",
                "circuit_id": 7,
                "failed": False,
            },
            {
                "name": "C-to-A",
                "cost": 30,
                "capacity": 150,
                "node": "C",
                "remote_node": "A",
                "circuit_id": 3,
                "failed": False,
            },
            {
                "name": "D-to-F",
                "cost": 10,
                "capacity": 300,
                "node": "D",
                "remote_node": "F",
                "circuit_id": 6,
                "failed": False,
            },
            {
                "name": "F-to-D",
                "cost": 10,
                "capacity": 300,
                "node": "F",
                "remote_node": "D",
                "circuit_id": 6,
                "failed": False,
            },
            {
                "name": "D-to-G",
                "cost": 10,
                "capacity": 100,
                "node": "D",
                "remote_node": "G",
                "circuit_id": 7,
                "failed": False,
            },
            {
                "name": "B-to-A",
                "cost": 20,
                "capacity": 125,
                "node": "B",
                "remote_node": "A",
                "circuit_id": 4,
                "failed": False,
            },
            {
                "name": "D-to-B",
                "cost": 20,
                "capacity": 125,
                "node": "D",
                "remote_node": "B",
                "circuit_id": 8,
                "failed": False,
            },
            {
                "name": "B-to-G",
                "cost": 10,
                "capacity": 100,
                "node": "B",
                "remote_node": "G",
                "circuit_id": 9,
                "failed": False,
            },
            {
                "name": "A-to-C",
                "cost": 30,
                "capacity": 150,
                "node": "A",
                "remote_node": "C",
                "circuit_id": 3,
                "failed": False,
            },
            {
                "name": "B-to-D",
                "cost": 20,
                "capacity": 125,
                "node": "B",
                "remote_node": "D",
                "circuit_id": 8,
                "failed": False,
            },
            {
                "name": "G-to-B",
                "cost": 10,
                "capacity": 100,
                "node": "G",
                "remote_node": "B",
                "circuit_id": 9,
                "failed": False,
            },
            {
                "name": "A-to-B",
                "cost": 20,
                "capacity": 125,
                "node": "A",
                "remote_node": "B",
                "circuit_id": 4,
                "failed": False,
            },
        ]

        model.add_network_interfaces_from_list(int_list)
        model.add_rsvp_lsp("A", "D", "lsp_a_d_1")
        model.add_rsvp_lsp("A", "D", "lsp_a_d_2")

        demands = [
            {"source": "A", "dest": "D", "traffic": 100, "name": "dmd_a_d_3"},
            {"source": "A", "dest": "D", "traffic": 70, "name": "dmd_a_d_2"},
            {"source": "A", "dest": "D", "traffic": 80, "name": "dmd_a_d_1"},
            {"source": "F", "dest": "E", "traffic": 400, "name": "dmd_f_e_1"},
            {"source": "A", "dest": "F", "traffic": 40, "name": "dmd_a_f_1"},
        ]

        for demand in demands:
            model.add_demand(
                demand["source"], demand["dest"], demand["traffic"], demand["name"]
            )

        int_a_c = model.get_interface_object("A-to-C", "A")

        model.update_simulation()

        print(
            "int_a_c reserved and reservable bw = {} and {}".format(
                int_a_c.reserved_bandwidth, int_a_c.reservable_bandwidth
            )
        )
        self.assertEqual(int_a_c.reserved_bandwidth, 125.0)
        self.assertEqual(int_a_c.reservable_bandwidth, 25.0)