Example #1
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 #2
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 #3
0
 def test_run_reverse_with_dependencies(self):
     ser = Service('REVERSE_BASE')
     ser_dep = Service('REVERSE_DEP')
     ser.algo_reversed = True
     ser_dep.algo_reversed = True
     stop1 = Action('stop', command='/bin/true')
     stop2 = Action('stop', command='/bin/true')
     ser.add_action(stop1)
     ser_dep.add_action(stop2)
     ser.add_dep(ser_dep)
     ser_dep.run('stop')
     self.assertEqual(ser.status, DONE)
     self.assertTrue(stop1.duration)
     self.assertEqual(ser_dep.status, DONE)
     self.assertTrue(stop2.duration)
Example #4
0
 def test_run_reverse_with_dependencies(self):
     ser = Service('REVERSE_BASE')
     ser_dep = Service('REVERSE_DEP')
     ser.algo_reversed = True
     ser_dep.algo_reversed = True
     stop1 = Action('stop', command='/bin/true')
     stop2 = Action('stop', command='/bin/true')
     ser.add_action(stop1)
     ser_dep.add_action(stop2)
     ser.add_dep(ser_dep)
     ser_dep.run('stop')
     self.assertEqual(ser.status, DONE)
     self.assertTrue(stop1.duration)
     self.assertEqual(ser_dep.status, DONE)
     self.assertTrue(stop2.duration)
Example #5
0
 def test_run_reverse_single_service(self):
     """Test run action stop on service (reverse algorithm)"""
     ser = Service('REVERSE')
     ser.algo_reversed = True
     stop = Action('stop', command='/bin/true')
     ser.add_action(stop)
     ser.run('stop')
     self.assertEqual(ser.status, DONE)
     self.assertTrue(stop.duration)
Example #6
0
 def test_run_reverse_single_service(self):
     """Test run action stop on service (reverse algorithm)"""
     ser = Service('REVERSE')
     ser.algo_reversed = True
     stop = Action('stop', command='/bin/true')
     ser.add_action(stop)
     ser.run('stop')
     self.assertEqual(ser.status, DONE)
     self.assertTrue(stop.duration)
Example #7
0
 def test_prepare_group_subservice_reverse(self):
     '''Test prepare reverse group with an internal dependency.'''
     group = ServiceGroup('GROUP')
     group.algo_reversed = True
     subserv = Service('SUB1')
     subserv.algo_reversed = True
     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 #8
0
 def test_prepare_group_subservice_reverse(self):
     '''Test prepare reverse group with an internal dependency.'''
     group = ServiceGroup('GROUP')
     group.algo_reversed = True
     subserv = Service('SUB1')
     subserv.algo_reversed = True
     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 #9
0
    def test_run_revese_multiple_services(self):
        """Test run stop action on service provokes reverse algorithm"""
        """Test prepare with multiple dependencies at different levels."""
        #Service Arthemis is delcared here
        arth = Service('arthemis')
        arth.algo_reversed = True
        stop = Action(name='stop', command='/bin/true')
        stop2 = Action(name='stop', command='/bin/true')
        stop3 = Action(name='stop', command='/bin/true')
        stop4 = Action(name='stop', command='/bin/true')
        arth.add_action(stop)

        # Service Chiva is declared here
        chiva = Service('chiva')
        chiva.algo_reversed = True
        chiva.add_action(stop2)
        chiva.add_dep(arth)

        # Service Dyonisos is declared here
        dion = Service('dionysos')
        dion.algo_reversed = True
        dion.add_action(stop3)
        dion.add_dep(arth)

        # Service Brutus is declared here
        brut = Service('brutus')
        brut.algo_reversed = True
        brut.add_action(stop4)

        brut.add_dep(chiva)
        brut.add_dep(dion)

        arth.run('stop')
        self.assertEqual(arth.status, DONE)
        self.assertTrue(stop.duration)
        self.assertEqual(chiva.status, DONE)
        self.assertTrue(stop2.duration)
        self.assertEqual(dion.status, DONE)
        self.assertTrue(stop3.duration)
        self.assertEqual(brut.status, DONE)
        self.assertTrue(stop4.duration)
Example #10
0
    def test_run_revese_multiple_services(self):
        """Test run stop action on service provokes reverse algorithm"""
        """Test prepare with multiple dependencies at different levels."""
        #Service Arthemis is delcared here
        arth = Service('arthemis')
        arth.algo_reversed = True
        stop = Action(name='stop', command='/bin/true')
        stop2 = Action(name='stop', command='/bin/true')
        stop3 = Action(name='stop', command='/bin/true')
        stop4 = Action(name='stop', command='/bin/true')
        arth.add_action(stop)

        # Service Chiva is declared here
        chiva = Service('chiva')
        chiva.algo_reversed = True
        chiva.add_action(stop2)
        chiva.add_dep(arth)

        # Service Dyonisos is declared here
        dion = Service('dionysos')
        dion.algo_reversed = True
        dion.add_action(stop3)
        dion.add_dep(arth)

        # Service Brutus is declared here
        brut = Service('brutus')
        brut.algo_reversed = True
        brut.add_action(stop4)

        brut.add_dep(chiva)
        brut.add_dep(dion)

        arth.run('stop')
        self.assertEqual(arth.status, DONE)
        self.assertTrue(stop.duration)
        self.assertEqual(chiva.status, DONE)
        self.assertTrue(stop2.duration)
        self.assertEqual(dion.status, DONE)
        self.assertTrue(stop3.duration)
        self.assertEqual(brut.status, DONE)
        self.assertTrue(stop4.duration)
Example #11
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 #12
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)