2f36e06f4ea6143900ddf5706e6c4c04173eecf7
[nepi.git] / test / resources / omf / omf6_vlc_wrong_critical.py
1 #!/usr/bin/env python
2 #
3 #    NEPI, a framework to manage network experiments
4 #    Copyright (C) 2013 INRIA
5 #
6 #    This program is free software: you can redistribute it and/or modify
7 #    it under the terms of the GNU General Public License version 2 as
8 #    published by the Free Software Foundation;
9 #
10 #    This program is distributed in the hope that it will be useful,
11 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #    GNU General Public License for more details.
14 #
15 #    You should have received a copy of the GNU General Public License
16 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #
18 # Author: Julien Tribino <julien.tribino@inria.fr>
19
20
21 from nepi.execution.resource import ResourceFactory, ResourceManager, ResourceAction, ResourceState
22 from nepi.execution.ec import ExperimentController
23
24 from nepi.resources.omf.node import OMFNode
25 from nepi.resources.omf.application import OMFApplication
26 from nepi.resources.omf.interface import OMFWifiInterface
27 from nepi.resources.omf.channel import OMFChannel
28 from nepi.resources.omf.omf_api_factory import OMFAPIFactory
29
30 from nepi.util.timefuncs import *
31
32 import time
33 import unittest
34
35 class OMFVLCWrongCaseAllCritical(unittest.TestCase):
36
37     id = 1000
38
39     def setUp(self):
40         self.ec = ExperimentController(exp_id = str(OMFVLCWrongCaseAllCritical.id))
41         OMFVLCWrongCaseAllCritical.id += 1
42
43         self.node1 = self.ec.register_resource("omf::Node")
44         self.ec.set(self.node1, 'hostname', 'wlab12')
45         self.ec.set(self.node1, 'xmppUser', "nepi")
46         self.ec.set(self.node1, 'xmppServer', "xmpp-plexus.onelab.eu")
47         self.ec.set(self.node1, 'xmppPort', "5222")
48         self.ec.set(self.node1, 'xmppPassword', "1234")
49         
50         self.iface1 = self.ec.register_resource("omf::WifiInterface")
51         self.ec.set(self.iface1, 'name', "wlan0")
52         self.ec.set(self.iface1, 'mode', "adhoc")
53         self.ec.set(self.iface1, 'hw_mode', "g")
54         self.ec.set(self.iface1, 'essid', "vlcexp")
55         self.ec.set(self.iface1, 'ip', "10.0.0.12/24")
56
57         self.app1 = self.ec.register_resource("omf::Application")
58         self.ec.set(self.app1, 'appid', 'Vlc#1')
59         self.ec.set(self.app1, 'command', "/opt/vlc-1.1.13/cvlc /opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.49,port=1234,mux=ts}'")
60         self.ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
61
62         self.ec.register_connection(self.app1, self.node1)
63         self.ec.register_connection(self.node1, self.iface1)
64
65     def test_deploy_wo_node(self):
66         self.node2 = self.ec.register_resource("omf::Node")
67
68         self.iface2 = self.ec.register_resource("omf::WifiInterface")
69         self.ec.set(self.iface2, 'name', "wlan0")
70         self.ec.set(self.iface2, 'mode', "adhoc")
71         self.ec.set(self.iface2, 'hw_mode', "g")
72         self.ec.set(self.iface2, 'essid', "vlcexp")
73         self.ec.set(self.iface2, 'ip', "10.0.0.49/24")
74         
75         self.channel = self.ec.register_resource("omf::Channel")
76         self.ec.set(self.channel, 'channel', "6")
77
78         self.ec.register_connection(self.iface1, self.channel)
79         self.ec.register_connection(self.node2, self.iface2)
80         self.ec.register_connection(self.iface2, self.channel)
81
82         self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
83
84         self.ec.deploy()
85
86         self.ec.wait_finished([self.app1])
87
88         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
89
90         self.ec.shutdown()
91
92         self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
93         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
94         self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
95         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
96         self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
97         self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
98
99     def test_deploy_wo_hostname(self):
100
101         self.node2 = self.ec.register_resource("omf::Node")
102         self.ec.set(self.node2, 'xmppUser', "nepi")
103         self.ec.set(self.node2, 'xmppServer', "xmpp-plexus.onelab.eu")
104         self.ec.set(self.node2, 'xmppPort', "5222")
105         self.ec.set(self.node2, 'xmppPassword', "1234")
106
107         self.iface2 = self.ec.register_resource("omf::WifiInterface")
108         self.ec.set(self.iface2, 'name', "wlan0")
109         self.ec.set(self.iface2, 'mode', "adhoc")
110         self.ec.set(self.iface2, 'hw_mode', "g")
111         self.ec.set(self.iface2, 'essid', "vlcexp")
112         self.ec.set(self.iface2, 'ip', "10.0.0.49/24")
113         
114         self.channel = self.ec.register_resource("omf::Channel")
115         self.ec.set(self.channel, 'channel', "6")
116
117         self.ec.register_connection(self.iface1, self.channel)
118         self.ec.register_connection(self.node2, self.iface2)
119         self.ec.register_connection(self.iface2, self.channel)
120
121         self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
122
123         self.ec.deploy()
124
125         self.ec.wait_finished([self.app1])
126
127         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
128
129         self.ec.shutdown()
130
131         self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
132         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
133         self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
134         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
135         self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
136         self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
137
138     def test_deploy_wo_iface(self):
139         self.node2 = self.ec.register_resource("omf::Node")
140         self.ec.set(self.node2, 'hostname', 'wlab49')
141         self.ec.set(self.node2, 'xmppUser', "nepi")
142         self.ec.set(self.node2, 'xmppServer', "xmpp-plexus.onelab.eu")
143         self.ec.set(self.node2, 'xmppPort', "5222")
144         self.ec.set(self.node2, 'xmppPassword', "1234")
145
146         self.iface2 = self.ec.register_resource("omf::WifiInterface")
147         
148         self.channel = self.ec.register_resource("omf::Channel")
149         self.ec.set(self.channel, 'channel', "6")
150
151         self.ec.register_connection(self.iface1, self.channel)
152         self.ec.register_connection(self.node2, self.iface2)
153         self.ec.register_connection(self.iface2, self.channel)
154
155         self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
156
157         self.ec.deploy()
158
159         self.ec.wait_finished([self.app1])
160
161         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
162
163         self.ec.shutdown()
164
165         self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
166         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
167         self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
168         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
169         self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
170         self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
171
172     def test_deploy_wo_channel(self):
173         self.node2 = self.ec.register_resource("omf::Node")
174         self.ec.set(self.node2, 'hostname', 'wlab49')
175         self.ec.set(self.node2, 'xmppUser', "nepi")
176         self.ec.set(self.node2, 'xmppServer', "xmpp-plexus.onelab.eu")
177         self.ec.set(self.node2, 'xmppPort', "5222")
178         self.ec.set(self.node2, 'xmppPassword', "1234")
179
180         self.iface2 = self.ec.register_resource("omf::WifiInterface")
181         self.ec.set(self.iface2, 'name', "wlan0")
182         self.ec.set(self.iface2, 'mode', "adhoc")
183         self.ec.set(self.iface2, 'hw_mode', "g")
184         self.ec.set(self.iface2, 'essid', "vlcexp")
185         self.ec.set(self.iface2, 'ip', "10.0.0.49/24")
186
187         self.channel = self.ec.register_resource("omf::Channel")
188
189         self.ec.register_connection(self.iface1, self.channel)
190         self.ec.register_connection(self.node2, self.iface2)
191         self.ec.register_connection(self.iface2, self.channel)
192
193         self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
194         self.ec.deploy()
195
196         self.ec.wait_finished([self.app1])
197
198         self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.FAILED)
199
200         self.ec.shutdown()
201
202         self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
203         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
204         self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
205         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
206         self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
207         self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
208
209     def test_deploy_wo_ip(self):
210         self.node2 = self.ec.register_resource("omf::Node")
211         self.ec.set(self.node2, 'hostname', 'wlab49')
212         self.ec.set(self.node2, 'xmppUser', "nepi")
213         self.ec.set(self.node2, 'xmppServer', "xmpp-plexus.onelab.eu")
214         self.ec.set(self.node2, 'xmppPort', "5222")
215         self.ec.set(self.node2, 'xmppPassword', "1234")
216
217         self.iface2 = self.ec.register_resource("omf::WifiInterface")
218         self.ec.set(self.iface2, 'name', "wlan0")
219         self.ec.set(self.iface2, 'mode', "adhoc")
220         self.ec.set(self.iface2, 'hw_mode', "g")
221         self.ec.set(self.iface2, 'essid', "vlcexp")
222
223         self.channel = self.ec.register_resource("omf::Channel")
224         self.ec.set(self.channel, 'channel', "6")
225
226         self.ec.register_connection(self.iface1, self.channel)
227         self.ec.register_connection(self.node2, self.iface2)
228         self.ec.register_connection(self.iface2, self.channel)
229
230         self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
231
232         self.ec.deploy()
233
234         self.ec.wait_finished([self.app1])
235
236         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
237
238         self.ec.shutdown()
239
240         self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
241         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
242         self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
243         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
244         self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
245         self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
246
247     def test_deploy_wo_app(self):
248         self.node2 = self.ec.register_resource("omf::Node")
249         self.ec.set(self.node2, 'hostname', 'wlab49')
250         self.ec.set(self.node2, 'xmppUser', "nepi")
251         self.ec.set(self.node2, 'xmppServer', "xmpp-plexus.onelab.eu")
252         self.ec.set(self.node2, 'xmppPort', "5222")
253         self.ec.set(self.node2, 'xmppPassword', "1234")
254
255         self.iface2 = self.ec.register_resource("omf::WifiInterface")
256         self.ec.set(self.iface2, 'name', "wlan0")
257         self.ec.set(self.iface2, 'mode', "adhoc")
258         self.ec.set(self.iface2, 'hw_mode', "g")
259         self.ec.set(self.iface2, 'essid', "vlcexp")   
260         self.ec.set(self.iface2, 'ip', "10.0.0.49/24")
261
262         self.channel = self.ec.register_resource("omf::Channel")
263         self.ec.set(self.channel, 'channel', "6")
264
265         self.app2 = self.ec.register_resource("omf::Application")
266
267         self.ec.register_connection(self.iface1, self.channel)
268         self.ec.register_connection(self.iface2, self.channel)
269         self.ec.register_connection(self.node2, self.iface2)
270         self.ec.register_connection(self.app2, self.node2)
271
272         self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "2s")
273         self.ec.register_condition([self.app1, self.app2], ResourceAction.STOP, self.app1, ResourceState.STARTED , "4s")
274
275         self.ec.deploy()
276
277         self.ec.wait_finished([self.app1, self.app2])
278
279         self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
280
281         self.ec.shutdown()
282
283         self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
284         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
285         self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
286         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
287         self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
288         self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
289         self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
290
291     def test_deploy_wo_app_path(self):
292         self.node2 = self.ec.register_resource("omf::Node")
293         self.ec.set(self.node2, 'hostname', 'wlab49')
294         self.ec.set(self.node2, 'xmppUser', "nepi")
295         self.ec.set(self.node2, 'xmppServer', "xmpp-plexus.onelab.eu")
296         self.ec.set(self.node2, 'xmppPort', "5222")
297         self.ec.set(self.node2, 'xmppPassword', "1234")
298
299         self.iface2 = self.ec.register_resource("omf::WifiInterface")
300         self.ec.set(self.iface2, 'name', "wlan0")
301         self.ec.set(self.iface2, 'mode', "adhoc")
302         self.ec.set(self.iface2, 'hw_mode', "g")
303         self.ec.set(self.iface2, 'essid', "vlcexp")   
304         self.ec.set(self.iface2, 'ip', "10.0.0.49/24")
305
306         self.channel = self.ec.register_resource("omf::Channel")
307         self.ec.set(self.channel, 'channel', "6")
308
309         self.app2 = self.ec.register_resource("omf::Application")
310         self.ec.set(self.app2, 'appid', 'Vlc#2')
311
312         self.ec.register_connection(self.iface1, self.channel)
313         self.ec.register_connection(self.iface2, self.channel)
314         self.ec.register_connection(self.node2, self.iface2)
315         self.ec.register_connection(self.app2, self.node2)
316
317         self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "2s")
318         self.ec.register_condition([self.app1, self.app2], ResourceAction.STOP, self.app1, ResourceState.STARTED , "4s")
319
320         self.ec.deploy()
321
322         self.ec.wait_finished([self.app1, self.app2])
323
324         self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
325
326         self.ec.shutdown()
327
328         self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
329         self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
330         self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
331         self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
332         self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
333         self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
334         self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
335
336
337 if __name__ == '__main__':
338     unittest.main()
339
340
341