summaryrefslogtreecommitdiff
path: root/Lib/test/test_logging.py
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@python.org>2020-10-19 15:50:36 +0100
committerGitHub <noreply@github.com>2020-10-19 15:50:36 +0100
commitc82f10450c547eb94a04ee17b7c816ff31948297 (patch)
treead305c05c5745e1a5e7c136545bec7eefa741e32 /Lib/test/test_logging.py
parenteee6bb50c69d94280f43b47390ea9d1b5f42930c (diff)
parentb580ed1d9d55461d8dde027411b90be26cae131e (diff)
downloadcpython-git-bpo-39107.tar.gz
Merge branch 'master' into bpo-39107bpo-39107
Diffstat (limited to 'Lib/test/test_logging.py')
-rw-r--r--Lib/test/test_logging.py54
1 files changed, 33 insertions, 21 deletions
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index d23fbfb4fe..7c98e19b74 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -1164,22 +1164,27 @@ class MemoryHandlerTest(BaseTest):
class MockRaceConditionHandler:
def __init__(self, mem_hdlr):
self.mem_hdlr = mem_hdlr
+ self.threads = []
def removeTarget(self):
self.mem_hdlr.setTarget(None)
def handle(self, msg):
- t = threading.Thread(target=self.removeTarget)
- t.daemon = True
- t.start()
+ thread = threading.Thread(target=self.removeTarget)
+ self.threads.append(thread)
+ thread.start()
target = MockRaceConditionHandler(self.mem_hdlr)
- self.mem_hdlr.setTarget(target)
+ try:
+ self.mem_hdlr.setTarget(target)
- for _ in range(10):
- time.sleep(0.005)
- self.mem_logger.info("not flushed")
- self.mem_logger.warning("flushed")
+ for _ in range(10):
+ time.sleep(0.005)
+ self.mem_logger.info("not flushed")
+ self.mem_logger.warning("flushed")
+ finally:
+ for thread in target.threads:
+ threading_helper.join_thread(thread)
class ExceptionFormatter(logging.Formatter):
@@ -3720,7 +3725,15 @@ class UTC(datetime.tzinfo):
utc = UTC()
-class FormatterTest(unittest.TestCase):
+class AssertErrorMessage:
+
+ def assert_error_message(self, exception, message, *args, **kwargs):
+ try:
+ self.assertRaises((), *args, **kwargs)
+ except exception as e:
+ self.assertEqual(message, str(e))
+
+class FormatterTest(unittest.TestCase, AssertErrorMessage):
def setUp(self):
self.common = {
'name': 'formatter.test',
@@ -3744,12 +3757,6 @@ class FormatterTest(unittest.TestCase):
result.update(self.variants[name])
return logging.makeLogRecord(result)
- def assert_error_message(self, exception, message, *args, **kwargs):
- try:
- self.assertRaises(exception, *args, **kwargs)
- except exception as e:
- self.assertEqual(message, e.message)
-
def test_percent(self):
# Test %-formatting
r = self.get_record()
@@ -3868,7 +3875,7 @@ class FormatterTest(unittest.TestCase):
# Testing failure for '-' in field name
self.assert_error_message(
ValueError,
- "invalid field name/expression: 'name-thing'",
+ "invalid format: invalid field name/expression: 'name-thing'",
logging.Formatter, "{name-thing}", style="{"
)
# Testing failure for style mismatch
@@ -3891,7 +3898,7 @@ class FormatterTest(unittest.TestCase):
# Testing failure for invalid spec
self.assert_error_message(
ValueError,
- "bad specifier: '.2ff'",
+ "invalid format: bad specifier: '.2ff'",
logging.Formatter, '{process:.2ff}', style='{'
)
self.assertRaises(ValueError, logging.Formatter, '{process:.2Z}', style='{')
@@ -3901,12 +3908,12 @@ class FormatterTest(unittest.TestCase):
# Testing failure for mismatch braces
self.assert_error_message(
ValueError,
- "invalid format: unmatched '{' in format spec",
+ "invalid format: expected '}' before end of string",
logging.Formatter, '{process', style='{'
)
self.assert_error_message(
ValueError,
- "invalid format: unmatched '{' in format spec",
+ "invalid format: Single '}' encountered in format string",
logging.Formatter, 'process}', style='{'
)
self.assertRaises(ValueError, logging.Formatter, '{{foo!r:4.2}', style='{')
@@ -4867,7 +4874,7 @@ class LoggerAdapterTest(unittest.TestCase):
self.assertIs(self.logger.manager, orig_manager)
-class LoggerTest(BaseTest):
+class LoggerTest(BaseTest, AssertErrorMessage):
def setUp(self):
super(LoggerTest, self).setUp()
@@ -4879,7 +4886,12 @@ class LoggerTest(BaseTest):
self.addCleanup(logging.shutdown)
def test_set_invalid_level(self):
- self.assertRaises(TypeError, self.logger.setLevel, object())
+ self.assert_error_message(
+ TypeError, 'Level not an integer or a valid string: None',
+ self.logger.setLevel, None)
+ self.assert_error_message(
+ TypeError, 'Level not an integer or a valid string: (0, 0)',
+ self.logger.setLevel, (0, 0))
def test_exception(self):
msg = 'testing exception: %r'