2 # -*- coding: utf-8 -*-
4 from nepi.core.design import ExperimentDescription, FactoriesProvider
5 from nepi.util.constants import STATUS_FINISHED
6 from nepi.util import proxy
8 import mock.metadata_v01
17 class ExecuteTestCase(unittest.TestCase):
19 sys.modules["nepi.testbeds.mock.metadata_v01"] = mock.metadata_v01
20 sys.modules["nepi.testbeds.mock"] = mock
21 self.root_dir = tempfile.mkdtemp()
23 def test_single_process_integration(self):
24 exp_desc = ExperimentDescription()
25 testbed_version = "01"
27 provider = FactoriesProvider(testbed_id, testbed_version)
28 desc = exp_desc.add_testbed_description(provider)
29 desc.set_attribute_value("fake", True)
30 node1 = desc.create("Node")
31 node2 = desc.create("Node")
32 iface1 = desc.create("Interface")
33 iface1.set_attribute_value("fake", True)
34 node1.connector("devs").connect(iface1.connector("node"))
35 iface2 = desc.create("Interface")
36 iface2.set_attribute_value("fake", True)
37 node2.connector("devs").connect(iface2.connector("node"))
38 iface1.connector("iface").connect(iface2.connector("iface"))
39 app = desc.create("Application")
40 app.connector("node").connect(node1.connector("apps"))
41 app.enable_trace("fake")
43 xml = exp_desc.to_xml()
45 controller = proxy.create_controller(xml, access_config)
47 while not controller.is_finished(app.guid):
49 fake_result = controller.trace(desc.guid, app.guid, "fake")
50 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
52 --- 10.0.0.2 ping statistics ---
53 1 packets transmitted, 1 received, 0% packet loss, time 0ms
55 self.assertTrue(fake_result.startswith(comp_result))
59 def test_daemonized_controller_integration(self):
60 exp_desc = ExperimentDescription()
61 testbed_version = "01"
63 provider = FactoriesProvider(testbed_id, testbed_version)
64 desc = exp_desc.add_testbed_description(provider)
65 desc.set_attribute_value("fake", True)
66 node1 = desc.create("Node")
67 node2 = desc.create("Node")
68 iface1 = desc.create("Interface")
69 iface1.set_attribute_value("fake", True)
70 node1.connector("devs").connect(iface1.connector("node"))
71 iface2 = desc.create("Interface")
72 iface2.set_attribute_value("fake", True)
73 node2.connector("devs").connect(iface2.connector("node"))
74 iface1.connector("iface").connect(iface2.connector("iface"))
75 app = desc.create("Application")
76 app.connector("node").connect(node1.connector("apps"))
77 app.enable_trace("fake")
79 xml = exp_desc.to_xml()
80 access_config = proxy.AccessConfiguration()
81 access_config.set_attribute_value("mode",
82 proxy.AccessConfiguration.MODE_DAEMON)
83 access_config.set_attribute_value("rootDirectory", self.root_dir)
84 controller = proxy.create_controller(xml, access_config)
87 while not controller.is_finished(app.guid):
89 fake_result = controller.trace(desc.guid, app.guid, "fake")
90 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
92 --- 10.0.0.2 ping statistics ---
93 1 packets transmitted, 1 received, 0% packet loss, time 0ms
95 self.assertTrue(fake_result.startswith(comp_result))
99 def test_daemonized_testbed_integration(self):
100 exp_desc = ExperimentDescription()
101 testbed_version = "01"
103 provider = FactoriesProvider(testbed_id, testbed_version)
104 desc = exp_desc.add_testbed_description(provider)
105 desc.set_attribute_value("fake", True)
106 node1 = desc.create("Node")
107 node2 = desc.create("Node")
108 iface1 = desc.create("Interface")
109 iface1.set_attribute_value("fake", True)
110 node1.connector("devs").connect(iface1.connector("node"))
111 iface2 = desc.create("Interface")
112 iface2.set_attribute_value("fake", True)
113 node2.connector("devs").connect(iface2.connector("node"))
114 iface1.connector("iface").connect(iface2.connector("iface"))
115 app = desc.create("Application")
116 app.connector("node").connect(node1.connector("apps"))
117 app.enable_trace("fake")
119 xml = exp_desc.to_xml()
120 controller = proxy.create_controller(xml, access_config = None)
121 access_config = proxy.AccessConfiguration()
122 access_config.set_attribute_value("mode",
123 proxy.AccessConfiguration.MODE_DAEMON)
124 access_config.set_attribute_value("rootDirectory", self.root_dir)
125 controller.set_access_configuration(desc.guid, access_config)
128 while not controller.is_finished(app.guid):
130 fake_result = controller.trace(desc.guid, app.guid, "fake")
131 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
133 --- 10.0.0.2 ping statistics ---
134 1 packets transmitted, 1 received, 0% packet loss, time 0ms
136 self.assertTrue(fake_result.startswith(comp_result))
138 controller.shutdown()
140 def test_daemonized_all_integration(self):
141 exp_desc = ExperimentDescription()
142 testbed_version = "01"
144 provider = FactoriesProvider(testbed_id, testbed_version)
145 desc = exp_desc.add_testbed_description(provider)
146 desc.set_attribute_value("fake", True)
147 node1 = desc.create("Node")
148 node2 = desc.create("Node")
149 iface1 = desc.create("Interface")
150 iface1.set_attribute_value("fake", True)
151 node1.connector("devs").connect(iface1.connector("node"))
152 iface2 = desc.create("Interface")
153 iface2.set_attribute_value("fake", True)
154 node2.connector("devs").connect(iface2.connector("node"))
155 iface1.connector("iface").connect(iface2.connector("iface"))
156 app = desc.create("Application")
157 app.connector("node").connect(node1.connector("apps"))
158 app.enable_trace("fake")
160 xml = exp_desc.to_xml()
161 access_config = proxy.AccessConfiguration()
162 access_config.set_attribute_value("mode",
163 proxy.AccessConfiguration.MODE_DAEMON)
164 access_config.set_attribute_value("rootDirectory", self.root_dir)
165 controller = proxy.create_controller(xml, access_config)
167 access_config2 = proxy.AccessConfiguration()
168 access_config2.set_attribute_value("mode",
169 proxy.AccessConfiguration.MODE_DAEMON)
170 inst_root_dir = os.path.join(self.root_dir, "instance")
171 os.mkdir(inst_root_dir)
172 access_config2.set_attribute_value("rootDirectory", inst_root_dir)
173 controller.set_access_configuration(desc.guid, access_config2)
176 while not controller.is_finished(app.guid):
178 fake_result = controller.trace(desc.guid, app.guid, "fake")
179 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
181 --- 10.0.0.2 ping statistics ---
182 1 packets transmitted, 1 received, 0% packet loss, time 0ms
184 self.assertTrue(fake_result.startswith(comp_result))
186 controller.shutdown()
188 def TODO_test_ssh_daemonized_all_integration(self):
189 # This test doesn't run because
190 # sys.modules["nepi.testbeds.mock"] = mock
191 # is not set in the ssh process
192 exp_desc = ExperimentDescription()
193 testbed_version = "01"
195 env = test_util.test_environment()
196 provider = FactoriesProvider(testbed_id, testbed_version)
197 desc = exp_desc.add_testbed_description(provider)
198 desc.set_attribute_value("fake", True)
199 node1 = desc.create("Node")
200 node2 = desc.create("Node")
201 iface1 = desc.create("Interface")
202 iface1.set_attribute_value("fake", True)
203 node1.connector("devs").connect(iface1.connector("node"))
204 iface2 = desc.create("Interface")
205 iface2.set_attribute_value("fake", True)
206 node2.connector("devs").connect(iface2.connector("node"))
207 iface1.connector("iface").connect(iface2.connector("iface"))
208 app = desc.create("Application")
209 app.connector("node").connect(node1.connector("apps"))
210 app.enable_trace("fake")
212 xml = exp_desc.to_xml()
213 access_config = proxy.AccessConfiguration()
214 access_config.set_attribute_value("mode",
215 proxy.AccessConfiguration.MODE_DAEMON)
216 access_config.set_attribute_value("rootDirectory", self.root_dir)
217 access_config.set_attribute_value("communication",
218 proxy.AccessConfiguration.ACCESS_SSH)
219 access_config.set_attribute_value("port", env.port)
220 access_config.set_attribute_value("useAgent", True)
221 controller = proxy.create_controller(xml, access_config)
223 access_config2 = proxy.AccessConfiguration()
224 access_config2.set_attribute_value("mode",
225 proxy.AccessConfiguration.MODE_DAEMON)
226 inst_root_dir = os.path.join(self.root_dir, "instance")
227 os.mkdir(inst_root_dir)
228 access_config2.set_attribute_value("rootDirectory", inst_root_dir)
229 access_config2.set_attribute_value("communication",
230 proxy.AccessConfiguration.ACCESS_SSH)
231 access_config2.set_attribute_value("port", env.port)
232 access_config2.set_attribute_value("useAgent", True)
233 controller.set_access_configuration(desc.guid, access_config2)
236 while not controller.is_finished(app.guid):
238 fake_result = controller.trace(desc.guid, app.guid, "fake")
239 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
241 --- 10.0.0.2 ping statistics ---
242 1 packets transmitted, 1 received, 0% packet loss, time 0ms
244 self.assertTrue(fake_result.startswith(comp_result))
246 controller.shutdown()
249 shutil.rmtree(self.root_dir)
251 if __name__ == '__main__':