2 # -*- coding: utf-8 -*-
4 from nepi.util.constants import STATUS_FINISHED
5 from nepi.testbeds import ns3
13 # The reason execute tests are run in separate scripts for ns3, is that the
14 # same ns3 Simulator will be loaded only once per process, resulting in a
15 # dirty state of the Simulator after the first test is executed.
16 # As it is not possible to reset the state of the Simulator to the original
17 # one, different tests should be executed in different processes (different
19 class Ns3ExecuteTestCase(unittest.TestCase):
21 self.root_dir = tempfile.mkdtemp()
23 @test_util.skipUnless(test_util.ns3_usable(),
24 "Test requires working ns-3 bindings")
25 def test_run_ping_routing(self):
26 testbed_version = "3_9_RC3"
27 instance = ns3.TestbedController(testbed_version)
28 instance.defer_configure("homeDirectory", self.root_dir)
29 instance.defer_create(2, "ns3::Node")
30 instance.defer_create(3, "ns3::Ipv4L3Protocol")
31 instance.defer_create(4, "ns3::ArpL3Protocol")
32 instance.defer_create(5, "ns3::Icmpv4L4Protocol")
33 instance.defer_create(6, "ns3::UdpL4Protocol")
34 instance.defer_connect(2, "protos", 3, "node")
35 instance.defer_connect(2, "protos", 4, "node")
36 instance.defer_connect(2, "protos", 5, "node")
37 instance.defer_connect(2, "protos", 6, "node")
38 instance.defer_create(7, "ns3::PointToPointNetDevice")
39 instance.defer_create(8, "ns3::DropTailQueue")
40 instance.defer_connect(2, "devs", 7, "node")
41 instance.defer_connect(7, "queue", 8, "dev")
42 instance.defer_add_trace(7, "P2PAsciiTrace")
43 instance.defer_add_address(7, "10.0.0.1", 24, None)
45 instance.defer_create(9, "ns3::Node")
46 instance.defer_create(10, "ns3::Ipv4L3Protocol")
47 instance.defer_create(11, "ns3::ArpL3Protocol")
48 instance.defer_create(12, "ns3::Icmpv4L4Protocol")
49 instance.defer_create(13, "ns3::UdpL4Protocol")
50 instance.defer_connect(9, "protos", 10, "node")
51 instance.defer_connect(9, "protos", 11, "node")
52 instance.defer_connect(9, "protos", 12, "node")
53 instance.defer_connect(9, "protos", 13, "node")
54 instance.defer_create(14, "ns3::PointToPointNetDevice")
55 instance.defer_create(15, "ns3::DropTailQueue")
56 instance.defer_connect(9, "devs", 14, "node")
57 instance.defer_connect(14, "queue", 15, "dev")
58 instance.defer_add_trace(14, "P2PAsciiTrace")
59 instance.defer_add_address(14, "10.0.0.2", 24, None)
61 instance.defer_create(16, "ns3::PointToPointChannel")
62 instance.defer_connect(7, "chan", 16, "dev2")
63 instance.defer_connect(14, "chan", 16, "dev2")
65 instance.defer_create(17, "ns3::PointToPointNetDevice")
66 instance.defer_create(18, "ns3::DropTailQueue")
67 instance.defer_connect(9, "devs", 17, "node")
68 instance.defer_connect(17, "queue", 18, "dev")
69 instance.defer_add_trace(17, "P2PAsciiTrace")
70 instance.defer_add_address(17, "10.0.1.1", 24, None)
72 instance.defer_create(19, "ns3::Node")
73 instance.defer_create(20, "ns3::Ipv4L3Protocol")
74 instance.defer_create(21, "ns3::ArpL3Protocol")
75 instance.defer_create(22, "ns3::Icmpv4L4Protocol")
76 instance.defer_create(23, "ns3::UdpL4Protocol")
77 instance.defer_connect(19, "protos", 20, "node")
78 instance.defer_connect(19, "protos", 21, "node")
79 instance.defer_connect(19, "protos", 22, "node")
80 instance.defer_connect(19, "protos", 23, "node")
81 instance.defer_create(24, "ns3::PointToPointNetDevice")
82 instance.defer_create(25, "ns3::DropTailQueue")
83 instance.defer_connect(19, "devs", 24, "node")
84 instance.defer_connect(24, "queue", 25, "dev")
85 instance.defer_add_trace(24, "P2PAsciiTrace")
86 instance.defer_add_address(24, "10.0.1.2", 24, None)
88 instance.defer_create(26, "ns3::PointToPointChannel")
89 instance.defer_connect(17, "chan", 26, "dev2")
90 instance.defer_connect(24, "chan", 26, "dev2")
92 instance.defer_create(27, "ns3::V4Ping")
93 instance.defer_create_set(27, "Remote", "10.0.1.2")
94 instance.defer_create_set(27, "StartTime", "0s")
95 instance.defer_create_set(27, "StopTime", "10s")
96 instance.defer_connect(27, "node", 2, "apps")
98 instance.defer_add_route(2, "10.0.1.0", 24, "10.0.0.2")
99 instance.defer_add_route(19, "10.0.0.0", 24, "10.0.1.1")
103 instance.do_connect()
104 instance.do_preconfigure()
105 instance.do_configure()
107 while instance.status(27) != STATUS_FINISHED:
109 ping_result = instance.trace(24, "P2PAsciiTrace")
110 comp_result = "- 9.04199 /NodeList/2/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 ttl 64 id 9 protocol 1 offset 0 flags [none] length: 84 10.0.1.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=9)"
111 self.assertNotEqual(ping_result.find(comp_result), -1)
116 shutil.rmtree(self.root_dir)
118 if __name__ == '__main__':