From 6d665dda33c349c4b6d9f3dbfa5793aeae11f7db Mon Sep 17 00:00:00 2001 From: Lila Yasin Date: Wed, 24 Jun 2026 10:42:23 -0400 Subject: [PATCH] Fix awxkit tox test failure caused by root pytest.ini config bleed (#16520) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Forward-port of ansible/tower#7537 for the devel branch. When running awxkit's tox tests, pytest picks up the root pytest.ini which pulls in pytest-django options (--reuse-db, --nomigrations, DJANGO_SETTINGS_MODULE) and Django-specific filterwarnings. Since the awxkit tox environment does not install Django or pytest-django, these cause test collection to fail. The root cause is that pytest.ini has absolute priority in pytest's config discovery — it searches all ancestor directories for pytest.ini before falling back to tox.ini's [pytest] section. A [pytest] section in awxkit/tox.ini alone cannot prevent the root config from being used. Fix by: - Adding awxkit/pytest.ini to act as the primary config boundary (pytest.ini has the highest priority in config discovery, so its presence in awxkit/ stops the upward search before reaching root) - Adding explicit `test` path argument to the pytest command in awxkit/tox.ini so pytest discovers tests correctly - Adding `testpaths` and `python_files` to the [pytest] section in awxkit/tox.ini as a secondary config boundary - Adding awxkit/conftest.py that registers the Django-specific CLI options and INI keys as harmless no-ops, as a further safety net Co-authored-by: Claude Opus 4.6 --- awxkit/conftest.py | 16 ++++++++++++++++ awxkit/pytest.ini | 9 +++++++++ awxkit/tox.ini | 4 +++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 awxkit/conftest.py create mode 100644 awxkit/pytest.ini diff --git a/awxkit/conftest.py b/awxkit/conftest.py new file mode 100644 index 0000000000..7dc05ffff7 --- /dev/null +++ b/awxkit/conftest.py @@ -0,0 +1,16 @@ +# This conftest registers pytest-django CLI options and INI keys as harmless +# no-ops so that the awxkit tox environment (which does not install Django or +# pytest-django) does not crash when the root pytest.ini config leaks through. +# +# Root pytest.ini contains settings like --reuse-db, --nomigrations, and +# DJANGO_SETTINGS_MODULE that are only meaningful for Django tests. Placing +# this conftest at the awxkit/ level ensures it is loaded before argument +# parsing regardless of which config file pytest ultimately selects. + + +def pytest_addoption(parser): + group = parser.getgroup("awxkit-compat", "awxkit tox compatibility shims") + group.addoption("--reuse-db", action="store_true", default=False, help="(no-op in awxkit) pytest-django compat") + group.addoption("--nomigrations", action="store_true", default=False, help="(no-op in awxkit) pytest-django compat") + group.addoption("--create-db", action="store_true", default=False, help="(no-op in awxkit) pytest-django compat") + parser.addini("DJANGO_SETTINGS_MODULE", help="(no-op in awxkit) pytest-django compat", default="") diff --git a/awxkit/pytest.ini b/awxkit/pytest.ini new file mode 100644 index 0000000000..ff69f4177c --- /dev/null +++ b/awxkit/pytest.ini @@ -0,0 +1,9 @@ +[pytest] +addopts = -v --tb=native +testpaths = test +python_files = test_*.py + +filterwarnings = + error + +junit_family=xunit2 diff --git a/awxkit/tox.ini b/awxkit/tox.ini index 71e3081dd1..801d8b0931 100644 --- a/awxkit/tox.ini +++ b/awxkit/tox.ini @@ -19,7 +19,7 @@ deps = pytest-mock commands = - coverage run --parallel --source awxkit -m pytest --doctest-glob='*.md' --junit-xml=report.xml {posargs} + coverage run --parallel --source awxkit -m pytest -c pytest.ini test --doctest-glob='*.md' --junit-xml=report.xml {posargs} coverage combine coverage xml @@ -44,6 +44,8 @@ max-line-length = 120 [pytest] addopts = -v --tb=native +testpaths = test +python_files = test_*.py filterwarnings = error