replacing assertEquals into assertEqual
[nepi.git] / test / resources / omf / omf5_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 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 OMFResourceFactoryTestCase(unittest.TestCase):
36     def test_creation_phase(self):
37
38         self.assertEqual(OMFNode.get_rtype(), "omf::Node")
39         self.assertEqual(len(OMFNode._attributes), 8)
40
41         self.assertEqual(OMFWifiInterface.get_rtype(), "omf::WifiInterface")
42         self.assertEqual(len(OMFWifiInterface._attributes), 12)
43
44         self.assertEqual(OMFChannel.get_rtype(), "omf::Channel")
45         self.assertEqual(len(OMFChannel._attributes), 8)
46
47         self.assertEqual(OMFApplication.get_rtype(), "omf::Application")
48         self.assertEqual(len(OMFApplication._attributes), 14)
49
50 class OMFEachTestCase(unittest.TestCase):
51     def setUp(self):
52         self.ec = ExperimentController(exp_id = "99999")
53
54         self.node1 = self.ec.register_resource("omf::Node")
55         self.ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
56         self.ec.set(self.node1, 'xmppUser', "nepi")
57         self.ec.set(self.node1, 'xmppServer', "xmpp-plexus.onelab.eu")
58         self.ec.set(self.node1, 'xmppPort', "5222")
59         self.ec.set(self.node1, 'xmppPassword', "1234")
60         self.ec.set(self.node1, 'version', "5")
61         
62         self.iface1 = self.ec.register_resource("omf::WifiInterface")
63         self.ec.set(self.iface1, 'name', "wlan0")
64         self.ec.set(self.iface1, 'mode', "adhoc")
65         self.ec.set(self.iface1, 'hw_mode', "g")
66         self.ec.set(self.iface1, 'essid', "vlcexp")
67         self.ec.set(self.iface1, 'ip', "10.0.0.17/24")
68         self.ec.set(self.iface1, 'version', "5")
69         
70         self.channel = self.ec.register_resource("omf::Channel")
71         self.ec.set(self.channel, 'channel', "6")
72         self.ec.set(self.channel, 'xmppUser', "nepi")
73         self.ec.set(self.channel, 'xmppServer', "xmpp-plexus.onelab.eu")
74         self.ec.set(self.channel, 'xmppPort', "5222")
75         self.ec.set(self.channel, 'xmppPassword', "1234")
76         self.ec.set(self.channel, 'version', "5")
77         
78         self.app1 = self.ec.register_resource("omf::Application")
79         self.ec.set(self.app1, 'appid', 'Vlc#1')
80         self.ec.set(self.app1, 'command', "/opt/vlc-1.1.13/cvlc /opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
81         self.ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
82         self.ec.set(self.app1, 'version', "5")
83
84         self.app2 = self.ec.register_resource("omf::Application")
85         self.ec.set(self.app2, 'version', "5")
86
87         self.app3 = self.ec.register_resource("omf::Application")
88         self.ec.set(self.app3, 'version', "5")
89
90         self.app4 = self.ec.register_resource("omf::Application")
91         self.ec.set(self.app4, 'version', "5")
92
93         self.app5 = self.ec.register_resource("omf::Application")
94         self.ec.set(self.app5, 'version', "5")
95
96         self.ec.register_connection(self.app1, self.node1)
97         self.ec.register_connection(self.app2, self.node1)
98         self.ec.register_connection(self.app3, self.node1)
99         self.ec.register_connection(self.app4, self.node1)
100         self.ec.register_connection(self.app5, self.node1)
101         self.ec.register_connection(self.node1, self.iface1)
102         self.ec.register_connection(self.iface1, self.channel)
103
104         self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "3s")
105         self.ec.register_condition(self.app3, ResourceAction.START, self.app2, ResourceState.STARTED , "2s")
106         self.ec.register_condition(self.app4, ResourceAction.START, self.app3, ResourceState.STARTED , "3s")
107         self.ec.register_condition(self.app5, ResourceAction.START, [self.app3, self.app2], ResourceState.STARTED , "2s")
108         self.ec.register_condition(self.app5, ResourceAction.START, self.app1, ResourceState.STARTED , "25s")
109
110         self.ec.register_condition([self.app1, self.app2, self.app3,self.app4, self.app5], ResourceAction.STOP, self.app5, ResourceState.STARTED , "1s")
111
112     def tearDown(self):
113         self.ec.shutdown()
114
115     def test_creation_and_configuration_node(self):
116         self.assertEqual(self.ec.get(self.node1, 'hostname'), 'omf.plexus.wlab17')
117         self.assertEqual(self.ec.get(self.node1, 'xmppUser'), 'nepi')
118         self.assertEqual(self.ec.get(self.node1, 'xmppServer'), 'xmpp-plexus.onelab.eu')
119         self.assertEqual(self.ec.get(self.node1, 'xmppPort'), '5222')
120         self.assertEqual(self.ec.get(self.node1, 'xmppPassword'), '1234')
121         self.assertEqual(self.ec.get(self.node1, 'version'), '5')
122
123
124     def test_creation_and_configuration_interface(self):
125         self.assertEqual(self.ec.get(self.iface1, 'name'), 'wlan0')
126         self.assertEqual(self.ec.get(self.iface1, 'mode'), 'adhoc')
127         self.assertEqual(self.ec.get(self.iface1, 'hw_mode'), 'g')
128         self.assertEqual(self.ec.get(self.iface1, 'essid'), 'vlcexp')
129         self.assertEqual(self.ec.get(self.iface1, 'ip'), '10.0.0.17/24')
130         self.assertEqual(self.ec.get(self.iface1, 'version'), '5')
131
132     def test_creation_and_configuration_channel(self):
133         self.assertEqual(self.ec.get(self.channel, 'channel'), '6')
134         self.assertEqual(self.ec.get(self.channel, 'xmppUser'), 'nepi')
135         self.assertEqual(self.ec.get(self.channel, 'xmppServer'), 'xmpp-plexus.onelab.eu')
136         self.assertEqual(self.ec.get(self.channel, 'xmppPort'), '5222')
137         self.assertEqual(self.ec.get(self.channel, 'xmppPassword'), '1234')
138         self.assertEqual(self.ec.get(self.channel, 'version'), '5')
139
140
141     def test_creation_and_configuration_application(self):
142         self.assertEqual(self.ec.get(self.app1, 'appid'), 'Vlc#1')
143         self.assertEqual(self.ec.get(self.app1, 'command'), "/opt/vlc-1.1.13/cvlc /opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
144         self.assertEqual(self.ec.get(self.app1, 'env'), 'DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority')
145         self.assertEqual(self.ec.get(self.app1, 'version'), '5')
146
147     def test_connection(self):
148         self.assertEqual(len(self.ec.get_resource(self.node1).connections), 6)
149         self.assertEqual(len(self.ec.get_resource(self.iface1).connections), 2)
150         self.assertEqual(len(self.ec.get_resource(self.channel).connections), 1)
151         self.assertEqual(len(self.ec.get_resource(self.app1).connections), 1)
152         self.assertEqual(len(self.ec.get_resource(self.app2).connections), 1)
153
154     def test_condition(self):
155         self.assertEqual(len(self.ec.get_resource(self.app1).conditions[ResourceAction.STOP]), 1)
156         self.assertEqual(len(self.ec.get_resource(self.app2).conditions[ResourceAction.START]), 1)
157         self.assertEqual(len(self.ec.get_resource(self.app3).conditions[ResourceAction.START]), 1)
158         self.assertEqual(len(self.ec.get_resource(self.app4).conditions[ResourceAction.STOP]), 1)
159         self.assertEqual(len(self.ec.get_resource(self.app5).conditions[ResourceAction.START]), 2)
160
161 class OMFVLCNormalCase(unittest.TestCase):
162     def test_deploy(self):
163         ec = ExperimentController(exp_id = "5421" )
164
165         self.node1 = ec.register_resource("omf::Node")
166         ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
167         ec.set(self.node1, 'xmppUser', "nepi")
168         ec.set(self.node1, 'xmppServer', "xmpp-plexus.onelab.eu")
169         ec.set(self.node1, 'xmppPort', "5222")
170         ec.set(self.node1, 'xmppPassword', "1234")
171         ec.set(self.node1, 'version', "5")
172         
173         self.iface1 = ec.register_resource("omf::WifiInterface")
174         ec.set(self.iface1, 'name', "wlan0")
175         ec.set(self.iface1, 'mode', "adhoc")
176         ec.set(self.iface1, 'hw_mode', "g")
177         ec.set(self.iface1, 'essid', "vlcexp")
178         ec.set(self.iface1, 'ip', "10.0.0.17/24")
179         ec.set(self.iface1, 'version', "5")
180         
181         self.channel = ec.register_resource("omf::Channel")
182         ec.set(self.channel, 'channel', "6")
183         ec.set(self.channel, 'xmppUser', "nepi")
184         ec.set(self.channel, 'xmppServer', "xmpp-plexus.onelab.eu")
185         ec.set(self.channel, 'xmppPort', "5222")
186         ec.set(self.channel, 'xmppPassword', "1234")
187         ec.set(self.channel, 'version', "5")
188         
189         self.app1 = ec.register_resource("omf::Application")
190         ec.set(self.app1, 'appid', 'Vlc#1')
191         ec.set(self.app1, 'command', "/opt/vlc-1.1.13/cvlc /opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
192         ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
193         ec.set(self.app1, 'version', "5")
194
195         self.app2 = ec.register_resource("omf::Application")
196         ec.set(self.app2, 'appid', 'Test#1')
197         ec.set(self.app2, 'command', "/usr/bin/test -1")
198         ec.set(self.app2, 'env', " ")
199         ec.set(self.app2, 'version', "5")
200
201         self.app3 = ec.register_resource("omf::Application")
202         ec.set(self.app3, 'appid', 'Test#2')
203         ec.set(self.app3, 'command', "/usr/bin/test -2")
204         ec.set(self.app3, 'env', " ")
205         ec.set(self.app3, 'version', "5")
206
207         self.app4 = ec.register_resource("omf::Application")
208         ec.set(self.app4, 'appid', 'Test#3')
209         ec.set(self.app4, 'command', "/usr/bin/test -3")
210         ec.set(self.app4, 'env', " ")
211         ec.set(self.app4, 'version', "5")
212
213         self.app5 = ec.register_resource("omf::Application")
214         ec.set(self.app5, 'appid', 'Kill#2')
215         ec.set(self.app5, 'command', "/usr/bin/killall vlc")
216         ec.set(self.app5, 'env', " ")
217         ec.set(self.app5, 'version', "5")
218
219         ec.register_connection(self.app1, self.node1)
220         ec.register_connection(self.app2, self.node1)
221         ec.register_connection(self.app3, self.node1)
222         ec.register_connection(self.app4, self.node1)
223         ec.register_connection(self.app5, self.node1)
224         ec.register_connection(self.node1, self.iface1)
225         ec.register_connection(self.iface1, self.channel)
226
227         ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "3s")
228         ec.register_condition(self.app3, ResourceAction.START, self.app2, ResourceState.STARTED , "2s")
229         ec.register_condition(self.app4, ResourceAction.START, self.app3, ResourceState.STARTED , "3s")
230         ec.register_condition(self.app5, ResourceAction.START, [self.app3, self.app2], ResourceState.STARTED , "2s")
231         ec.register_condition(self.app5, ResourceAction.START, self.app1, ResourceState.STARTED , "25s")
232
233         ec.register_condition([self.app1, self.app2, self.app3,self.app4, self.app5], ResourceAction.STOP, self.app5, ResourceState.STARTED , "1s")
234
235         ec.deploy()
236
237         ec.wait_finished([self.app1, self.app2, self.app3,self.app4, self.app5])
238
239         self.assertEqual(round(tdiffsec(ec.get_resource(self.app2).start_time, ec.get_resource(self.app1).start_time),0), 3.0)
240         self.assertEqual(round(tdiffsec(ec.get_resource(self.app3).start_time, ec.get_resource(self.app2).start_time),0), 2.0)
241         self.assertEqual(round(tdiffsec(ec.get_resource(self.app4).start_time, ec.get_resource(self.app3).start_time),0), 3.0)
242         self.assertEqual(round(tdiffsec(ec.get_resource(self.app5).start_time, ec.get_resource(self.app3).start_time),0), 20.0)
243         self.assertEqual(round(tdiffsec(ec.get_resource(self.app5).start_time, ec.get_resource(self.app1).start_time),0), 25.0)
244
245         self.assertEqual(ec.get_resource(self.node1).state, ResourceState.STARTED)
246         self.assertEqual(ec.get_resource(self.iface1).state, ResourceState.STARTED)
247         self.assertEqual(ec.get_resource(self.channel).state, ResourceState.STARTED)
248         self.assertEqual(ec.get_resource(self.app1).state, ResourceState.STOPPED)
249         self.assertEqual(ec.get_resource(self.app2).state, ResourceState.STOPPED)
250         self.assertEqual(ec.get_resource(self.app3).state, ResourceState.STOPPED)
251         self.assertEqual(ec.get_resource(self.app4).state, ResourceState.STOPPED)
252         self.assertEqual(ec.get_resource(self.app5).state, ResourceState.STOPPED)
253
254         ec.shutdown()
255
256         self.assertEqual(ec.get_resource(self.node1).state, ResourceState.RELEASED)
257         self.assertEqual(ec.get_resource(self.iface1).state, ResourceState.RELEASED)
258         self.assertEqual(ec.get_resource(self.channel).state, ResourceState.RELEASED)
259         self.assertEqual(ec.get_resource(self.app1).state, ResourceState.RELEASED)
260         self.assertEqual(ec.get_resource(self.app2).state, ResourceState.RELEASED)
261         self.assertEqual(ec.get_resource(self.app3).state, ResourceState.RELEASED)
262         self.assertEqual(ec.get_resource(self.app4).state, ResourceState.RELEASED)
263         self.assertEqual(ec.get_resource(self.app5).state, ResourceState.RELEASED)
264
265
266 if __name__ == '__main__':
267     unittest.main()
268
269
270