tests: add helpful decorator to wait before test cleanup

Allow to manual inspect test environment after test fails. This is
similar to --do-not-clean option we had in R3.2.

The decorator should be used only while debugging and should never be
applied to the code committed into repository.
This commit is contained in:
Marek Marczykowski-Górecki 2019-09-23 03:58:33 +02:00
parent 4fa45dbc91
commit 8ecf00bd0e
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724

View File

@ -220,6 +220,34 @@ def expectedFailureIfTemplate(templates):
return wrapper return wrapper
return decorator return decorator
def wait_on_fail(func):
"""Test decorator for debugging. It pause test execution on failure and wait
for user input. It's useful to manually inspect system state just after test
fails, before executing any cleanup.
Usage: decorate a test you are debugging.
DO IT ONLY TEMPORARILY, DO NOT COMMIT!
"""
@functools.wraps(func)
def wrapper(self, *args, **kwargs):
try:
func(self, *args, **kwargs)
except:
print('FAIL\n')
traceback.print_exc()
print('Press return to continue:', end='')
sys.stdout.flush()
reader = asyncio.StreamReader(loop=self.loop)
transport, protocol = self.loop.run_until_complete(
self.loop.connect_read_pipe(lambda: asyncio.StreamReaderProtocol(reader),
sys.stdin))
self.loop.run_until_complete(reader.readline())
raise
return wrapper
class _AssertNotRaisesContext(object): class _AssertNotRaisesContext(object):
"""A context manager used to implement TestCase.assertNotRaises methods. """A context manager used to implement TestCase.assertNotRaises methods.