decorator added to test_util for detecting usable ns3 library
[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_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)
38
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)
54
55         instance.create(16, "ns3::PointToPointChannel")
56         instance.connect(7, "chan", 16, "dev2")
57         instance.connect(14, "chan", 16, "dev2")
58
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")
65
66         instance.do_setup()
67         instance.do_create()
68         instance.do_connect()
69         instance.do_configure()
70         instance.start()
71         while instance.status(17) != STATUS_FINISHED:
72             time.sleep(0.1)
73         comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
74
75 --- 10.0.0.2 ping statistics ---
76 1 packets transmitted, 1 received, 0% packet loss, time 0ms
77 """
78         #self.assertTrue(ping_result.startswith(comp_result))
79         instance.stop()
80         instance.shutdown()
81
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)
103
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)
119
120         instance.create(16, "ns3::PointToPointChannel")
121         instance.connect(7, "chan", 16, "dev2")
122         instance.connect(14, "chan", 16, "dev2")
123
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)
130
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)
146
147         instance.create(26, "ns3::PointToPointChannel")
148         instance.connect(17, "chan", 26, "dev2")
149         instance.connect(24, "chan", 26, "dev2")
150
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")
157
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")
160
161         instance.do_setup()
162         instance.do_create()
163         instance.do_connect()
164         instance.do_configure()
165         instance.start()
166         while instance.status(27) != STATUS_FINISHED:
167             time.sleep(0.1)
168         comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
169
170 --- 10.0.0.2 ping statistics ---
171 1 packets transmitted, 1 received, 0% packet loss, time 0ms
172 """
173         #self.assertTrue(ping_result.startswith(comp_result))
174         instance.stop()
175         instance.shutdown()
176
177     def tearDown(self):
178         #shutil.rmtree(self.root_dir)
179         pass
180
181 if __name__ == '__main__':
182     unittest.main()
183