|
| 1 | + |
| 2 | +import logging |
| 3 | +import mock |
| 4 | + |
| 5 | +import unittest2 |
| 6 | +import testlib |
| 7 | +import mitogen.core |
| 8 | +import mitogen.master |
| 9 | +import mitogen.parent |
| 10 | +import mitogen.utils |
| 11 | +from mitogen.core import b |
| 12 | + |
| 13 | + |
| 14 | +def ping(): |
| 15 | + pass |
| 16 | + |
| 17 | + |
| 18 | +class BufferingTest(testlib.TestCase): |
| 19 | + klass = mitogen.core.LogHandler |
| 20 | + |
| 21 | + def record(self): |
| 22 | + return logging.LogRecord( |
| 23 | + name='name', |
| 24 | + level=99, |
| 25 | + pathname='pathname', |
| 26 | + lineno=123, |
| 27 | + msg='msg', |
| 28 | + args=(), |
| 29 | + exc_info=None, |
| 30 | + ) |
| 31 | + |
| 32 | + def build(self): |
| 33 | + context = mock.Mock() |
| 34 | + return context, self.klass(context) |
| 35 | + |
| 36 | + def test_initially_buffered(self): |
| 37 | + context, handler = self.build() |
| 38 | + rec = self.record() |
| 39 | + handler.emit(rec) |
| 40 | + self.assertEquals(0, context.send.call_count) |
| 41 | + self.assertEquals(1, len(handler._buffer)) |
| 42 | + |
| 43 | + def test_uncork(self): |
| 44 | + context, handler = self.build() |
| 45 | + rec = self.record() |
| 46 | + handler.emit(rec) |
| 47 | + handler.uncork() |
| 48 | + |
| 49 | + self.assertEquals(1, context.send.call_count) |
| 50 | + self.assertEquals(None, handler._buffer) |
| 51 | + |
| 52 | + _, args, _ = context.send.mock_calls[0] |
| 53 | + msg, = args |
| 54 | + |
| 55 | + self.assertEquals(mitogen.core.FORWARD_LOG, msg.handle) |
| 56 | + self.assertEquals(b('name\x0099\x00msg'), msg.data) |
| 57 | + |
| 58 | + |
| 59 | +class StartupTest(testlib.RouterMixin, testlib.TestCase): |
| 60 | + def test_earliest_messages_logged(self): |
| 61 | + log = testlib.LogCapturer() |
| 62 | + log.start() |
| 63 | + |
| 64 | + c1 = self.router.local() |
| 65 | + c1.shutdown(wait=True) |
| 66 | + |
| 67 | + logs = log.stop() |
| 68 | + self.assertTrue('Python version is' in logs) |
| 69 | + self.assertTrue('Parent is context 0 (master)' in logs) |
| 70 | + |
| 71 | + def test_earliest_messages_logged_via(self): |
| 72 | + c1 = self.router.local(name='c1') |
| 73 | + # ensure any c1-related msgs are processed before beginning capture. |
| 74 | + c1.call(ping) |
| 75 | + |
| 76 | + log = testlib.LogCapturer() |
| 77 | + log.start() |
| 78 | + |
| 79 | + c2 = self.router.local(via=c1, name='c2', debug=True) |
| 80 | + c2.shutdown(wait=True) |
| 81 | + |
| 82 | + logs = log.stop() |
| 83 | + self.assertTrue('Python version is' in logs) |
| 84 | + |
| 85 | + expect = 'Parent is context %s (%s)' % (c1.context_id, 'parent') |
| 86 | + self.assertTrue(expect in logs) |
| 87 | + |
| 88 | + |
| 89 | +if __name__ == '__main__': |
| 90 | + unittest2.main() |
0 commit comments