Example #1
0
    def test_prepare_group_subservices(self):
        '''Test prepare group with multiple internal dependencies.'''
        group = ServiceGroup('GROUP')
        ac_suc1 = Action('start', command='/bin/true')
        ac_suc2 = Action('start', command='/bin/true')
        ac_suc3 = Action('start', command='/bin/true')

        subserv_a = Service('SUB1')
        subserv_b = Service('SUB2')
        subserv_c = Service('SUB3')

        subserv_a.add_action(ac_suc1)
        subserv_b.add_action(ac_suc2)
        subserv_c.add_action(ac_suc3)

        group.add_inter_dep(target=subserv_a)
        group.add_inter_dep(target=subserv_b)
        group.add_inter_dep(base=subserv_a, target=subserv_c)
        group.add_inter_dep(base=subserv_b, target=subserv_c)

        group.run('start')
        self.assertEqual(group.status, DONE)
        self.assertEqual(subserv_a.status, DONE)
        self.assertEqual(subserv_b.status, DONE)
        self.assertEqual(subserv_c.status, DONE)
Example #2
0
    def test_prepare_group_subservices(self):
        '''Test prepare group with multiple internal dependencies.'''
        group = ServiceGroup('GROUP')
        ac_suc1 = Action('start', command='/bin/true')
        ac_suc2 = Action('start', command='/bin/true')
        ac_suc3 = Action('start', command='/bin/true')

        subserv_a = Service('SUB1')
        subserv_b = Service('SUB2')
        subserv_c = Service('SUB3')

        subserv_a.add_action(ac_suc1)
        subserv_b.add_action(ac_suc2)
        subserv_c.add_action(ac_suc3)

        group.add_inter_dep(target=subserv_a)
        group.add_inter_dep(target=subserv_b)
        group.add_inter_dep(base=subserv_a, target=subserv_c)
        group.add_inter_dep(base=subserv_b, target=subserv_c)

        group.run('start')
        self.assertEqual(group.status, DONE)
        self.assertEqual(subserv_a.status, DONE)
        self.assertEqual(subserv_b.status, DONE)
        self.assertEqual(subserv_c.status, DONE)
Example #3
0
 def test_has_subservice(self):
     '''Test whether a service is an internal dependency of a group'''
     group = ServiceGroup('group')
     serv = Service('intern_service')
     self.assertFalse(group.has_subservice(serv.name))
     group.add_inter_dep(target=serv)
     self.assertTrue(group.has_subservice(serv.name))
Example #4
0
 def test_has_subservice(self):
     '''Test whether a service is an internal dependency of a group'''
     group = ServiceGroup('group')
     serv = Service('intern_service')
     self.assertFalse(group.has_subservice(serv.name))
     group.add_inter_dep(target=serv)
     self.assertTrue(group.has_subservice(serv.name))
Example #5
0
    def setUp(self):
        '''
        Set up the graph of services within the service manager

        Graph
                              _ start
           group --> service /
                             `- stop
        '''
        CLICommon.setUp(self)

        # ServiceGroup
        group = ServiceGroup('ServiceGroup')
        # Service
        self.service = service = Service('service')
        service.desc = 'I am the service'
        # Actions
        start_action = Action('start', command='/bin/true')
        stop_action = Action('stop', command='/bin/false')
        self.timeout_action = Action('timeout', command='sleep 1', timeout=0.1)
        start_action.inherits_from(service)
        stop_action.inherits_from(service)
        service.add_action(start_action)
        service.add_action(stop_action)
        service.add_action(self.timeout_action)

        # Build graph
        group.add_inter_dep(target=service)

        # Register services within the manager
        self.manager.register_services(group, service)
Example #6
0
 def test_update_target(self):
     '''Test update of the target of a group of services'''
     grp = ServiceGroup('G')
     srva = Service('A')
     grp.add_inter_dep(target=srva)
     grp.update_target('fortoy[5-10]')
     self.assertTrue(grp.target == NodeSet('fortoy[5-10]'))
     self.assertTrue(srva.target == NodeSet('fortoy[5-10]'))
Example #7
0
 def test_missing_group(self):
     """A group with only MISSING services should be MISSING"""
     grp = ServiceGroup('group')
     svc1 = Service('svc1')
     svc1.add_action(Action('stop', command='/bin/true'))
     grp.add_inter_dep(target=svc1)
     grp.run('start')
     self.assertEqual(grp.status, MISSING)
Example #8
0
 def test_update_target(self):
     '''Test update of the target of a group of services'''
     grp = ServiceGroup('G')
     srva = Service('A')
     grp.add_inter_dep(target=srva)
     grp.update_target('fortoy[5-10]')
     self.assertTrue(grp.target == NodeSet('fortoy[5-10]'))
     self.assertTrue(srva.target == NodeSet('fortoy[5-10]'))
Example #9
0
 def test_missing_group(self):
     """A group with only MISSING services should be MISSING"""
     grp = ServiceGroup('group')
     svc1 = Service('svc1')
     svc1.add_action(Action('stop', command='/bin/true'))
     grp.add_inter_dep(target=svc1)
     grp.run('start')
     self.assertEqual(grp.status, MISSING)
Example #10
0
 def test_prepare_group_subservice(self):
     '''Test prepare group with an internal dependency.'''
     group = ServiceGroup('GROUP')
     subserv = Service('SUB1')
     subserv.add_action(Action('start', command='/bin/true'))
     group.add_inter_dep(target=subserv)
     group.run('start')
     self.assertEqual(group.status, DONE)
     self.assertEqual(subserv.status, DONE)
Example #11
0
    def setUp(self):
        '''
        Set up the graph of services within the service manager

        Graph
                __ S2                    __ I1
            S1 /         -- G1 -- (src) /    ^  -- (sink)
               `-- S3 --/               `-- I2

        Each node has an action start and an action stop
        '''
        CLICommon.setUp(self)

        svc1 = Service('S1')
        svc1.desc = 'I am the service S1'
        self.svc2 = svc2 = Service('S2')
        svc2.desc = 'I am the service S2'
        svc3 = Service('S3')
        svc3.desc = 'I am the service S3'
        group1 = ServiceGroup('G1')
        inter1 = Service('I1')
        inter1.desc = 'I am the service I1'
        inter2 = Service('I2')
        inter2.desc = 'I am the service I2'

        # Actions S1
        start_svc1 = Action('start', HOSTNAME + ', BADNODE', '/bin/true')
        start_svc1.delay = 1
        stop_svc1 = Action('stop', HOSTNAME + ',BADNODE', '/bin/true')
        stop_svc1.delay = 1
        svc1.add_actions(start_svc1, stop_svc1)
        # Actions S2
        svc2.add_action(Action('start', HOSTNAME + ',BADNODE', '/bin/true'))
        svc2.add_action(Action('stop', HOSTNAME + ',BADNODE', '/bin/true'))
        # Actions S3
        svc3.add_action(Action('start', HOSTNAME + ',BADNODE', '/bin/false'))
        svc3.add_action(Action('stop', HOSTNAME + ',BADNODE', '/bin/false'))
        # Actions I1
        inter1.add_action(Action('start', HOSTNAME, 'echo ok'))
        inter1.add_action(Action('stop', HOSTNAME, 'echo ok'))
        # Actions I2
        inter2.add_action(Action('start', HOSTNAME + ',BADNODE', '/bin/true'))
        inter2.add_action(Action('stop', HOSTNAME + ',BADNODE', '/bin/true'))

        # Build graph
        svc1.add_dep(target=svc2)
        svc1.add_dep(target=svc3)
        svc3.add_dep(target=group1)
        inter2.add_dep(inter1)
        group1.add_inter_dep(target=inter1)
        group1.add_inter_dep(target=inter2)

        # Register services within the manager
        self.manager.add_service(svc1)
        self.manager.add_service(svc2)
        self.manager.add_service(svc3)
        self.manager.add_service(group1)
Example #12
0
 def test_prepare_group_subservice(self):
     '''Test prepare group with an internal dependency.'''
     group = ServiceGroup('GROUP')
     subserv = Service('SUB1')
     subserv.add_action(Action('start', command='/bin/true'))
     group.add_inter_dep(target=subserv)
     group.run('start')
     self.assertEqual(group.status, DONE)
     self.assertEqual(subserv.status, DONE)
Example #13
0
 def test_graph_in_graph(self):
     """Test the DOT graph output with a servicegroup within a servicegroup"""
     grp = ServiceGroup('Group')
     subgrp = ServiceGroup('subGroup')
     grp.add_inter_dep(subgrp)
     self.assertEqual(
         grp.graph(),
         'subgraph "cluster_Group" {\nlabel="Group";\nstyle=rounded;\nnode [style=filled];\n"Group.__hook" [style=invis];\nsubgraph "cluster_Group.subGroup" {\nlabel="Group.subGroup";\nstyle=rounded;\nnode [style=filled];\n"Group.subGroup.__hook" [style=invis];\n}\n}\n'
     )
Example #14
0
 def test_skip(self):
     """Test skip method for ServiceGroup"""
     grp = ServiceGroup('group')
     srv = Service('skipped')
     srv.add_action(Action('start', target=NodeSet('foo'),
                           command='/bin/true'))
     grp.add_inter_dep(target=srv)
     self.assertFalse(grp.to_skip('start'))
     grp.skip()
     self.assertTrue(grp.to_skip('start'))
Example #15
0
 def test_skipped_group(self):
     """A group with only SKIPPED services should be SKIPPED"""
     grp = ServiceGroup('group')
     svc1 = Service('svc1')
     svc1.add_action(Action('start', target="@NOTHING", command=':'))
     svc2 = Service('svc2')
     svc2.add_action(Action('start', target="@NOTHING", command=':'))
     grp.add_inter_dep(target=svc1)
     grp.add_inter_dep(target=svc2)
     grp.run('start')
     self.assertEqual(grp.status, SKIPPED)
Example #16
0
 def test_skipped_group(self):
     """A group with only SKIPPED services should be SKIPPED"""
     grp = ServiceGroup('group')
     svc1 = Service('svc1')
     svc1.add_action(Action('start', target="@NOTHING", command=':'))
     svc2 = Service('svc2')
     svc2.add_action(Action('start', target="@NOTHING", command=':'))
     grp.add_inter_dep(target=svc1)
     grp.add_inter_dep(target=svc2)
     grp.run('start')
     self.assertEqual(grp.status, SKIPPED)
Example #17
0
 def test_eval_deps_status_error(self):
     '''Test the method eval_deps_status DEP_ERROR'''
     group = ServiceGroup('group')
     e1 = Service('E1')
     e2 = Service('E2')
     e1.status = DEP_ERROR
     group.add_dep(target=e1)
     group.add_dep(target=e2)
     group.add_inter_dep(target=Service('I1'))
     self.assertEqual(group.eval_deps_status(), DEP_ERROR)
     self.assertEqual(group.eval_deps_status(), DEP_ERROR)
Example #18
0
    def setUp(self):
        '''
        Set up the graph of services within the service manager

        Graph
                __ S2                    __ I1
            S1 /         -- G1 -- (src) /    ^  -- (sink)
               `-- S3 --/               `-- I2

        Each node has an action start and an action stop
        '''
        CLICommon.setUp(self)

        svc1 = Service('S1')
        svc1.desc = 'I am the service S1'
        self.svc2 = svc2 = Service('S2')
        svc2.desc = 'I am the service S2'
        svc3 = Service('S3')
        svc3.desc = 'I am the service S3'
        group1 = ServiceGroup('G1')
        inter1 = Service('I1')
        inter1.desc = 'I am the service I1'
        inter2 = Service('I2')
        inter2.desc = 'I am the service I2'

        # Actions S1
        start_svc1 = Action('start', HOSTNAME + ', BADNODE', '/bin/true')
        start_svc1.delay = 1
        stop_svc1 = Action('stop', HOSTNAME + ',BADNODE', '/bin/true')
        stop_svc1.delay = 1
        svc1.add_actions(start_svc1, stop_svc1)
        # Actions S2
        svc2.add_action(Action('start', HOSTNAME + ',BADNODE', '/bin/true'))
        svc2.add_action(Action('stop', HOSTNAME + ',BADNODE', '/bin/true'))
        # Actions S3
        svc3.add_action(Action('start', HOSTNAME + ',BADNODE', '/bin/false'))
        svc3.add_action(Action('stop', HOSTNAME + ',BADNODE', '/bin/false'))
        # Actions I1
        inter1.add_action(Action('start', HOSTNAME, 'echo ok'))
        inter1.add_action(Action('stop', HOSTNAME, 'echo ok'))
        # Actions I2
        inter2.add_action(Action('start', HOSTNAME + ',BADNODE', '/bin/true'))
        inter2.add_action(Action('stop', HOSTNAME + ',BADNODE', '/bin/true'))

        # Build graph
        svc1.add_dep(target=svc2)
        svc1.add_dep(target=svc3)
        svc3.add_dep(target=group1)
        inter2.add_dep(inter1)
        group1.add_inter_dep(target=inter1)
        group1.add_inter_dep(target=inter2)

        # Register services within the manager
        self.manager.register_services(svc1, svc2, svc3, group1)
Example #19
0
 def test_eval_deps_status_error(self):
     '''Test the method eval_deps_status DEP_ERROR'''
     group = ServiceGroup('group')
     e1 = Service('E1')
     e2 = Service('E2')
     e1.status = DEP_ERROR
     group.add_dep(target=e1)
     group.add_dep(target=e2)
     group.add_inter_dep(target=Service('I1'))
     self.assertEqual(group.eval_deps_status(), DEP_ERROR)
     self.assertEqual(group.eval_deps_status(), DEP_ERROR)
Example #20
0
 def test_eval_deps_status_done(self):
     '''Test the method eval_deps_status NO_STATUS'''
     group = ServiceGroup('group')
     e1 = Service('E1')
     e2 = Service('E2')
     group.add_dep(target=e1)
     group.add_dep(target=e2)
     group.add_inter_dep(target=Service('I1'))
     self.assertEqual(group.eval_deps_status(), NO_STATUS)
     e1.status = DONE
     e2.status = DONE
     self.assertEqual(group.eval_deps_status(), NO_STATUS)
Example #21
0
 def test_eval_deps_status_done(self):
     '''Test the method eval_deps_status NO_STATUS'''
     group = ServiceGroup('group')
     e1 = Service('E1')
     e2 = Service('E2')
     group.add_dep(target=e1)
     group.add_dep(target=e2)
     group.add_inter_dep(target=Service('I1'))
     self.assertEqual(group.eval_deps_status(), NO_STATUS)
     e1.status = DONE
     e2.status = DONE
     self.assertEqual(group.eval_deps_status(), NO_STATUS)
Example #22
0
 def test_eval_deps_status_ws(self):
     '''Test the method eval_deps_status WAITING_STATUS'''
     group = ServiceGroup('group')
     ext1 = Service('E1')
     ext2 = Service('E2')
     ext1.status = DONE
     ext2.status = WARNING
     group.add_dep(target=ext1)
     group.add_dep(target=ext2)
     int1 = Service('E1')
     group.add_inter_dep(target=int1)
     int1.status = WAITING_STATUS
     self.assertEqual(group.eval_deps_status(), WAITING_STATUS)
Example #23
0
 def test_eval_deps_status_ws(self):
     '''Test the method eval_deps_status WAITING_STATUS'''
     group = ServiceGroup('group')
     ext1 = Service('E1')
     ext2 = Service('E2')
     ext1.status = DONE
     ext2.status = WARNING
     group.add_dep(target=ext1)
     group.add_dep(target=ext2)
     int1 = Service('E1')
     group.add_inter_dep(target=int1)
     int1.status = WAITING_STATUS
     self.assertEqual(group.eval_deps_status(), WAITING_STATUS)
Example #24
0
    def test_group_with_weak_dep_error(self):
        """A group with a weak dep error runs fine (add_inter_dep())."""

        dep1 = Service('dep1')
        dep1.add_action(Action('stop', command='/bin/false'))

        grp = ServiceGroup('group')
        svc = Service('svc')
        svc.add_action(Action('stop', command='/bin/true'))
        grp.add_inter_dep(svc)
        grp.add_dep(dep1, sgth=REQUIRE_WEAK)
        grp.run('stop')

        self.assertEqual(grp.status, DONE)
Example #25
0
    def test_group_with_weak_dep_error(self):
        """A group with a weak dep error runs fine (add_inter_dep())."""

        dep1 = Service('dep1')
        dep1.add_action(Action('stop', command='/bin/false'))

        grp = ServiceGroup('group')
        svc = Service('svc')
        svc.add_action(Action('stop', command='/bin/true'))
        grp.add_inter_dep(svc)
        grp.add_dep(dep1, sgth=REQUIRE_WEAK)
        grp.run('stop')

        self.assertEqual(grp.status, DONE)
Example #26
0
 def test_run_stop_on_group(self):
     '''Test stop algorithm on a group'''
     group = ServiceGroup('G1')
     i1 = Service('I1')
     i1.add_action(Action('stop', command='/bin/true'))
     group.add_inter_dep(target=i1)
     s1 = Service('S1')
     s1.add_action(Action('stop', command='/bin/true'))
     s1.add_dep(target=group)
     s1.algo_reversed = True
     group.algo_reversed = True
     group.run('stop')
     self.assertEqual(s1.status, DONE)
     self.assertEqual(i1.status, DONE)
     self.assertEqual(group.status, DONE)
Example #27
0
 def test_run_stop_on_group(self):
     '''Test stop algorithm on a group'''
     group = ServiceGroup('G1')
     i1 = Service('I1')
     i1.add_action(Action('stop', command='/bin/true'))
     group.add_inter_dep(target=i1)
     s1 = Service('S1')
     s1.add_action(Action('stop', command='/bin/true'))
     s1.add_dep(target=group)
     s1.algo_reversed = True
     group.algo_reversed = True
     group.run('stop')
     self.assertEqual(s1.status, DONE)
     self.assertEqual(i1.status, DONE)
     self.assertEqual(group.status, DONE)
Example #28
0
    def test_filter(self):
        """ServiceGroup supports filter dependency"""
        dep = Service('dep')
        dep.add_action(Action('stop', command='false', target=HOSTNAME))

        grp = ServiceGroup('group')
        svc = Service('svc')
        svc.add_action(Action('stop', command='true', target=HOSTNAME))
        grp.add_inter_dep(svc)
        grp.add_dep(dep, sgth=FILTER)
        grp.run('stop')

        self.assertEqual(dep.status, ERROR)
        self.assertEqual(svc.status, SKIPPED)
        self.assertEqual(grp.status, SKIPPED)
Example #29
0
    def test_skipped_group_dep_error(self):
        """A full SKIPPED service group with DEP_ERROR should be SKIPPED"""
        svc = Service('error')
        svc.add_action(Action('start', command='/bin/false'))
        grp = ServiceGroup('group')
        svc1 = Service('svc1')
        svc1.add_action(Action('start', target="@NOTHING", command=':'))
        svc2 = Service('svc2')
        svc2.add_action(Action('start', target="@NOTHING", command=':'))
        grp.add_inter_dep(target=svc1)
        grp.add_inter_dep(target=svc2)
        grp.add_dep(svc, sgth=REQUIRE)

        grp.run('start')
        self.assertEqual(svc.status, ERROR)
        self.assertEqual(grp.status, SKIPPED)
Example #30
0
    def test_skipped_group_dep_error(self):
        """A full SKIPPED service group with DEP_ERROR should be SKIPPED"""
        svc = Service('error')
        svc.add_action(Action('start', command='/bin/false'))
        grp = ServiceGroup('group')
        svc1 = Service('svc1')
        svc1.add_action(Action('start', target="@NOTHING", command=':'))
        svc2 = Service('svc2')
        svc2.add_action(Action('start', target="@NOTHING", command=':'))
        grp.add_inter_dep(target=svc1)
        grp.add_inter_dep(target=svc2)
        grp.add_dep(svc, sgth=REQUIRE)

        grp.run('start')
        self.assertEqual(svc.status, ERROR)
        self.assertEqual(grp.status, SKIPPED)
Example #31
0
 def test_reset_service_group(self):
     '''Test the ability to reset values of a service group'''
     group = ServiceGroup('GROUP')
     ser1 = Service('I1')
     action = Action(name='start', delay=3)
     action.maxretry = 5
     action.tries = 3
     action.status = DONE
     ser1.add_action(action)
     ser1.status = ERROR
     group.add_inter_dep(target=ser1)
     group.status = DEP_ERROR
     group.reset()
     self.assertEqual(group.status, NO_STATUS)
     self.assertEqual(ser1.status, NO_STATUS)
     self.assertEqual(action.status, NO_STATUS)
     self.assertEqual(action.tries, 0)
Example #32
0
 def test_reset_service_group(self):
     '''Test the ability to reset values of a service group'''
     group = ServiceGroup('GROUP')
     ser1 = Service('I1')
     action = Action(name='start', delay=3)
     action.maxretry = 5
     action.tries = 3
     action.status = DONE
     ser1.add_action(action)
     ser1.status = ERROR
     group.add_inter_dep(target=ser1)
     group.status = DEP_ERROR
     group.reset()
     self.assertEqual(group.status, NO_STATUS)
     self.assertEqual(ser1.status, NO_STATUS)
     self.assertEqual(action.status, NO_STATUS)
     self.assertEqual(action.tries, 0)
Example #33
0
 def test_search_node_graph(self):
     """Test search node in a graph trough a ServiceGroup"""
     group = ServiceGroup('GROUP')
     ser1 = Service('I1')
     ser2 = Service('I2')
     eser1 = Service('E1')
     eser2 = Service('E2')
     eser3 = Service('E3')
     group.add_inter_dep(target=ser1)
     group.add_inter_dep(target=ser2)
     group.add_dep(target=eser1, parent=False)
     group.add_dep(target=eser2)
     group.add_dep(target=eser3)
     self.assertTrue(group.search('I1'))
     self.assertTrue(group.search('E2'))
     self.assertTrue(eser1.search('I1'))
     self.assertTrue(eser1.search('E3'))
     self.assertFalse(group.search('E0'))
Example #34
0
 def test_run_partial_deps(self):
     '''Test start algorithm as soon as the calling point is done.'''
     serv = Service('NOT_CALLED')
     serv_a = ServiceGroup('CALLING_GROUP')
     serv_b = Service('SERV_1')
     serv_c = Service('SERV_2')
     act_suc1 = Action('start', command='/bin/true')
     act_suc2 = Action('start', command='/bin/true')
     serv_b.add_action(act_suc1)
     serv_c.add_action(act_suc2)
     serv.add_dep(serv_a)
     serv_a.add_dep(target=serv_b)
     serv_a.add_inter_dep(target=serv_c)
     serv_a.run('start')
     self.assertEqual(serv.status, NO_STATUS)
     self.assertEqual(serv_a.status, DONE)
     self.assertEqual(serv_b.status, DONE)
     self.assertEqual(serv_c.status, DONE)
Example #35
0
 def test_run_partial_deps(self):
     '''Test start algorithm as soon as the calling point is done.'''
     serv = Service('NOT_CALLED')
     serv_a = ServiceGroup('CALLING_GROUP')
     serv_b = Service('SERV_1')
     serv_c = Service('SERV_2')
     act_suc1 = Action('start', command='/bin/true')
     act_suc2 = Action('start', command='/bin/true')
     serv_b.add_action(act_suc1)
     serv_c.add_action(act_suc2)
     serv.add_dep(serv_a)
     serv_a.add_dep(target=serv_b)
     serv_a.add_inter_dep(target=serv_c)
     serv_a.run('start')
     self.assertEqual(serv.status, NO_STATUS)
     self.assertEqual(serv_a.status, DONE)
     self.assertEqual(serv_b.status, DONE)
     self.assertEqual(serv_c.status, DONE)
Example #36
0
 def test_search_node_graph(self):
     """Test search node in a graph trough a ServiceGroup"""
     group = ServiceGroup('GROUP')
     ser1 = Service('I1')
     ser2 = Service('I2')
     eser1 = Service('E1')
     eser2 = Service('E2')
     eser3 = Service('E3')
     group.add_inter_dep(target=ser1)
     group.add_inter_dep(target=ser2)
     group.add_dep(target=eser1, parent=False)
     group.add_dep(target=eser2)
     group.add_dep(target=eser3)
     self.assertTrue(group.search('I1'))
     self.assertTrue(group.search('E2'))
     self.assertTrue(eser1.search('I1'))
     self.assertTrue(eser1.search('E3'))
     self.assertFalse(group.search('E0'))
Example #37
0
 def test_inheritance(self):
     '''Test inheritance between on a group'''
     ser = Service('parent')
     ser.target = '127.0.0.1'
     ser.timeout = 15
     group = ServiceGroup('group')
     subser1 = Service('subser1')
     subser1.target = HOSTNAME
     subser2 = Service('subser2')
     subser2.timeout = None
     group.add_inter_dep(target=subser1)
     group.add_inter_dep(target=subser2)
     group.inherits_from(ser)
     self.assertEqual(group.target, NodeSet('127.0.0.1'))
     self.assertEqual(group.timeout, 15)
     self.assertEqual(subser1.target, NodeSet(HOSTNAME))
     self.assertEqual(subser1.timeout, 15)
     self.assertEqual(subser2.target, NodeSet('127.0.0.1'))
     self.assertEqual(subser2.timeout, None)
Example #38
0
 def test_inheritance(self):
     """Test inheritance between services"""
     ser = Service('parent')
     ser.target = '127.0.0.1'
     ser.timeout = 15
     group = ServiceGroup('group')
     subser1 = Service('subser1')
     subser1.target = HOSTNAME
     subser2 = Service('subser2')
     subser2.timeout = 3
     group.add_inter_dep(target=subser1)
     group.add_inter_dep(target=subser2)
     group.inherits_from(ser)
     self.assertEqual(group.target, NodeSet('127.0.0.1'))
     self.assertEqual(group.timeout, 15)
     self.assertEqual(subser1.target, NodeSet(HOSTNAME))
     self.assertEqual(subser1.timeout, 15)
     self.assertEqual(subser2.target, NodeSet('127.0.0.1'))
     self.assertEqual(subser2.timeout, 3)
Example #39
0
 def test_remove_inter_dep(self):
     '''Test ability to remove a dependency in a subgraph'''
     group = ServiceGroup('GROUP')
     s1 = Service('alpha')
     s2 = Service('beta')
     s3 = Service('lambda')
     group.add_inter_dep(target=s1)
     group.add_inter_dep(target=s2)
     group.add_inter_dep(target=s3)
     group.add_inter_dep(base=s1, target=s3)
     group.add_inter_dep(base=s2, target=s3)
     group.remove_inter_dep('lambda')
     self.assertTrue(s1.has_parent_dep('sink'))
     self.assertTrue(s2.has_parent_dep('sink'))
     self.assertTrue(s1.has_child_dep('source'))
     self.assertTrue(s2.has_child_dep('source'))
     self.assertFalse(s1.has_parent_dep('lambda'))
     self.assertFalse(s2.has_parent_dep('lambda'))
     group.remove_inter_dep('alpha')
     self.assertFalse(group._source.has_parent_dep('alpha'))
     self.assertTrue(group._source.has_parent_dep('beta'))
     self.assertFalse(group._sink.has_child_dep('alpha'))
     self.assertTrue(group._sink.has_child_dep('beta'))
     group.remove_inter_dep('beta')
     self.assertFalse(group._source.parents)
     self.assertFalse(group._sink.children)
Example #40
0
 def test_remove_inter_dep(self):
     '''Test ability to remove a dependency in a subgraph'''
     group = ServiceGroup('GROUP')
     s1 = Service('alpha')
     s2 = Service('beta')
     s3 = Service('lambda')
     group.add_inter_dep(target=s1)
     group.add_inter_dep(target=s2)
     group.add_inter_dep(target=s3)
     group.add_inter_dep(base=s1, target=s3)
     group.add_inter_dep(base=s2, target=s3)
     group.remove_inter_dep('lambda')
     self.assertTrue(s1.has_parent_dep('sink'))
     self.assertTrue(s2.has_parent_dep('sink'))
     self.assertTrue(s1.has_child_dep('source'))
     self.assertTrue(s2.has_child_dep('source'))
     self.assertFalse(s1.has_parent_dep('lambda'))
     self.assertFalse(s2.has_parent_dep('lambda'))
     group.remove_inter_dep('alpha')
     self.assertFalse(group._source.has_parent_dep('alpha'))
     self.assertTrue(group._source.has_parent_dep('beta'))
     self.assertFalse(group._sink.has_child_dep('alpha'))
     self.assertTrue(group._sink.has_child_dep('beta'))
     group.remove_inter_dep('beta')
     self.assertFalse(group._source.parents)
     self.assertFalse(group._sink.children)
Example #41
0
 def test_prepare_group_with_errors_one(self):
     '''Test prepare a group terminated by WARNING'''
     # Group
     group = ServiceGroup('GROUP')
     # Internal
     inter_serv1 = Service('INT_SERV1')
     inter_serv2 = Service('INT_SERV2')
     inter_serv3 = Service('INT_SERV3')
     # External
     ext_serv1 = Service('EXT_SERV1')
     ext_serv2 = Service('EXT_SERV2')
     ac_suc1 = Action('start', command='/bin/true')
     ac_suc2 = Action('start', command='/bin/true')
     ac_suc3 = Action('start', command='/bin/true')
     ac_err1 = Action('start', command='/bin/false')
     ac_err2 = Action('start', command='/bin/false')
     # Add actions
     inter_serv1.add_action(ac_suc1)
     inter_serv2.add_action(ac_suc2)
     inter_serv3.add_action(ac_err1)
     ext_serv1.add_action(ac_suc3)
     ext_serv2.add_action(ac_err2)
     # Add dependencies
     group.add_inter_dep(target=inter_serv1)
     group.add_inter_dep(target=inter_serv2)
     group.add_inter_dep(base=inter_serv2,
                         target=inter_serv3,
                         sgth=REQUIRE_WEAK)
     group.add_dep(ext_serv1)
     group.add_dep(target=ext_serv2, sgth=REQUIRE_WEAK)
     # Prepare group
     group.run('start')
     self.assertEqual(group.status, DONE)
     self.assertEqual(ext_serv1.status, DONE)
     self.assertEqual(ext_serv2.status, ERROR)
     self.assertEqual(inter_serv1.status, DONE)
     self.assertEqual(inter_serv2.status, DONE)
     self.assertEqual(inter_serv3.status, ERROR)
Example #42
0
 def test_prepare_group_with_errors_one(self):
     '''Test prepare a group terminated by WARNING'''
     # Group
     group = ServiceGroup('GROUP')
     # Internal
     inter_serv1 = Service('INT_SERV1')
     inter_serv2 = Service('INT_SERV2')
     inter_serv3 = Service('INT_SERV3')
     # External
     ext_serv1 =  Service('EXT_SERV1')
     ext_serv2 = Service('EXT_SERV2')
     ac_suc1 = Action('start', command='/bin/true')
     ac_suc2 = Action('start', command='/bin/true')
     ac_suc3 = Action('start', command='/bin/true')
     ac_err1 = Action('start', command='/bin/false')
     ac_err2 = Action('start', command='/bin/false')
     # Add actions
     inter_serv1.add_action(ac_suc1)
     inter_serv2.add_action(ac_suc2)
     inter_serv3.add_action(ac_err1)
     ext_serv1.add_action(ac_suc3)
     ext_serv2.add_action(ac_err2)
     # Add dependencies
     group.add_inter_dep(target=inter_serv1)
     group.add_inter_dep(target=inter_serv2)
     group.add_inter_dep(base=inter_serv2, target=inter_serv3,
         sgth=REQUIRE_WEAK)
     group.add_dep(ext_serv1)
     group.add_dep(target=ext_serv2, sgth=REQUIRE_WEAK)
     # Prepare group
     group.run('start')
     self.assertEqual(group.status, DONE)
     self.assertEqual(ext_serv1.status, DONE)
     self.assertEqual(ext_serv2.status, ERROR)
     self.assertEqual(inter_serv1.status, DONE)
     self.assertEqual(inter_serv2.status, DONE)
     self.assertEqual(inter_serv3.status, ERROR)
Example #43
0
 def test_prepare_group_internal_external_deps(self):
     '''Test prepare a group with internal and external dependencies'''
     # Group
     group = ServiceGroup('GROUP')
     # Internal
     inter_serv1 = Service('INT_SERV1')
     inter_serv2 = Service('INT_SERV2')
     inter_serv3 = Service('INT_SERV3')
     # External
     ext_serv1 =  Service('EXT_SERV1')
     ext_serv2 = Service('EXT_SERV2')
     ac_suc1 = Action('start', command='/bin/true')
     ac_suc2 = Action('start', command='/bin/true')
     ac_suc3 = Action('start', command='/bin/true')
     ac_suc4 = Action('start', command='/bin/true')
     ac_suc5 = Action('start', command='/bin/true')
     # Add actions
     inter_serv1.add_action(ac_suc1)
     inter_serv2.add_action(ac_suc2)
     inter_serv3.add_action(ac_suc3)
     ext_serv1.add_action(ac_suc4)
     ext_serv2.add_action(ac_suc5)
     # Add dependencies
     group.add_inter_dep(target=inter_serv1)
     group.add_inter_dep(target=inter_serv2)
     group.add_inter_dep(base=inter_serv2, target=inter_serv3)
     group.add_dep(ext_serv1)
     group.add_dep(ext_serv2)
     # Prepare group
     group.run('start')
     self.assertEqual(group.status, DONE)
     self.assertEqual(ext_serv1.status, DONE)
     self.assertEqual(ext_serv2.status, DONE)
     self.assertEqual(inter_serv1.status, DONE)
     self.assertEqual(inter_serv2.status, DONE)
     self.assertEqual(inter_serv3.status, DONE)
Example #44
0
 def test_add_dep_service_group(self):
     '''Test ability to add dependencies to a ServiceGroup'''
     ser_group = ServiceGroup('GROUP')
     s1 = Service('alpha')
     s1.add_action(Action('start', HOSTNAME, '/bin/true'))
     s2 = Service('beta')
     s2.add_action(Action('action', HOSTNAME, '/bin/true'))
     s3 = Service('lambda')
     ser_group.add_inter_dep(target=s1)
     ser_group.add_inter_dep(target=s2)
     ser_group.add_dep(target=s3)
     self.assertTrue(ser_group.has_action('start'))
     self.assertTrue(ser_group.has_action('action'))
     self.assertTrue(s1.name in ser_group._source.parents)
     self.assertTrue(s1.name in ser_group._sink.children)
     self.assertTrue(s2.name in ser_group._source.parents)
     self.assertTrue(s2.name in ser_group._sink.children)
     self.assertFalse(s3.name in ser_group.children)
     self.assertTrue(s3.name in ser_group.parents)
     s4 = Service('theta')
     s4.add_action(Action('fire', HOSTNAME,'/bin/true'))
     ser_group.add_dep(target=s4, parent=False)
     self.assertTrue(s4.name in ser_group.children)
     self.assertTrue(s4.has_parent_dep(ser_group.name))
Example #45
0
 def test_add_inter_dep_service_group_second(self):
     '''Test ability to add dependencies to the subgraph N2'''
     group = ServiceGroup('GROUP')
     s1 = Service('alpha')
     s2 = Service('beta')
     s3 = Service('lambda')
     group.add_inter_dep(target=s1)
     group.add_inter_dep(base=s1, target=s2)
     group.add_inter_dep(target=s3)
     group.add_inter_dep(base=s1, target=s3)
     self.assertTrue(s1.has_parent_dep('beta'))
     self.assertTrue(s1.has_parent_dep('lambda'))
     self.assertTrue(s1.has_child_dep('source'))
     self.assertTrue(s2.has_child_dep('alpha'))
     self.assertTrue(s3.has_child_dep('alpha'))
     self.assertTrue(s2.has_parent_dep('sink'))
     self.assertTrue(s3.has_parent_dep('sink'))
Example #46
0
 def test_add_dep_service_group(self):
     '''Test ability to add dependencies to a ServiceGroup'''
     ser_group = ServiceGroup('GROUP')
     s1 = Service('alpha')
     s1.add_action(Action('start', HOSTNAME, '/bin/true'))
     s2 = Service('beta')
     s2.add_action(Action('action', HOSTNAME, '/bin/true'))
     s3 = Service('lambda')
     ser_group.add_inter_dep(target=s1)
     ser_group.add_inter_dep(target=s2)
     ser_group.add_dep(target=s3)
     self.assertTrue(ser_group.has_action('start'))
     self.assertTrue(ser_group.has_action('action'))
     self.assertTrue(s1.name in ser_group._source.parents)
     self.assertTrue(s1.name in ser_group._sink.children)
     self.assertTrue(s2.name in ser_group._source.parents)
     self.assertTrue(s2.name in ser_group._sink.children)
     self.assertFalse(s3.name in ser_group.children)
     self.assertTrue(s3.name in ser_group.parents)
     s4 = Service('theta')
     s4.add_action(Action('fire', HOSTNAME, '/bin/true'))
     ser_group.add_dep(target=s4, parent=False)
     self.assertTrue(s4.name in ser_group.children)
     self.assertTrue(s4.has_parent_dep(ser_group.name))
Example #47
0
 def test_add_inter_dep_service_group_second(self):
     '''Test ability to add dependencies to the subgraph N2'''
     group = ServiceGroup('GROUP')
     s1 = Service('alpha')
     s2 = Service('beta')
     s3 = Service('lambda')
     group.add_inter_dep(target=s1)
     group.add_inter_dep(base=s1, target=s2)
     group.add_inter_dep(target=s3)
     group.add_inter_dep(base=s1, target=s3)
     self.assertTrue(s1.has_parent_dep('beta'))
     self.assertTrue(s1.has_parent_dep('lambda'))
     self.assertTrue(s1.has_child_dep('source'))
     self.assertTrue(s2.has_child_dep('alpha'))
     self.assertTrue(s3.has_child_dep('alpha'))
     self.assertTrue(s2.has_parent_dep('sink'))
     self.assertTrue(s3.has_parent_dep('sink'))
Example #48
0
 def test_prepare_group_internal_external_deps(self):
     '''Test prepare a group with internal and external dependencies'''
     # Group
     group = ServiceGroup('GROUP')
     # Internal
     inter_serv1 = Service('INT_SERV1')
     inter_serv2 = Service('INT_SERV2')
     inter_serv3 = Service('INT_SERV3')
     # External
     ext_serv1 = Service('EXT_SERV1')
     ext_serv2 = Service('EXT_SERV2')
     ac_suc1 = Action('start', command='/bin/true')
     ac_suc2 = Action('start', command='/bin/true')
     ac_suc3 = Action('start', command='/bin/true')
     ac_suc4 = Action('start', command='/bin/true')
     ac_suc5 = Action('start', command='/bin/true')
     # Add actions
     inter_serv1.add_action(ac_suc1)
     inter_serv2.add_action(ac_suc2)
     inter_serv3.add_action(ac_suc3)
     ext_serv1.add_action(ac_suc4)
     ext_serv2.add_action(ac_suc5)
     # Add dependencies
     group.add_inter_dep(target=inter_serv1)
     group.add_inter_dep(target=inter_serv2)
     group.add_inter_dep(base=inter_serv2, target=inter_serv3)
     group.add_dep(ext_serv1)
     group.add_dep(ext_serv2)
     # Prepare group
     group.run('start')
     self.assertEqual(group.status, DONE)
     self.assertEqual(ext_serv1.status, DONE)
     self.assertEqual(ext_serv2.status, DONE)
     self.assertEqual(inter_serv1.status, DONE)
     self.assertEqual(inter_serv2.status, DONE)
     self.assertEqual(inter_serv3.status, DONE)
Example #49
0
    def test_core_behaviour_reverse(self):
        '''Test ability of the core to solve a large graph in reverse mode'''
        # Define Group 1
        grp1 = ServiceGroup('GRP1')
        grp1.algo_reversed = True
        grp1_i1 = Service('I1')
        grp1_i1.algo_reversed = True
        grp1_i2 = Service('I2')
        grp1_i2.algo_reversed = True
        grp1_i3 = Service('I3')
        grp1_i3.algo_reversed = True
        grp1_i1.add_action(Action('stop', command='/bin/true'))
        grp1_i2.add_action(Action('stop', command='/bin/true'))
        grp1_i3.add_action(Action('stop', command='/bin/true'))
        grp1.add_inter_dep(target=grp1_i1)
        grp1.add_inter_dep(base=grp1_i1, target=grp1_i2)
        grp1.add_inter_dep(target=grp1_i3)

        # Define Group 2
        grp2 = ServiceGroup('GRP2')
        grp2.algo_reversed = True
        grp2_i1 = Service('I1')
        grp2_i1.algo_reversed = True
        grp2_i2 = Service('I2')
        grp2_i2.algo_reversed = True
        grp2_i1.add_action(Action('stop', command='/bin/true'))
        grp2_i2.add_action(Action('stop', command='/bin/true'))
        grp2.add_inter_dep(target=grp2_i1)
        grp2.add_inter_dep(base=grp2_i1, target=grp2_i2)

        # Define Group init
        svc1 = Service('S1')
        svc1.algo_reversed = True
        svc1.add_action(Action('stop', command='/bin/true'))
        svc2 = Service('S2')
        svc2.algo_reversed = True
        svc2.add_action(Action('stop', command='/bin/true'))
        svc3 = Service('S3')
        svc3.algo_reversed = True
        svc3.add_action(Action('stop', command='/bin/true'))
        group_init = ServiceGroup('GROUP_INIT')
        group_init.algo_reversed = True
        group_init.add_inter_dep(target=svc1)
        group_init.add_inter_dep(base=svc1, target=svc2, sgth=REQUIRE_WEAK)
        group_init.add_inter_dep(base=svc1, target=grp1)
        group_init.add_inter_dep(base=svc2, target=svc3)
        group_init.add_inter_dep(base=grp1, target=svc3)
        group_init.add_inter_dep(base=svc3, target=grp2)

        # Solve the graph
        group_init.run('stop')

        # Assertions
        self.assertEqual(grp2.status, DONE)
        self.assertEqual(svc3.status, DONE)
        self.assertEqual(svc2.status, DONE)
        self.assertEqual(grp1.status, DONE)
        self.assertEqual(svc1.status, DONE)
        self.assertEqual(group_init.status, DONE)
Example #50
0
 def test_graph_in_graph(self):
     """Test the DOT graph output with a servicegroup within a servicegroup"""
     grp = ServiceGroup('Group')
     subgrp = ServiceGroup('subGroup')
     grp.add_inter_dep(subgrp)
     self.assertEqual(grp.graph(), 'subgraph "cluster_Group" {\nlabel="Group";\nstyle=rounded;\nnode [style=filled];\n"Group.__hook" [style=invis];\nsubgraph "cluster_Group.subGroup" {\nlabel="Group.subGroup";\nstyle=rounded;\nnode [style=filled];\n"Group.subGroup.__hook" [style=invis];\n}\n}\n')
Example #51
0
    def test_core_behaviour_reverse(self):
        '''Test ability of the core to solve a large graph in reverse mode'''
        # Define Group 1
        grp1 = ServiceGroup('GRP1')
        grp1.algo_reversed = True
        grp1_i1 = Service('I1')
        grp1_i1.algo_reversed = True
        grp1_i2 = Service('I2')
        grp1_i2.algo_reversed = True
        grp1_i3 = Service('I3')
        grp1_i3.algo_reversed = True
        grp1_i1.add_action(Action('stop', command='/bin/true'))
        grp1_i2.add_action(Action('stop', command='/bin/true'))
        grp1_i3.add_action(Action('stop', command='/bin/true'))
        grp1.add_inter_dep(target=grp1_i1)
        grp1.add_inter_dep(base=grp1_i1, target=grp1_i2)
        grp1.add_inter_dep(target=grp1_i3)

        # Define Group 2
        grp2 = ServiceGroup('GRP2')
        grp2.algo_reversed = True
        grp2_i1 = Service('I1')
        grp2_i1.algo_reversed = True
        grp2_i2 = Service('I2')
        grp2_i2.algo_reversed = True
        grp2_i1.add_action(Action('stop', command='/bin/true'))
        grp2_i2.add_action(Action('stop', command='/bin/true'))
        grp2.add_inter_dep(target=grp2_i1)
        grp2.add_inter_dep(base=grp2_i1, target=grp2_i2)

        # Define Group init
        svc1 = Service('S1')
        svc1.algo_reversed = True
        svc1.add_action(Action('stop', command='/bin/true'))
        svc2 = Service('S2')
        svc2.algo_reversed = True
        svc2.add_action(Action('stop', command='/bin/true'))
        svc3 = Service('S3')
        svc3.algo_reversed = True
        svc3.add_action(Action('stop', command='/bin/true'))
        group_init = ServiceGroup('GROUP_INIT')
        group_init.algo_reversed = True
        group_init.add_inter_dep(target=svc1)
        group_init.add_inter_dep(base=svc1, target=svc2, sgth=REQUIRE_WEAK)
        group_init.add_inter_dep(base=svc1, target=grp1)
        group_init.add_inter_dep(base=svc2, target=svc3)
        group_init.add_inter_dep(base=grp1, target=svc3)
        group_init.add_inter_dep(base=svc3, target=grp2)

        # Solve the graph
        group_init.run('stop')

        # Assertions
        self.assertEqual(grp2.status, DONE)
        self.assertEqual(svc3.status, DONE)
        self.assertEqual(svc2.status, DONE)
        self.assertEqual(grp1.status, DONE)
        self.assertEqual(svc1.status, DONE)
        self.assertEqual(group_init.status, DONE)