7eaf332d22fca3b021b34e94adc4263cb0dfea72
[nepi.git] / test / testbeds / netns / execute.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 import getpass
5 from nepi.util.constants import ApplicationStatus as AS
6 from nepi.testbeds import netns
7 import os
8 import shutil
9 import tempfile
10 import test_util
11 import time
12 import unittest
13
14 class NetnsExecuteTestCase(unittest.TestCase):
15     def setUp(self):
16         self.root_dir = tempfile.mkdtemp()
17
18     @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
19     def test_run_ping_if(self):
20         user = getpass.getuser()
21         instance = netns.TestbedController()
22         instance.defer_configure("homeDirectory", self.root_dir)
23         instance.defer_create(2, "Node")
24         instance.defer_create(3, "Node")
25         instance.defer_create(4, "NodeInterface")
26         instance.defer_create_set(4, "up", True)
27         instance.defer_connect(2, "devs", 4, "node")
28         instance.defer_add_address(4, "10.0.0.1", 24, None)
29         instance.defer_create(5, "NodeInterface")
30         instance.defer_create_set(5, "up", True)
31         instance.defer_connect(3, "devs", 5, "node")
32         instance.defer_add_address(5, "10.0.0.2", 24, None)
33         instance.defer_create(6, "Switch")
34         instance.defer_create_set(6, "up", True)
35         instance.defer_connect(4, "switch", 6, "devs")
36         instance.defer_connect(5, "switch", 6, "devs")
37         instance.defer_create(7, "Application")
38         instance.defer_create_set(7, "command", "ping -qc1 10.0.0.2")
39         instance.defer_create_set(7, "user", user)
40         instance.defer_add_trace(7, "stdout")
41         instance.defer_connect(7, "node", 2, "apps")
42
43         instance.do_setup()
44         instance.do_create()
45         instance.do_connect_init()
46         instance.do_connect_compl()
47         instance.do_preconfigure()
48         instance.do_configure()
49         instance.do_prestart()
50         instance.start()
51         while instance.status(7) != AS.STATUS_FINISHED:
52             time.sleep(0.5)
53         ping_result = instance.trace(7, "stdout")
54         comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
55
56 --- 10.0.0.2 ping statistics ---
57 1 packets transmitted, 1 received, 0% packet loss, time 0ms
58 """
59         self.assertTrue(ping_result.startswith(comp_result))
60         instance.stop()
61         instance.shutdown()
62
63     @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
64     def test_run_ping_p2pif(self):
65         user = getpass.getuser()
66         instance = netns.TestbedController()
67         instance.defer_configure("homeDirectory", self.root_dir)
68         instance.defer_create(2, "Node")
69         instance.defer_create(3, "Node")
70         instance.defer_create(4, "P2PNodeInterface")
71         instance.defer_create_set(4, "up", True)
72         instance.defer_connect(2, "devs", 4, "node")
73         instance.defer_add_address(4, "10.0.0.1", 24, None)
74         instance.defer_create(5, "P2PNodeInterface")
75         instance.defer_create_set(5, "up", True)
76         instance.defer_connect(3, "devs", 5, "node")
77         instance.defer_add_address(5, "10.0.0.2", 24, None)
78         instance.defer_connect(4, "p2p", 5, "p2p")
79         instance.defer_create(6, "Application")
80         instance.defer_create_set(6, "command", "ping -qc1 10.0.0.2")
81         instance.defer_create_set(6, "user", user)
82         instance.defer_add_trace(6, "stdout")
83         instance.defer_connect(6, "node", 2, "apps")
84
85         instance.do_setup()
86         instance.do_create()
87         instance.do_connect_init()
88         instance.do_connect_compl()
89         instance.do_preconfigure()
90         instance.do_configure()
91         instance.do_prestart()
92         instance.start()
93         while instance.status(6) != AS.STATUS_FINISHED:
94             time.sleep(0.5)
95         ping_result = instance.trace(6, "stdout")
96         comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
97
98 --- 10.0.0.2 ping statistics ---
99 1 packets transmitted, 1 received, 0% packet loss, time 0ms
100 """
101         self.assertTrue(ping_result.startswith(comp_result))
102         instance.stop()
103         instance.shutdown()
104
105     @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
106     def test_run_ping_routing(self):
107         user = getpass.getuser()
108         instance = netns.TestbedController()
109         instance.defer_configure("homeDirectory", self.root_dir)
110         instance.defer_create(2, "Node")
111         instance.defer_create(3, "Node")
112         instance.defer_create(4, "Node")
113         instance.defer_create(5, "NodeInterface")
114         instance.defer_create_set(5, "up", True)
115         instance.defer_connect(2, "devs", 5, "node")
116         instance.defer_add_address(5, "10.0.0.1", 24, None)
117         instance.defer_create(6, "NodeInterface")
118         instance.defer_create_set(6, "up", True)
119         instance.defer_connect(3, "devs", 6, "node")
120         instance.defer_add_address(6, "10.0.0.2", 24, None)
121         instance.defer_create(7, "NodeInterface")
122         instance.defer_create_set(7, "up", True)
123         instance.defer_connect(3, "devs", 7, "node")
124         instance.defer_add_address(7, "10.0.1.1", 24, None)
125         instance.defer_create(8, "NodeInterface")
126         instance.defer_create_set(8, "up", True)
127         instance.defer_connect(4, "devs", 8, "node")
128         instance.defer_add_address(8, "10.0.1.2", 24, None)
129         instance.defer_create(9, "Switch")
130         instance.defer_create_set(9, "up", True)
131         instance.defer_connect(5, "switch", 9, "devs")
132         instance.defer_connect(6, "switch", 9, "devs")
133         instance.defer_create(10, "Switch")
134         instance.defer_create_set(10, "up", True)
135         instance.defer_connect(7, "switch", 10, "devs")
136         instance.defer_connect(8, "switch", 10, "devs")
137         instance.defer_create(11, "Application")
138         instance.defer_create_set(11, "command", "ping -qc1 10.0.1.2")
139         instance.defer_create_set(11, "user", user)
140         instance.defer_add_trace(11, "stdout")
141         instance.defer_connect(11, "node", 2, "apps")
142
143         instance.defer_add_route(2, "10.0.1.0", 24, "10.0.0.2")
144         instance.defer_add_route(4, "10.0.0.0", 24, "10.0.1.1")
145
146         instance.do_setup()
147         instance.do_create()
148         instance.do_connect_init()
149         instance.do_connect_compl()
150         instance.do_preconfigure()
151         instance.do_configure()
152         instance.do_prestart()
153         instance.start()
154         while instance.status(11) != AS.STATUS_FINISHED:
155             time.sleep(0.5)
156         ping_result = instance.trace(11, "stdout")
157         comp_result = """PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.
158
159 --- 10.0.1.2 ping statistics ---
160 1 packets transmitted, 1 received, 0% packet loss, time 0ms
161 """
162         self.assertTrue(ping_result.startswith(comp_result))
163         instance.stop()
164         instance.shutdown()
165
166     @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
167     def test_node_pcap_trace(self):
168         user = getpass.getuser()
169         instance = netns.TestbedController()
170         instance.defer_configure("homeDirectory", self.root_dir)
171         instance.defer_create(2, "Node")
172         instance.defer_add_trace(2, "pcap")
173         instance.defer_create(3, "Node")
174         instance.defer_create(4, "P2PNodeInterface")
175         instance.defer_create_set(4, "up", True)
176         instance.defer_connect(2, "devs", 4, "node")
177         instance.defer_add_address(4, "10.0.0.1", 24, None)
178         instance.defer_create(5, "P2PNodeInterface")
179         instance.defer_create_set(5, "up", True)
180         instance.defer_connect(3, "devs", 5, "node")
181         instance.defer_add_address(5, "10.0.0.2", 24, None)
182         instance.defer_connect(4, "p2p", 5, "p2p")
183         instance.defer_create(6, "Application")
184         instance.defer_add_trace(6, "stdout")
185         instance.defer_create_set(6, "command", "ping -qc5 10.0.0.2")
186         instance.defer_create_set(6, "user", user)
187         instance.defer_connect(6, "node", 2, "apps")
188
189         instance.do_setup()
190         instance.do_create()
191         instance.do_connect_init()
192         instance.do_connect_compl()
193         instance.do_preconfigure()
194         instance.do_configure()
195         instance.do_prestart()
196         instance.start()
197         while instance.status(6) != AS.STATUS_FINISHED:
198             time.sleep(0.5)
199         pcap_result = instance.trace(2, "pcap")
200         self.assertEquals(len(pcap_result), 1024)
201         instance.stop()
202         instance.shutdown()
203
204     def tearDown(self):
205         try:
206             shutil.rmtree(self.root_dir)
207         except:
208             # retry
209             time.sleep(0.1)
210             shutil.rmtree(self.root_dir)
211
212 if __name__ == '__main__':
213     unittest.main()
214