3febe57e099fad8ac89a8f29dffb505164023f2d
[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         controller.start()
87         while not controller.is_finished(app.guid):
88             time.sleep(0.5)
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.
91
92 --- 10.0.0.2 ping statistics ---
93 1 packets transmitted, 1 received, 0% packet loss, time 0ms
94 """
95         self.assertTrue(fake_result.startswith(comp_result))
96         controller.stop()
97         controller.shutdown()
98
99     def test_daemonized_testbed_integration(self):
100         exp_desc = ExperimentDescription()
101         testbed_version = "01"
102         testbed_id = "mock"
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")
118
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)
126         controller.start()
127         while not controller.is_finished(app.guid):
128             time.sleep(0.5)
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.
131
132 --- 10.0.0.2 ping statistics ---
133 1 packets transmitted, 1 received, 0% packet loss, time 0ms
134 """
135         self.assertTrue(fake_result.startswith(comp_result))
136         controller.stop()
137         controller.shutdown()
138
139     def test_daemonized_all_integration(self):
140         exp_desc = ExperimentDescription()
141         testbed_version = "01"
142         testbed_id = "mock"
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")
158
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)
172         controller.start()
173         while not controller.is_finished(app.guid):
174             time.sleep(0.5)
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.
177
178 --- 10.0.0.2 ping statistics ---
179 1 packets transmitted, 1 received, 0% packet loss, time 0ms
180 """
181         self.assertTrue(fake_result.startswith(comp_result))
182         controller.stop()
183         controller.shutdown()
184
185     def tearDown(self):
186         shutil.rmtree(self._root_dir)
187
188 if __name__ == '__main__':
189     unittest.main()
190