Previously, dnsrps test was executed as an optional part of the rpz and
rpzrecurse system tests. This was conceptually problematic, as the test
took the responsibility of running parts of the test framework -
cleaning files and setting up servers again.
Instead, allow these tests to execute either the native variant, or the
dnsrps one. To ensure the same test coverage, trigger both of these
variants as separate test cases from pytest.
(cherry picked from commit cb55fb2cae)
79 lines
2.0 KiB
Python
79 lines
2.0 KiB
Python
#!/usr/bin/python3
|
|
|
|
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
#
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
|
#
|
|
# See the COPYRIGHT file distributed with this work for additional
|
|
# information regarding copyright ownership.
|
|
|
|
import os
|
|
from pathlib import Path
|
|
import subprocess
|
|
|
|
import pytest
|
|
|
|
|
|
long_test = pytest.mark.skipif(
|
|
not os.environ.get("CI_ENABLE_ALL_TESTS"), reason="CI_ENABLE_ALL_TESTS not set"
|
|
)
|
|
|
|
|
|
def feature_test(feature):
|
|
feature_test_bin = os.environ["FEATURETEST"]
|
|
try:
|
|
subprocess.run([feature_test_bin, feature], check=True)
|
|
except subprocess.CalledProcessError as exc:
|
|
if exc.returncode != 1:
|
|
raise
|
|
return False
|
|
return True
|
|
|
|
|
|
DNSRPS_BIN = Path(os.environ["TOP_BUILDDIR"]) / "bin/tests/system/rpz/dnsrps"
|
|
|
|
|
|
def is_dnsrps_available():
|
|
if not feature_test("--enable-dnsrps"):
|
|
return False
|
|
try:
|
|
subprocess.run([DNSRPS_BIN, "-a"], check=True)
|
|
except subprocess.CalledProcessError:
|
|
return False
|
|
return True
|
|
|
|
|
|
have_libxml2 = pytest.mark.skipif(
|
|
not feature_test("--have-libxml2"), reason="libxml2 support disabled in the build"
|
|
)
|
|
|
|
have_json_c = pytest.mark.skipif(
|
|
not feature_test("--have-json-c"), reason="json-c support disabled in the build"
|
|
)
|
|
|
|
dnsrps_enabled = pytest.mark.skipif(
|
|
not is_dnsrps_available(), reason="dnsrps disabled in the build"
|
|
)
|
|
|
|
|
|
try:
|
|
import flaky as flaky_pkg # type: ignore
|
|
except ModuleNotFoundError:
|
|
# In case the flaky package is not installed, run the tests as usual
|
|
# without any attempts to re-run them.
|
|
# pylint: disable=unused-argument
|
|
def flaky(*args, **kwargs):
|
|
"""Mock decorator that doesn't do anything special, just returns the function."""
|
|
|
|
def wrapper(wrapped_obj):
|
|
return wrapped_obj
|
|
|
|
return wrapper
|
|
|
|
else:
|
|
flaky = flaky_pkg.flaky
|