From b7a7af6c58676d54726365c00c15106ba8784214 Mon Sep 17 00:00:00 2001 From: Julien Tribino Date: Tue, 5 Nov 2013 20:41:32 +0100 Subject: [PATCH] update the test for OMF including the non critical stuff and the new ec_shutdown --- src/nepi/execution/ec.py | 2 +- src/nepi/execution/resource.py | 18 +- src/nepi/resources/omf/application.py | 17 +- src/nepi/resources/omf/channel.py | 25 +- src/nepi/resources/omf/interface.py | 50 +- src/nepi/resources/omf/node.py | 18 +- .../omf/{vlc.py => vlc_normal_case.py} | 123 +---- test/resources/omf/vlc_wrong_critical.py | 327 +++++++++++ test/resources/omf/vlc_wrong_non_critical.py | 521 ++++++++++++++++++ 9 files changed, 916 insertions(+), 185 deletions(-) rename test/resources/omf/{vlc.py => vlc_normal_case.py} (73%) create mode 100755 test/resources/omf/vlc_wrong_critical.py create mode 100755 test/resources/omf/vlc_wrong_non_critical.py diff --git a/src/nepi/execution/ec.py b/src/nepi/execution/ec.py index fe110e73..ec216b76 100644 --- a/src/nepi/execution/ec.py +++ b/src/nepi/execution/ec.py @@ -64,7 +64,6 @@ class FailureManager(object): 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." \ @@ -657,6 +656,7 @@ class ExperimentController(object): break if reschedule: + callback = functools.partial(wait_all_and_start, group) self.schedule("1s", callback) else: diff --git a/src/nepi/execution/resource.py b/src/nepi/execution/resource.py index c782416b..325895ab 100644 --- a/src/nepi/execution/resource.py +++ b/src/nepi/execution/resource.py @@ -467,6 +467,7 @@ class ResourceManager(Logger): 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 @@ -807,9 +808,12 @@ class ResourceManager(Logger): 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 @@ -826,12 +830,12 @@ class ResourceManager(Logger): # 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: @@ -915,7 +919,7 @@ class ResourceManager(Logger): if reschedule: self.ec.schedule(delay, self.deploy_with_conditions) else: - self.debug("----- STARTING ---- ") + self.debug("----- DEPLOYING ---- ") self.deploy() def do_connect(self, guid): diff --git a/src/nepi/resources/omf/application.py b/src/nepi/resources/omf/application.py index 75a277f1..6ce9923f 100644 --- a/src/nepi/resources/omf/application.py +++ b/src/nepi/resources/omf/application.py @@ -153,6 +153,7 @@ class OMFApplication(OMFResource): 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')) @@ -199,13 +200,8 @@ class OMFApplication(OMFResource): 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() @@ -215,13 +211,8 @@ class OMFApplication(OMFResource): 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): diff --git a/src/nepi/resources/omf/channel.py b/src/nepi/resources/omf/channel.py index 4b412b79..707c95c4 100644 --- a/src/nepi/resources/omf/channel.py +++ b/src/nepi/resources/omf/channel.py @@ -127,16 +127,17 @@ class OMFChannel(OMFResource): 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) @@ -147,16 +148,10 @@ class OMFChannel(OMFResource): 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() diff --git a/src/nepi/resources/omf/interface.py b/src/nepi/resources/omf/interface.py index b4c1df7b..7dd795e8 100644 --- a/src/nepi/resources/omf/interface.py +++ b/src/nepi/resources/omf/interface.py @@ -128,19 +128,13 @@ class OMFWifiInterface(OMFResource): 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): @@ -151,16 +145,10 @@ class OMFWifiInterface(OMFResource): 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 @@ -169,16 +157,22 @@ class OMFWifiInterface(OMFResource): 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" @@ -197,8 +191,10 @@ class OMFWifiInterface(OMFResource): # 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() diff --git a/src/nepi/resources/omf/node.py b/src/nepi/resources/omf/node.py index 4229f440..daa87435 100644 --- a/src/nepi/resources/omf/node.py +++ b/src/nepi/resources/omf/node.py @@ -102,27 +102,23 @@ class OMFNode(OMFResource): 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() diff --git a/test/resources/omf/vlc.py b/test/resources/omf/vlc_normal_case.py similarity index 73% rename from test/resources/omf/vlc.py rename to test/resources/omf/vlc_normal_case.py index 4d3c1d0e..5d9dfde1 100755 --- a/test/resources/omf/vlc.py +++ b/test/resources/omf/vlc_normal_case.py @@ -33,34 +33,24 @@ from nepi.util.timefuncs import * 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') @@ -155,11 +145,9 @@ class OMFEachTestCase(unittest.TestCase): 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') @@ -232,8 +220,6 @@ class OMFVLCTestCaseComplete(unittest.TestCase): 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) @@ -243,14 +229,13 @@ class OMFVLCTestCaseComplete(unittest.TestCase): 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) @@ -262,90 +247,6 @@ class OMFVLCTestCaseComplete(unittest.TestCase): 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() diff --git a/test/resources/omf/vlc_wrong_critical.py b/test/resources/omf/vlc_wrong_critical.py new file mode 100755 index 00000000..4a9dd196 --- /dev/null +++ b/test/resources/omf/vlc_wrong_critical.py @@ -0,0 +1,327 @@ +#!/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 . +# +# Author: Julien Tribino + + +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() + + + diff --git a/test/resources/omf/vlc_wrong_non_critical.py b/test/resources/omf/vlc_wrong_non_critical.py new file mode 100755 index 00000000..a43c23b9 --- /dev/null +++ b/test/resources/omf/vlc_wrong_non_critical.py @@ -0,0 +1,521 @@ +#!/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 . +# +# Author: Julien Tribino + + +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() + + + -- 2.43.0