+ def test_concurrency(self):
+ from nepi.execution.resource import ResourceFactory
+
+ ResourceFactory.register_type(Application)
+ ResourceFactory.register_type(Node)
+ ResourceFactory.register_type(Interface)
+ ResourceFactory.register_type(Channel)
+
+ ec = ExperimentController()
+
+ node = ec.register_resource("Node")
+
+ apps = list()
+ for i in range(1000):
+ app = ec.register_resource("Application")
+ ec.register_connection(app, node)
+ apps.append(app)
+
+ ec.deploy()
+
+ ec.wait_finished(apps)
+
+ self.assertTrue(ec.state(node) == ResourceState.STARTED)
+ self.assertTrue(
+ all([ec.state(guid) == ResourceState.STOPPED \
+ for guid in apps])
+ )
+
+ ec.shutdown()
+
+ def test_exception(self):
+ from nepi.execution.resource import ResourceFactory
+
+ ResourceFactory.register_type(ErrorApplication)
+ ResourceFactory.register_type(Node)
+ ResourceFactory.register_type(Interface)
+
+ ec = ExperimentController()
+
+ node = ec.register_resource("Node")
+
+ app = ec.register_resource("ErrorApplication")
+ ec.register_connection(app, node)
+
+ ec.deploy()
+
+ ec.wait_finished(app)
+
+ ec.shutdown()
+
+ self.assertEqual(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)
+
+ 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 range(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.assertEqual(state, ResourceState.FAILED)
+
+ apps.remove(eapp)
+
+ for app in apps:
+ state = ec.state(app)
+ self.assertEqual(state, ResourceState.STOPPED)
+
+ ec.shutdown()
+
+ self.assertEqual(ec._fm._failure_level, FailureLevel.OK)
+