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