2 # -*- coding: utf-8 -*-
4 from nepi.util.constants import ApplicationStatus as AS
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 instance = ns3.TestbedController()
21 instance.defer_configure("homeDirectory", self.root_dir)
22 instance.defer_create(2, "ns3::Node")
23 instance.defer_create(3, "ns3::Ipv4L3Protocol")
24 instance.defer_create(4, "ns3::ArpL3Protocol")
25 instance.defer_create(5, "ns3::Icmpv4L4Protocol")
26 instance.defer_create(6, "ns3::UdpL4Protocol")
27 instance.defer_connect(2, "protos", 3, "node")
28 instance.defer_connect(2, "protos", 4, "node")
29 instance.defer_connect(2, "protos", 5, "node")
30 instance.defer_connect(2, "protos", 6, "node")
31 instance.defer_create(7, "ns3::PointToPointNetDevice")
32 instance.defer_create(8, "ns3::DropTailQueue")
33 instance.defer_connect(2, "devs", 7, "node")
34 instance.defer_connect(7, "queue", 8, "dev")
35 instance.defer_add_trace(7, "P2PAsciiTrace")
36 instance.defer_add_address(7, "10.0.0.1", 24, None)
38 instance.defer_create(9, "ns3::Node")
39 instance.defer_create(10, "ns3::Ipv4L3Protocol")
40 instance.defer_create(11, "ns3::ArpL3Protocol")
41 instance.defer_create(12, "ns3::Icmpv4L4Protocol")
42 instance.defer_create(13, "ns3::UdpL4Protocol")
43 instance.defer_connect(9, "protos", 10, "node")
44 instance.defer_connect(9, "protos", 11, "node")
45 instance.defer_connect(9, "protos", 12, "node")
46 instance.defer_connect(9, "protos", 13, "node")
47 instance.defer_create(14, "ns3::PointToPointNetDevice")
48 instance.defer_create(15, "ns3::DropTailQueue")
49 instance.defer_connect(9, "devs", 14, "node")
50 instance.defer_connect(14, "queue", 15, "dev")
51 instance.defer_add_trace(14, "P2PAsciiTrace")
52 instance.defer_add_address(14, "10.0.0.2", 24, None)
54 instance.defer_create(16, "ns3::PointToPointChannel")
55 instance.defer_connect(7, "chan", 16, "dev2")
56 instance.defer_connect(14, "chan", 16, "dev2")
58 instance.defer_create(17, "ns3::V4Ping")
59 instance.defer_create_set(17, "Remote", "10.0.0.2")
60 instance.defer_create_set(17, "StartTime", "0s")
61 instance.defer_create_set(17, "StopTime", "10s")
62 instance.defer_add_trace(17, "Rtt")
63 instance.defer_connect(17, "node", 2, "apps")
67 instance.do_connect_init()
68 instance.do_connect_compl()
69 instance.do_preconfigure()
70 instance.do_configure()
71 instance.do_prestart()
73 while instance.status(17) != AS.STATUS_FINISHED:
75 ping_result = instance.trace(14, "P2PAsciiTrace")
76 ping_rtt = instance.trace(17, "Rtt")
77 comp_result = "- 9.021 /NodeList/1/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.0.2 > 10.0.0.1) ns3::Icmpv4Header (type=0, code=0) ns3::Icmpv4Echo (identifier=0, sequence=9)"
78 comp_rtt_result = """41992186ns 41992186ns
79 1041992186ns 41992186ns
80 2041992186ns 41992186ns
81 3041992186ns 41992186ns
82 4041992186ns 41992186ns
83 5041992186ns 41992186ns
84 6041992186ns 41992186ns
85 7041992186ns 41992186ns
86 8041992186ns 41992186ns
87 9041992186ns 41992186ns"""
88 self.assertNotEqual(ping_result.find(comp_result), -1)
89 self.assertEqual(ping_rtt.strip(), comp_rtt_result, -1)
95 shutil.rmtree(self.root_dir)
99 shutil.rmtree(self.root_dir)
101 if __name__ == '__main__':