def test_run_plan(self): """ Test the internal function of running plans. Just see it can handle the commands in the given order. We see that by the log. Also includes one that raises, so we see it just stops there. """ # Prepare the configurator and the plan configurator = Configurator(self, self.__specials) started = self.__component_test('second', self, 'dispensable') started.start() stopped = self.__component_test('first', self, 'core') configurator._components = {'second': started} plan = [ { 'component': stopped, 'command': 'start', 'name': 'first', 'config': {'a': 1} }, { 'component': started, 'command': 'stop', 'name': 'second', 'config': {} }, { 'component': FailComponent('third', self, 'needed'), 'command': 'start', 'name': 'third', 'config': {} }, { 'component': self.__component_test('fourth', self, 'core'), 'command': 'start', 'name': 'fourth', 'config': {} } ] # Don't include the preparation into the log self.log = [] # The error from the third component is propagated self.assertRaises(TestError, configurator._run_plan, plan) # The first two were handled, the rest not, due to the exception self.assertEqual([('first', 'start'), ('second', 'stop')], self.log) self.assertEqual({'first': ({'a': 1}, stopped)}, configurator._components)