2 # -*- coding: utf-8 -*-
5 from nepi.core.design import ExperimentDescription, FactoriesProvider
6 from nepi.core.execute import ExperimentController
7 from nepi.util import proxy
15 class NetnsIntegrationTestCase(unittest.TestCase):
17 self.root_dir = tempfile.mkdtemp()
19 @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
20 def test_local_if(self):
21 exp_desc = ExperimentDescription()
22 testbed_version = "01"
24 user = getpass.getuser()
25 netns_provider = FactoriesProvider(testbed_id, testbed_version)
26 netns_desc = exp_desc.add_testbed_description(netns_provider)
27 netns_desc.set_attribute_value("homeDirectory", self.root_dir)
28 #netns_desc.set_attribute_value("enableDebug", True)
29 node1 = netns_desc.create("Node")
30 node2 = netns_desc.create("Node")
31 iface1 = netns_desc.create("NodeInterface")
32 iface1.set_attribute_value("up", True)
33 node1.connector("devs").connect(iface1.connector("node"))
34 ip1 = iface1.add_address()
35 ip1.set_attribute_value("Address", "10.0.0.1")
36 iface2 = netns_desc.create("NodeInterface")
37 iface2.set_attribute_value("up", True)
38 node2.connector("devs").connect(iface2.connector("node"))
39 ip2 = iface2.add_address()
40 ip2.set_attribute_value("Address", "10.0.0.2")
41 switch = netns_desc.create("Switch")
42 switch.set_attribute_value("up", True)
43 iface1.connector("switch").connect(switch.connector("devs"))
44 iface2.connector("switch").connect(switch.connector("devs"))
45 app = netns_desc.create("Application")
46 app.set_attribute_value("command", "ping -qc1 10.0.0.2")
47 app.set_attribute_value("user", user)
48 app.connector("node").connect(node1.connector("apps"))
49 app.enable_trace("stdout")
50 xml = exp_desc.to_xml()
52 controller = ExperimentController(xml)
54 while not controller.is_finished(app.guid):
56 ping_result = controller.trace(netns_desc.guid, app.guid, "stdout")
57 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
59 --- 10.0.0.2 ping statistics ---
60 1 packets transmitted, 1 received, 0% packet loss, time 0ms
62 self.assertTrue(ping_result.startswith(comp_result))
66 @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
67 def test_all_daemonized_if(self):
68 exp_desc = ExperimentDescription()
69 testbed_version = "01"
71 user = getpass.getuser()
72 netns_provider = FactoriesProvider(testbed_id, testbed_version)
73 netns_desc = exp_desc.add_testbed_description(netns_provider)
74 netns_desc.set_attribute_value("homeDirectory", self.root_dir)
75 #netns_desc.set_attribute_value("enableDebug", True)
76 node1 = netns_desc.create("Node")
77 node2 = netns_desc.create("Node")
78 iface1 = netns_desc.create("NodeInterface")
79 iface1.set_attribute_value("up", True)
80 node1.connector("devs").connect(iface1.connector("node"))
81 ip1 = iface1.add_address()
82 ip1.set_attribute_value("Address", "10.0.0.1")
83 iface2 = netns_desc.create("NodeInterface")
84 iface2.set_attribute_value("up", True)
85 node2.connector("devs").connect(iface2.connector("node"))
86 ip2 = iface2.add_address()
87 ip2.set_attribute_value("Address", "10.0.0.2")
88 switch = netns_desc.create("Switch")
89 switch.set_attribute_value("up", True)
90 iface1.connector("switch").connect(switch.connector("devs"))
91 iface2.connector("switch").connect(switch.connector("devs"))
92 app = netns_desc.create("Application")
93 app.set_attribute_value("command", "ping -qc1 10.0.0.2")
94 app.set_attribute_value("user", user)
95 app.connector("node").connect(node1.connector("apps"))
96 app.enable_trace("stdout")
97 xml = exp_desc.to_xml()
99 access_config = proxy.AccessConfiguration()
100 access_config.set_attribute_value("mode",
101 proxy.AccessConfiguration.MODE_DAEMON)
102 access_config.set_attribute_value("rootDirectory", self.root_dir)
103 access_config.set_attribute_value("logLevel",
104 proxy.AccessConfiguration.DEBUG_LEVEL)
105 controller = proxy.create_controller(xml, access_config)
107 access_config2 = proxy.AccessConfiguration()
108 access_config2.set_attribute_value("mode",
109 proxy.AccessConfiguration.MODE_DAEMON)
110 inst_root_dir = os.path.join(self.root_dir, "instance")
111 os.mkdir(inst_root_dir)
112 access_config2.set_attribute_value("rootDirectory", inst_root_dir)
113 access_config2.set_attribute_value("logLevel",
114 proxy.AccessConfiguration.DEBUG_LEVEL)
115 controller.set_access_configuration(netns_desc.guid, access_config2)
118 while not controller.is_finished(app.guid):
120 ping_result = controller.trace(netns_desc.guid, app.guid, "stdout")
121 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
123 --- 10.0.0.2 ping statistics ---
124 1 packets transmitted, 1 received, 0% packet loss, time 0ms
126 self.assertTrue(ping_result.startswith(comp_result))
128 controller.shutdown()
130 @test_util.skipUnless(os.getuid() == 0, "Test requires root privileges")
131 def test_all_ssh_daemonized_if(self):
132 exp_desc = ExperimentDescription()
133 testbed_version = "01"
135 env = test_util.test_environment()
136 user = getpass.getuser()
137 netns_provider = FactoriesProvider(testbed_id, testbed_version)
138 netns_desc = exp_desc.add_testbed_description(netns_provider)
139 netns_desc.set_attribute_value("homeDirectory", self.root_dir)
140 #netns_desc.set_attribute_value("enableDebug", True)
141 node1 = netns_desc.create("Node")
142 node2 = netns_desc.create("Node")
143 iface1 = netns_desc.create("NodeInterface")
144 iface1.set_attribute_value("up", True)
145 node1.connector("devs").connect(iface1.connector("node"))
146 ip1 = iface1.add_address()
147 ip1.set_attribute_value("Address", "10.0.0.1")
148 iface2 = netns_desc.create("NodeInterface")
149 iface2.set_attribute_value("up", True)
150 node2.connector("devs").connect(iface2.connector("node"))
151 ip2 = iface2.add_address()
152 ip2.set_attribute_value("Address", "10.0.0.2")
153 switch = netns_desc.create("Switch")
154 switch.set_attribute_value("up", True)
155 iface1.connector("switch").connect(switch.connector("devs"))
156 iface2.connector("switch").connect(switch.connector("devs"))
157 app = netns_desc.create("Application")
158 app.set_attribute_value("command", "ping -qc1 10.0.0.2")
159 app.set_attribute_value("user", user)
160 app.connector("node").connect(node1.connector("apps"))
161 app.enable_trace("stdout")
162 xml = exp_desc.to_xml()
164 access_config = proxy.AccessConfiguration()
165 access_config.set_attribute_value("mode",
166 proxy.AccessConfiguration.MODE_DAEMON)
167 access_config.set_attribute_value("rootDirectory", self.root_dir)
168 access_config.set_attribute_value("logLevel",
169 proxy.AccessConfiguration.DEBUG_LEVEL)
170 access_config.set_attribute_value("communication",
171 proxy.AccessConfiguration.ACCESS_SSH)
172 access_config.set_attribute_value("port", env.port)
173 access_config.set_attribute_value("useAgent", True)
174 controller = proxy.create_controller(xml, access_config)
176 access_config2 = proxy.AccessConfiguration()
177 access_config2.set_attribute_value("mode",
178 proxy.AccessConfiguration.MODE_DAEMON)
179 inst_root_dir = os.path.join(self.root_dir, "instance")
180 os.mkdir(inst_root_dir)
181 access_config2.set_attribute_value("rootDirectory", inst_root_dir)
182 access_config2.set_attribute_value("logLevel",
183 proxy.AccessConfiguration.DEBUG_LEVEL)
184 controller.set_access_configuration(netns_desc.guid, access_config2)
187 while not controller.is_finished(app.guid):
189 ping_result = controller.trace(netns_desc.guid, app.guid, "stdout")
190 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
192 --- 10.0.0.2 ping statistics ---
193 1 packets transmitted, 1 received, 0% packet loss, time 0ms
195 self.assertTrue(ping_result.startswith(comp_result))
197 controller.shutdown()
200 shutil.rmtree(self.root_dir)
202 if __name__ == '__main__':