def test_log(self):
        class CatchHandler(logging.NullHandler):
            """
            Handler used just to confirm that a logging event happened
            """
            def __init__(self, *args, **kwargs):
                super(CatchHandler, self).__init__(*args, **kwargs)
                self.caught_record = False

            def handle(self, record):
                self.caught_record = True

        read_fd, write_fd = os.pipe()
        result = process.CmdResult()
        logger = logging.getLogger("FDDrainerTests.test_log")
        handler = CatchHandler()
        logger.addHandler(handler)
        logger.setLevel(logging.DEBUG)

        fd_drainer = process.FDDrainer(read_fd,
                                       result,
                                       "test",
                                       logger=logger,
                                       verbose=True)
        fd_drainer.start()
        os.write(write_fd, b"should go to the log\n")
        os.close(write_fd)
        fd_drainer.flush()
        self.assertEqual(fd_drainer.data.getvalue(), b"should go to the log\n")
        self.assertTrue(handler.caught_record)
Example #2
0
 def test_flush_on_handler_with_no_fileno(self):
     handler = logging.StreamHandler(io.StringIO())
     log = logging.getLogger("test_flush_on_handler_with_no_fileno")
     log.addHandler(handler)
     read_fd, write_fd = os.pipe()
     result = process.CmdResult()
     fd_drainer = process.FDDrainer(read_fd, result, name="test",
                                    stream_logger=log)
     fd_drainer.start()
     os.close(write_fd)
     fd_drainer.flush()
 def test_drain_from_pipe_fd(self):
     read_fd, write_fd = os.pipe()
     result = process.CmdResult()
     fd_drainer = process.FDDrainer(read_fd, result, "test")
     fd_drainer.start()
     for content in (b"foo", b"bar", b"baz", b"foo\nbar\nbaz\n\n"):
         os.write(write_fd, content)
     os.write(write_fd, b"finish")
     os.close(write_fd)
     fd_drainer.flush()
     self.assertEqual(fd_drainer.data.getvalue(),
                      b"foobarbazfoo\nbar\nbaz\n\nfinish")
Example #4
0
 def test_replace_incorrect_characters_in_log(self):
     data = io.StringIO()
     handler = logging.StreamHandler(data)
     log = logging.getLogger("test_replace_incorrect_characters_in_log")
     log.addHandler(handler)
     log.setLevel(logging.DEBUG)
     read_fd, write_fd = os.pipe()
     result = process.CmdResult(encoding='ascii')
     fd_drainer = process.FDDrainer(read_fd, result, name="test",
                                    stream_logger=log, verbose=True)
     fd_drainer.start()
     os.write(write_fd, b"Avok\xc3\xa1do")
     os.close(write_fd)
     fd_drainer._thread.join(60)
     self.assertFalse(fd_drainer._thread.is_alive())
     # \n added by StreamLogger
     self.assertEqual(data.getvalue(), u"Avok\ufffd\ufffddo\n")
Example #5
0
 def test_flush_on_closed_handler(self):
     handler = logging.StreamHandler(io.StringIO())
     log = logging.getLogger("test_flush_on_closed_handler")
     log.addHandler(handler)
     read_fd, write_fd = os.pipe()
     result = process.CmdResult()
     fd_drainer = process.FDDrainer(read_fd, result, name="test",
                                    stream_logger=log)
     fd_drainer.start()
     os.close(write_fd)
     self.assertIsNotNone(fd_drainer._stream_logger)
     one_stream_closed = False
     for handler in fd_drainer._stream_logger.handlers:
         stream = getattr(handler, 'stream', None)
         if stream is not None:
             if hasattr(stream, 'close'):
                 # force closing the handler's stream to check if
                 # flush will adapt to it
                 stream.close()
                 one_stream_closed = True
     self.assertTrue(one_stream_closed)
     fd_drainer.flush()