Refactor capturing stderr into a context manager
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
from contextlib import contextmanager
|
||||||
|
|
||||||
from eventlet.support import greenlets
|
from eventlet.support import greenlets, six
|
||||||
|
|
||||||
|
|
||||||
def get_errno(exc):
|
def get_errno(exc):
|
||||||
@@ -41,3 +42,14 @@ else:
|
|||||||
return b.decode(encoding)
|
return b.decode(encoding)
|
||||||
|
|
||||||
PY33 = sys.version_info[:2] == (3, 3)
|
PY33 = sys.version_info[:2] == (3, 3)
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def capture_stderr():
|
||||||
|
stream = six.StringIO()
|
||||||
|
original = sys.stderr
|
||||||
|
try:
|
||||||
|
sys.stderr = stream
|
||||||
|
yield stream
|
||||||
|
finally:
|
||||||
|
sys.stderr = original
|
||||||
|
stream.seek(0)
|
||||||
|
@@ -2,7 +2,7 @@ import sys
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from eventlet import debug
|
from eventlet import debug
|
||||||
from eventlet.support import six
|
from eventlet.support import capture_stderr, six
|
||||||
from tests import LimitedTestCase, main
|
from tests import LimitedTestCase, main
|
||||||
import eventlet
|
import eventlet
|
||||||
|
|
||||||
@@ -107,10 +107,7 @@ class TestDebug(LimitedTestCase):
|
|||||||
s.recv(1)
|
s.recv(1)
|
||||||
{}[1] # keyerror
|
{}[1] # keyerror
|
||||||
|
|
||||||
fake = six.StringIO()
|
with capture_stderr() as fake:
|
||||||
orig = sys.stderr
|
|
||||||
sys.stderr = fake
|
|
||||||
try:
|
|
||||||
gt = eventlet.spawn(hurl, client_2)
|
gt = eventlet.spawn(hurl, client_2)
|
||||||
eventlet.sleep(0)
|
eventlet.sleep(0)
|
||||||
client.send(b' ')
|
client.send(b' ')
|
||||||
@@ -118,10 +115,8 @@ class TestDebug(LimitedTestCase):
|
|||||||
# allow the "hurl" greenlet to trigger the KeyError
|
# allow the "hurl" greenlet to trigger the KeyError
|
||||||
# not sure why the extra context switch is needed
|
# not sure why the extra context switch is needed
|
||||||
eventlet.sleep(0)
|
eventlet.sleep(0)
|
||||||
finally:
|
self.assertRaises(KeyError, gt.wait)
|
||||||
sys.stderr = orig
|
debug.hub_exceptions(False)
|
||||||
self.assertRaises(KeyError, gt.wait)
|
|
||||||
debug.hub_exceptions(False)
|
|
||||||
# look for the KeyError exception in the traceback
|
# look for the KeyError exception in the traceback
|
||||||
assert 'KeyError: 1' in fake.getvalue(), "Traceback not in:\n" + fake.getvalue()
|
assert 'KeyError: 1' in fake.getvalue(), "Traceback not in:\n" + fake.getvalue()
|
||||||
|
|
||||||
|
@@ -17,7 +17,7 @@ from eventlet.green import subprocess
|
|||||||
from eventlet import greenio
|
from eventlet import greenio
|
||||||
from eventlet import greenthread
|
from eventlet import greenthread
|
||||||
from eventlet import support
|
from eventlet import support
|
||||||
from eventlet.support import bytes_to_str, six
|
from eventlet.support import bytes_to_str, capture_stderr, six
|
||||||
from eventlet import tpool
|
from eventlet import tpool
|
||||||
from eventlet import wsgi
|
from eventlet import wsgi
|
||||||
|
|
||||||
@@ -835,11 +835,8 @@ class TestHttpd(_TestBase):
|
|||||||
listener = greensocket.socket()
|
listener = greensocket.socket()
|
||||||
listener.bind(('localhost', 0))
|
listener.bind(('localhost', 0))
|
||||||
# NOT calling listen, to trigger the error
|
# NOT calling listen, to trigger the error
|
||||||
self.logfile = six.StringIO()
|
with capture_stderr() as log:
|
||||||
self.spawn_server(sock=listener)
|
self.spawn_server(sock=listener)
|
||||||
old_stderr = sys.stderr
|
|
||||||
try:
|
|
||||||
sys.stderr = self.logfile
|
|
||||||
eventlet.sleep(0) # need to enter server loop
|
eventlet.sleep(0) # need to enter server loop
|
||||||
try:
|
try:
|
||||||
eventlet.connect(('localhost', self.port))
|
eventlet.connect(('localhost', self.port))
|
||||||
@@ -847,10 +844,8 @@ class TestHttpd(_TestBase):
|
|||||||
except socket.error as exc:
|
except socket.error as exc:
|
||||||
self.assertEqual(support.get_errno(exc), errno.ECONNREFUSED)
|
self.assertEqual(support.get_errno(exc), errno.ECONNREFUSED)
|
||||||
|
|
||||||
log_content = self.logfile.getvalue()
|
log_content = log.getvalue()
|
||||||
assert 'Invalid argument' in log_content, log_content
|
assert 'Invalid argument' in log_content, log_content
|
||||||
finally:
|
|
||||||
sys.stderr = old_stderr
|
|
||||||
debug.hub_exceptions(False)
|
debug.hub_exceptions(False)
|
||||||
|
|
||||||
def test_026_log_format(self):
|
def test_026_log_format(self):
|
||||||
|
Reference in New Issue
Block a user