d9ab6c5f312f339b78eb82e3f50c82f44a4c3be4
[nepi.git] / test / resources / omf / omf_vlc_exp.py
1 #!/usr/bin/env python
2 from nepi.execution.resource import ResourceFactory, ResourceManager, ResourceAction, ResourceState
3 from nepi.execution.ec import ExperimentController
4
5 from nepi.resources.omf.omf_node import OMFNode
6 from nepi.resources.omf.omf_application import OMFApplication
7 from nepi.resources.omf.omf_interface import OMFWifiInterface
8 from nepi.resources.omf.omf_channel import OMFChannel
9 from nepi.resources.omf.omf_api import OMFAPIFactory
10
11 from nepi.util import guid
12 from nepi.util.timefuncs import *
13
14 import time
15 import unittest
16 import logging
17
18 logging.basicConfig()
19
20
21 class DummyEC(ExperimentController):
22     pass
23
24 class DummyRM(ResourceManager):
25     pass
26
27
28 class OMFResourceFactoryTestCase(unittest.TestCase):
29
30     def test_creation_phase(self):
31         ResourceFactory.register_type(OMFNode)
32         ResourceFactory.register_type(OMFWifiInterface)
33         ResourceFactory.register_type(OMFChannel)
34         ResourceFactory.register_type(OMFApplication)
35
36         self.assertEquals(OMFNode.rtype(), "OMFNode")
37         self.assertEquals(len(OMFNode._attributes), 7)
38
39         self.assertEquals(OMFWifiInterface.rtype(), "OMFWifiInterface")
40         self.assertEquals(len(OMFWifiInterface._attributes), 9)
41
42         self.assertEquals(OMFChannel.rtype(), "OMFChannel")
43         self.assertEquals(len(OMFChannel._attributes), 5)
44
45         self.assertEquals(OMFApplication.rtype(), "OMFApplication")
46         self.assertEquals(len(OMFApplication._attributes), 8)
47
48         self.assertEquals(len(ResourceFactory.resource_types()), 4)
49
50
51 class OMFVLCTestCase(unittest.TestCase):
52
53     def setUp(self):
54         self.ec = DummyEC()
55         ResourceFactory.register_type(OMFNode)
56         ResourceFactory.register_type(OMFWifiInterface)
57         ResourceFactory.register_type(OMFChannel)
58         ResourceFactory.register_type(OMFApplication)
59
60     def tearDown(self):
61         self.ec.shutdown()
62
63     def test_creation_and_configuration_node(self):
64
65         node1 = self.ec.register_resource("OMFNode")
66         self.ec.set(node1, 'hostname', 'omf.plexus.wlab17')
67         self.ec.set(node1, 'xmppSlice', "nepi")
68         self.ec.set(node1, 'xmppHost', "xmpp-plexus.onelab.eu")
69         self.ec.set(node1, 'xmppPort', "5222")
70         self.ec.set(node1, 'xmppPassword', "1234")
71
72         self.assertEquals(self.ec.get(node1, 'hostname'), 'omf.plexus.wlab17')
73         self.assertEquals(self.ec.get(node1, 'xmppSlice'), 'nepi')
74         self.assertEquals(self.ec.get(node1, 'xmppHost'), 'xmpp-plexus.onelab.eu')
75         self.assertEquals(self.ec.get(node1, 'xmppPort'), '5222')
76         self.assertEquals(self.ec.get(node1, 'xmppPassword'), '1234')
77
78     def test_creation_and_configuration_interface(self):
79
80         iface1 = self.ec.register_resource("OMFWifiInterface")
81         self.ec.set(iface1, 'alias', "w0")
82         self.ec.set(iface1, 'mode', "adhoc")
83         self.ec.set(iface1, 'type', "g")
84         self.ec.set(iface1, 'essid', "vlcexp")
85         self.ec.set(iface1, 'ip', "10.0.0.17")
86         self.ec.set(iface1, 'xmppSlice', "nepi")
87         self.ec.set(iface1, 'xmppHost', "xmpp-plexus.onelab.eu")
88         self.ec.set(iface1, 'xmppPort', "5222")
89         self.ec.set(iface1, 'xmppPassword', "1234")
90
91         self.assertEquals(self.ec.get(iface1, 'alias'), 'w0')
92         self.assertEquals(self.ec.get(iface1, 'mode'), 'adhoc')
93         self.assertEquals(self.ec.get(iface1, 'type'), 'g')
94         self.assertEquals(self.ec.get(iface1, 'essid'), 'vlcexp')
95         self.assertEquals(self.ec.get(iface1, 'ip'), '10.0.0.17')
96         self.assertEquals(self.ec.get(iface1, 'xmppSlice'), 'nepi')
97         self.assertEquals(self.ec.get(iface1, 'xmppHost'), 'xmpp-plexus.onelab.eu')
98         self.assertEquals(self.ec.get(iface1, 'xmppPort'), '5222')
99         self.assertEquals(self.ec.get(iface1, 'xmppPassword'), '1234')
100
101     def test_creation_and_configuration_channel(self):
102
103         channel = self.ec.register_resource("OMFChannel")
104         self.ec.set(channel, 'channel', "6")
105         self.ec.set(channel, 'xmppSlice', "nepi")
106         self.ec.set(channel, 'xmppHost', "xmpp-plexus.onelab.eu")
107         self.ec.set(channel, 'xmppPort', "5222")
108         self.ec.set(channel, 'xmppPassword', "1234")
109
110         self.assertEquals(self.ec.get(channel, 'channel'), '6')
111         self.assertEquals(self.ec.get(channel, 'xmppSlice'), 'nepi')
112         self.assertEquals(self.ec.get(channel, 'xmppHost'), 'xmpp-plexus.onelab.eu')
113         self.assertEquals(self.ec.get(channel, 'xmppPort'), '5222')
114         self.assertEquals(self.ec.get(channel, 'xmppPassword'), '1234')
115
116     def test_creation_and_configuration_application(self):
117
118         app1 = self.ec.register_resource("OMFApplication")
119         self.ec.set(app1, 'appid', 'Vlc#1')
120         self.ec.set(app1, 'path', "/opt/vlc-1.1.13/cvlc")
121         self.ec.set(app1, 'args', "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
122         self.ec.set(app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
123         self.ec.set(app1, 'xmppSlice', "nepi")
124         self.ec.set(app1, 'xmppHost', "xmpp-plexus.onelab.eu")
125         self.ec.set(app1, 'xmppPort', "5222")
126         self.ec.set(app1, 'xmppPassword', "1234")
127
128         self.assertEquals(self.ec.get(app1, 'appid'), 'Vlc#1')
129         self.assertEquals(self.ec.get(app1, 'path'), '/opt/vlc-1.1.13/cvlc')
130         self.assertEquals(self.ec.get(app1, 'args'), "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
131         self.assertEquals(self.ec.get(app1, 'env'), 'DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority')
132         self.assertEquals(self.ec.get(app1, 'xmppSlice'), 'nepi')
133         self.assertEquals(self.ec.get(app1, 'xmppHost'), 'xmpp-plexus.onelab.eu')
134         self.assertEquals(self.ec.get(app1, 'xmppPort'), '5222')
135         self.assertEquals(self.ec.get(app1, 'xmppPassword'), '1234')
136
137     def test_connection(self):
138
139         node1 = self.ec.register_resource("OMFNode")
140         iface1 = self.ec.register_resource("OMFWifiInterface")
141         channel = self.ec.register_resource("OMFChannel")
142         app1 = self.ec.register_resource("OMFApplication")
143         app2 = self.ec.register_resource("OMFApplication")
144
145         self.ec.register_connection(app1, node1)
146         self.ec.register_connection(app2, node1)
147         self.ec.register_connection(node1, iface1)
148         self.ec.register_connection(iface1, channel)
149
150         self.assertEquals(len(self.ec.get_resource(node1).connections), 3)
151         self.assertEquals(len(self.ec.get_resource(iface1).connections), 2)
152         self.assertEquals(len(self.ec.get_resource(channel).connections), 1)
153         self.assertEquals(len(self.ec.get_resource(app1).connections), 1)
154         self.assertEquals(len(self.ec.get_resource(app2).connections), 1)
155
156     def test_condition(self):
157
158         node1 = self.ec.register_resource("OMFNode")
159         iface1 = self.ec.register_resource("OMFWifiInterface")
160         channel = self.ec.register_resource("OMFChannel")
161         app1 = self.ec.register_resource("OMFApplication")
162         app2 = self.ec.register_resource("OMFApplication")
163
164         self.ec.register_connection(app1, node1)
165         self.ec.register_connection(app2, node1)
166         self.ec.register_connection(node1, iface1)
167         self.ec.register_connection(iface1, channel)
168
169         self.ec.register_condition(app2, ResourceAction.START, app1, ResourceState.STARTED , "4s")
170
171         self.assertEquals(len(self.ec.get_resource(app2).conditions), 1)
172
173     def test_deploy(self):
174         node1 = self.ec.register_resource("OMFNode")
175         self.ec.set(node1, 'hostname', 'omf.plexus.wlab17')
176         self.ec.set(node1, 'xmppSlice', "nepi")
177         self.ec.set(node1, 'xmppHost', "xmpp-plexus.onelab.eu")
178         self.ec.set(node1, 'xmppPort', "5222")
179         self.ec.set(node1, 'xmppPassword', "1234")
180         
181         iface1 = self.ec.register_resource("OMFWifiInterface")
182         self.ec.set(iface1, 'alias', "w0")
183         self.ec.set(iface1, 'mode', "adhoc")
184         self.ec.set(iface1, 'type', "g")
185         self.ec.set(iface1, 'essid', "vlcexp")
186         self.ec.set(iface1, 'ip', "10.0.0.17")
187         self.ec.set(iface1, 'xmppSlice', "nepi")
188         self.ec.set(iface1, 'xmppHost', "xmpp-plexus.onelab.eu")
189         self.ec.set(iface1, 'xmppPort', "5222")
190         self.ec.set(iface1, 'xmppPassword', "1234")
191         
192         channel = self.ec.register_resource("OMFChannel")
193         self.ec.set(channel, 'channel', "6")
194         self.ec.set(channel, 'xmppSlice', "nepi")
195         self.ec.set(channel, 'xmppHost', "xmpp-plexus.onelab.eu")
196         self.ec.set(channel, 'xmppPort', "5222")
197         self.ec.set(channel, 'xmppPassword', "1234")
198         
199         app1 = self.ec.register_resource("OMFApplication")
200         self.ec.set(app1, 'xmppSlice', "nepi")
201         self.ec.set(app1, 'xmppHost', "xmpp-plexus.onelab.eu")
202         self.ec.set(app1, 'xmppPort', "5222")
203         self.ec.set(app1, 'xmppPassword', "1234")
204
205         app2 = self.ec.register_resource("OMFApplication")
206         self.ec.set(app2, 'xmppSlice', "nepi")
207         self.ec.set(app2, 'xmppHost', "xmpp-plexus.onelab.eu")
208         self.ec.set(app2, 'xmppPort', "5222")
209         self.ec.set(app2, 'xmppPassword', "1234")
210
211         app3 = self.ec.register_resource("OMFApplication")
212         self.ec.set(app3, 'xmppSlice', "nepi")
213         self.ec.set(app3, 'xmppHost', "xmpp-plexus.onelab.eu")
214         self.ec.set(app3, 'xmppPort', "5222")
215         self.ec.set(app3, 'xmppPassword', "1234")
216
217         app4 = self.ec.register_resource("OMFApplication")
218         self.ec.set(app4, 'xmppSlice', "nepi")
219         self.ec.set(app4, 'xmppHost', "xmpp-plexus.onelab.eu")
220         self.ec.set(app4, 'xmppPort', "5222")
221         self.ec.set(app4, 'xmppPassword', "1234")
222
223         app5 = self.ec.register_resource("OMFApplication")
224         self.ec.set(app5, 'xmppSlice', "nepi")
225         self.ec.set(app5, 'xmppHost', "xmpp-plexus.onelab.eu")
226         self.ec.set(app5, 'xmppPort', "5222")
227         self.ec.set(app5, 'xmppPassword', "1234")
228
229         self.ec.register_connection(app1, node1)
230         self.ec.register_connection(app2, node1)
231         self.ec.register_connection(app3, node1)
232         self.ec.register_connection(app4, node1)
233         self.ec.register_connection(app5, node1)
234         self.ec.register_connection(node1, iface1)
235         self.ec.register_connection(iface1, channel)
236
237         self.ec.register_condition(app2, ResourceAction.START, app1, ResourceState.STARTED , "3s")
238         self.ec.register_condition(app3, ResourceAction.START, app2, ResourceState.STARTED , "2s")
239         self.ec.register_condition(app4, ResourceAction.START, app3, ResourceState.STARTED , "3s")
240         self.ec.register_condition(app5, ResourceAction.START, [app3, app2], ResourceState.STARTED , "2s")
241         self.ec.register_condition(app5, ResourceAction.START, app1, ResourceState.STARTED , "1m20s")
242
243         self.ec.deploy()
244         time.sleep(150)
245
246         self.assertEquals(round(strfdiff(self.ec.get_resource(app2).start_time, self.ec.get_resource(app1).start_time),1), 3.0)
247         self.assertEquals(round(strfdiff(self.ec.get_resource(app3).start_time, self.ec.get_resource(app2).start_time),1), 2.0)
248         self.assertEquals(round(strfdiff(self.ec.get_resource(app4).start_time, self.ec.get_resource(app3).start_time),1), 3.0)
249         self.assertEquals(round(strfdiff(self.ec.get_resource(app5).start_time, self.ec.get_resource(app3).start_time),1), 2.0)
250         self.assertEquals(round(strfdiff(self.ec.get_resource(app5).start_time, self.ec.get_resource(app1).start_time),1), 7.0)
251
252         # Precision is at 1/10. So this one returns an error 7.03 != 7.0
253         #self.assertEquals(strfdiff(self.ec.get_resource(app5).start_time, self.ec.get_resource(app1).start_time), 7)
254     #In order to release everythings
255         time.sleep(5)
256
257
258 if __name__ == '__main__':
259     unittest.main()
260
261
262