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)
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)
127 while not controller.is_finished(app.guid):
129 fake_result = controller.trace(desc.guid, app.guid, "fake")
130 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
132 --- 10.0.0.2 ping statistics ---
133 1 packets transmitted, 1 received, 0% packet loss, time 0ms
135 self.assertTrue(fake_result.startswith(comp_result))
137 controller.shutdown()
139 def test_daemonized_all_integration(self):
140 exp_desc = ExperimentDescription()
141 testbed_version = "01"
143 provider = FactoriesProvider(testbed_id, testbed_version)
144 desc = exp_desc.add_testbed_description(provider)
145 desc.set_attribute_value("fake", True)
146 node1 = desc.create("Node")
147 node2 = desc.create("Node")
148 iface1 = desc.create("Interface")
149 iface1.set_attribute_value("fake", True)
150 node1.connector("devs").connect(iface1.connector("node"))
151 iface2 = desc.create("Interface")
152 iface2.set_attribute_value("fake", True)
153 node2.connector("devs").connect(iface2.connector("node"))
154 iface1.connector("iface").connect(iface2.connector("iface"))
155 app = desc.create("Application")
156 app.connector("node").connect(node1.connector("apps"))
157 app.enable_trace("fake")
159 xml = exp_desc.to_xml()
160 access_config = proxy.AccessConfiguration()
161 access_config.set_attribute_value("mode",
162 proxy.AccessConfiguration.MODE_DAEMON)
163 access_config.set_attribute_value("rootDirectory", self._root_dir)
164 controller = proxy.create_controller(xml, access_config = None)
165 access_config = proxy.AccessConfiguration()
166 access_config.set_attribute_value("mode",
167 proxy.AccessConfiguration.MODE_DAEMON)
168 inst_root_dir = os.path.join(self._root_dir, "instance")
169 os.mkdir(inst_root_dir)
170 access_config.set_attribute_value("rootDirectory", inst_root_dir)
171 controller.set_access_configuration(desc.guid, access_config)
173 while not controller.is_finished(app.guid):
175 fake_result = controller.trace(desc.guid, app.guid, "fake")
176 comp_result = """PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
178 --- 10.0.0.2 ping statistics ---
179 1 packets transmitted, 1 received, 0% packet loss, time 0ms
181 self.assertTrue(fake_result.startswith(comp_result))
183 controller.shutdown()
186 shutil.rmtree(self._root_dir)
188 if __name__ == '__main__':