Fixing tickets http://newyans.pl.sophia.inria.fr/trac/ticket/37 and http://newyans...
[nepi.git] / test / execution / resource.py
index 2aaa4b9..d6398eb 100755 (executable)
@@ -292,7 +292,6 @@ class ResourceManagerTestCase(unittest.TestCase):
         ResourceFactory.register_type(ErrorApplication)
         ResourceFactory.register_type(Node)
         ResourceFactory.register_type(Interface)
-        ResourceFactory.register_type(Channel)
 
         ec = ExperimentController()
 
@@ -307,16 +306,110 @@ class ResourceManagerTestCase(unittest.TestCase):
 
         ec.shutdown()
 
-        self.assertTrue(ec._fm._failure_level == FailureLevel.RM_FAILURE)
+        self.assertEquals(ec._fm._failure_level, FailureLevel.RM_FAILURE)
 
+    def test_critical(self):
+        from nepi.execution.resource import ResourceFactory
+        
+        ResourceFactory.register_type(ErrorApplication)
+        ResourceFactory.register_type(Application)
+        ResourceFactory.register_type(Node)
+        ResourceFactory.register_type(Interface)
 
-    def ztest_start_with_condition(self):
-        # TODO!!!
-        pass
-    
-    def ztest_stop_with_condition(self):
-        # TODO!!!
-        pass
+        ec = ExperimentController()
+
+        node = ec.register_resource("Node")
+
+        apps = list()
+        
+        eapp = ec.register_resource("ErrorApplication")
+        ec.set(eapp, "critical", False)
+        ec.register_connection(eapp, node)
+        apps.append(eapp)
+
+        for i in xrange(10):
+            app = ec.register_resource("Application")
+            ec.register_connection(app, node)
+            apps.append(app)
+
+        ec.deploy()
+
+        ec.wait_finished(apps)
+        
+        state = ec.state(eapp)
+        self.assertEquals(state, ResourceState.FAILED)
+      
+        apps.remove(eapp)
+
+        for app in apps:
+            state = ec.state(app)
+            self.assertEquals(state, ResourceState.FINISHED)
+        
+        ec.shutdown()
+
+        self.assertEquals(ec._fm._failure_level, FailureLevel.OK)
+
+    def test_start_with_condition(self):
+        from nepi.execution.resource import ResourceFactory
+        
+        ResourceFactory.register_type(Application)
+        ResourceFactory.register_type(Node)
+        ResourceFactory.register_type(Interface)
+
+        ec = ExperimentController()
+
+        node = ec.register_resource("Node")
+
+        app1 = ec.register_resource("Application")
+        ec.register_connection(app1, node)
+
+        app2 = ec.register_resource("Application")
+        ec.register_connection(app2, node)
+
+        ec.register_condition(app2, ResourceAction.START, app1, 
+                ResourceState.STARTED, time = "5s")
+
+        ec.deploy()
+
+        ec.wait_finished([app1, app2])
+        
+        rmapp1 = ec.get_resource(app1)
+        rmapp2 = ec.get_resource(app2)
+
+        self.assertTrue(rmapp2.start_time > rmapp1.start_time)
+        
+        ec.shutdown()
+
+    def test_stop_with_condition(self):
+        from nepi.execution.resource import ResourceFactory
+        
+        ResourceFactory.register_type(Application)
+        ResourceFactory.register_type(Node)
+        ResourceFactory.register_type(Interface)
+
+        ec = ExperimentController()
+
+        node = ec.register_resource("Node")
+
+        app1 = ec.register_resource("Application")
+        ec.register_connection(app1, node)
+
+        app2 = ec.register_resource("Application")
+        ec.register_connection(app2, node)
+
+        ec.register_condition(app2, ResourceAction.START, app1, 
+                ResourceState.STOPPED)
+
+        ec.deploy()
+
+        ec.wait_finished([app1, app2])
+        
+        rmapp1 = ec.get_resource(app1)
+        rmapp2 = ec.get_resource(app2)
+
+        self.assertTrue(rmapp2.start_time > rmapp1.stop_time)
+        
+        ec.shutdown()
 
     def ztest_set_with_condition(self):
         # TODO!!!