routing support added for ns3 testbed
[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     def test_run_ping_if(self):
18         testbed_version = "3_9_RC3"
19         instance = ns3.TestbedInstance(testbed_version)
20         instance.configure("homeDirectory", self.root_dir)
21         instance.create(2, "ns3::Node")
22         instance.create(3, "ns3::Ipv4L3Protocol")
23         instance.create(4, "ns3::ArpL3Protocol")
24         instance.create(5, "ns3::Icmpv4L4Protocol")
25         instance.create(6, "ns3::UdpL4Protocol")
26         instance.connect(2, "protos", 3, "node")
27         instance.connect(2, "protos", 4, "node")
28         instance.connect(2, "protos", 5, "node")
29         instance.connect(2, "protos", 6, "node")
30         instance.create(7, "ns3::PointToPointNetDevice")
31         instance.create(8, "ns3::DropTailQueue")
32         instance.connect(2, "devs", 7, "node")
33         instance.connect(7, "queue", 8, "dev")
34         instance.add_trace(7, "P2PPcapTrace")
35         instance.add_address(7, "10.0.0.1", 24, None)
36
37         instance.create(9, "ns3::Node")
38         instance.create(10, "ns3::Ipv4L3Protocol")
39         instance.create(11, "ns3::ArpL3Protocol")
40         instance.create(12, "ns3::Icmpv4L4Protocol")
41         instance.create(13, "ns3::UdpL4Protocol")
42         instance.connect(9, "protos", 10, "node")
43         instance.connect(9, "protos", 11, "node")
44         instance.connect(9, "protos", 12, "node")
45         instance.connect(9, "protos", 13, "node")
46         instance.create(14, "ns3::PointToPointNetDevice")
47         instance.create(15, "ns3::DropTailQueue")
48         instance.connect(9, "devs", 14, "node")
49         instance.connect(14, "queue", 15, "dev")
50         instance.add_trace(14, "P2PPcapTrace")
51         instance.add_address(14, "10.0.0.2", 24, None)
52
53         instance.create(16, "ns3::PointToPointChannel")
54         instance.connect(7, "chan", 16, "dev2")
55         instance.connect(14, "chan", 16, "dev2")
56
57         instance.create(17, "ns3::V4Ping")
58         instance.create_set(17, "Remote", "10.0.0.2")
59         instance.create_set(17, "StartTime", "0s")
60         instance.create_set(17, "StopTime", "10s")
61         instance.create_set(17, "Verbose", True)
62         instance.connect(17, "node", 2, "apps")
63
64         instance.do_setup()
65         instance.do_create()
66         instance.do_connect()
67         instance.do_configure()
68         instance.start()
69         while instance.status(17) != STATUS_FINISHED:
70             time.sleep(0.1)
71         comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
72
73 --- 10.0.0.2 ping statistics ---
74 1 packets transmitted, 1 received, 0% packet loss, time 0ms
75 """
76         #self.assertTrue(ping_result.startswith(comp_result))
77         instance.stop()
78         instance.shutdown()
79
80     def test_run_ping_routing(self):
81         testbed_version = "3_9_RC3"
82         instance = ns3.TestbedInstance(testbed_version)
83         instance.configure("homeDirectory", self.root_dir)
84         instance.create(2, "ns3::Node")
85         instance.create(3, "ns3::Ipv4L3Protocol")
86         instance.create(4, "ns3::ArpL3Protocol")
87         instance.create(5, "ns3::Icmpv4L4Protocol")
88         instance.create(6, "ns3::UdpL4Protocol")
89         instance.connect(2, "protos", 3, "node")
90         instance.connect(2, "protos", 4, "node")
91         instance.connect(2, "protos", 5, "node")
92         instance.connect(2, "protos", 6, "node")
93         instance.create(7, "ns3::PointToPointNetDevice")
94         instance.create(8, "ns3::DropTailQueue")
95         instance.connect(2, "devs", 7, "node")
96         instance.connect(7, "queue", 8, "dev")
97         instance.add_trace(7, "P2PPcapTrace")
98         instance.add_address(7, "10.0.0.1", 24, None)
99
100         instance.create(9, "ns3::Node")
101         instance.create(10, "ns3::Ipv4L3Protocol")
102         instance.create(11, "ns3::ArpL3Protocol")
103         instance.create(12, "ns3::Icmpv4L4Protocol")
104         instance.create(13, "ns3::UdpL4Protocol")
105         instance.connect(9, "protos", 10, "node")
106         instance.connect(9, "protos", 11, "node")
107         instance.connect(9, "protos", 12, "node")
108         instance.connect(9, "protos", 13, "node")
109         instance.create(14, "ns3::PointToPointNetDevice")
110         instance.create(15, "ns3::DropTailQueue")
111         instance.connect(9, "devs", 14, "node")
112         instance.connect(14, "queue", 15, "dev")
113         instance.add_trace(14, "P2PPcapTrace")
114         instance.add_address(14, "10.0.0.2", 24, None)
115
116         instance.create(16, "ns3::PointToPointChannel")
117         instance.connect(7, "chan", 16, "dev2")
118         instance.connect(14, "chan", 16, "dev2")
119
120         instance.create(17, "ns3::PointToPointNetDevice")
121         instance.create(18, "ns3::DropTailQueue")
122         instance.connect(9, "devs", 17, "node")
123         instance.connect(17, "queue", 18, "dev")
124         instance.add_trace(17, "P2PPcapTrace")
125         instance.add_address(17, "10.0.1.1", 24, None)
126
127         instance.create(19, "ns3::Node")
128         instance.create(20, "ns3::Ipv4L3Protocol")
129         instance.create(21, "ns3::ArpL3Protocol")
130         instance.create(22, "ns3::Icmpv4L4Protocol")
131         instance.create(23, "ns3::UdpL4Protocol")
132         instance.connect(19, "protos", 20, "node")
133         instance.connect(19, "protos", 21, "node")
134         instance.connect(19, "protos", 22, "node")
135         instance.connect(19, "protos", 23, "node")
136         instance.create(24, "ns3::PointToPointNetDevice")
137         instance.create(25, "ns3::DropTailQueue")
138         instance.connect(19, "devs", 24, "node")
139         instance.connect(24, "queue", 25, "dev")
140         instance.add_trace(24, "P2PPcapTrace")
141         instance.add_address(24, "10.0.1.2", 24, None)
142
143         instance.create(26, "ns3::PointToPointChannel")
144         instance.connect(17, "chan", 26, "dev2")
145         instance.connect(24, "chan", 26, "dev2")
146
147         instance.create(27, "ns3::V4Ping")
148         instance.create_set(27, "Remote", "10.0.1.2")
149         instance.create_set(27, "StartTime", "0s")
150         instance.create_set(27, "StopTime", "10s")
151         instance.create_set(27, "Verbose", True)
152         instance.connect(27, "node", 2, "apps")
153
154         instance.add_route(2, "10.0.1.0", 24, "10.0.0.2")
155         instance.add_route(19, "10.0.0.0", 24, "10.0.1.1")
156
157         instance.do_setup()
158         instance.do_create()
159         instance.do_connect()
160         instance.do_configure()
161         instance.start()
162         while instance.status(27) != STATUS_FINISHED:
163             time.sleep(0.1)
164         comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
165
166 --- 10.0.0.2 ping statistics ---
167 1 packets transmitted, 1 received, 0% packet loss, time 0ms
168 """
169         #self.assertTrue(ping_result.startswith(comp_result))
170         instance.stop()
171         instance.shutdown()
172
173     def tearDown(self):
174         #shutil.rmtree(self.root_dir)
175         pass
176
177 if __name__ == '__main__':
178     unittest.main()
179