Ejemplo n.º 1
0
    def test_DeadProcess(self):
        from roslaunch.pmon import Process, DeadProcess
        # test constructor params
        respawn = False
        package = 'foo-%s' % time.time()
        name = 'name-%s' % time.time()
        args = [time.time(), time.time(), time.time()]
        env = {'key': time.time(), 'key2': time.time()}

        p = Process(package, name, args, env)
        self._test_DeadProcess(p, package, name, args, env, False)
        p = Process(package, name, args, env, True)
        self._test_DeadProcess(p, package, name, args, env, True)
        p = Process(package, name, args, env, False)
        self._test_DeadProcess(p, package, name, args, env, False)
    def test_registration(self):
        from roslaunch.core import RLException
        from roslaunch.pmon import Process
        pmon = self.pmon

        p1 = Process('foo', 'name1', [], {})
        p2 = Process('bar', 'name2', [], {})
        corep1 = Process('core', 'core1', [], {})
        corep2 = Process('core', 'core2', [], {})

        pmon.register(p1)
        self.assert_(pmon.has_process('name1'))
        self.assertEquals(p1, pmon.get_process('name1'))
        self.failIf(pmon.has_process('name2'))
        self.assertEquals(['name1'], pmon.get_active_names())
        try:
            pmon.register(Process('foo', p1.name, [], {}))
            self.fail("should not allow duplicate process name")
        except RLException:
            pass

        pmon.register(p2)
        self.assert_(pmon.has_process('name2'))
        self.assertEquals(p2, pmon.get_process('name2'))
        self.assertEquals(set(['name1', 'name2']),
                          set(pmon.get_active_names()))

        pmon.register_core_proc(corep1)
        self.assert_(pmon.has_process('core1'))
        self.assertEquals(corep1, pmon.get_process('core1'))
        self.assertEquals(set(['name1', 'name2', 'core1']),
                          set(pmon.get_active_names()))

        pmon.register_core_proc(corep2)
        self.assert_(pmon.has_process('core2'))
        self.assertEquals(corep2, pmon.get_process('core2'))
        self.assertEquals(set(['name1', 'name2', 'core1', 'core2']),
                          set(pmon.get_active_names()))

        pmon.unregister(p2)
        self.failIf(pmon.has_process('name2'))
        pmon.unregister(p1)
        self.failIf(pmon.has_process('name1'))
        pmon.unregister(corep1)
        self.failIf(pmon.has_process('core1'))
        pmon.unregister(corep2)
        self.failIf(pmon.has_process('core2'))

        pmon.shutdown()
        try:
            pmon.register(Process('shutdown_fail', 'shutdown_fail', [], {}))
            self.fail("registration should fail post-shutdown")
        except RLException:
            pass