def testPidFile(self):
    pidfile = os.path.join(self.tmpdir, "pid")
    checkfile = os.path.join(self.tmpdir, "abort")

    pid = utils.StartDaemon("while sleep 5; do :; done", pidfile=pidfile,
                            output=self.tmpfile)
    try:
      fd = os.open(pidfile, os.O_RDONLY)
      try:
        # Check file is locked
        self.assertRaises(errors.LockError, utils.LockFile, fd)

        pidtext = os.read(fd, 100)
      finally:
        os.close(fd)

      self.assertEqual(int(pidtext.strip()), pid)

      self.assert_(utils.IsProcessAlive(pid))
    finally:
      # No matter what happens, kill daemon
      utils.KillProcess(pid, timeout=5.0, waitpid=False)
      self.failIf(utils.IsProcessAlive(pid))

    self.assertEqual(utils.ReadFile(self.tmpfile), "")
Exemplo n.º 2
0
    def testKill(self):
        pid_file = self.f_dpn("child")
        r_fd, w_fd = os.pipe()
        new_pid = os.fork()
        if new_pid == 0:  #child
            utils.WritePidFile(self.f_dpn("child"))
            os.write(w_fd, "a")
            signal.pause()
            os._exit(0)
            return
        # else we are in the parent
        # wait until the child has written the pid file
        os.read(r_fd, 1)
        read_pid = utils.ReadPidFile(pid_file)
        self.failUnlessEqual(read_pid, new_pid)
        self.failUnless(utils.IsProcessAlive(new_pid))

        # Try writing to locked file
        try:
            utils.WritePidFile(pid_file)
        except errors.PidFileLockError as err:
            errmsg = str(err)
            self.assertTrue(errmsg.endswith(" %s" % new_pid),
                            msg=("Error message ('%s') didn't contain correct"
                                 " PID (%s)" % (errmsg, new_pid)))
        else:
            self.fail("Writing to locked file didn't fail")

        utils.KillProcess(new_pid, waitpid=True)
        self.failIf(utils.IsProcessAlive(new_pid))
        utils.RemoveFile(self.f_dpn("child"))
        self.failUnlessRaises(errors.ProgrammerError, utils.KillProcess, 0)
Exemplo n.º 3
0
def CloseMultiplexers():
    """Closes all current multiplexers and cleans up.

  """
    for node in _MULTIPLEXERS.keys():
        (sname, child) = _MULTIPLEXERS.pop(node)
        utils.KillProcess(child.pid, timeout=10, waitpid=True)
        utils.RemoveFile(sname)
Exemplo n.º 4
0
        read_pid = utils.ReadPidFile(pid_file)
        self.failUnlessEqual(read_pid, new_pid)
        self.failUnless(utils.IsProcessAlive(new_pid))

        # Try writing to locked file
        try:
            utils.WritePidFile(pid_file)
        except errors.PidFileLockError, err:
            errmsg = str(err)
            self.assertTrue(errmsg.endswith(" %s" % new_pid),
                            msg=("Error message ('%s') didn't contain correct"
                                 " PID (%s)" % (errmsg, new_pid)))
        else:
            self.fail("Writing to locked file didn't fail")

        utils.KillProcess(new_pid, waitpid=True)
        self.failIf(utils.IsProcessAlive(new_pid))
        utils.RemoveFile(self.f_dpn("child"))
        self.failUnlessRaises(errors.ProgrammerError, utils.KillProcess, 0)

    def testExceptionType(self):
        # Make sure the PID lock error is a subclass of LockError in case some code
        # depends on it
        self.assertTrue(issubclass(errors.PidFileLockError, errors.LockError))

    def tearDown(self):
        shutil.rmtree(self.dir)


class TestNewUUID(unittest.TestCase):
    """Test case for NewUUID"""