diff options
| author | James Falcon <TheRealFalcon@users.noreply.github.com> | 2021-04-15 10:20:04 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-15 10:20:04 -0500 |
| commit | 0d90596b56db5d306125ead08c571fc8d44d528e (patch) | |
| tree | f534590462cce32dbdf8c292430b438f03f17be7 /tests/integration_tests/util.py | |
| parent | cc16c9224681c9a60c2be5c52cff45aa17a8c010 (diff) | |
| download | vyos-cloud-init-0d90596b56db5d306125ead08c571fc8d44d528e.tar.gz vyos-cloud-init-0d90596b56db5d306125ead08c571fc8d44d528e.zip | |
Emit dots on travis to avoid timeout (#867)
The current method of running a background sleep until travis is
finished is causing integration test runs to pass even when they should
be failing.
Instead, update the code to emit dots itself.
Diffstat (limited to 'tests/integration_tests/util.py')
| -rw-r--r-- | tests/integration_tests/util.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/integration_tests/util.py b/tests/integration_tests/util.py new file mode 100644 index 00000000..3ef12358 --- /dev/null +++ b/tests/integration_tests/util.py @@ -0,0 +1,49 @@ +import logging +import multiprocessing +import os +import time +from contextlib import contextmanager + +log = logging.getLogger('integration_testing') + + +def verify_ordered_items_in_text(to_verify: list, text: str): + """Assert all items in list appear in order in text. + + Examples: + verify_ordered_items_in_text(['a', '1'], 'ab1') # passes + verify_ordered_items_in_text(['1', 'a'], 'ab1') # raises AssertionError + """ + index = 0 + for item in to_verify: + index = text[index:].find(item) + assert index > -1, "Expected item not found: '{}'".format(item) + + +@contextmanager +def emit_dots_on_travis(): + """emit a dot every 60 seconds if running on Travis. + + Travis will kill jobs that don't emit output for a certain amount of time. + This context manager spins up a background process which will emit a dot to + stdout every 60 seconds to avoid being killed. + + It should be wrapped selectively around operations that are known to take a + long time. + """ + if os.environ.get('TRAVIS') != "true": + # If we aren't on Travis, don't do anything. + yield + return + + def emit_dots(): + while True: + log.info(".") + time.sleep(60) + + dot_process = multiprocessing.Process(target=emit_dots) + dot_process.start() + try: + yield + finally: + dot_process.terminate() |
