last modifications for OMF6 before test
[nepi.git] / test / resources / omf / vlc_normal_case.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 as published by
8 #    the Free Software Foundation, either version 3 of the License, or
9 #    (at your option) any later version.
10 #
11 #    This program is distributed in the hope that it will be useful,
12 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #    GNU General Public License for more details.
15 #
16 #    You should have received a copy of the GNU General Public License
17 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #
19 # Author: Julien Tribino <julien.tribino@inria.fr>
20
21
22 from nepi.execution.resource import ResourceFactory, ResourceManager, ResourceAction, ResourceState
23 from nepi.execution.ec import ExperimentController
24
25 from nepi.resources.omf.node import OMFNode
26 from nepi.resources.omf.application import OMFApplication
27 from nepi.resources.omf.interface import OMFWifiInterface
28 from nepi.resources.omf.channel import OMFChannel
29 from nepi.resources.omf.omf_api import OMFAPIFactory
30
31 from nepi.util.timefuncs import *
32
33 import time
34 import unittest
35
36 class OMFResourceFactoryTestCase(unittest.TestCase):
37     def test_creation_phase(self):
38
39         self.assertEquals(OMFNode.get_rtype(), "OMFNode")
40         self.assertEquals(len(OMFNode._attributes), 6)
41
42         self.assertEquals(OMFWifiInterface.get_rtype(), "OMFWifiInterface")
43         self.assertEquals(len(OMFWifiInterface._attributes), 10)
44
45         self.assertEquals(OMFChannel.get_rtype(), "OMFChannel")
46         self.assertEquals(len(OMFChannel._attributes), 6)
47
48         self.assertEquals(OMFApplication.get_rtype(), "OMFApplication")
49         self.assertEquals(len(OMFApplication._attributes), 13)
50
51 class OMFEachTestCase(unittest.TestCase):
52     def setUp(self):
53         self.ec = ExperimentController(exp_id = "99999")
54
55         self.node1 = self.ec.register_resource("OMFNode")
56         self.ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
57         self.ec.set(self.node1, 'xmppSlice', "nepi")
58         self.ec.set(self.node1, 'xmppHost', "xmpp-plexus.onelab.eu")
59         self.ec.set(self.node1, 'xmppPort', "5222")
60         self.ec.set(self.node1, 'xmppPassword', "1234")
61         
62         self.iface1 = self.ec.register_resource("OMFWifiInterface")
63         self.ec.set(self.iface1, 'alias', "w0")
64         self.ec.set(self.iface1, 'mode', "adhoc")
65         self.ec.set(self.iface1, 'type', "g")
66         self.ec.set(self.iface1, 'essid', "vlcexp")
67         self.ec.set(self.iface1, 'ip', "10.0.0.17")
68         
69         self.channel = self.ec.register_resource("OMFChannel")
70         self.ec.set(self.channel, 'channel', "6")
71         self.ec.set(self.channel, 'xmppSlice', "nepi")
72         self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
73         self.ec.set(self.channel, 'xmppPort', "5222")
74         self.ec.set(self.channel, 'xmppPassword', "1234")
75         
76         self.app1 = self.ec.register_resource("OMFApplication")
77         self.ec.set(self.app1, 'appid', 'Vlc#1')
78         self.ec.set(self.app1, 'path', "/opt/vlc-1.1.13/cvlc")
79         self.ec.set(self.app1, 'args', "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
80         self.ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
81
82         self.app2 = self.ec.register_resource("OMFApplication")
83
84         self.app3 = self.ec.register_resource("OMFApplication")
85         self.app4 = self.ec.register_resource("OMFApplication")
86         self.app5 = self.ec.register_resource("OMFApplication")
87
88         self.ec.register_connection(self.app1, self.node1)
89         self.ec.register_connection(self.app2, self.node1)
90         self.ec.register_connection(self.app3, self.node1)
91         self.ec.register_connection(self.app4, self.node1)
92         self.ec.register_connection(self.app5, self.node1)
93         self.ec.register_connection(self.node1, self.iface1)
94         self.ec.register_connection(self.iface1, self.channel)
95
96         self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "3s")
97         self.ec.register_condition(self.app3, ResourceAction.START, self.app2, ResourceState.STARTED , "2s")
98         self.ec.register_condition(self.app4, ResourceAction.START, self.app3, ResourceState.STARTED , "3s")
99         self.ec.register_condition(self.app5, ResourceAction.START, [self.app3, self.app2], ResourceState.STARTED , "2s")
100         self.ec.register_condition(self.app5, ResourceAction.START, self.app1, ResourceState.STARTED , "25s")
101
102         self.ec.register_condition([self.app1, self.app2, self.app3,self.app4, self.app5], ResourceAction.STOP, self.app5, ResourceState.STARTED , "1s")
103
104     def tearDown(self):
105         self.ec.shutdown()
106
107     def test_creation_and_configuration_node(self):
108         self.assertEquals(self.ec.get(self.node1, 'hostname'), 'omf.plexus.wlab17')
109         self.assertEquals(self.ec.get(self.node1, 'xmppSlice'), 'nepi')
110         self.assertEquals(self.ec.get(self.node1, 'xmppHost'), 'xmpp-plexus.onelab.eu')
111         self.assertEquals(self.ec.get(self.node1, 'xmppPort'), '5222')
112         self.assertEquals(self.ec.get(self.node1, 'xmppPassword'), '1234')
113
114     def test_creation_and_configuration_interface(self):
115         self.assertEquals(self.ec.get(self.iface1, 'alias'), 'w0')
116         self.assertEquals(self.ec.get(self.iface1, 'mode'), 'adhoc')
117         self.assertEquals(self.ec.get(self.iface1, 'type'), 'g')
118         self.assertEquals(self.ec.get(self.iface1, 'essid'), 'vlcexp')
119         self.assertEquals(self.ec.get(self.iface1, 'ip'), '10.0.0.17')
120
121     def test_creation_and_configuration_channel(self):
122         self.assertEquals(self.ec.get(self.channel, 'channel'), '6')
123         self.assertEquals(self.ec.get(self.channel, 'xmppSlice'), 'nepi')
124         self.assertEquals(self.ec.get(self.channel, 'xmppHost'), 'xmpp-plexus.onelab.eu')
125         self.assertEquals(self.ec.get(self.channel, 'xmppPort'), '5222')
126         self.assertEquals(self.ec.get(self.channel, 'xmppPassword'), '1234')
127
128     def test_creation_and_configuration_application(self):
129         self.assertEquals(self.ec.get(self.app1, 'appid'), 'Vlc#1')
130         self.assertEquals(self.ec.get(self.app1, 'path'), '/opt/vlc-1.1.13/cvlc')
131         self.assertEquals(self.ec.get(self.app1, 'args'), "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
132         self.assertEquals(self.ec.get(self.app1, 'env'), 'DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority')
133
134     def test_connection(self):
135         self.assertEquals(len(self.ec.get_resource(self.node1).connections), 6)
136         self.assertEquals(len(self.ec.get_resource(self.iface1).connections), 2)
137         self.assertEquals(len(self.ec.get_resource(self.channel).connections), 1)
138         self.assertEquals(len(self.ec.get_resource(self.app1).connections), 1)
139         self.assertEquals(len(self.ec.get_resource(self.app2).connections), 1)
140
141     def test_condition(self):
142         self.assertEquals(len(self.ec.get_resource(self.app1).conditions[ResourceAction.STOP]), 1)
143         self.assertEquals(len(self.ec.get_resource(self.app2).conditions[ResourceAction.START]), 1)
144         self.assertEquals(len(self.ec.get_resource(self.app3).conditions[ResourceAction.START]), 1)
145         self.assertEquals(len(self.ec.get_resource(self.app4).conditions[ResourceAction.STOP]), 1)
146         self.assertEquals(len(self.ec.get_resource(self.app5).conditions[ResourceAction.START]), 2)
147
148 class OMFVLCNormalCase(unittest.TestCase):
149     def test_deploy(self):
150         ec = ExperimentController(exp_id = "5421" )
151
152         self.node1 = ec.register_resource("OMFNode")
153         ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
154         ec.set(self.node1, 'xmppSlice', "nepi")
155         ec.set(self.node1, 'xmppHost', "xmpp-plexus.onelab.eu")
156         ec.set(self.node1, 'xmppPort', "5222")
157         ec.set(self.node1, 'xmppPassword', "1234")
158         
159         self.iface1 = ec.register_resource("OMFWifiInterface")
160         ec.set(self.iface1, 'alias', "w0")
161         ec.set(self.iface1, 'mode', "adhoc")
162         ec.set(self.iface1, 'type', "g")
163         ec.set(self.iface1, 'essid', "vlcexp")
164         ec.set(self.iface1, 'ip', "10.0.0.17")
165         
166         self.channel = ec.register_resource("OMFChannel")
167         ec.set(self.channel, 'channel', "6")
168         ec.set(self.channel, 'xmppSlice', "nepi")
169         ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
170         ec.set(self.channel, 'xmppPort', "5222")
171         ec.set(self.channel, 'xmppPassword', "1234")
172         
173         self.app1 = ec.register_resource("OMFApplication")
174         ec.set(self.app1, 'appid', 'Vlc#1')
175         ec.set(self.app1, 'path', "/opt/vlc-1.1.13/cvlc")
176         ec.set(self.app1, 'args', "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
177         ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
178
179         self.app2 = ec.register_resource("OMFApplication")
180         ec.set(self.app2, 'appid', 'Test#1')
181         ec.set(self.app2, 'path', "/usr/bin/test")
182         ec.set(self.app2, 'args', "-1")
183         ec.set(self.app2, 'env', " ")
184
185         self.app3 = ec.register_resource("OMFApplication")
186         ec.set(self.app3, 'appid', 'Test#2')
187         ec.set(self.app3, 'path', "/usr/bin/test")
188         ec.set(self.app3, 'args', "-2")
189         ec.set(self.app3, 'env', " ")
190
191         self.app4 = ec.register_resource("OMFApplication")
192         ec.set(self.app4, 'appid', 'Test#3')
193         ec.set(self.app4, 'path', "/usr/bin/test")
194         ec.set(self.app4, 'args', "-3")
195         ec.set(self.app4, 'env', " ")
196
197         self.app5 = ec.register_resource("OMFApplication")
198         ec.set(self.app5, 'appid', 'Kill#2')
199         ec.set(self.app5, 'path', "/usr/bin/killall")
200         ec.set(self.app5, 'args', "vlc")
201         ec.set(self.app5, 'env', " ")
202
203         ec.register_connection(self.app1, self.node1)
204         ec.register_connection(self.app2, self.node1)
205         ec.register_connection(self.app3, self.node1)
206         ec.register_connection(self.app4, self.node1)
207         ec.register_connection(self.app5, self.node1)
208         ec.register_connection(self.node1, self.iface1)
209         ec.register_connection(self.iface1, self.channel)
210
211         ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "3s")
212         ec.register_condition(self.app3, ResourceAction.START, self.app2, ResourceState.STARTED , "2s")
213         ec.register_condition(self.app4, ResourceAction.START, self.app3, ResourceState.STARTED , "3s")
214         ec.register_condition(self.app5, ResourceAction.START, [self.app3, self.app2], ResourceState.STARTED , "2s")
215         ec.register_condition(self.app5, ResourceAction.START, self.app1, ResourceState.STARTED , "25s")
216
217         ec.register_condition([self.app1, self.app2, self.app3,self.app4, self.app5], ResourceAction.STOP, self.app5, ResourceState.STARTED , "1s")
218
219         ec.deploy()
220
221         ec.wait_finished([self.app1, self.app2, self.app3,self.app4, self.app5])
222
223         self.assertEquals(round(tdiffsec(ec.get_resource(self.app2).start_time, ec.get_resource(self.app1).start_time),0), 3.0)
224         self.assertEquals(round(tdiffsec(ec.get_resource(self.app3).start_time, ec.get_resource(self.app2).start_time),0), 2.0)
225         self.assertEquals(round(tdiffsec(ec.get_resource(self.app4).start_time, ec.get_resource(self.app3).start_time),0), 3.0)
226         self.assertEquals(round(tdiffsec(ec.get_resource(self.app5).start_time, ec.get_resource(self.app3).start_time),0), 20.0)
227         self.assertEquals(round(tdiffsec(ec.get_resource(self.app5).start_time, ec.get_resource(self.app1).start_time),0), 25.0)
228
229         self.assertEquals(ec.get_resource(self.node1).state, ResourceState.STARTED)
230         self.assertEquals(ec.get_resource(self.iface1).state, ResourceState.STARTED)
231         self.assertEquals(ec.get_resource(self.channel).state, ResourceState.STARTED)
232         self.assertEquals(ec.get_resource(self.app1).state, ResourceState.STOPPED)
233         self.assertEquals(ec.get_resource(self.app2).state, ResourceState.STOPPED)
234         self.assertEquals(ec.get_resource(self.app3).state, ResourceState.STOPPED)
235         self.assertEquals(ec.get_resource(self.app4).state, ResourceState.STOPPED)
236         self.assertEquals(ec.get_resource(self.app5).state, ResourceState.STOPPED)
237
238         ec.shutdown()
239
240         self.assertEquals(ec.get_resource(self.node1).state, ResourceState.RELEASED)
241         self.assertEquals(ec.get_resource(self.iface1).state, ResourceState.RELEASED)
242         self.assertEquals(ec.get_resource(self.channel).state, ResourceState.RELEASED)
243         self.assertEquals(ec.get_resource(self.app1).state, ResourceState.RELEASED)
244         self.assertEquals(ec.get_resource(self.app2).state, ResourceState.RELEASED)
245         self.assertEquals(ec.get_resource(self.app3).state, ResourceState.RELEASED)
246         self.assertEquals(ec.get_resource(self.app4).state, ResourceState.RELEASED)
247         self.assertEquals(ec.get_resource(self.app5).state, ResourceState.RELEASED)
248
249
250 if __name__ == '__main__':
251     unittest.main()
252
253
254