2 # -*- coding: utf-8 -*-
5 from nepi.util.constants import STATUS_FINISHED
6 from nepi.testbeds import netns
14 class NetnsExecuteTestCase(unittest.TestCase):
16 self.root_dir = tempfile.mkdtemp()
18 @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
19 def test_run_ping_if(self):
20 user = getpass.getuser()
21 testbed_version = "01"
22 instance = netns.TestbedController(testbed_version)
23 instance.defer_configure("homeDirectory", self.root_dir)
24 instance.defer_create(2, "Node")
25 instance.defer_create(3, "Node")
26 instance.defer_create(4, "NodeInterface")
27 instance.defer_create_set(4, "up", True)
28 instance.defer_connect(2, "devs", 4, "node")
29 instance.defer_add_address(4, "10.0.0.1", 24, None)
30 instance.defer_create(5, "NodeInterface")
31 instance.defer_create_set(5, "up", True)
32 instance.defer_connect(3, "devs", 5, "node")
33 instance.defer_add_address(5, "10.0.0.2", 24, None)
34 instance.defer_create(6, "Switch")
35 instance.defer_create_set(6, "up", True)
36 instance.defer_connect(4, "switch", 6, "devs")
37 instance.defer_connect(5, "switch", 6, "devs")
38 instance.defer_create(7, "Application")
39 instance.defer_create_set(7, "command", "ping -qc1 10.0.0.2")
40 instance.defer_create_set(7, "user", user)
41 instance.defer_add_trace(7, "stdout")
42 instance.defer_connect(7, "node", 2, "apps")
46 instance.do_connect_init()
47 instance.do_connect_compl()
48 instance.do_preconfigure()
49 instance.do_configure()
50 instance.do_prestart()
52 while instance.status(7) != STATUS_FINISHED:
54 ping_result = instance.trace(7, "stdout")
55 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
57 --- 10.0.0.2 ping statistics ---
58 1 packets transmitted, 1 received, 0% packet loss, time 0ms
60 self.assertTrue(ping_result.startswith(comp_result))
64 @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
65 def test_run_ping_p2pif(self):
66 user = getpass.getuser()
67 testbed_version = "01"
68 instance = netns.TestbedController(testbed_version)
69 instance.defer_configure("homeDirectory", self.root_dir)
70 instance.defer_create(2, "Node")
71 instance.defer_create(3, "Node")
72 instance.defer_create(4, "P2PNodeInterface")
73 instance.defer_create_set(4, "up", True)
74 instance.defer_connect(2, "devs", 4, "node")
75 instance.defer_add_address(4, "10.0.0.1", 24, None)
76 instance.defer_create(5, "P2PNodeInterface")
77 instance.defer_create_set(5, "up", True)
78 instance.defer_connect(3, "devs", 5, "node")
79 instance.defer_add_address(5, "10.0.0.2", 24, None)
80 instance.defer_connect(4, "p2p", 5, "p2p")
81 instance.defer_create(6, "Application")
82 instance.defer_create_set(6, "command", "ping -qc1 10.0.0.2")
83 instance.defer_create_set(6, "user", user)
84 instance.defer_add_trace(6, "stdout")
85 instance.defer_connect(6, "node", 2, "apps")
89 instance.do_connect_init()
90 instance.do_connect_compl()
91 instance.do_preconfigure()
92 instance.do_configure()
93 instance.do_prestart()
95 while instance.status(6) != STATUS_FINISHED:
97 ping_result = instance.trace(6, "stdout")
98 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
100 --- 10.0.0.2 ping statistics ---
101 1 packets transmitted, 1 received, 0% packet loss, time 0ms
103 self.assertTrue(ping_result.startswith(comp_result))
107 @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
108 def test_run_ping_routing(self):
109 user = getpass.getuser()
110 testbed_version = "01"
111 instance = netns.TestbedController(testbed_version)
112 instance.defer_configure("homeDirectory", self.root_dir)
113 instance.defer_create(2, "Node")
114 instance.defer_create(3, "Node")
115 instance.defer_create(4, "Node")
116 instance.defer_create(5, "NodeInterface")
117 instance.defer_create_set(5, "up", True)
118 instance.defer_connect(2, "devs", 5, "node")
119 instance.defer_add_address(5, "10.0.0.1", 24, None)
120 instance.defer_create(6, "NodeInterface")
121 instance.defer_create_set(6, "up", True)
122 instance.defer_connect(3, "devs", 6, "node")
123 instance.defer_add_address(6, "10.0.0.2", 24, None)
124 instance.defer_create(7, "NodeInterface")
125 instance.defer_create_set(7, "up", True)
126 instance.defer_connect(3, "devs", 7, "node")
127 instance.defer_add_address(7, "10.0.1.1", 24, None)
128 instance.defer_create(8, "NodeInterface")
129 instance.defer_create_set(8, "up", True)
130 instance.defer_connect(4, "devs", 8, "node")
131 instance.defer_add_address(8, "10.0.1.2", 24, None)
132 instance.defer_create(9, "Switch")
133 instance.defer_create_set(9, "up", True)
134 instance.defer_connect(5, "switch", 9, "devs")
135 instance.defer_connect(6, "switch", 9, "devs")
136 instance.defer_create(10, "Switch")
137 instance.defer_create_set(10, "up", True)
138 instance.defer_connect(7, "switch", 10, "devs")
139 instance.defer_connect(8, "switch", 10, "devs")
140 instance.defer_create(11, "Application")
141 instance.defer_create_set(11, "command", "ping -qc1 10.0.1.2")
142 instance.defer_create_set(11, "user", user)
143 instance.defer_add_trace(11, "stdout")
144 instance.defer_connect(11, "node", 2, "apps")
146 instance.defer_add_route(2, "10.0.1.0", 24, "10.0.0.2")
147 instance.defer_add_route(4, "10.0.0.0", 24, "10.0.1.1")
151 instance.do_connect_init()
152 instance.do_connect_compl()
153 instance.do_preconfigure()
154 instance.do_configure()
155 instance.do_prestart()
157 while instance.status(11) != STATUS_FINISHED:
159 ping_result = instance.trace(11, "stdout")
160 comp_result = """PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.
162 --- 10.0.1.2 ping statistics ---
163 1 packets transmitted, 1 received, 0% packet loss, time 0ms
165 self.assertTrue(ping_result.startswith(comp_result))
169 @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
170 def test_node_pcap_trace(self):
171 user = getpass.getuser()
172 testbed_version = "01"
173 instance = netns.TestbedController(testbed_version)
174 instance.defer_configure("homeDirectory", self.root_dir)
175 instance.defer_create(2, "Node")
176 instance.defer_add_trace(2, "pcap")
177 instance.defer_create(3, "Node")
178 instance.defer_create(4, "P2PNodeInterface")
179 instance.defer_create_set(4, "up", True)
180 instance.defer_connect(2, "devs", 4, "node")
181 instance.defer_add_address(4, "10.0.0.1", 24, None)
182 instance.defer_create(5, "P2PNodeInterface")
183 instance.defer_create_set(5, "up", True)
184 instance.defer_connect(3, "devs", 5, "node")
185 instance.defer_add_address(5, "10.0.0.2", 24, None)
186 instance.defer_connect(4, "p2p", 5, "p2p")
187 instance.defer_create(6, "Application")
188 instance.defer_add_trace(6, "stdout")
189 instance.defer_create_set(6, "command", "ping -qc5 10.0.0.2")
190 instance.defer_create_set(6, "user", user)
191 instance.defer_connect(6, "node", 2, "apps")
195 instance.do_connect_init()
196 instance.do_connect_compl()
197 instance.do_preconfigure()
198 instance.do_configure()
199 instance.do_prestart()
201 while instance.status(6) != STATUS_FINISHED:
203 pcap_result = instance.trace(2, "pcap")
204 self.assertEquals(len(pcap_result), 1024)
210 shutil.rmtree(self.root_dir)
214 shutil.rmtree(self.root_dir)
216 if __name__ == '__main__':