for guid in self.ec.resources:
state = self.ec.state(guid)
critical = self.ec.get(guid, "critical")
-
if state == ResourceState.FAILED and critical:
self._failure_level = FailureLevel.RM_FAILURE
self.ec.logger.debug("RM critical failure occurred on guid %d." \
break
if reschedule:
+
callback = functools.partial(wait_all_and_start, group)
self.schedule("1s", callback)
else:
should be added in the do_start method.
"""
+
if not self.state in [ResourceState.READY, ResourceState.STOPPED]:
self.error("Wrong state %s for start" % self.state)
return
action 'START' are satisfied.
"""
+ #import pdb;pdb.set_trace()
+
reschedule = False
delay = reschedule_delay
+
## evaluate if conditions to start are met
if self.ec.abort:
return
# Verify all start conditions are met
for (group, state, time) in start_conditions:
# Uncomment for debug
- #unmet = []
- #for guid in group:
- # rm = self.ec.get_resource(guid)
- # unmet.append((guid, rm._state))
- #
- #self.debug("---- WAITED STATES ---- %s" % unmet )
+ unmet = []
+ for guid in group:
+ rm = self.ec.get_resource(guid)
+ unmet.append((guid, rm._state))
+
+ self.debug("---- WAITED STATES ---- %s" % unmet )
reschedule, delay = self._needs_reschedule(group, state, time)
if reschedule:
if reschedule:
self.ec.schedule(delay, self.deploy_with_conditions)
else:
- self.debug("----- STARTING ---- ")
+ self.debug("----- DEPLOYING ---- ")
self.deploy()
def do_connect(self, guid):
It becomes DEPLOYED after getting the xmpp client.
"""
+
self.set('xmppSlice',self.node.get('xmppSlice'))
self.set('xmppHost',self.node.get('xmppHost'))
self.set('xmppPort',self.node.get('xmppPort'))
self.get('args') + " : " + self.get('env')
self.info(msg)
- try:
- self._omf_api.execute(self.node.get('hostname'),self.get('appid'), \
- self.get('args'), self.get('path'), self.get('env'))
- except AttributeError:
- msg = "Credentials are not initialzed. XMPP Connections impossible"
- self.error(msg)
- raise
+ self._omf_api.execute(self.node.get('hostname'),self.get('appid'), \
+ self.get('args'), self.get('path'), self.get('env'))
super(OMFApplication, self).do_start()
State is set to STOPPED after the message is sent.
"""
- try:
- self._omf_api.exit(self.node.get('hostname'),self.get('appid'))
- except AttributeError:
- msg = "Credentials were not initialzed. XMPP Connections impossible"
- self.error(msg)
- raise
+ self._omf_api.exit(self.node.get('hostname'),self.get('appid'))
super(OMFApplication, self).do_stop()
def do_release(self):
It becomes DEPLOYED after sending messages to configure the channel
"""
+ if not (self.get('xmppSlice') and self.get('xmppHost')
+ and self.get('xmppPort') and self.get('xmppPassword')):
+ msg = "Credentials are not initialzed. XMPP Connections impossible"
+ self.error(msg)
+ raise RuntimeError, msg
+
if not self._omf_api :
self._omf_api = OMFAPIFactory.get_api(self.get('xmppSlice'),
self.get('xmppHost'), self.get('xmppPort'),
self.get('xmppPassword'), exp_id = self.exp_id)
- if not self._omf_api :
- msg = "Credentials are not initialzed. XMPP Connections impossible"
- self.error(msg)
- raise RuntimeError, msg
-
if not self.get('channel'):
msg = "Channel's value is not initialized"
self.error(msg)
if self._nodes_guid == "reschedule" :
self.ec.schedule("2s", self.deploy)
else:
- try:
- for couple in self._nodes_guid:
- #print "Couple node/alias : " + couple[0] + " , " + couple[1]
- attrval = self.get('channel')
- attrname = "net/%s/%s" % (couple[1], 'channel')
- self._omf_api.configure(couple[0], attrname, attrval)
- except AttributeError:
- msg = "Credentials are not initialzed. XMPP Connections impossible"
- self.error(msg)
- raise
+ for couple in self._nodes_guid:
+ attrval = self.get('channel')
+ attrname = "net/%s/%s" % (couple[1], 'channel')
+ self._omf_api.configure(couple[0], attrname, attrval)
super(OMFChannel, self).do_deploy()
self.ec.schedule(reschedule_delay, self.deploy)
return False
- try :
- for attrname in ["mode", "type", "essid"]:
- attrval = self.get(attrname)
- attrname = "net/%s/%s" % (self._alias, attrname)
- self._omf_api.configure(self.node.get('hostname'), attrname,
+ for attrname in ["mode", "type", "essid"]:
+ attrval = self.get(attrname)
+ attrname = "net/%s/%s" % (self._alias, attrname)
+ self._omf_api.configure(self.node.get('hostname'), attrname,
attrval)
- except AttributeError:
- self._state = ResourceState.FAILED
- msg = "Credentials are not initialzed. XMPP Connections impossible"
- self.debug(msg)
- #raise
- super(OMFWifiInterface, self).provision()
+ super(OMFWifiInterface, self).do_provision()
return True
def configure_ip(self):
self.ec.schedule(reschedule_delay, self.deploy)
return False
- try :
- attrval = self.get("ip")
- attrname = "net/%s/%s" % (self._alias, "ip")
- self._omf_api.configure(self.node.get('hostname'), attrname,
+ attrval = self.get("ip")
+ attrname = "net/%s/%s" % (self._alias, "ip")
+ self._omf_api.configure(self.node.get('hostname'), attrname,
attrval)
- except AttributeError:
- msg = "Credentials are not initialzed. XMPP Connections impossible"
- self.debug(msg)
- self.fail()
- #raise
return True
using OMF 5.4 protocol to configure the interface.
It becomes DEPLOYED after sending messages to configure the interface
"""
- if not self._omf_api :
- self._omf_api = OMFAPIFactory.get_api(self.get('xmppSlice'),
- self.get('xmppHost'), self.get('xmppPort'),
- self.get('xmppPassword'), exp_id = self.exp_id)
+ self.set('xmppSlice',self.node.get('xmppSlice'))
+ self.set('xmppHost',self.node.get('xmppHost'))
+ self.set('xmppPort',self.node.get('xmppPort'))
+ self.set('xmppPassword',self.node.get('xmppPassword'))
- if not self._omf_api :
+ if not (self.get('xmppSlice') and self.get('xmppHost')
+ and self.get('xmppPort') and self.get('xmppPassword')):
msg = "Credentials are not initialzed. XMPP Connections impossible"
self.error(msg)
raise RuntimeError, msg
+ if not self._omf_api :
+ self._omf_api = OMFAPIFactory.get_api(self.get('xmppSlice'),
+ self.get('xmppHost'), self.get('xmppPort'),
+ self.get('xmppPassword'), exp_id = self.exp_id)
+
if not (self.get('mode') and self.get('type') and self.get('essid') \
and self.get('ip')):
msg = "Interface's variable are not initialized"
# Check if the node is already deployed
if self.state < ResourceState.PROVISIONED:
- if self.configure_iface():
- self.configure_ip()
+ iface = False
+ if iface == False:
+ iface = self.configure_iface()
+ self.configure_ip()
super(OMFWifiInterface, self).do_deploy()
It becomes DEPLOYED after sending messages to enroll the node
"""
+ if not (self.get('xmppSlice') and self.get('xmppHost')
+ and self.get('xmppPort') and self.get('xmppPassword')):
+ msg = "Credentials are not initialzed. XMPP Connections impossible"
+ self.error(msg)
+ raise RuntimeError, msg
+
if not self._omf_api :
self._omf_api = OMFAPIFactory.get_api(self.get('xmppSlice'),
self.get('xmppHost'), self.get('xmppPort'),
self.get('xmppPassword'), exp_id = self.exp_id)
- if not self._omf_api :
- msg = "Credentials are not initialzed. XMPP Connections impossible"
- self.error(msg)
- raise RuntimeError, msg
-
if not self.get('hostname') :
msg = "Hostname's value is not initialized"
self.error(msg)
raise RuntimeError, msg
- try:
- self._omf_api.enroll_host(self.get('hostname'))
- except AttributeError:
- msg = "Credentials are not initialzed. XMPP Connections impossible"
- self.error(msg)
- raise
+ self._omf_api.enroll_host(self.get('hostname'))
super(OMFNode, self).do_deploy()
import time
import unittest
-class DummyEC(ExperimentController):
- pass
-
-class DummyRM(ResourceManager):
- pass
-
-
class OMFResourceFactoryTestCase(unittest.TestCase):
-
def test_creation_phase(self):
self.assertEquals(OMFNode.rtype(), "OMFNode")
self.assertEquals(len(OMFNode._attributes), 6)
self.assertEquals(OMFWifiInterface.rtype(), "OMFWifiInterface")
- self.assertEquals(len(OMFWifiInterface._attributes), 9)
+ self.assertEquals(len(OMFWifiInterface._attributes), 10)
self.assertEquals(OMFChannel.rtype(), "OMFChannel")
- self.assertEquals(len(OMFChannel._attributes), 5)
+ self.assertEquals(len(OMFChannel._attributes), 6)
self.assertEquals(OMFApplication.rtype(), "OMFApplication")
- self.assertEquals(len(OMFApplication._attributes), 12)
-
+ self.assertEquals(len(OMFApplication._attributes), 13)
class OMFEachTestCase(unittest.TestCase):
-
def setUp(self):
- self.ec = DummyEC(exp_id = "99999")
+ self.ec = ExperimentController(exp_id = "99999")
self.node1 = self.ec.register_resource("OMFNode")
self.ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
self.assertEquals(len(self.ec.get_resource(self.app4).conditions[ResourceAction.STOP]), 1)
self.assertEquals(len(self.ec.get_resource(self.app5).conditions[ResourceAction.START]), 2)
-
-class OMFVLCTestCaseComplete(unittest.TestCase):
-
- def xtest_deploy(self):
- ec = DummyEC(exp_id = "5421" )
+class OMFVLCNormalCase(unittest.TestCase):
+ def test_deploy(self):
+ ec = ExperimentController(exp_id = "5421" )
self.node1 = ec.register_resource("OMFNode")
ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
ec.wait_finished([self.app1, self.app2, self.app3,self.app4, self.app5])
- time.sleep(1)
-
self.assertEquals(round(tdiffsec(ec.get_resource(self.app2).start_time, ec.get_resource(self.app1).start_time),0), 3.0)
self.assertEquals(round(tdiffsec(ec.get_resource(self.app3).start_time, ec.get_resource(self.app2).start_time),0), 2.0)
self.assertEquals(round(tdiffsec(ec.get_resource(self.app4).start_time, ec.get_resource(self.app3).start_time),0), 3.0)
self.assertEquals(ec.get_resource(self.node1).state, ResourceState.STARTED)
self.assertEquals(ec.get_resource(self.iface1).state, ResourceState.STARTED)
self.assertEquals(ec.get_resource(self.channel).state, ResourceState.STARTED)
- self.assertEquals(ec.get_resource(self.app1).state, ResourceState.FINISHED)
- self.assertEquals(ec.get_resource(self.app2).state, ResourceState.FINISHED)
- self.assertEquals(ec.get_resource(self.app3).state, ResourceState.FINISHED)
- self.assertEquals(ec.get_resource(self.app4).state, ResourceState.FINISHED)
- self.assertEquals(ec.get_resource(self.app5).state, ResourceState.FINISHED)
+ self.assertEquals(ec.get_resource(self.app1).state, ResourceState.STOPPED)
+ self.assertEquals(ec.get_resource(self.app2).state, ResourceState.STOPPED)
+ self.assertEquals(ec.get_resource(self.app3).state, ResourceState.STOPPED)
+ self.assertEquals(ec.get_resource(self.app4).state, ResourceState.STOPPED)
+ self.assertEquals(ec.get_resource(self.app5).state, ResourceState.STOPPED)
ec.shutdown()
- time.sleep(1)
self.assertEquals(ec.get_resource(self.node1).state, ResourceState.RELEASED)
self.assertEquals(ec.get_resource(self.iface1).state, ResourceState.RELEASED)
self.assertEquals(ec.get_resource(self.app5).state, ResourceState.RELEASED)
-
-class OMFVLCTestCaseNoComplete(unittest.TestCase):
- def test_deploy(self):
-
- ec = DummyEC(exp_id = "1245" )
-
- self.node1 = ec.register_resource("OMFNode")
- ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
- ec.set(self.node1, 'xmppSlice', "nepi")
- ec.set(self.node1, 'xmppHost', "xmpp-plexus.onelab.eu")
- ec.set(self.node1, 'xmppPort', "5222")
- ec.set(self.node1, 'xmppPassword', "1234")
-
- self.node2 = ec.register_resource("OMFNode")
-
- self.iface1 = ec.register_resource("OMFWifiInterface")
- ec.set(self.iface1, 'alias', "w0")
- ec.set(self.iface1, 'mode', "adhoc")
- ec.set(self.iface1, 'type', "g")
- ec.set(self.iface1, 'essid', "vlcexp")
- ec.set(self.iface1, 'ip', "10.0.0.17")
-
- self.iface2 = ec.register_resource("OMFWifiInterface")
-
- self.channel = ec.register_resource("OMFChannel")
- ec.set(self.channel, 'channel', "6")
- ec.set(self.channel, 'xmppSlice', "nepi")
- ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
- ec.set(self.channel, 'xmppPort', "5222")
- ec.set(self.channel, 'xmppPassword', "1234")
-
- self.app1 = ec.register_resource("OMFApplication")
- ec.set(self.app1, 'appid', 'Vlc#1')
- ec.set(self.app1, 'path', "/opt/vlc-1.1.13/cvlc")
- ec.set(self.app1, 'args', "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
- ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
-
- self.app2 = ec.register_resource("OMFApplication")
-
- self.app3 = ec.register_resource("OMFApplication")
- ec.set(self.app3, 'appid', 'Kill#2')
- ec.set(self.app3, 'path', "/usr/bin/killall")
- ec.set(self.app3, 'args', "vlc")
- ec.set(self.app3, 'env', " ")
-
- ec.register_connection(self.app1, self.node1)
- ec.register_connection(self.app2, self.node1)
- ec.register_connection(self.app3, self.node1)
- ec.register_connection(self.node1, self.iface1)
- ec.register_connection(self.iface1, self.channel)
- ec.register_connection(self.node2, self.iface2)
- ec.register_connection(self.iface2, self.channel)
-
- ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "2s")
- ec.register_condition(self.app3, ResourceAction.START, self.app2, ResourceState.STARTED , "2s")
-
- ec.register_condition([self.app1, self.app2, self.app3], ResourceAction.STOP, self.app1, ResourceState.STARTED , "6s")
-
- ec.deploy()
-
- ec.wait_finished([self.app1, self.app2, self.app3])
-
-# self.assertEquals(ec.get_resource(self.node1).state, ResourceState.STARTED)
-# self.assertEquals(ec.get_resource(self.node2).state, ResourceState.FAILED)
-# self.assertEquals(ec.get_resource(self.iface1).state, ResourceState.STARTED)
-# self.assertEquals(ec.get_resource(self.iface2).state, ResourceState.FAILED)
-# self.assertEquals(ec.get_resource(self.channel).state, ResourceState.STARTED)
-# self.assertEquals(ec.get_resource(self.app1).state, ResourceState.FINISHED)
-# self.assertEquals(ec.get_resource(self.app2).state, ResourceState.FAILED)
-# self.assertEquals(ec.get_resource(self.app3).state, ResourceState.FINISHED)
-
- time.sleep(1)
-
- ec.shutdown()
-
- self.assertEquals(ec.get_resource(self.node1).state, ResourceState.RELEASED)
- self.assertEquals(ec.get_resource(self.node2).state, ResourceState.RELEASED)
- self.assertEquals(ec.get_resource(self.iface1).state, ResourceState.RELEASED)
- self.assertEquals(ec.get_resource(self.iface2).state, ResourceState.RELEASED)
- self.assertEquals(ec.get_resource(self.channel).state, ResourceState.RELEASED)
- self.assertEquals(ec.get_resource(self.app1).state, ResourceState.RELEASED)
- self.assertEquals(ec.get_resource(self.app2).state, ResourceState.RELEASED)
- self.assertEquals(ec.get_resource(self.app3).state, ResourceState.RELEASED)
-
if __name__ == '__main__':
unittest.main()
--- /dev/null
+#!/usr/bin/env python
+#
+# NEPI, a framework to manage network experiments
+# Copyright (C) 2013 INRIA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Author: Julien Tribino <julien.tribino@inria.fr>
+
+
+from nepi.execution.resource import ResourceFactory, ResourceManager, ResourceAction, ResourceState
+from nepi.execution.ec import ExperimentController
+
+from nepi.resources.omf.node import OMFNode
+from nepi.resources.omf.application import OMFApplication
+from nepi.resources.omf.interface import OMFWifiInterface
+from nepi.resources.omf.channel import OMFChannel
+from nepi.resources.omf.omf_api import OMFAPIFactory
+
+from nepi.util.timefuncs import *
+
+import time
+import unittest
+
+class OMFVLCWrongCaseAllCritical(unittest.TestCase):
+
+ id = 1000
+
+ def setUp(self):
+ self.ec = ExperimentController(exp_id = str(OMFVLCWrongCaseAllCritical.id))
+ OMFVLCWrongCaseAllCritical.id += 1
+
+ self.node1 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
+ self.ec.set(self.node1, 'xmppSlice', "nepi")
+ self.ec.set(self.node1, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node1, 'xmppPort', "5222")
+ self.ec.set(self.node1, 'xmppPassword', "1234")
+
+ self.iface1 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface1, 'alias', "w0")
+ self.ec.set(self.iface1, 'mode', "adhoc")
+ self.ec.set(self.iface1, 'type', "g")
+ self.ec.set(self.iface1, 'essid', "vlcexp")
+ self.ec.set(self.iface1, 'ip', "10.0.0.17")
+
+ self.app1 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app1, 'appid', 'Vlc#1')
+ self.ec.set(self.app1, 'path', "/opt/vlc-1.1.13/cvlc")
+ self.ec.set(self.app1, 'args', "/opt/10-by-p0d.avi --sout '#rtp{dst=10.0.0.37,port=1234,mux=ts}'")
+ self.ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
+
+ self.ec.register_connection(self.app1, self.node1)
+ self.ec.register_connection(self.node1, self.iface1)
+
+ def test_deploy_wo_node(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+
+ self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1])
+
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+
+ def test_deploy_wo_hostname(self):
+
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+
+ self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1])
+
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+
+ def test_deploy_wo_iface(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab17')
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+
+ self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1])
+
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+
+ def test_deploy_wo_ip(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab17')
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+
+ self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "2s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1])
+
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+
+ def test_deploy_wo_app(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab17')
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.app2 = self.ec.register_resource("OMFApplication")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.iface2, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.app2, self.node2)
+
+ self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "2s")
+ self.ec.register_condition([self.app1, self.app2], ResourceAction.STOP, self.app1, ResourceState.STARTED , "4s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1, self.app2])
+
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
+
+ def test_deploy_wo_app_path(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab17')
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.app2 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app2, 'appid', 'Vlc#2')
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.iface2, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.app2, self.node2)
+
+ self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "2s")
+ self.ec.register_condition([self.app1, self.app2], ResourceAction.STOP, self.app1, ResourceState.STARTED , "4s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1, self.app2])
+
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
+
+
+if __name__ == '__main__':
+ unittest.main()
+
+
+
--- /dev/null
+#!/usr/bin/env python
+#
+# NEPI, a framework to manage network experiments
+# Copyright (C) 2013 INRIA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Author: Julien Tribino <julien.tribino@inria.fr>
+
+
+from nepi.execution.resource import ResourceFactory, ResourceManager, ResourceAction, ResourceState
+from nepi.execution.ec import ExperimentController
+
+from nepi.resources.omf.node import OMFNode
+from nepi.resources.omf.application import OMFApplication
+from nepi.resources.omf.interface import OMFWifiInterface
+from nepi.resources.omf.channel import OMFChannel
+from nepi.resources.omf.omf_api import OMFAPIFactory
+
+from nepi.util.timefuncs import *
+
+import time
+import unittest
+
+class OMFVLCWrongCaseWithNonCritical(unittest.TestCase):
+
+ id = 2000
+
+ def setUp(self):
+ self.ec = ExperimentController(exp_id = str(OMFVLCWrongCaseWithNonCritical.id))
+ OMFVLCWrongCaseWithNonCritical.id += 1
+
+ self.node1 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
+ self.ec.set(self.node1, 'xmppSlice', "nepi")
+ self.ec.set(self.node1, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node1, 'xmppPort', "5222")
+ self.ec.set(self.node1, 'xmppPassword', "1234")
+
+ self.iface1 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface1, 'alias', "w0")
+ self.ec.set(self.iface1, 'mode', "adhoc")
+ self.ec.set(self.iface1, 'type', "g")
+ self.ec.set(self.iface1, 'essid', "vlcexp")
+ self.ec.set(self.iface1, 'ip', "10.0.0.17")
+
+ self.app1 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app1, 'appid', 'Kill#1')
+ self.ec.set(self.app1, 'path', "/usr/bin/test")
+ self.ec.set(self.app1, 'args', "-1")
+ self.ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
+
+ self.ec.register_connection(self.app1, self.node1)
+ self.ec.register_connection(self.node1, self.iface1)
+
+ def test_deploy_with_node_nc(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, "critical", False)
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+
+ self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "5s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1])
+
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+
+ def test_deploy_with_node_and_iface_nc(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, "critical", False)
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.node2, "critical", False)
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+
+ self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "5s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1])
+
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+
+ def test_deploy_with_node_iface_channel_nc(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, "critical", False)
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab37')
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.node2, "critical", False)
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, "critical", False)
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+
+ self.ec.register_condition([self.app1], ResourceAction.STOP, self.app1, ResourceState.STARTED , "10s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1])
+
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+
+ def test_deploy_with_app_nc(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab37')
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.app2 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app2, "critical", False)
+ self.ec.set(self.app2, 'appid', 'Kill#22')
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+ self.ec.register_connection(self.app2, self.node2)
+
+ self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "6s")
+ self.ec.register_condition([self.app1, self.app2], ResourceAction.STOP, self.app1, ResourceState.STARTED , "10s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1, self.app2])
+
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.STOPPED)
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
+
+ def test_deploy_with_all_nc_and_app_critical(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, "critical", False)
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab37')
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, "critical", False)
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, "critical", False)
+ self.ec.set(self.channel, 'channel', "6")
+
+ self.app2 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app2, 'appid', 'Kill#22')
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+ self.ec.register_connection(self.app2, self.node2)
+
+ self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "6s")
+ self.ec.register_condition([self.app1, self.app2], ResourceAction.STOP, self.app1, ResourceState.STARTED , "10s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1, self.app2])
+
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
+
+
+class OMFVLCWrongCaseWithNonCriticalDep(unittest.TestCase):
+
+ id = 3000
+
+ def setUp(self):
+ self.ec = ExperimentController(exp_id = str(OMFVLCWrongCaseWithNonCriticalDep.id))
+ OMFVLCWrongCaseWithNonCriticalDep.id += 1
+
+ self.node1 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node1, 'hostname', 'omf.plexus.wlab17')
+ self.ec.set(self.node1, 'xmppSlice', "nepi")
+ self.ec.set(self.node1, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node1, 'xmppPort', "5222")
+ self.ec.set(self.node1, 'xmppPassword', "1234")
+
+ self.iface1 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface1, 'alias', "w0")
+ self.ec.set(self.iface1, 'mode', "adhoc")
+ self.ec.set(self.iface1, 'type', "g")
+ self.ec.set(self.iface1, 'essid', "vlcexp")
+ self.ec.set(self.iface1, 'ip', "10.0.0.17")
+
+ self.app1 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app1, 'appid', 'Kill#1')
+ self.ec.set(self.app1, 'path', "/usr/bin/test")
+ self.ec.set(self.app1, 'args', "-1")
+ self.ec.set(self.app1, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
+
+ self.ec.register_connection(self.app1, self.node1)
+ self.ec.register_connection(self.node1, self.iface1)
+
+ def test_deploy_with_app_nc_and_critical_wrong(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab37')
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.app2 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app2, "critical", False)
+ self.ec.set(self.app2, 'appid', 'Kill#32')
+
+ self.app3 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app3, 'appid', 'Kill#33')
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+ self.ec.register_connection(self.app2, self.node2)
+ self.ec.register_connection(self.app3, self.node2)
+
+ self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "5s")
+ self.ec.register_condition(self.app3, ResourceAction.START, self.app2, ResourceState.STARTED , "5s")
+ self.ec.register_condition([self.app1, self.app2, self.app3], ResourceAction.STOP, self.app1, ResourceState.STARTED , "15s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1, self.app2, self.app3])
+
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.RELEASED)
+
+ def test_deploy_with_app_nc_and_critical_right(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab37')
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.app2 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app2, "critical", False)
+ self.ec.set(self.app2, 'appid', 'Kill#32')
+
+ self.app3 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app3, 'appid', 'Kill#3')
+ self.ec.set(self.app3, 'path', "/usr/bin/test")
+ self.ec.set(self.app3, 'args', "-1")
+ self.ec.set(self.app3, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+ self.ec.register_connection(self.app2, self.node2)
+ self.ec.register_connection(self.app3, self.node2)
+
+ self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "5s")
+ self.ec.register_condition(self.app3, ResourceAction.START, self.app2, ResourceState.STARTED , "5s")
+ self.ec.register_condition([self.app1, self.app2, self.app3], ResourceAction.STOP, self.app1, ResourceState.STARTED , "15s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1, self.app2, self.app3])
+
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.RELEASED)
+
+
+ def test_deploy_with_many_app_nc_and_critical(self):
+ self.node2 = self.ec.register_resource("OMFNode")
+ self.ec.set(self.node2, 'hostname', 'omf.plexus.wlab37')
+ self.ec.set(self.node2, 'xmppSlice', "nepi")
+ self.ec.set(self.node2, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.node2, 'xmppPort', "5222")
+ self.ec.set(self.node2, 'xmppPassword', "1234")
+
+ self.iface2 = self.ec.register_resource("OMFWifiInterface")
+ self.ec.set(self.iface2, 'alias', "w0")
+ self.ec.set(self.iface2, 'mode', "adhoc")
+ self.ec.set(self.iface2, 'type', "g")
+ self.ec.set(self.iface2, 'essid', "vlcexp")
+ self.ec.set(self.iface2, 'ip', "10.0.0.37")
+
+ self.channel = self.ec.register_resource("OMFChannel")
+ self.ec.set(self.channel, 'channel', "6")
+ self.ec.set(self.channel, 'xmppSlice', "nepi")
+ self.ec.set(self.channel, 'xmppHost', "xmpp-plexus.onelab.eu")
+ self.ec.set(self.channel, 'xmppPort', "5222")
+ self.ec.set(self.channel, 'xmppPassword', "1234")
+
+ self.app2 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app2, "critical", False)
+ self.ec.set(self.app2, 'appid', 'Kill#32')
+
+ self.app3 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app3, "critical", False)
+ self.ec.set(self.app3, 'appid', 'Kill#3')
+ self.ec.set(self.app3, 'path', "/usr/bin/test")
+ self.ec.set(self.app3, 'args', "-1")
+ self.ec.set(self.app3, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
+
+ self.app4 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app4, 'appid', 'Kill#4')
+ self.ec.set(self.app4, 'path', "/usr/bin/test")
+ self.ec.set(self.app4, 'args', "-1")
+ self.ec.set(self.app4, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
+
+ self.app5 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app5, "critical", False)
+ self.ec.set(self.app5, 'appid', 'Kill#32')
+
+ self.app6 = self.ec.register_resource("OMFApplication")
+ self.ec.set(self.app6, 'appid', 'Kill#6')
+ self.ec.set(self.app6, 'path', "/usr/bin/test")
+ self.ec.set(self.app6, 'args', "-1")
+ self.ec.set(self.app6, 'env', "DISPLAY=localhost:10.0 XAUTHORITY=/root/.Xauthority")
+
+ self.ec.register_connection(self.iface1, self.channel)
+ self.ec.register_connection(self.node2, self.iface2)
+ self.ec.register_connection(self.iface2, self.channel)
+ self.ec.register_connection(self.app2, self.node1)
+ self.ec.register_connection(self.app3, self.node1)
+ self.ec.register_connection(self.app4, self.node2)
+ self.ec.register_connection(self.app5, self.node2)
+ self.ec.register_connection(self.app6, self.node2)
+
+ self.ec.register_condition(self.app2, ResourceAction.START, self.app1, ResourceState.STARTED , "4s")
+ self.ec.register_condition(self.app3, ResourceAction.START, self.app2, ResourceState.STARTED , "4s")
+ self.ec.register_condition(self.app4, ResourceAction.START, self.app1, ResourceState.STARTED , "4s")
+ self.ec.register_condition(self.app5, ResourceAction.START, self.app4, ResourceState.STARTED , "4s")
+ self.ec.register_condition(self.app6, ResourceAction.START, self.app5, ResourceState.STARTED , "4s")
+ self.ec.register_condition([self.app1, self.app2, self.app3, self.app4, self.app5, self.app6 ], ResourceAction.STOP, self.app1, ResourceState.STARTED , "30s")
+
+ self.ec.deploy()
+
+ self.ec.wait_finished([self.app1, self.app2, self.app3, self.app4, self.app5, self.app6])
+
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.app5).state, ResourceState.FAILED)
+ self.assertEquals(self.ec.get_resource(self.app6).state, ResourceState.FAILED)
+
+ self.ec.shutdown()
+
+ self.assertEquals(self.ec.get_resource(self.node1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.node2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.iface2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.channel).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app1).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app2).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app3).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app4).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app5).state, ResourceState.RELEASED)
+ self.assertEquals(self.ec.get_resource(self.app6).state, ResourceState.RELEASED)
+
+
+if __name__ == '__main__':
+ unittest.main()
+
+
+