Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
 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)
Beispiel #11
0
 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)
Beispiel #12
0
 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)