Create a mechanism for marking tests "logcontext clean" (#8399)

This commit is contained in:
Richard van der Hoff 2020-09-28 17:58:33 +01:00 committed by GitHub
parent bd715e1278
commit 5e3ca12b15
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 21 deletions

View file

@ -65,6 +65,11 @@ except Exception:
return None
# a hook which can be set during testing to assert that we aren't abusing logcontexts.
def logcontext_error(msg: str):
logger.warning(msg)
# get an id for the current thread.
#
# threading.get_ident doesn't actually return an OS-level tid, and annoyingly,
@ -330,10 +335,9 @@ class LoggingContext:
"""Enters this logging context into thread local storage"""
old_context = set_current_context(self)
if self.previous_context != old_context:
logger.warning(
"Expected previous context %r, found %r",
self.previous_context,
old_context,
logcontext_error(
"Expected previous context %r, found %r"
% (self.previous_context, old_context,)
)
return self
@ -346,10 +350,10 @@ class LoggingContext:
current = set_current_context(self.previous_context)
if current is not self:
if current is SENTINEL_CONTEXT:
logger.warning("Expected logging context %s was lost", self)
logcontext_error("Expected logging context %s was lost" % (self,))
else:
logger.warning(
"Expected logging context %s but found %s", self, current
logcontext_error(
"Expected logging context %s but found %s" % (self, current)
)
# the fact that we are here suggests that the caller thinks that everything
@ -387,16 +391,16 @@ class LoggingContext:
support getrusuage.
"""
if get_thread_id() != self.main_thread:
logger.warning("Started logcontext %s on different thread", self)
logcontext_error("Started logcontext %s on different thread" % (self,))
return
if self.finished:
logger.warning("Re-starting finished log context %s", self)
logcontext_error("Re-starting finished log context %s" % (self,))
# If we haven't already started record the thread resource usage so
# far
if self.usage_start:
logger.warning("Re-starting already-active log context %s", self)
logcontext_error("Re-starting already-active log context %s" % (self,))
else:
self.usage_start = rusage
@ -414,7 +418,7 @@ class LoggingContext:
try:
if get_thread_id() != self.main_thread:
logger.warning("Stopped logcontext %s on different thread", self)
logcontext_error("Stopped logcontext %s on different thread" % (self,))
return
if not rusage:
@ -422,9 +426,9 @@ class LoggingContext:
# Record the cpu used since we started
if not self.usage_start:
logger.warning(
"Called stop on logcontext %s without recording a start rusage",
self,
logcontext_error(
"Called stop on logcontext %s without recording a start rusage"
% (self,)
)
return
@ -584,14 +588,13 @@ class PreserveLoggingContext:
if context != self._new_context:
if not context:
logger.warning(
"Expected logging context %s was lost", self._new_context
logcontext_error(
"Expected logging context %s was lost" % (self._new_context,)
)
else:
logger.warning(
"Expected logging context %s but found %s",
self._new_context,
context,
logcontext_error(
"Expected logging context %s but found %s"
% (self._new_context, context,)
)