X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=test%2Fexecution%2Fresource.py;h=9b7e5e870a5b206ed7e64216f82bf0ce98a22310;hb=8e3d12389f29f338687f9113f1e463727ada6dc3;hp=e594f2684fdd6523d4e710cb7234a02f86a4a380;hpb=450b5dd0a993f63eb2ec34bbc656c558572eb44c;p=nepi.git diff --git a/test/execution/resource.py b/test/execution/resource.py index e594f268..9b7e5e87 100755 --- a/test/execution/resource.py +++ b/test/execution/resource.py @@ -22,7 +22,7 @@ from nepi.execution.attribute import Attribute from nepi.execution.ec import ExperimentController, FailureLevel from nepi.execution.resource import ResourceManager, ResourceState, \ - clsinit_copy, ResourceAction, failtrap + clsinit_copy, ResourceAction import random import time @@ -53,9 +53,9 @@ class Channel(ResourceManager): 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): @@ -64,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.rtype())[0] - chan = self.get_connected(Channel.rtype())[0] + def do_deploy(self): + node = self.get_connected(Node.get_rtype())[0] + chan = self.get_connected(Channel.get_rtype())[0] if node.state < ResourceState.PROVISIONED: self.ec.schedule("0.5s", self.deploy) @@ -74,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): @@ -83,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("1s", self.deploy) elif self.state == ResourceState.PROVISIONED: - ifaces = self.get_connected(Interface.rtype()) + ifaces = self.get_connected(Interface.get_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): @@ -105,19 +105,19 @@ class Application(ResourceManager): def __init__(self, ec, guid): super(Application, self).__init__(ec, guid) - def deploy(self): - node = self.get_connected(Node.rtype())[0] + def do_deploy(self): + node = self.get_connected(Node.get_rtype())[0] if node.state < ResourceState.READY: self.ec.schedule("0.5s", self.deploy) else: time.sleep(random.random() * 2) - super(Application, self).deploy() + super(Application, self).do_deploy() self.logger.debug(" -------- DEPLOYED ------- ") - def start(self): - super(Application, self).start() + def do_start(self): + super(Application, self).do_start() time.sleep(random.random() * 3) - self._state = ResourceState.FINISHED + self.ec.schedule("0.5s", self.stop) class ErrorApplication(ResourceManager): _rtype = "ErrorApplication" @@ -125,9 +125,8 @@ class ErrorApplication(ResourceManager): def __init__(self, ec, guid): super(ErrorApplication, self).__init__(ec, guid) - @failtrap - def deploy(self): - node = self.get_connected(Node.rtype())[0] + def do_deploy(self): + node = self.get_connected(Node.get_rtype())[0] if node.state < ResourceState.READY: self.ec.schedule("0.5s", self.deploy) else: @@ -142,14 +141,15 @@ class ResourceFactoryTestCase(unittest.TestCase): ResourceFactory.register_type(MyResource) ResourceFactory.register_type(AnotherResource) - self.assertEquals(MyResource.rtype(), "MyResource") - self.assertEquals(len(MyResource._attributes), 2) + # Take into account default 'Critical' attribute + self.assertEquals(MyResource.get_rtype(), "MyResource") + self.assertEquals(len(MyResource._attributes), 3) - self.assertEquals(ResourceManager.rtype(), "Resource") - self.assertEquals(len(ResourceManager._attributes), 1) + self.assertEquals(ResourceManager.get_rtype(), "Resource") + self.assertEquals(len(ResourceManager._attributes), 2) - self.assertEquals(AnotherResource.rtype(), "AnotherResource") - self.assertEquals(len(AnotherResource._attributes), 1) + self.assertEquals(AnotherResource.get_rtype(), "AnotherResource") + self.assertEquals(len(AnotherResource._attributes), 2) self.assertEquals(len(ResourceFactory.resource_types()), 2) @@ -245,15 +245,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) @@ -281,7 +281,7 @@ class ResourceManagerTestCase(unittest.TestCase): self.assertTrue(ec.state(node) == ResourceState.STARTED) self.assertTrue( - all([ec.state(guid) == ResourceState.FINISHED \ + all([ec.state(guid) == ResourceState.STOPPED \ for guid in apps]) ) @@ -293,35 +293,124 @@ class ResourceManagerTestCase(unittest.TestCase): 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.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) 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("ErrorApplication") + 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.STOPPED) + + 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() - self.assertTrue(ec._fm._failure_level == FailureLevel.RM_FAILURE) + 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() - def ztest_start_with_condition(self): - # TODO!!! - pass - - def ztest_stop_with_condition(self): - # TODO!!! - pass + 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!!!