diff --git a/bin/tests/system/conftest.py b/bin/tests/system/conftest.py index 692743115c..a1a42770cf 100644 --- a/bin/tests/system/conftest.py +++ b/bin/tests/system/conftest.py @@ -357,6 +357,27 @@ def mlogger(system_test_name): return logging.getLogger(system_test_name) +def _get_marker(node, marker): + try: + # pytest >= 4.x + return node.get_closest_marker(marker) + except AttributeError: + # pytest < 4.x + return node.get_marker(marker) + + +@pytest.fixture(autouse=True) +def wait_for_zones_loaded(request, servers): + """Wait for all zones to be loaded by specified named instances.""" + instances = _get_marker(request.node, "requires_zones_loaded") + if not instances: + return + + for instance in instances.args: + with servers[instance].watch_log_from_start() as watcher: + watcher.wait_for_line("all zones loaded") + + @pytest.fixture def logger(request, system_test_name): """Logging facility specific to a particular test.""" diff --git a/bin/tests/system/pytest.ini b/bin/tests/system/pytest.ini index 1559595852..a8733cefb6 100644 --- a/bin/tests/system/pytest.ini +++ b/bin/tests/system/pytest.ini @@ -18,3 +18,5 @@ log_level = INFO python_files = tests_*.py junit_logging = log junit_log_passing_tests = 0 +markers = + requires_zones_loaded: ensures the test does not start until the specified named instances load all configured zones