update the test for OMF including the non critical stuff and the new ec_shutdown
authorJulien Tribino <julien.tribino@inria.fr>
Tue, 5 Nov 2013 19:41:32 +0000 (20:41 +0100)
committerJulien Tribino <julien.tribino@inria.fr>
Tue, 5 Nov 2013 19:41:32 +0000 (20:41 +0100)
src/nepi/execution/ec.py
src/nepi/execution/resource.py
src/nepi/resources/omf/application.py
src/nepi/resources/omf/channel.py
src/nepi/resources/omf/interface.py
src/nepi/resources/omf/node.py
test/resources/omf/vlc_normal_case.py [moved from test/resources/omf/vlc.py with 73% similarity]
test/resources/omf/vlc_wrong_critical.py [new file with mode: 0755]
test/resources/omf/vlc_wrong_non_critical.py [new file with mode: 0755]

index fe110e7..ec216b7 100644 (file)
@@ -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:
index c782416..325895a 100644 (file)
@@ -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):
index 75a277f..6ce9923 100644 (file)
@@ -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):
index 4b412b7..707c95c 100644 (file)
@@ -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()
 
index b4c1df7..7dd795e 100644 (file)
@@ -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()
 
index 4229f44..daa8743 100644 (file)
@@ -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()
 
similarity index 73%
rename from test/resources/omf/vlc.py
rename to test/resources/omf/vlc_normal_case.py
index 4d3c1d0..5d9dfde 100755 (executable)
@@ -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 (executable)
index 0000000..4a9dd19
--- /dev/null
@@ -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 <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()
+
+
+
diff --git a/test/resources/omf/vlc_wrong_non_critical.py b/test/resources/omf/vlc_wrong_non_critical.py
new file mode 100755 (executable)
index 0000000..a43c23b
--- /dev/null
@@ -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 <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()
+
+
+