2 # -*- coding: utf-8 -*-
4 from nepi.util.constants import STATUS_FINISHED
5 from nepi.testbeds import ns3
13 class Ns3ExecuteTestCase(unittest.TestCase):
15 self.root_dir = tempfile.mkdtemp()
17 @test_util.skipUnless(test_util.ns3_usable(),
18 "Test requires working ns-3 bindings")
19 def test_run_ping_if(self):
20 testbed_version = "3_9_RC3"
21 instance = ns3.TestbedInstance(testbed_version)
22 instance.configure("homeDirectory", self.root_dir)
23 instance.create(2, "ns3::Node")
24 instance.create(3, "ns3::Ipv4L3Protocol")
25 instance.create(4, "ns3::ArpL3Protocol")
26 instance.create(5, "ns3::Icmpv4L4Protocol")
27 instance.create(6, "ns3::UdpL4Protocol")
28 instance.connect(2, "protos", 3, "node")
29 instance.connect(2, "protos", 4, "node")
30 instance.connect(2, "protos", 5, "node")
31 instance.connect(2, "protos", 6, "node")
32 instance.create(7, "ns3::PointToPointNetDevice")
33 instance.create(8, "ns3::DropTailQueue")
34 instance.connect(2, "devs", 7, "node")
35 instance.connect(7, "queue", 8, "dev")
36 instance.add_trace(7, "P2PPcapTrace")
37 instance.add_address(7, "10.0.0.1", 24, None)
39 instance.create(9, "ns3::Node")
40 instance.create(10, "ns3::Ipv4L3Protocol")
41 instance.create(11, "ns3::ArpL3Protocol")
42 instance.create(12, "ns3::Icmpv4L4Protocol")
43 instance.create(13, "ns3::UdpL4Protocol")
44 instance.connect(9, "protos", 10, "node")
45 instance.connect(9, "protos", 11, "node")
46 instance.connect(9, "protos", 12, "node")
47 instance.connect(9, "protos", 13, "node")
48 instance.create(14, "ns3::PointToPointNetDevice")
49 instance.create(15, "ns3::DropTailQueue")
50 instance.connect(9, "devs", 14, "node")
51 instance.connect(14, "queue", 15, "dev")
52 instance.add_trace(14, "P2PPcapTrace")
53 instance.add_address(14, "10.0.0.2", 24, None)
55 instance.create(16, "ns3::PointToPointChannel")
56 instance.connect(7, "chan", 16, "dev2")
57 instance.connect(14, "chan", 16, "dev2")
59 instance.create(17, "ns3::V4Ping")
60 instance.create_set(17, "Remote", "10.0.0.2")
61 instance.create_set(17, "StartTime", "0s")
62 instance.create_set(17, "StopTime", "10s")
63 instance.create_set(17, "Verbose", True)
64 instance.connect(17, "node", 2, "apps")
69 instance.do_configure()
71 while instance.status(17) != STATUS_FINISHED:
73 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
75 --- 10.0.0.2 ping statistics ---
76 1 packets transmitted, 1 received, 0% packet loss, time 0ms
78 #self.assertTrue(ping_result.startswith(comp_result))
82 @test_util.skipUnless(test_util.ns3_usable(),
83 "Test requires working ns-3 bindings")
84 def test_run_ping_routing(self):
85 testbed_version = "3_9_RC3"
86 instance = ns3.TestbedInstance(testbed_version)
87 instance.configure("homeDirectory", self.root_dir)
88 instance.create(2, "ns3::Node")
89 instance.create(3, "ns3::Ipv4L3Protocol")
90 instance.create(4, "ns3::ArpL3Protocol")
91 instance.create(5, "ns3::Icmpv4L4Protocol")
92 instance.create(6, "ns3::UdpL4Protocol")
93 instance.connect(2, "protos", 3, "node")
94 instance.connect(2, "protos", 4, "node")
95 instance.connect(2, "protos", 5, "node")
96 instance.connect(2, "protos", 6, "node")
97 instance.create(7, "ns3::PointToPointNetDevice")
98 instance.create(8, "ns3::DropTailQueue")
99 instance.connect(2, "devs", 7, "node")
100 instance.connect(7, "queue", 8, "dev")
101 instance.add_trace(7, "P2PPcapTrace")
102 instance.add_address(7, "10.0.0.1", 24, None)
104 instance.create(9, "ns3::Node")
105 instance.create(10, "ns3::Ipv4L3Protocol")
106 instance.create(11, "ns3::ArpL3Protocol")
107 instance.create(12, "ns3::Icmpv4L4Protocol")
108 instance.create(13, "ns3::UdpL4Protocol")
109 instance.connect(9, "protos", 10, "node")
110 instance.connect(9, "protos", 11, "node")
111 instance.connect(9, "protos", 12, "node")
112 instance.connect(9, "protos", 13, "node")
113 instance.create(14, "ns3::PointToPointNetDevice")
114 instance.create(15, "ns3::DropTailQueue")
115 instance.connect(9, "devs", 14, "node")
116 instance.connect(14, "queue", 15, "dev")
117 instance.add_trace(14, "P2PPcapTrace")
118 instance.add_address(14, "10.0.0.2", 24, None)
120 instance.create(16, "ns3::PointToPointChannel")
121 instance.connect(7, "chan", 16, "dev2")
122 instance.connect(14, "chan", 16, "dev2")
124 instance.create(17, "ns3::PointToPointNetDevice")
125 instance.create(18, "ns3::DropTailQueue")
126 instance.connect(9, "devs", 17, "node")
127 instance.connect(17, "queue", 18, "dev")
128 instance.add_trace(17, "P2PPcapTrace")
129 instance.add_address(17, "10.0.1.1", 24, None)
131 instance.create(19, "ns3::Node")
132 instance.create(20, "ns3::Ipv4L3Protocol")
133 instance.create(21, "ns3::ArpL3Protocol")
134 instance.create(22, "ns3::Icmpv4L4Protocol")
135 instance.create(23, "ns3::UdpL4Protocol")
136 instance.connect(19, "protos", 20, "node")
137 instance.connect(19, "protos", 21, "node")
138 instance.connect(19, "protos", 22, "node")
139 instance.connect(19, "protos", 23, "node")
140 instance.create(24, "ns3::PointToPointNetDevice")
141 instance.create(25, "ns3::DropTailQueue")
142 instance.connect(19, "devs", 24, "node")
143 instance.connect(24, "queue", 25, "dev")
144 instance.add_trace(24, "P2PPcapTrace")
145 instance.add_address(24, "10.0.1.2", 24, None)
147 instance.create(26, "ns3::PointToPointChannel")
148 instance.connect(17, "chan", 26, "dev2")
149 instance.connect(24, "chan", 26, "dev2")
151 instance.create(27, "ns3::V4Ping")
152 instance.create_set(27, "Remote", "10.0.1.2")
153 instance.create_set(27, "StartTime", "0s")
154 instance.create_set(27, "StopTime", "10s")
155 instance.create_set(27, "Verbose", True)
156 instance.connect(27, "node", 2, "apps")
158 instance.add_route(2, "10.0.1.0", 24, "10.0.0.2")
159 instance.add_route(19, "10.0.0.0", 24, "10.0.1.1")
163 instance.do_connect()
164 instance.do_configure()
166 while instance.status(27) != STATUS_FINISHED:
168 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
170 --- 10.0.0.2 ping statistics ---
171 1 packets transmitted, 1 received, 0% packet loss, time 0ms
173 #self.assertTrue(ping_result.startswith(comp_result))
178 #shutil.rmtree(self.root_dir)
181 if __name__ == '__main__':