ns3 version 3_9_RC3 replaces for 3_9
[nepi.git] / test / testbeds / ns3 / execute.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 from nepi.util.constants import STATUS_FINISHED
5 from nepi.testbeds import ns3
6 import os
7 import shutil
8 import tempfile
9 import test_util
10 import time
11 import unittest
12
13 class Ns3ExecuteTestCase(unittest.TestCase):
14     def setUp(self):
15         self.root_dir = tempfile.mkdtemp()
16
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"
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)
38
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)
54
55         instance.defer_create(16, "ns3::PointToPointChannel")
56         instance.defer_connect(7, "chan", 16, "dev2")
57         instance.defer_connect(14, "chan", 16, "dev2")
58
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")
65
66         instance.do_setup()
67         instance.do_create()
68         instance.do_connect_init()
69         instance.do_connect_compl()
70         instance.do_preconfigure()
71         instance.do_configure()
72         instance.do_prestart()
73         instance.start()
74         while instance.status(17) != STATUS_FINISHED:
75             time.sleep(0.1)
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)
91         instance.stop()
92         instance.shutdown()
93
94     def tearDown(self):
95         try:
96             shutil.rmtree(self.root_dir)
97         except:
98             # retry
99             time.sleep(0.1)
100             shutil.rmtree(self.root_dir)
101
102 if __name__ == '__main__':
103     unittest.main()
104