예제 #1
0
 def test_validate_traffic_matrix_diff_units(self):
     topo = fnss.line_topology(2)
     fnss.set_capacities_constant(topo, 1, capacity_unit='Gbps')
     valid_tm = fnss.TrafficMatrix(volume_unit='Mbps')
     valid_tm.add_flow(0, 1, 999)
     self.assertTrue(fnss.validate_traffic_matrix(topo, valid_tm, validate_load=True))
     invalid_tm = fnss.TrafficMatrix(volume_unit='Mbps')
     invalid_tm.add_flow(0, 1, 1001)
     self.assertFalse(fnss.validate_traffic_matrix(topo, invalid_tm, validate_load=True))
예제 #2
0
    def test_link_loads_ecmp(self):
        topo = fnss.ring_topology(5)
        topo.add_edge(1, 3)
        fnss.set_capacities_constant(topo, 100, capacity_unit='Mbps')
        tm = fnss.TrafficMatrix(volume_unit='Mbps')
        tm.add_flow(0, 1, 20)
        tm.add_flow(1, 0, 30)
        tm.add_flow(0, 2, 40)
        tm.add_flow(1, 4, 70)
        rm = {
            0: {
                0: [[0]],
                1: [[0, 1]],
                2: [[0, 1, 2]],
                3: [[0, 1, 3], [0, 4, 3]],
                4: [[0, 4]]
            },
            1: {
                0: [[1, 0]],
                1: [[1]],
                2: [[1, 2]],
                3: [[1, 3]],
                4: [[1, 3, 4], [1, 0, 4]]
            },
            2: {
                0: [[2, 1, 0]],
                1: [[2, 1]],
                2: [[2]],
                3: [[2, 3]],
                4: [[2, 3, 4]]
            },
            3: {
                0: [[3, 1, 0], [3, 4, 0]],
                1: [[3, 1]],
                2: [[3, 2]],
                3: [[3]],
                4: [[3, 4]]
            },
            4: {
                0: [[4, 0]],
                1: [[4, 0, 1], [4, 3, 1]],
                2: [[4, 3, 2]],
                3: [[4, 3]],
                4: [[4]]
            }
        }

        load = fnss.link_loads(topo, tm, routing_matrix=rm, ecmp=True)
        self.assertAlmostEqual(0.6, load[(0, 1)])
        self.assertAlmostEqual(0.65, load[(1, 0)])
        self.assertAlmostEqual(0.4, load[(1, 2)])
        self.assertAlmostEqual(0.0, load[(2, 1)])
        self.assertAlmostEqual(0.35, load[(0, 4)])
        self.assertAlmostEqual(0.35, load[(3, 4)])
        self.assertAlmostEqual(0.0, load[(4, 3)])
        self.assertAlmostEqual(0.0, load[(4, 0)])
        self.assertAlmostEqual(0.0, load[(2, 1)])
        self.assertAlmostEqual(0.0, load[(2, 3)])
예제 #3
0
 def test_validate_traffic_matrix(self):
     topology = fnss.DirectedTopology()
     topology.add_path([1, 2, 3])
     topology.add_path([3, 2, 1])
     topology.add_edge(3, 4)
     fnss.set_capacities_constant(topology, 1, 'Mbps')
     flows_valid_load = {1: {3: 0.4}, 2: {4: 0.3}}
     flows_invalid_load = {1: {3: 0.4}, 2: {4: 0.7}}
     flows_invalid_routes = {4: {1: 0.4}}
     flows_invalid_pairs = {5: {2: 0.1}}
     self.assertTrue(
         fnss.validate_traffic_matrix(topology,
                                      fnss.TrafficMatrix(
                                          'Mbps', flows_valid_load),
                                      validate_load=False))
     self.assertTrue(
         fnss.validate_traffic_matrix(topology,
                                      fnss.TrafficMatrix(
                                          'Mbps', flows_valid_load),
                                      validate_load=True))
     self.assertTrue(
         fnss.validate_traffic_matrix(topology,
                                      fnss.TrafficMatrix(
                                          'Mbps', flows_invalid_load),
                                      validate_load=False))
     self.assertFalse(
         fnss.validate_traffic_matrix(topology,
                                      fnss.TrafficMatrix(
                                          'Mbps', flows_invalid_load),
                                      validate_load=True))
     self.assertFalse(
         fnss.validate_traffic_matrix(topology,
                                      fnss.TrafficMatrix(
                                          'Mbps', flows_invalid_routes),
                                      validate_load=False))
     self.assertFalse(
         fnss.validate_traffic_matrix(topology,
                                      fnss.TrafficMatrix(
                                          'Mbps', flows_invalid_routes),
                                      validate_load=True))
     self.assertFalse(
         fnss.validate_traffic_matrix(topology,
                                      fnss.TrafficMatrix(
                                          'Mbps', flows_invalid_pairs),
                                      validate_load=False))
     self.assertFalse(
         fnss.validate_traffic_matrix(topology,
                                      fnss.TrafficMatrix(
                                          'Mbps', flows_invalid_pairs),
                                      validate_load=True))
예제 #4
0
 def test_traffic_matrix_sequence_class(self):
     tms = fnss.TrafficMatrixSequence()
     tm1 = fnss.TrafficMatrix(volume_unit='Mbps')
     tm1.add_flow(1, 2, 1000)
     tm1.add_flow(1, 3, 1500)
     tm1.add_flow(3, 4, 4000)
     tm2 = fnss.TrafficMatrix(volume_unit='Mbps')
     tm2.add_flow(1, 2, 2000)
     tm2.add_flow(1, 3, 3500)
     tm2.add_flow(3, 4, 5000)
     tm3 = fnss.TrafficMatrix(volume_unit='Mbps')
     tm3.add_flow(1, 2, 5000)
     tm3.add_flow(1, 3, 6500)
     tm3.add_flow(3, 4, 7000)
     tms.append(tm1)
     tms.append(tm2)
     tms.append(tm3)
     self.assertEqual(1000, tms[0][(1, 2)])
     self.assertEqual(1000, tms[0].flow[1][2])
     self.assertEqual(1000, tms.get(0)[(1, 2)])
     self.assertEqual(1000, tms.get(0).flows()[(1, 2)])
     self.assertEqual(3, len(tms))
     del tms[0]
     self.assertEqual(2, len(tms))
예제 #5
0
 def test_link_loads(self):
     topo = fnss.ring_topology(5)
     fnss.set_capacities_constant(topo, 100, capacity_unit='Mbps')
     tm = fnss.TrafficMatrix(volume_unit='Mbps')
     tm.add_flow(0, 1, 20)
     tm.add_flow(1, 0, 30)
     tm.add_flow(0, 2, 40)
     tm.add_flow(1, 4, 70)
     tm.add_flow(4, 2, 50)
     load = fnss.link_loads(topo, tm)
     self.assertAlmostEqual(0.6, load[(0, 1)])
     self.assertAlmostEqual(1.0, load[(1, 0)])
     self.assertAlmostEqual(0.4, load[(1, 2)])
     self.assertAlmostEqual(0.0, load[(2, 1)])
     self.assertAlmostEqual(0.7, load[(0, 4)])
     self.assertAlmostEqual(0.5, load[(4, 3)])
예제 #6
0
 def test_traffic_matrix_class(self):
     tm = fnss.TrafficMatrix(volume_unit='Mbps')
     tm.add_flow(1, 2, 1000)
     tm.add_flow(1, 3, 1500)
     tm.add_flow(3, 'Four', 4000)
     tm[(4, 5)] = 3000
     tm[('Orig', 'Dest')] = 3000
     self.assertEqual(tm[(1, 3)], 1500)
     self.assertEqual(tm.flow[1][3], 1500)
     self.assertEqual(tm.flows()[(1, 3)], 1500)
     self.assertEqual(5, len(tm))
     flow = tm.pop_flow(1, 2)
     self.assertEqual(1000, flow)
     del tm[(1, 3)]
     self.assertEqual(3, len(tm))
     self.assertFalse(1 in tm.flow)
     self.assertFalse((1, 3) in tm)