replacing assertEquals into assertEqual
[nepi.git] / test / resources / omf / omf6_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', 'wlab12')
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         
61         self.iface1 = self.ec.register_resource("omf::WifiInterface")
62         self.ec.set(self.iface1, 'name', "wlan0")
63         self.ec.set(self.iface1, 'mode', "adhoc")
64         self.ec.set(self.iface1, 'hw_mode', "g")
65         self.ec.set(self.iface1, 'essid', "vlcexp")
66         self.ec.set(self.iface1, 'ip', "10.0.0.17/24")
67         
68         self.channel = self.ec.register_resource("omf::Channel")
69         self.ec.set(self.channel, 'channel', "6")
70         self.ec.set(self.channel, 'xmppUser', "nepi")
71         self.ec.set(self.channel, 'xmppServer', "xmpp-plexus.onelab.eu")
72         self.ec.set(self.channel, 'xmppPort', "5222")
73         self.ec.set(self.channel, 'xmppPassword', "1234")
74         
75         self.app1 = self.ec.register_resource("omf::Application")
76         self.ec.set(self.app1, 'appid', 'Vlc#1')
77         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}'")
78         self.ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
79
80         self.app2 = self.ec.register_resource("omf::Application")
81
82         self.app3 = self.ec.register_resource("omf::Application")
83
84         self.app4 = self.ec.register_resource("omf::Application")
85
86         self.app5 = self.ec.register_resource("omf::Application")
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.assertEqual(self.ec.get(self.node1, 'hostname'), 'wlab12')
109         self.assertEqual(self.ec.get(self.node1, 'xmppUser'), 'nepi')
110         self.assertEqual(self.ec.get(self.node1, 'xmppServer'), 'xmpp-plexus.onelab.eu')
111         self.assertEqual(self.ec.get(self.node1, 'xmppPort'), '5222')
112         self.assertEqual(self.ec.get(self.node1, 'xmppPassword'), '1234')
113         self.assertEqual(self.ec.get(self.node1, 'version'), '6')
114
115
116     def test_creation_and_configuration_interface(self):
117         self.assertEqual(self.ec.get(self.iface1, 'name'), 'wlan0')
118         self.assertEqual(self.ec.get(self.iface1, 'mode'), 'adhoc')
119         self.assertEqual(self.ec.get(self.iface1, 'hw_mode'), 'g')
120         self.assertEqual(self.ec.get(self.iface1, 'essid'), 'vlcexp')
121         self.assertEqual(self.ec.get(self.iface1, 'ip'), '10.0.0.17/24')
122         self.assertEqual(self.ec.get(self.iface1, 'version'), '6')
123
124     def test_creation_and_configuration_channel(self):
125         self.assertEqual(self.ec.get(self.channel, 'channel'), '6')
126         self.assertEqual(self.ec.get(self.channel, 'xmppUser'), 'nepi')
127         self.assertEqual(self.ec.get(self.channel, 'xmppServer'), 'xmpp-plexus.onelab.eu')
128         self.assertEqual(self.ec.get(self.channel, 'xmppPort'), '5222')
129         self.assertEqual(self.ec.get(self.channel, 'xmppPassword'), '1234')
130         self.assertEqual(self.ec.get(self.channel, 'version'), '6')
131
132
133     def test_creation_and_configuration_application(self):
134         self.assertEqual(self.ec.get(self.app1, 'appid'), 'Vlc#1')
135         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}'")
136         self.assertEqual(self.ec.get(self.app1, 'env'), 'DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority')
137         self.assertEqual(self.ec.get(self.app1, 'version'), '6')
138
139     def test_connection(self):
140         self.assertEqual(len(self.ec.get_resource(self.node1).connections), 6)
141         self.assertEqual(len(self.ec.get_resource(self.iface1).connections), 2)
142         self.assertEqual(len(self.ec.get_resource(self.channel).connections), 1)
143         self.assertEqual(len(self.ec.get_resource(self.app1).connections), 1)
144         self.assertEqual(len(self.ec.get_resource(self.app2).connections), 1)
145
146     def test_condition(self):
147         self.assertEqual(len(self.ec.get_resource(self.app1).conditions[ResourceAction.STOP]), 1)
148         self.assertEqual(len(self.ec.get_resource(self.app2).conditions[ResourceAction.START]), 1)
149         self.assertEqual(len(self.ec.get_resource(self.app3).conditions[ResourceAction.START]), 1)
150         self.assertEqual(len(self.ec.get_resource(self.app4).conditions[ResourceAction.STOP]), 1)
151         self.assertEqual(len(self.ec.get_resource(self.app5).conditions[ResourceAction.START]), 2)
152
153 class OMFVLCNormalCase(unittest.TestCase):
154     def test_deploy(self):
155         ec = ExperimentController(exp_id = "5421" )
156
157         self.node1 = ec.register_resource("omf::Node")
158         ec.set(self.node1, 'hostname', 'wlab12')
159         ec.set(self.node1, 'xmppUser', "nepi")
160         ec.set(self.node1, 'xmppServer', "xmpp-plexus.onelab.eu")
161         ec.set(self.node1, 'xmppPort', "5222")
162         ec.set(self.node1, 'xmppPassword', "1234")
163         
164         self.iface1 = ec.register_resource("omf::WifiInterface")
165         ec.set(self.iface1, 'name', "wlan0")
166         ec.set(self.iface1, 'mode', "adhoc")
167         ec.set(self.iface1, 'hw_mode', "g")
168         ec.set(self.iface1, 'essid', "vlcexp")
169         ec.set(self.iface1, 'ip', "10.0.0.17/24")
170         
171         self.channel = ec.register_resource("omf::Channel")
172         ec.set(self.channel, 'channel', "6")
173         ec.set(self.channel, 'xmppUser', "nepi")
174         ec.set(self.channel, 'xmppServer', "xmpp-plexus.onelab.eu")
175         ec.set(self.channel, 'xmppPort', "5222")
176         ec.set(self.channel, 'xmppPassword', "1234")
177         
178         self.app1 = ec.register_resource("omf::Application")
179         ec.set(self.app1, 'appid', 'Vlc#1')
180         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}'")
181         ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
182
183         self.app2 = ec.register_resource("omf::Application")
184         ec.set(self.app2, 'appid', 'Test#1')
185         ec.set(self.app2, 'command', "/usr/bin/test -1")
186         ec.set(self.app2, 'env', " ")
187
188         self.app3 = ec.register_resource("omf::Application")
189         ec.set(self.app3, 'appid', 'Test#2')
190         ec.set(self.app3, 'command', "/usr/bin/test -2")
191         ec.set(self.app3, 'env', " ")
192
193         self.app4 = ec.register_resource("omf::Application")
194         ec.set(self.app4, 'appid', 'Test#3')
195         ec.set(self.app4, 'command', "/usr/bin/test -3")
196         ec.set(self.app4, 'env', " ")
197
198         self.app5 = ec.register_resource("omf::Application")
199         ec.set(self.app5, 'appid', 'Kill#2')
200         ec.set(self.app5, 'command', "/usr/bin/killall 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.assertGreaterEqual(round(tdiffsec(ec.get_resource(self.app2).start_time, ec.get_resource(self.app1).start_time),0), 3.0)
224         self.assertGreaterEqual(round(tdiffsec(ec.get_resource(self.app3).start_time, ec.get_resource(self.app2).start_time),0), 2.0)
225         self.assertGreaterEqual(round(tdiffsec(ec.get_resource(self.app4).start_time, ec.get_resource(self.app3).start_time),0), 3.0)
226         self.assertGreaterEqual(round(tdiffsec(ec.get_resource(self.app5).start_time, ec.get_resource(self.app3).start_time),0), 2.0)
227         self.assertGreaterEqual(round(tdiffsec(ec.get_resource(self.app5).start_time, ec.get_resource(self.app1).start_time),0), 25.0)
228
229         self.assertEqual(ec.get_resource(self.node1).state, ResourceState.STARTED)
230         self.assertEqual(ec.get_resource(self.iface1).state, ResourceState.STARTED)
231         self.assertEqual(ec.get_resource(self.channel).state, ResourceState.STARTED)
232         self.assertEqual(ec.get_resource(self.app1).state, ResourceState.STOPPED)
233         self.assertEqual(ec.get_resource(self.app2).state, ResourceState.STOPPED)
234         self.assertEqual(ec.get_resource(self.app3).state, ResourceState.STOPPED)
235         self.assertEqual(ec.get_resource(self.app4).state, ResourceState.STOPPED)
236         self.assertEqual(ec.get_resource(self.app5).state, ResourceState.STOPPED)
237
238         ec.shutdown()
239
240         self.assertEqual(ec.get_resource(self.node1).state, ResourceState.RELEASED)
241         self.assertEqual(ec.get_resource(self.iface1).state, ResourceState.RELEASED)
242         self.assertEqual(ec.get_resource(self.channel).state, ResourceState.RELEASED)
243         self.assertEqual(ec.get_resource(self.app1).state, ResourceState.RELEASED)
244         self.assertEqual(ec.get_resource(self.app2).state, ResourceState.RELEASED)
245         self.assertEqual(ec.get_resource(self.app3).state, ResourceState.RELEASED)
246         self.assertEqual(ec.get_resource(self.app4).state, ResourceState.RELEASED)
247         self.assertEqual(ec.get_resource(self.app5).state, ResourceState.RELEASED)
248
249
250 if __name__ == '__main__':
251     unittest.main()
252
253
254