069d5c55b5005d90f608781e448de307ca31e2f3
[nepi.git] / test / core / integration.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 from nepi.core.design import ExperimentDescription, FactoriesProvider
5 from nepi.util.constants import STATUS_FINISHED
6 from nepi.util import proxy
7 import mock
8 import mock.metadata_v01
9 import os
10 import shutil
11 import sys
12 import time
13 import unittest
14 import uuid
15
16 class ExecuteTestCase(unittest.TestCase):
17     def setUp(self):
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", 
21                 str(uuid.uuid1()))
22         os.makedirs(self._root_dir)
23
24     def test_single_process_integration(self):
25         exp_desc = ExperimentDescription()
26         testbed_version = "01"
27         testbed_id = "mock"
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")
43
44         xml = exp_desc.to_xml()
45         access_config = None
46         controller = proxy.create_controller(xml, access_config)
47         controller.start()
48         while not controller.is_finished(app.guid):
49             time.sleep(0.5)
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.
52
53 --- 10.0.0.2 ping statistics ---
54 1 packets transmitted, 1 received, 0% packet loss, time 0ms
55 """
56         self.assertTrue(fake_result.startswith(comp_result))
57         controller.stop()
58         controller.shutdown()
59
60     def test_daemonized_controller_integration(self):
61         exp_desc = ExperimentDescription()
62         testbed_version = "01"
63         testbed_id = "mock"
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")
79
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)
86
87         controller.start()
88         while not controller.is_finished(app.guid):
89             time.sleep(0.5)
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.
92
93 --- 10.0.0.2 ping statistics ---
94 1 packets transmitted, 1 received, 0% packet loss, time 0ms
95 """
96         self.assertTrue(fake_result.startswith(comp_result))
97         controller.stop()
98         controller.shutdown()
99
100     def test_daemonized_testbed_integration(self):
101         exp_desc = ExperimentDescription()
102         testbed_version = "01"
103         testbed_id = "mock"
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")
119
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)
127
128         controller.start()
129         while not controller.is_finished(app.guid):
130             time.sleep(0.5)
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.
133
134 --- 10.0.0.2 ping statistics ---
135 1 packets transmitted, 1 received, 0% packet loss, time 0ms
136 """
137         self.assertTrue(fake_result.startswith(comp_result))
138         controller.stop()
139         controller.shutdown()
140
141     def test_daemonized_all_integration(self):
142         exp_desc = ExperimentDescription()
143         testbed_version = "01"
144         testbed_id = "mock"
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")
160
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)
167
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)
175
176         controller.start()
177         while not controller.is_finished(app.guid):
178             time.sleep(0.5)
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.
181
182 --- 10.0.0.2 ping statistics ---
183 1 packets transmitted, 1 received, 0% packet loss, time 0ms
184 """
185         self.assertTrue(fake_result.startswith(comp_result))
186         controller.stop()
187         controller.shutdown()
188
189     def tearDown(self):
190         shutil.rmtree(self._root_dir)
191
192 if __name__ == '__main__':
193     unittest.main()
194