mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-12 09:00:00 -04:00
[9.18] new: test: Add module-specific python setup to system tests
During the system test execution, allow use of module-specific setup() function in addition to the setup.sh script which this function should ultimately replace. The purpose of setup() is two-fold. First, it can execute any commands needed to create the initial conditions for the test, such as creating key materials, manipulating files etc. Second, it should return any test-specific template values as a dictionary. Those will be used to render the jinja2 templates. Backport of MR !10983 Merge branch 'backport-nicki/pytest-add-python-setup-func-9.18' into 'bind-9.18' See merge request isc-projects/bind9!11127
This commit is contained in:
commit
bb2654801b
3 changed files with 25 additions and 13 deletions
|
|
@ -649,7 +649,7 @@ vulture:
|
|||
<<: *python_triggering_rules
|
||||
needs: []
|
||||
script:
|
||||
- vulture --exclude "*/ans*/ans.py,conftest.py,get_algorithms.py,isctest" --ignore-names "pytestmark" bin/tests/system/
|
||||
- vulture --exclude "*/ans*/ans.py,conftest.py,get_algorithms.py,isctest" --ignore-names "after_servers_start,bootstrap,pytestmark" bin/tests/system/
|
||||
|
||||
ci-variables:
|
||||
<<: *precheck_job
|
||||
|
|
|
|||
|
|
@ -656,14 +656,26 @@ def system_test(
|
|||
pytest.skip("Prerequisites missing.")
|
||||
|
||||
def setup_test():
|
||||
templates.render_auto()
|
||||
try:
|
||||
shell(f"{system_test_dir}/setup.sh")
|
||||
except FileNotFoundError:
|
||||
pass # setup.sh is optional
|
||||
except subprocess.CalledProcessError as exc:
|
||||
isctest.log.error("Failed to run test setup")
|
||||
pytest.fail(f"setup.sh exited with {exc.returncode}")
|
||||
template_data = None
|
||||
bootstrap_fn = getattr(request.module, "bootstrap", None)
|
||||
if bootstrap_fn:
|
||||
isctest.log.debug("Running test bootstrap()")
|
||||
try:
|
||||
template_data = bootstrap_fn()
|
||||
except Exception as exc: # pylint: disable=broad-exception-caught
|
||||
isctest.log.error("Failed to run test bootstrap()")
|
||||
kind = type(exc).__name__
|
||||
pytest.fail(f"bootstrap() failed with {kind}")
|
||||
|
||||
templates.render_auto(template_data)
|
||||
|
||||
setup_sh_path = f"{system_test_dir}/setup.sh"
|
||||
if os.path.exists(setup_sh_path):
|
||||
try:
|
||||
shell(f"{system_test_dir}/setup.sh")
|
||||
except subprocess.CalledProcessError as exc:
|
||||
isctest.log.error("Failed to run test setup.sh")
|
||||
pytest.fail(f"setup.sh exited with {exc.returncode}")
|
||||
|
||||
def start_servers():
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -87,14 +87,14 @@ class TemplateEngine:
|
|||
stream = self.j2env.get_template(template).stream(data)
|
||||
stream.dump(output, encoding="utf-8")
|
||||
|
||||
def render_auto(self):
|
||||
def render_auto(self, data: Optional[Dict[str, Any]] = None):
|
||||
"""
|
||||
Render all *.j2 templates with default values and write the output to
|
||||
files without the .j2 extensions.
|
||||
Render all *.j2 templates with default (and optionally the provided)
|
||||
values and write the output to files without the .j2 extensions.
|
||||
"""
|
||||
templates = [
|
||||
str(filepath.relative_to(self.directory))
|
||||
for filepath in self.directory.rglob("*.j2")
|
||||
]
|
||||
for template in templates:
|
||||
self.render(template[:-3])
|
||||
self.render(template[:-3], data)
|
||||
|
|
|
|||
Loading…
Reference in a new issue