2 from nepi.execution.resource import ResourceFactory, ResourceManager, ResourceAction, ResourceState
3 from nepi.execution.ec import ExperimentController
5 from nepi.resources.omf.omf_node import OMFNode
6 from nepi.resources.omf.omf_application import OMFApplication
7 from nepi.resources.omf.omf_interface import OMFWifiInterface
8 from nepi.resources.omf.omf_channel import OMFChannel
9 from nepi.resources.omf.omf_api import OMFAPIFactory
11 from nepi.util import guid
12 from nepi.util.timefuncs import *
21 class DummyEC(ExperimentController):
24 class DummyRM(ResourceManager):
28 class OMFResourceFactoryTestCase(unittest.TestCase):
30 def test_creation_phase(self):
31 ResourceFactory.register_type(OMFNode)
32 ResourceFactory.register_type(OMFWifiInterface)
33 ResourceFactory.register_type(OMFChannel)
34 ResourceFactory.register_type(OMFApplication)
36 self.assertEquals(OMFNode.rtype(), "OMFNode")
37 self.assertEquals(len(OMFNode._attributes), 7)
39 self.assertEquals(OMFWifiInterface.rtype(), "OMFWifiInterface")
40 self.assertEquals(len(OMFWifiInterface._attributes), 9)
42 self.assertEquals(OMFChannel.rtype(), "OMFChannel")
43 self.assertEquals(len(OMFChannel._attributes), 5)
45 self.assertEquals(OMFApplication.rtype(), "OMFApplication")
46 self.assertEquals(len(OMFApplication._attributes), 8)
48 self.assertEquals(len(ResourceFactory.resource_types()), 4)
51 class OMFVLCTestCase(unittest.TestCase):
55 ResourceFactory.register_type(OMFNode)
56 ResourceFactory.register_type(OMFWifiInterface)
57 ResourceFactory.register_type(OMFChannel)
58 ResourceFactory.register_type(OMFApplication)
63 def test_creation_and_configuration_node(self):
65 node1 = self.ec.register_resource("OMFNode")
66 self.ec.set(node1, 'hostname', 'omf.plexus.wlab17')
67 self.ec.set(node1, 'xmppSlice', "nepi")
68 self.ec.set(node1, 'xmppHost', "xmpp-plexus.onelab.eu")
69 self.ec.set(node1, 'xmppPort', "5222")
70 self.ec.set(node1, 'xmppPassword', "1234")
72 self.assertEquals(self.ec.get(node1, 'hostname'), 'omf.plexus.wlab17')
73 self.assertEquals(self.ec.get(node1, 'xmppSlice'), 'nepi')
74 self.assertEquals(self.ec.get(node1, 'xmppHost'), 'xmpp-plexus.onelab.eu')
75 self.assertEquals(self.ec.get(node1, 'xmppPort'), '5222')
76 self.assertEquals(self.ec.get(node1, 'xmppPassword'), '1234')
78 def test_creation_and_configuration_interface(self):
80 iface1 = self.ec.register_resource("OMFWifiInterface")
81 self.ec.set(iface1, 'alias', "w0")
82 self.ec.set(iface1, 'mode', "adhoc")
83 self.ec.set(iface1, 'type', "g")
84 self.ec.set(iface1, 'essid', "vlcexp")
85 self.ec.set(iface1, 'ip', "10.0.0.17")
86 self.ec.set(iface1, 'xmppSlice', "nepi")
87 self.ec.set(iface1, 'xmppHost', "xmpp-plexus.onelab.eu")
88 self.ec.set(iface1, 'xmppPort', "5222")
89 self.ec.set(iface1, 'xmppPassword', "1234")
91 self.assertEquals(self.ec.get(iface1, 'alias'), 'w0')
92 self.assertEquals(self.ec.get(iface1, 'mode'), 'adhoc')
93 self.assertEquals(self.ec.get(iface1, 'type'), 'g')
94 self.assertEquals(self.ec.get(iface1, 'essid'), 'vlcexp')
95 self.assertEquals(self.ec.get(iface1, 'ip'), '10.0.0.17')
96 self.assertEquals(self.ec.get(iface1, 'xmppSlice'), 'nepi')
97 self.assertEquals(self.ec.get(iface1, 'xmppHost'), 'xmpp-plexus.onelab.eu')
98 self.assertEquals(self.ec.get(iface1, 'xmppPort'), '5222')
99 self.assertEquals(self.ec.get(iface1, 'xmppPassword'), '1234')
101 def test_creation_and_configuration_channel(self):
103 channel = self.ec.register_resource("OMFChannel")
104 self.ec.set(channel, 'channel', "6")
105 self.ec.set(channel, 'xmppSlice', "nepi")
106 self.ec.set(channel, 'xmppHost', "xmpp-plexus.onelab.eu")
107 self.ec.set(channel, 'xmppPort', "5222")
108 self.ec.set(channel, 'xmppPassword', "1234")
110 self.assertEquals(self.ec.get(channel, 'channel'), '6')
111 self.assertEquals(self.ec.get(channel, 'xmppSlice'), 'nepi')
112 self.assertEquals(self.ec.get(channel, 'xmppHost'), 'xmpp-plexus.onelab.eu')
113 self.assertEquals(self.ec.get(channel, 'xmppPort'), '5222')
114 self.assertEquals(self.ec.get(channel, 'xmppPassword'), '1234')
116 def test_creation_and_configuration_application(self):
118 app1 = self.ec.register_resource("OMFApplication")
119 self.ec.set(app1, 'appid', 'Vlc#1')
120 self.ec.set(app1, 'path', "/opt/vlc-1.1.13/cvlc")
121 self.ec.set(app1, 'args', "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
122 self.ec.set(app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
123 self.ec.set(app1, 'xmppSlice', "nepi")
124 self.ec.set(app1, 'xmppHost', "xmpp-plexus.onelab.eu")
125 self.ec.set(app1, 'xmppPort', "5222")
126 self.ec.set(app1, 'xmppPassword', "1234")
128 self.assertEquals(self.ec.get(app1, 'appid'), 'Vlc#1')
129 self.assertEquals(self.ec.get(app1, 'path'), '/opt/vlc-1.1.13/cvlc')
130 self.assertEquals(self.ec.get(app1, 'args'), "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
131 self.assertEquals(self.ec.get(app1, 'env'), 'DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority')
132 self.assertEquals(self.ec.get(app1, 'xmppSlice'), 'nepi')
133 self.assertEquals(self.ec.get(app1, 'xmppHost'), 'xmpp-plexus.onelab.eu')
134 self.assertEquals(self.ec.get(app1, 'xmppPort'), '5222')
135 self.assertEquals(self.ec.get(app1, 'xmppPassword'), '1234')
137 def test_connection(self):
139 node1 = self.ec.register_resource("OMFNode")
140 iface1 = self.ec.register_resource("OMFWifiInterface")
141 channel = self.ec.register_resource("OMFChannel")
142 app1 = self.ec.register_resource("OMFApplication")
143 app2 = self.ec.register_resource("OMFApplication")
145 self.ec.register_connection(app1, node1)
146 self.ec.register_connection(app2, node1)
147 self.ec.register_connection(node1, iface1)
148 self.ec.register_connection(iface1, channel)
150 self.assertEquals(len(self.ec.get_resource(node1).connections), 3)
151 self.assertEquals(len(self.ec.get_resource(iface1).connections), 2)
152 self.assertEquals(len(self.ec.get_resource(channel).connections), 1)
153 self.assertEquals(len(self.ec.get_resource(app1).connections), 1)
154 self.assertEquals(len(self.ec.get_resource(app2).connections), 1)
156 def test_condition(self):
158 node1 = self.ec.register_resource("OMFNode")
159 iface1 = self.ec.register_resource("OMFWifiInterface")
160 channel = self.ec.register_resource("OMFChannel")
161 app1 = self.ec.register_resource("OMFApplication")
162 app2 = self.ec.register_resource("OMFApplication")
164 self.ec.register_connection(app1, node1)
165 self.ec.register_connection(app2, node1)
166 self.ec.register_connection(node1, iface1)
167 self.ec.register_connection(iface1, channel)
169 self.ec.register_condition(app2, ResourceAction.START, app1, ResourceState.STARTED , "4s")
171 self.assertEquals(len(self.ec.get_resource(app2).conditions), 1)
173 def test_deploy(self):
174 node1 = self.ec.register_resource("OMFNode")
175 self.ec.set(node1, 'hostname', 'omf.plexus.wlab17')
176 self.ec.set(node1, 'xmppSlice', "nepi")
177 self.ec.set(node1, 'xmppHost', "xmpp-plexus.onelab.eu")
178 self.ec.set(node1, 'xmppPort', "5222")
179 self.ec.set(node1, 'xmppPassword', "1234")
181 iface1 = self.ec.register_resource("OMFWifiInterface")
182 self.ec.set(iface1, 'alias', "w0")
183 self.ec.set(iface1, 'mode', "adhoc")
184 self.ec.set(iface1, 'type', "g")
185 self.ec.set(iface1, 'essid', "vlcexp")
186 self.ec.set(iface1, 'ip', "10.0.0.17")
187 self.ec.set(iface1, 'xmppSlice', "nepi")
188 self.ec.set(iface1, 'xmppHost', "xmpp-plexus.onelab.eu")
189 self.ec.set(iface1, 'xmppPort', "5222")
190 self.ec.set(iface1, 'xmppPassword', "1234")
192 channel = self.ec.register_resource("OMFChannel")
193 self.ec.set(channel, 'channel', "6")
194 self.ec.set(channel, 'xmppSlice', "nepi")
195 self.ec.set(channel, 'xmppHost', "xmpp-plexus.onelab.eu")
196 self.ec.set(channel, 'xmppPort', "5222")
197 self.ec.set(channel, 'xmppPassword', "1234")
199 app1 = self.ec.register_resource("OMFApplication")
200 self.ec.set(app1, 'xmppSlice', "nepi")
201 self.ec.set(app1, 'xmppHost', "xmpp-plexus.onelab.eu")
202 self.ec.set(app1, 'xmppPort', "5222")
203 self.ec.set(app1, 'xmppPassword', "1234")
205 app2 = self.ec.register_resource("OMFApplication")
206 self.ec.set(app2, 'xmppSlice', "nepi")
207 self.ec.set(app2, 'xmppHost', "xmpp-plexus.onelab.eu")
208 self.ec.set(app2, 'xmppPort', "5222")
209 self.ec.set(app2, 'xmppPassword', "1234")
211 app3 = self.ec.register_resource("OMFApplication")
212 self.ec.set(app3, 'xmppSlice', "nepi")
213 self.ec.set(app3, 'xmppHost', "xmpp-plexus.onelab.eu")
214 self.ec.set(app3, 'xmppPort', "5222")
215 self.ec.set(app3, 'xmppPassword', "1234")
217 app4 = self.ec.register_resource("OMFApplication")
218 self.ec.set(app4, 'xmppSlice', "nepi")
219 self.ec.set(app4, 'xmppHost', "xmpp-plexus.onelab.eu")
220 self.ec.set(app4, 'xmppPort', "5222")
221 self.ec.set(app4, 'xmppPassword', "1234")
223 app5 = self.ec.register_resource("OMFApplication")
224 self.ec.set(app5, 'xmppSlice', "nepi")
225 self.ec.set(app5, 'xmppHost', "xmpp-plexus.onelab.eu")
226 self.ec.set(app5, 'xmppPort', "5222")
227 self.ec.set(app5, 'xmppPassword', "1234")
229 self.ec.register_connection(app1, node1)
230 self.ec.register_connection(app2, node1)
231 self.ec.register_connection(app3, node1)
232 self.ec.register_connection(app4, node1)
233 self.ec.register_connection(app5, node1)
234 self.ec.register_connection(node1, iface1)
235 self.ec.register_connection(iface1, channel)
237 self.ec.register_condition(app2, ResourceAction.START, app1, ResourceState.STARTED , "3s")
238 self.ec.register_condition(app3, ResourceAction.START, app2, ResourceState.STARTED , "2s")
239 self.ec.register_condition(app4, ResourceAction.START, app3, ResourceState.STARTED , "3s")
240 self.ec.register_condition(app5, ResourceAction.START, [app3, app2], ResourceState.STARTED , "2s")
241 self.ec.register_condition(app5, ResourceAction.START, app1, ResourceState.STARTED , "1m20s")
246 self.assertEquals(round(strfdiff(self.ec.get_resource(app2).start_time, self.ec.get_resource(app1).start_time),1), 3.0)
247 self.assertEquals(round(strfdiff(self.ec.get_resource(app3).start_time, self.ec.get_resource(app2).start_time),1), 2.0)
248 self.assertEquals(round(strfdiff(self.ec.get_resource(app4).start_time, self.ec.get_resource(app3).start_time),1), 3.0)
249 self.assertEquals(round(strfdiff(self.ec.get_resource(app5).start_time, self.ec.get_resource(app3).start_time),1), 2.0)
250 self.assertEquals(round(strfdiff(self.ec.get_resource(app5).start_time, self.ec.get_resource(app1).start_time),1), 7.0)
252 # Precision is at 1/10. So this one returns an error 7.03 != 7.0
253 #self.assertEquals(strfdiff(self.ec.get_resource(app5).start_time, self.ec.get_resource(app1).start_time), 7)
254 #In order to release everythings
258 if __name__ == '__main__':