# Copyright (C) 2013 INRIA
#
# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation;
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
super(Interface, self).__init__(ec, guid)
def do_deploy(self):
- node = self.get_connected(Node.rtype())[0]
- chan = self.get_connected(Channel.rtype())[0]
+ 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)
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)
super(Application, self).__init__(ec, guid)
def do_deploy(self):
- node = self.get_connected(Node.rtype())[0]
+ node = self.get_connected(Node.get_rtype())[0]
if node.state < ResourceState.READY:
self.ec.schedule("0.5s", self.deploy)
else:
def do_start(self):
super(Application, self).do_start()
time.sleep(random.random() * 3)
- self.ec.schedule("0.5s", self.finish)
+ self.ec.schedule("0.5s", self.stop)
class ErrorApplication(ResourceManager):
_rtype = "ErrorApplication"
super(ErrorApplication, self).__init__(ec, guid)
def do_deploy(self):
- node = self.get_connected(Node.rtype())[0]
+ 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)
- raise RuntimeError, "NOT A REAL ERROR. JUST TESTING"
+ raise RuntimeError("NOT A REAL ERROR. JUST TESTING")
class ResourceFactoryTestCase(unittest.TestCase):
def test_add_resource_factory(self):
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.assertEqual(MyResource.get_rtype(), "MyResource")
+ self.assertEqual(len(MyResource._attributes), 3)
- self.assertEquals(ResourceManager.rtype(), "Resource")
- self.assertEquals(len(ResourceManager._attributes), 1)
+ self.assertEqual(ResourceManager.get_rtype(), "Resource")
+ self.assertEqual(len(ResourceManager._attributes), 2)
- self.assertEquals(AnotherResource.rtype(), "AnotherResource")
- self.assertEquals(len(AnotherResource._attributes), 1)
+ self.assertEqual(AnotherResource.get_rtype(), "AnotherResource")
+ self.assertEqual(len(AnotherResource._attributes), 2)
- self.assertEquals(len(ResourceFactory.resource_types()), 2)
+ self.assertEqual(len(ResourceFactory.resource_types()), 2)
# restore factory state for other tests
from nepi.execution.resource import populate_factory
for (group, state, time) in conditions:
waiting_for.extend(group)
- self.assertEquals(waiting_for, [1, 3, 5, 7, 10, 8])
+ self.assertEqual(waiting_for, [1, 3, 5, 7, 10, 8])
group = [1, 2, 3, 4, 6]
rm.unregister_condition(group)
for (group, state, time) in conditions:
waiting_for.extend(group)
- self.assertEquals(waiting_for, [5, 7, 10, 8])
+ self.assertEqual(waiting_for, [5, 7, 10, 8])
def test_deploy_in_order(self):
"""
node = ec.register_resource("Node")
apps = list()
- for i in xrange(1000):
+ for i in range(1000):
app = ec.register_resource("Application")
ec.register_connection(app, node)
apps.append(app)
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])
)
ec.shutdown()
- self.assertEquals(ec._fm._failure_level, FailureLevel.RM_FAILURE)
+ self.assertEqual(ec._fm._failure_level, FailureLevel.RM_FAILURE)
def test_critical(self):
from nepi.execution.resource import ResourceFactory
ec.register_connection(eapp, node)
apps.append(eapp)
- for i in xrange(10):
+ for i in range(10):
app = ec.register_resource("Application")
ec.register_connection(app, node)
apps.append(app)
ec.wait_finished(apps)
state = ec.state(eapp)
- self.assertEquals(state, ResourceState.FAILED)
+ self.assertEqual(state, ResourceState.FAILED)
apps.remove(eapp)
for app in apps:
state = ec.state(app)
- self.assertEquals(state, ResourceState.FINISHED)
+ self.assertEqual(state, ResourceState.STOPPED)
ec.shutdown()
- self.assertEquals(ec._fm._failure_level, FailureLevel.OK)
+ self.assertEqual(ec._fm._failure_level, FailureLevel.OK)
- def ztest_start_with_condition(self):
- # TODO!!!
- pass
-
- def ztest_stop_with_condition(self):
- # TODO!!!
- pass
+ 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!!!