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
16 class ExecuteTestCase(unittest.TestCase):
18 sys.modules["nepi.testbeds.mock.metadata_v01"] = mock.metadata_v01
19 sys.modules["nepi.testbeds.mock"] = mock
20 self._root_dir = os.path.join(os.getenv("HOME"), ".nepi",
22 os.makedirs(self._root_dir)
24 def test_single_process_integration(self):
25 exp_desc = ExperimentDescription()
26 testbed_version = "01"
28 provider = FactoriesProvider(testbed_id, testbed_version)
29 desc = exp_desc.add_testbed_description(provider)
30 desc.set_attribute_value("fake", True)
31 node1 = desc.create("Node")
32 node2 = desc.create("Node")
33 iface1 = desc.create("Interface")
34 iface1.set_attribute_value("fake", True)
35 node1.connector("devs").connect(iface1.connector("node"))
36 iface2 = desc.create("Interface")
37 iface2.set_attribute_value("fake", True)
38 node2.connector("devs").connect(iface2.connector("node"))
39 iface1.connector("iface").connect(iface2.connector("iface"))
40 app = desc.create("Application")
41 app.connector("node").connect(node1.connector("apps"))
42 app.enable_trace("fake")
44 xml = exp_desc.to_xml()
46 controller = proxy.create_controller(xml, access_config)
48 while not controller.is_finished(app.guid):
50 fake_result = controller.trace(desc.guid, app.guid, "fake")
51 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
53 --- 10.0.0.2 ping statistics ---
54 1 packets transmitted, 1 received, 0% packet loss, time 0ms
56 self.assertTrue(fake_result.startswith(comp_result))
60 def test_daemonized_controller_integration(self):
61 exp_desc = ExperimentDescription()
62 testbed_version = "01"
64 provider = FactoriesProvider(testbed_id, testbed_version)
65 desc = exp_desc.add_testbed_description(provider)
66 desc.set_attribute_value("fake", True)
67 node1 = desc.create("Node")
68 node2 = desc.create("Node")
69 iface1 = desc.create("Interface")
70 iface1.set_attribute_value("fake", True)
71 node1.connector("devs").connect(iface1.connector("node"))
72 iface2 = desc.create("Interface")
73 iface2.set_attribute_value("fake", True)
74 node2.connector("devs").connect(iface2.connector("node"))
75 iface1.connector("iface").connect(iface2.connector("iface"))
76 app = desc.create("Application")
77 app.connector("node").connect(node1.connector("apps"))
78 app.enable_trace("fake")
80 xml = exp_desc.to_xml()
81 access_config = proxy.AccessConfiguration()
82 access_config.set_attribute_value("mode",
83 proxy.AccessConfiguration.MODE_DAEMON)
84 access_config.set_attribute_value("rootDirectory", self._root_dir)
85 controller = proxy.create_controller(xml, access_config)
88 while not controller.is_finished(app.guid):
90 fake_result = controller.trace(desc.guid, app.guid, "fake")
91 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
93 --- 10.0.0.2 ping statistics ---
94 1 packets transmitted, 1 received, 0% packet loss, time 0ms
96 self.assertTrue(fake_result.startswith(comp_result))
100 def test_daemonized_testbed_integration(self):
101 exp_desc = ExperimentDescription()
102 testbed_version = "01"
104 provider = FactoriesProvider(testbed_id, testbed_version)
105 desc = exp_desc.add_testbed_description(provider)
106 desc.set_attribute_value("fake", True)
107 node1 = desc.create("Node")
108 node2 = desc.create("Node")
109 iface1 = desc.create("Interface")
110 iface1.set_attribute_value("fake", True)
111 node1.connector("devs").connect(iface1.connector("node"))
112 iface2 = desc.create("Interface")
113 iface2.set_attribute_value("fake", True)
114 node2.connector("devs").connect(iface2.connector("node"))
115 iface1.connector("iface").connect(iface2.connector("iface"))
116 app = desc.create("Application")
117 app.connector("node").connect(node1.connector("apps"))
118 app.enable_trace("fake")
120 xml = exp_desc.to_xml()
121 controller = proxy.create_controller(xml, access_config = None)
122 access_config = proxy.AccessConfiguration()
123 access_config.set_attribute_value("mode",
124 proxy.AccessConfiguration.MODE_DAEMON)
125 access_config.set_attribute_value("rootDirectory", self._root_dir)
126 controller.set_access_configuration(desc.guid, access_config)
129 while not controller.is_finished(app.guid):
131 fake_result = controller.trace(desc.guid, app.guid, "fake")
132 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
134 --- 10.0.0.2 ping statistics ---
135 1 packets transmitted, 1 received, 0% packet loss, time 0ms
137 self.assertTrue(fake_result.startswith(comp_result))
139 controller.shutdown()
141 def test_daemonized_all_integration(self):
142 exp_desc = ExperimentDescription()
143 testbed_version = "01"
145 provider = FactoriesProvider(testbed_id, testbed_version)
146 desc = exp_desc.add_testbed_description(provider)
147 desc.set_attribute_value("fake", True)
148 node1 = desc.create("Node")
149 node2 = desc.create("Node")
150 iface1 = desc.create("Interface")
151 iface1.set_attribute_value("fake", True)
152 node1.connector("devs").connect(iface1.connector("node"))
153 iface2 = desc.create("Interface")
154 iface2.set_attribute_value("fake", True)
155 node2.connector("devs").connect(iface2.connector("node"))
156 iface1.connector("iface").connect(iface2.connector("iface"))
157 app = desc.create("Application")
158 app.connector("node").connect(node1.connector("apps"))
159 app.enable_trace("fake")
161 xml = exp_desc.to_xml()
162 access_config = proxy.AccessConfiguration()
163 access_config.set_attribute_value("mode",
164 proxy.AccessConfiguration.MODE_DAEMON)
165 access_config.set_attribute_value("rootDirectory", self._root_dir)
166 controller = proxy.create_controller(xml, access_config)
168 access_config2 = proxy.AccessConfiguration()
169 access_config2.set_attribute_value("mode",
170 proxy.AccessConfiguration.MODE_DAEMON)
171 inst_root_dir = os.path.join(self._root_dir, "instance")
172 os.mkdir(inst_root_dir)
173 access_config2.set_attribute_value("rootDirectory", inst_root_dir)
174 controller.set_access_configuration(desc.guid, access_config2)
177 while not controller.is_finished(app.guid):
179 fake_result = controller.trace(desc.guid, app.guid, "fake")
180 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
182 --- 10.0.0.2 ping statistics ---
183 1 packets transmitted, 1 received, 0% packet loss, time 0ms
185 self.assertTrue(fake_result.startswith(comp_result))
187 controller.shutdown()
190 shutil.rmtree(self._root_dir)
192 if __name__ == '__main__':