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
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):
def __init__(self, ec, guid):
super(Interface, self).__init__(ec, guid)
- def deploy(self):
+ def do_deploy(self):
node = self.get_connected(Node.rtype())[0]
chan = self.get_connected(Channel.rtype())[0]
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):
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:
self.ec.schedule("0.5s", self.deploy)
return
- super(Node, self).deploy()
+ super(Node, self).do_deploy()
self.logger.debug(" -------- DEPLOYED ------- ")
class Application(ResourceManager):
def __init__(self, ec, guid):
super(Application, self).__init__(ec, guid)
- def deploy(self):
+ 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)
- 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.finish)
class ErrorApplication(ResourceManager):
_rtype = "ErrorApplication"
def __init__(self, ec, guid):
super(ErrorApplication, self).__init__(ec, guid)
- @failtrap
- def deploy(self):
+ def do_deploy(self):
node = self.get_connected(Node.rtype())[0]
if node.state < ResourceState.READY:
self.ec.schedule("0.5s", self.deploy)
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)
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.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()
- 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!!!