def test_run_action_with_failed_subaction(self): """Test action running a failed sub action (start->status)""" serv = Service('BASE') act_start = Action('start', command='/bin/true') act_status_fail = Action('status', command='/bin/false') act_start.add_dep(target=act_status_fail) serv.add_actions(act_start, act_status_fail) serv.run('start') self.assertEqual(serv.status, DONE) self.assertTrue(act_start.duration) self.assertTrue(act_status_fail.duration)
def test_prepare_dep_failed(self): """Test prepare an action with a single failed dependency""" a1 = Action('start', command='/bin/true') a2 = Action('status', command='/bin/false') ser = Service('TEST') a1.add_dep(a2) ser.add_actions(a1, a2) a1.run() self.assertEqual(a1.status, DONE) self.assertTrue(a1.duration) self.assertEqual(a2.status, ERROR) self.assertTrue(a2.duration)
def test_prepare_dep_success(self): """Test prepare an action with a single successful dependency""" a1 = Action("start", command="/bin/true") a2 = Action("status", command="/bin/true") ser = Service("TEST") a1.add_dep(a2) ser.add_actions(a1, a2) a1.run() self.assertEqual(a1.status, DONE) self.assertFalse(a1.duration) self.assertEqual(a2.status, DONE) self.assertTrue(a2.duration)
def fromdict(self, svcdict): """Populate service attributes from dict.""" BaseEntity.fromdict(self, svcdict) if 'actions' in svcdict: dependencies = {} for names, props in svcdict['actions'].items(): for name in NodeSet(names): action = Action(name) self.add_action(action) action.fromdict(props) dependencies[name] = props.get('check', []) for action in self._actions.values(): for dep in dependencies[action.name]: action.add_dep(self._actions[dep]) # Inherits properies between service and actions for action in self.iter_actions(): action.inherits_from(self)
def test_run_multiple_action_with_subaction(self): """Test with multiple actions running a sub action (start-> status)""" nemesis = Service("NEMESIS") zombie_one = Service("ZOMBIE_ONE") zombie_two = Service("ZOMBIE_TWO") hive = Service("THE_HIVE") act_start1 = Action("start", command="/bin/true") act_start2 = Action("start", command="/bin/false") act_start3 = Action("start", command="/bin/true") act_start4 = Action("start", command="/bin/true") act_sta = Action("status", command="/bin/true") act_sta_fai = Action("status", command="/bin/false") act_start2.add_dep(act_sta_fai) act_start4.add_dep(act_sta) nemesis.add_action(act_start1) zombie_one.add_actions(act_start2, act_sta_fai) zombie_two.add_action(act_start3) hive.add_actions(act_start4, act_sta) zombie_one.add_dep(hive) zombie_two.add_dep(hive) nemesis.add_dep(zombie_one) nemesis.add_dep(zombie_two) nemesis.run("start") self.assertEqual(hive.status, DONE) self.assertEqual(zombie_one.status, ERROR) self.assertEqual(zombie_two.status, DONE) self.assertEqual(nemesis.status, DEP_ERROR) self.assertFalse(act_start1.duration) self.assertTrue(act_start2.duration) self.assertTrue(act_start3.duration) self.assertFalse(act_start4.duration) self.assertTrue(act_sta_fai.duration) self.assertTrue(act_sta.duration)
def fromdict(self, svcdict): """Populate service attributes from dict.""" BaseEntity.fromdict(self, svcdict) if "actions" in svcdict: dependencies = {} actions = {} for names, props in svcdict["actions"].items(): for name in NodeSet(names): action = Action(name) action.fromdict(props) actions[name] = action dependencies[name] = props.get("check", []) for action in actions.values(): for dep in dependencies[action.name]: action.add_dep(actions[dep]) self.add_action(action) # Inherits properies between service and actions for action in self.iter_actions(): action.inherits_from(self)
def test_prepare_actions_graph_with_errors(self): """Test prepare an action graph with errors""" a1 = Action('start', command='/bin/true') a2 = Action('start_engine', command='/bin/true') a3 = Action('start_gui', command='/bin/false') a4 = Action('empty_home', command='/bin/false') a1.add_dep(a2) a1.add_dep(a3) a2.add_dep(a4) a3.add_dep(a4) ser = Service('TEST') ser.add_actions(a1, a2, a3, a4) a1.run() self.assertEqual(a1.status, DONE) self.assertTrue(a1.duration) self.assertEqual(a2.status, DONE) self.assertTrue(a2.duration) self.assertEqual(a3.status, ERROR) self.assertTrue(a3.duration) self.assertEqual(a4.status, ERROR) self.assertTrue(a4.duration)
def test_prepare_actions_graph(self): """Test prepare an action graph without errors""" a1 = Action("start", command="/bin/true") a2 = Action("start_engine", command="/bin/true") a3 = Action("start_gui", command="/bin/true") a4 = Action("empty_home", command="/bin/true") a1.add_dep(a2) a1.add_dep(a3) a2.add_dep(a4) a3.add_dep(a4) ser = Service("TEST") ser.add_actions(a1, a2, a3, a4) a1.run() self.assertEqual(a1.status, DONE) self.assertFalse(a1.duration) self.assertEqual(a2.status, DONE) self.assertFalse(a2.duration) self.assertEqual(a3.status, DONE) self.assertFalse(a3.duration) self.assertEqual(a4.status, DONE) self.assertTrue(a4.duration)