Пример #1
0
 def test_isolation_1(self):
     f1 = Flow(3, "2")
     f2 = Flow(5, "4")
     fwg1 = FwGraph(6, 3, "2")
     fwg1.add_fw_rule(3, 1)
     fwg1.add_fw_rule(1, 2)
     fwg2 = FwGraph(6, 5, "4")
     fwg2.add_fw_rule(5, 4)
     fwgs = {f1: fwg1, f2: fwg2}
     p = IsolationProperty([f1, f2])
     self.assertTrue(p.check(fwgs))
Пример #2
0
 def test_reachable_3(self):
     f = Flow(0, "X")
     fwg = FwGraph(5, 0, "X")
     fwg.add_fw_rule(0, 1)
     fwg.add_fw_rule(1, 3)
     fwg.add_fw_rule(3, -1)
     p = ReachableProperty(f)
     self.assertTrue(p.check({f: fwg}))
Пример #3
0
 def test_egress(self):
     f = Flow(0, "X")
     fwg = FwGraph(4, 0, "X")
     fwg.add_fw_rule(0, 1)
     fwg.add_fw_rule(1, 2)
     fwg.add_fw_rule(2, -1)
     p = EgressProperty(f, 2)
     self.assertTrue(p.check({f: fwg}))
Пример #4
0
 def test_waypoint_1(self):
     f = Flow(3, "2")
     fwg = FwGraph(6, 3, "2")
     fwg.add_fw_rule(3, 1)
     fwg.add_fw_rule(1, 2)
     fwg.add_fw_rule(2, 5)
     fwgs = {f: fwg}
     p = WaypointProperty(f, 1)
     self.assertTrue(p.check(fwgs))
Пример #5
0
 def test_loop_2(self):
     f = Flow(0, "X")
     fwg = FwGraph(5, 0, "X")
     fwg.add_fw_rule(0, 1)
     fwg.add_fw_rule(1, 2)
     fwg.add_fw_rule(1, 3)
     fwg.add_fw_rule(3, -1)
     p = LoopProperty(f)
     self.assertFalse(p.check({f: fwg}))
Пример #6
0
 def test_path_length_2(self):
     f = Flow(0, "X")
     fwg = FwGraph(5, 0, "X")
     fwg.add_fw_rule(0, 1)
     fwg.add_fw_rule(1, 3)
     fwg.add_fw_rule(3, -1)
     fwg.add_fw_rule(1, 2)
     fwg.add_fw_rule(2, -1)
     p = PathLengthProperty(f, 2)
     self.assertTrue(p.check({f: fwg}))
Пример #7
0
 def test_loop(self):
     f = Flow(0, "X")
     fwg = FwGraph(5, 0, "X")
     fwg.add_fw_rule(0, 1)
     fwg.add_fw_rule(1, 2)
     fwg.add_fw_rule(2, 3)
     fwg.add_fw_rule(3, 4)
     fwg.add_fw_rule(3, 1)
     p = LoopProperty(f)
     self.assertTrue(p.check({f: fwg}))
Пример #8
0
 def _construct_fw_graph_decision_points(self, flow: Flow) -> tuple:
     """
     :return:  (FwGraph, list[int]). The first entry is the forwarding graph,
               the second entry are the decision points
     """
     fwg = FwGraph(self.problem.nof_nodes, flow.src, flow.dst)
     decision_points = []
     visited = [False] * self.problem.nof_nodes
     # putting None as next hop makes sure that the source of the flow becomes a decision point
     self._visit_construct_fw_graph(fwg, decision_points, visited, flow.src,
                                    None)
     return fwg, decision_points
Пример #9
0
 def test_balanced(self):
     f = Flow(0, "6")
     fwg = FwGraph(7, 0, "6")
     fwg.add_fw_rule(0, 1)
     fwg.add_fw_rule(1, 3)
     fwg.add_fw_rule(1, 2)
     fwg.add_fw_rule(3, 4)
     fwg.add_fw_rule(3, 5)
     fwg.add_fw_rule(2, 5)
     fwg.add_fw_rule(4, 6)
     fwg.add_fw_rule(5, 6)
     fwgs = {f: fwg}
     self.assertFalse(
         BalancedProperty([f], [1.0], [(4, 6), (1, 2)], 0.2).check(fwgs))
     self.assertTrue(
         BalancedProperty([f], [1.0], [(4, 6), (1, 5)], 0.25).check(fwgs))
     self.assertTrue(
         BalancedProperty([f], [1.0], [(1, 3), (2, 5)], 0.0).check(fwgs))
Пример #10
0
 def test_congestion(self):
     f = Flow(0, "6")
     fwg = FwGraph(7, 0, "6")
     fwg.add_fw_rule(0, 1)
     fwg.add_fw_rule(1, 3)
     fwg.add_fw_rule(1, 2)
     fwg.add_fw_rule(3, 4)
     fwg.add_fw_rule(3, 5)
     fwg.add_fw_rule(2, 5)
     fwg.add_fw_rule(4, 6)
     fwg.add_fw_rule(5, 6)
     fwgs = {f: fwg}
     p = CongestionProperty([f], [1.0], (4, 6), 0.25)
     link_load = p._get_load_for_links(fwgs)
     self.assertEqual(link_load[(1, 3)], 0.5)
     self.assertEqual(link_load[(3, 4)], 0.25)
     self.assertEqual(link_load[(5, 6)], 0.75)
     self.assertTrue(p.check(fwgs))