Skip to content

Commit a3f4eb6

Browse files
committed
Merge remote-tracking branch 'origin/dmw'
* origin/dmw: issue #621: send ADD_ROUTE earlier and add test for early logging.
2 parents caa2a4f + e86f371 commit a3f4eb6

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

mitogen/parent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1546,6 +1546,7 @@ def _complete_connection(self):
15461546
remote_id=self.context.context_id,
15471547
)
15481548
)
1549+
self._router.route_monitor.notice_stream(self.stdio_stream)
15491550
self.latch.put()
15501551

15511552
def _fail_connection(self, exc):
@@ -2423,7 +2424,6 @@ def _connect(self, klass, **kwargs):
24232424
except mitogen.core.TimeoutError:
24242425
raise mitogen.core.StreamError(self.connection_timeout_msg)
24252426

2426-
self.route_monitor.notice_stream(conn.stdio_stream)
24272427
return context
24282428

24292429
def connect(self, method_name, name=None, **kwargs):

tests/log_handler_test.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
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

Comments
 (0)