X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=test%2Fexecution%2Fresource.py;h=2aaa4b973656edba2d9d49f9ee11c38a36370697;hb=09ac796bac9aa2c41c5ad830f404fe128fffb22d;hp=5db230a4a564465aa70c4894b18d56e198103762;hpb=5d80869516dfcecb8e7fe6f117e2fb658b57b25b;p=nepi.git diff --git a/test/execution/resource.py b/test/execution/resource.py index 5db230a4..2aaa4b97 100755 --- a/test/execution/resource.py +++ b/test/execution/resource.py @@ -20,15 +20,15 @@ from nepi.execution.attribute import Attribute -from nepi.execution.ec import ExperimentController -from nepi.execution.resource import ResourceManager, ResourceState, clsinit, \ - ResourceAction +from nepi.execution.ec import ExperimentController, FailureLevel +from nepi.execution.resource import ResourceManager, ResourceState, \ + clsinit_copy, ResourceAction import random import time import unittest -@clsinit +@clsinit_copy class MyResource(ResourceManager): _rtype = "MyResource" @@ -40,23 +40,22 @@ class MyResource(ResourceManager): def __init__(self, ec, guid): super(MyResource, self).__init__(ec, guid) -@clsinit +@clsinit_copy class AnotherResource(ResourceManager): _rtype = "AnotherResource" def __init__(self, ec, guid): super(AnotherResource, self).__init__(ec, guid) - class Channel(ResourceManager): _rtype = "Channel" def __init__(self, ec, guid): super(Channel, self).__init__(ec, guid) - def deploy(self): + def do_deploy(self): time.sleep(1) - super(Channel, self).deploy() + super(Channel, self).do_deploy() self.logger.debug(" -------- DEPLOYED ------- ") class Interface(ResourceManager): @@ -65,9 +64,9 @@ class Interface(ResourceManager): def __init__(self, ec, guid): super(Interface, self).__init__(ec, guid) - def deploy(self): - node = self.get_connected(Node)[0] - chan = self.get_connected(Channel)[0] + def do_deploy(self): + node = self.get_connected(Node.rtype())[0] + chan = self.get_connected(Channel.rtype())[0] if node.state < ResourceState.PROVISIONED: self.ec.schedule("0.5s", self.deploy) @@ -75,7 +74,7 @@ class Interface(ResourceManager): self.ec.schedule("0.5s", self.deploy) else: time.sleep(2) - super(Interface, self).deploy() + super(Interface, self).do_deploy() self.logger.debug(" -------- DEPLOYED ------- ") class Node(ResourceManager): @@ -84,20 +83,20 @@ class Node(ResourceManager): def __init__(self, ec, guid): super(Node, self).__init__(ec, guid) - def deploy(self): + def do_deploy(self): if self.state == ResourceState.NEW: - self.discover() - self.provision() + self.do_discover() + self.do_provision() self.logger.debug(" -------- PROVISIONED ------- ") - self.ec.schedule("3s", self.deploy) + self.ec.schedule("1s", self.deploy) elif self.state == ResourceState.PROVISIONED: - ifaces = self.get_connected(Interface) + ifaces = self.get_connected(Interface.rtype()) for rm in ifaces: if rm.state < ResourceState.READY: self.ec.schedule("0.5s", self.deploy) return - super(Node, self).deploy() + super(Node, self).do_deploy() self.logger.debug(" -------- DEPLOYED ------- ") class Application(ResourceManager): @@ -106,38 +105,57 @@ class Application(ResourceManager): def __init__(self, ec, guid): super(Application, self).__init__(ec, guid) - def deploy(self): - node = self.get_connected(Node)[0] + def do_deploy(self): + node = self.get_connected(Node.rtype())[0] if node.state < ResourceState.READY: self.ec.schedule("0.5s", self.deploy) else: - time.sleep(random.random() * 5) - super(Application, self).deploy() + time.sleep(random.random() * 2) + super(Application, self).do_deploy() self.logger.debug(" -------- DEPLOYED ------- ") - def start(self): - super(Application, self).start() - time.sleep(random.random() * 5) - self._state = ResourceState.FINISHED - + def do_start(self): + super(Application, self).do_start() + time.sleep(random.random() * 3) + self.ec.schedule("0.5s", self.finish) + +class ErrorApplication(ResourceManager): + _rtype = "ErrorApplication" + + def __init__(self, ec, guid): + super(ErrorApplication, self).__init__(ec, guid) + + def do_deploy(self): + node = self.get_connected(Node.rtype())[0] + if node.state < ResourceState.READY: + self.ec.schedule("0.5s", self.deploy) + else: + time.sleep(random.random() * 2) + raise RuntimeError, "NOT A REAL ERROR. JUST TESTING" class ResourceFactoryTestCase(unittest.TestCase): def test_add_resource_factory(self): from nepi.execution.resource import ResourceFactory + ResourceFactory._resource_types = dict() ResourceFactory.register_type(MyResource) ResourceFactory.register_type(AnotherResource) self.assertEquals(MyResource.rtype(), "MyResource") - self.assertEquals(len(MyResource._attributes), 1) + self.assertEquals(len(MyResource._attributes), 2) self.assertEquals(ResourceManager.rtype(), "Resource") - self.assertEquals(len(ResourceManager._attributes), 0) + self.assertEquals(len(ResourceManager._attributes), 1) self.assertEquals(AnotherResource.rtype(), "AnotherResource") - self.assertEquals(len(AnotherResource._attributes), 0) + self.assertEquals(len(AnotherResource._attributes), 1) self.assertEquals(len(ResourceFactory.resource_types()), 2) + + # restore factory state for other tests + from nepi.execution.resource import populate_factory + ResourceFactory._resource_types = dict() + populate_factory() class ResourceManagerTestCase(unittest.TestCase): def test_register_condition(self): @@ -226,15 +244,15 @@ class ResourceManagerTestCase(unittest.TestCase): self.assertTrue(rmnode1.ready_time < rmapp1.ready_time) self.assertTrue(rmnode2.ready_time < rmapp2.ready_time) - # - Node needs to wait until Interface is ready to be ready + # - Node needs to wait until Interface is ready to be ready self.assertTrue(rmnode1.ready_time > rmiface1.ready_time) self.assertTrue(rmnode2.ready_time > rmiface2.ready_time) - # - Interface needs to wait until Node is provisioned to be ready + # - Interface needs to wait until Node is provisioned to be ready self.assertTrue(rmnode1.provision_time < rmiface1.ready_time) self.assertTrue(rmnode2.provision_time < rmiface2.ready_time) - # - Interface needs to wait until Channel is ready to be ready + # - Interface needs to wait until Channel is ready to be ready self.assertTrue(rmchan.ready_time < rmiface1.ready_time) self.assertTrue(rmchan.ready_time < rmiface2.ready_time) @@ -268,15 +286,39 @@ class ResourceManagerTestCase(unittest.TestCase): ec.shutdown() - def test_start_with_condition(self): + def test_exception(self): + from nepi.execution.resource import ResourceFactory + + ResourceFactory.register_type(ErrorApplication) + ResourceFactory.register_type(Node) + ResourceFactory.register_type(Interface) + ResourceFactory.register_type(Channel) + + 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.assertTrue(ec._fm._failure_level == FailureLevel.RM_FAILURE) + + + def ztest_start_with_condition(self): # TODO!!! pass - def test_stop_with_condition(self): + def ztest_stop_with_condition(self): # TODO!!! pass - def test_set_with_condition(self): + def ztest_set_with_condition(self): # TODO!!! pass