From 1cae9ec96667e80e85fcdb034206dfd614708cd1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 14 Jul 2014 22:26:34 +0200 Subject: asyncio tests: make quiet the logs of SSL handshake failures when running tests in debug mode --- Lib/asyncio/test_utils.py | 16 ++++++++++++++++ Lib/test/test_asyncio/test_events.py | 23 +++++++++++++---------- Lib/test/test_asyncio/test_selector_events.py | 15 ++++++++------- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/Lib/asyncio/test_utils.py b/Lib/asyncio/test_utils.py index 6abcaf1..840bbf9 100644 --- a/Lib/asyncio/test_utils.py +++ b/Lib/asyncio/test_utils.py @@ -3,6 +3,7 @@ import collections import contextlib import io +import logging import os import re import socket @@ -28,6 +29,7 @@ from . import futures from . import selectors from . import tasks from .coroutines import coroutine +from .log import logger if sys.platform == 'win32': # pragma: no cover @@ -401,3 +403,17 @@ class TestCase(unittest.TestCase): def tearDown(self): events.set_event_loop(None) + + +@contextlib.contextmanager +def disable_logger(): + """Context manager to disable asyncio logger. + + For example, it can be used to ignore warnings in debug mode. + """ + old_level = logger.level + try: + logger.setLevel(logging.CRITICAL+1) + yield + finally: + logger.setLevel(old_level) diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index 06552f8..b065749 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -819,9 +819,10 @@ class EventLoopTestsMixin: # no CA loaded f_c = self.loop.create_connection(MyProto, host, port, ssl=sslcontext_client) - with self.assertRaisesRegex(ssl.SSLError, - 'certificate verify failed '): - self.loop.run_until_complete(f_c) + with test_utils.disable_logger(): + with self.assertRaisesRegex(ssl.SSLError, + 'certificate verify failed '): + self.loop.run_until_complete(f_c) # close connection self.assertIsNone(proto.transport) @@ -845,9 +846,10 @@ class EventLoopTestsMixin: f_c = self.loop.create_unix_connection(MyProto, path, ssl=sslcontext_client, server_hostname='invalid') - with self.assertRaisesRegex(ssl.SSLError, - 'certificate verify failed '): - self.loop.run_until_complete(f_c) + with test_utils.disable_logger(): + with self.assertRaisesRegex(ssl.SSLError, + 'certificate verify failed '): + self.loop.run_until_complete(f_c) # close connection self.assertIsNone(proto.transport) @@ -871,10 +873,11 @@ class EventLoopTestsMixin: # incorrect server_hostname f_c = self.loop.create_connection(MyProto, host, port, ssl=sslcontext_client) - with self.assertRaisesRegex( - ssl.CertificateError, - "hostname '127.0.0.1' doesn't match 'localhost'"): - self.loop.run_until_complete(f_c) + with test_utils.disable_logger(): + with self.assertRaisesRegex( + ssl.CertificateError, + "hostname '127.0.0.1' doesn't match 'localhost'"): + self.loop.run_until_complete(f_c) # close connection proto.transport.close() diff --git a/Lib/test/test_asyncio/test_selector_events.py b/Lib/test/test_asyncio/test_selector_events.py index 5186931..198b14f 100644 --- a/Lib/test/test_asyncio/test_selector_events.py +++ b/Lib/test/test_asyncio/test_selector_events.py @@ -1105,13 +1105,13 @@ class SelectorSslTransportTests(test_utils.TestCase): def test_on_handshake_exc(self): exc = ValueError() self.sslsock.do_handshake.side_effect = exc - transport = _SelectorSslTransport( - self.loop, self.sock, self.protocol, self.sslcontext) - transport._waiter = asyncio.Future(loop=self.loop) - transport._on_handshake(None) + with test_utils.disable_logger(): + waiter = asyncio.Future(loop=self.loop) + transport = _SelectorSslTransport( + self.loop, self.sock, self.protocol, self.sslcontext, waiter) + self.assertTrue(waiter.done()) + self.assertIs(exc, waiter.exception()) self.assertTrue(self.sslsock.close.called) - self.assertTrue(transport._waiter.done()) - self.assertIs(exc, transport._waiter.exception()) def test_on_handshake_base_exc(self): transport = _SelectorSslTransport( @@ -1119,7 +1119,8 @@ class SelectorSslTransportTests(test_utils.TestCase): transport._waiter = asyncio.Future(loop=self.loop) exc = BaseException() self.sslsock.do_handshake.side_effect = exc - self.assertRaises(BaseException, transport._on_handshake, None) + with test_utils.disable_logger(): + self.assertRaises(BaseException, transport._on_handshake, None) self.assertTrue(self.sslsock.close.called) self.assertTrue(transport._waiter.done()) self.assertIs(exc, transport._waiter.exception()) -- cgit v0.12