def test_sin_cyclostationary_traffic_matrix(self): tms = fnss.sin_cyclostationary_traffic_matrix(self.G, 10, 0.2, gamma=0.3, log_psi=-0.3, delta=0.2, n=24, periods=2, max_u=0.9) self.assertEqual(48, len(tms)) self.assertAlmostEqual(0.9, max([max(fnss.link_loads(self.G, tm).values()) for tm in tms])) self.assertLessEqual(0, min([min(fnss.link_loads(self.G, tm).values()) for tm in tms]))
def test_static_traffic_matrix_parallel(self): # If number of edges is greater than 100, computation is parallelized G = fnss.full_mesh_topology(15) fnss.set_capacities_constant(G, 10, capacity_unit='Mbps') tm = fnss.static_traffic_matrix(G, 10, 8, max_u=0.9) self.assertAlmostEqual(0.9, max(fnss.link_loads(G, tm).values())) self.assertLessEqual(0, min(fnss.link_loads(G, tm).values()))
def test_static_traffic_matrix_partial_od_pairs(self): origin_nodes = [1, 2, 3] destination_nodes = [3, 4, 5] od_pairs = [(o, d) for o in origin_nodes for d in destination_nodes if o != d] tm = fnss.static_traffic_matrix(self.G, 10, 8, origin_nodes=origin_nodes, destination_nodes=destination_nodes, max_u=0.9) tm_od_pairs = tm.od_pairs() self.assertEqual(len(od_pairs), len(tm_od_pairs)) for od in od_pairs: self.assertTrue(od in tm_od_pairs) self.assertAlmostEqual(0.9, max(fnss.link_loads(self.G, tm).values())) self.assertLessEqual(0, min(fnss.link_loads(self.G, tm).values()))
def test_stationary_traffic_matrix(self): tms = fnss.stationary_traffic_matrix(self.G, mean=10, stddev=3.5, gamma=5, log_psi=-0.3, n=5, max_u=0.9) self.assertEqual(5, len(tms)) self.assertAlmostEqual( 0.9, max([max(fnss.link_loads(self.G, tm).values()) for tm in tms])) self.assertLessEqual( 0, min([min(fnss.link_loads(self.G, tm).values()) for tm in tms]))
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)])
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)])
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)])
def test_stationary_traffic_matrix(self): tms = fnss.stationary_traffic_matrix(self.G, mean=10, stddev=3.5, gamma=5, log_psi=-0.3, n=5, max_u=0.9) self.assertEqual(5, len(tms)) self.assertAlmostEqual(0.9, max([max(fnss.link_loads(self.G, tm).values()) for tm in tms])) self.assertLessEqual(0, min([min(fnss.link_loads(self.G, tm).values()) for tm in tms]))
def test_static_traffic_matrix(self): tm = fnss.static_traffic_matrix(self.G, 10, 8, max_u=0.9) self.assertAlmostEqual(0.9, max(fnss.link_loads(self.G, tm).values())) self.assertLessEqual(0, min(fnss.link_loads(self.G, tm).values()))