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.TestbedController(testbed_version)
22 instance.defer_configure("homeDirectory", self.root_dir)
23 instance.defer_create(2, "ns3::Node")
24 instance.defer_create(3, "ns3::Ipv4L3Protocol")
25 instance.defer_create(4, "ns3::ArpL3Protocol")
26 instance.defer_create(5, "ns3::Icmpv4L4Protocol")
27 instance.defer_create(6, "ns3::UdpL4Protocol")
28 instance.defer_connect(2, "protos", 3, "node")
29 instance.defer_connect(2, "protos", 4, "node")
30 instance.defer_connect(2, "protos", 5, "node")
31 instance.defer_connect(2, "protos", 6, "node")
32 instance.defer_create(7, "ns3::PointToPointNetDevice")
33 instance.defer_create(8, "ns3::DropTailQueue")
34 instance.defer_connect(2, "devs", 7, "node")
35 instance.defer_connect(7, "queue", 8, "dev")
36 instance.defer_add_trace(7, "P2PAsciiTrace")
37 instance.defer_add_address(7, "10.0.0.1", 24, None)
39 instance.defer_create(9, "ns3::Node")
40 instance.defer_create(10, "ns3::Ipv4L3Protocol")
41 instance.defer_create(11, "ns3::ArpL3Protocol")
42 instance.defer_create(12, "ns3::Icmpv4L4Protocol")
43 instance.defer_create(13, "ns3::UdpL4Protocol")
44 instance.defer_connect(9, "protos", 10, "node")
45 instance.defer_connect(9, "protos", 11, "node")
46 instance.defer_connect(9, "protos", 12, "node")
47 instance.defer_connect(9, "protos", 13, "node")
48 instance.defer_create(14, "ns3::PointToPointNetDevice")
49 instance.defer_create(15, "ns3::DropTailQueue")
50 instance.defer_connect(9, "devs", 14, "node")
51 instance.defer_connect(14, "queue", 15, "dev")
52 instance.defer_add_trace(14, "P2PAsciiTrace")
53 instance.defer_add_address(14, "10.0.0.2", 24, None)
55 instance.defer_create(16, "ns3::PointToPointChannel")
56 instance.defer_connect(7, "chan", 16, "dev2")
57 instance.defer_connect(14, "chan", 16, "dev2")
59 instance.defer_create(17, "ns3::V4Ping")
60 instance.defer_create_set(17, "Remote", "10.0.0.2")
61 instance.defer_create_set(17, "StartTime", "0s")
62 instance.defer_create_set(17, "StopTime", "10s")
63 instance.defer_add_trace(17, "Rtt")
64 instance.defer_connect(17, "node", 2, "apps")
68 instance.do_connect_init()
69 instance.do_connect_compl()
70 instance.do_preconfigure()
71 instance.do_configure()
72 instance.do_prestart()
74 while instance.status(17) != STATUS_FINISHED:
76 ping_result = instance.trace(14, "P2PAsciiTrace")
77 ping_rtt = instance.trace(17, "Rtt")
78 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)"
79 comp_rtt_result = """41992186ns 41992186ns
80 1041992186ns 41992186ns
81 2041992186ns 41992186ns
82 3041992186ns 41992186ns
83 4041992186ns 41992186ns
84 5041992186ns 41992186ns
85 6041992186ns 41992186ns
86 7041992186ns 41992186ns
87 8041992186ns 41992186ns
88 9041992186ns 41992186ns"""
89 self.assertNotEqual(ping_result.find(comp_result), -1)
90 self.assertEqual(ping_rtt.strip(), comp_rtt_result, -1)
96 shutil.rmtree(self.root_dir)
100 shutil.rmtree(self.root_dir)
102 if __name__ == '__main__':