3 # NEPI, a framework to manage network experiments
4 # Copyright (C) 2013 INRIA
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;
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.
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/>.
18 # Author: Julien Tribino <julien.tribino@inria.fr>
21 from nepi.execution.resource import ResourceFactory, ResourceManager, ResourceAction, ResourceState
22 from nepi.execution.ec import ExperimentController
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
30 from nepi.util.timefuncs import *
35 class OMFVLCWrongCaseAllCritical(unittest.TestCase):
40 self.ec = ExperimentController(exp_id = str(OMFVLCWrongCaseAllCritical.id))
41 OMFVLCWrongCaseAllCritical.id += 1
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")
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")
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")
62 self.ec.register_connection(self.app1, self.node1)
63 self.ec.register_connection(self.node1, self.iface1)
65 def test_deploy_wo_node(self):
66 self.node2 = self.ec.register_resource("omf::Node")
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")
75 self.channel = self.ec.register_resource("omf::Channel")
76 self.ec.set(self.channel, 'channel', "6")
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)
82 self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
86 self.ec.wait_finished([self.app1])
88 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
92 self.assertEqual(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
93 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
94 self.assertEqual(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
95 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
96 self.assertEqual(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
97 self.assertEqual(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
99 def test_deploy_wo_hostname(self):
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")
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")
114 self.channel = self.ec.register_resource("omf::Channel")
115 self.ec.set(self.channel, 'channel', "6")
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)
121 self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
125 self.ec.wait_finished([self.app1])
127 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
131 self.assertEqual(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
132 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
133 self.assertEqual(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
134 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
135 self.assertEqual(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
136 self.assertEqual(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
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")
146 self.iface2 = self.ec.register_resource("omf::WifiInterface")
148 self.channel = self.ec.register_resource("omf::Channel")
149 self.ec.set(self.channel, 'channel', "6")
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)
155 self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
159 self.ec.wait_finished([self.app1])
161 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
165 self.assertEqual(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
166 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
167 self.assertEqual(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
168 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
169 self.assertEqual(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
170 self.assertEqual(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
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")
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")
187 self.channel = self.ec.register_resource("omf::Channel")
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)
193 self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
196 self.ec.wait_finished([self.app1])
198 self.assertEqual(self.ec.get_resource(self.channel).state, ResourceState.FAILED)
202 self.assertEqual(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
203 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
204 self.assertEqual(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
205 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
206 self.assertEqual(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
207 self.assertEqual(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
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")
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")
223 self.channel = self.ec.register_resource("omf::Channel")
224 self.ec.set(self.channel, 'channel', "6")
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)
230 self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
234 self.ec.wait_finished([self.app1])
236 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
240 self.assertEqual(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
241 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
242 self.assertEqual(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
243 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
244 self.assertEqual(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
245 self.assertEqual(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
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")
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")
262 self.channel = self.ec.register_resource("omf::Channel")
263 self.ec.set(self.channel, 'channel', "6")
265 self.app2 = self.ec.register_resource("omf::Application")
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)
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")
277 self.ec.wait_finished([self.app1, self.app2])
279 self.assertEqual(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
283 self.assertEqual(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
284 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
285 self.assertEqual(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
286 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
287 self.assertEqual(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
288 self.assertEqual(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
289 self.assertEqual(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
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")
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")
306 self.channel = self.ec.register_resource("omf::Channel")
307 self.ec.set(self.channel, 'channel', "6")
309 self.app2 = self.ec.register_resource("omf::Application")
310 self.ec.set(self.app2, 'appid', 'Vlc#2')
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)
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")
322 self.ec.wait_finished([self.app1, self.app2])
324 self.assertEqual(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
328 self.assertEqual(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
329 self.assertEqual(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
330 self.assertEqual(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
331 self.assertEqual(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
332 self.assertEqual(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
333 self.assertEqual(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
334 self.assertEqual(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
337 if __name__ == '__main__':