Files
awx/awx/main/tests
Dirk Julich b37f3892b6 [AAP-74343] Decouple installed_collections/ansible_version from indirect node counting flag (#16453)
* [AAP-74343] Decouple installed_collections and ansible_version from indirect node counting flag

The indirect_instance_count callback plugin and its artifact processing
were entirely gated behind FEATURE_INDIRECT_NODE_COUNTING_ENABLED. This
caused installed_collections and ansible_version to remain unpopulated
when the flag was off, even though these are baseline analytics fields
unrelated to indirect host counting.

Always run the callback plugin and persist installed_collections and
ansible_version to the database. Only the indirect-counting-specific
parts (EventQuery creation, event_queries_processed flag, and vendor
collections) remain gated behind the feature flag.

* [AAP-74343] Read callbacks_enabled from ansible.cfg so user-configured callbacks are preserved

The check for 'callbacks_enabled' in config_values was dead code because
read_ansible_config was never asked to read that setting. Now that the
callback registration runs unconditionally, fix this by including
'callbacks_enabled' in the variables of interest.

* [AAP-74343] Use comma delimiter for ANSIBLE_CALLBACKS_ENABLED

Ansible's CALLBACKS_ENABLED config is type list and splits on commas.
The colon delimiter would cause combined callback names to be treated
as a single invalid name.

* [AAP-74343] Add tests for ANSIBLE_CALLBACKS_ENABLED configuration

Verify that indirect_instance_count is always set, user-configured
callbacks from ansible.cfg are preserved, and the comma delimiter
is used as ansible-core expects.

* [AAP-74343] Use public API for namespace package path access

Replace library.__path__._path[0] with library.__path__[0] to avoid
relying on a private CPython implementation detail of _NamespacePath.

* [AAP-74343] Skip host query scanning when indirect counting flag is off

The indirect_instance_count callback plugin now checks AWX_COLLECT_HOST_QUERIES
to decide whether to scan for host query files. When the feature flag is off,
the plugin only collects collection metadata (name + version) and ansible_version,
skipping the expensive embedded/external query file discovery.

* [AAP-74343] Set AWX_COLLECT_HOST_QUERIES in query discovery tests

The TestExternalQueryDiscovery tests exercise the host query scanning
path, which now requires AWX_COLLECT_HOST_QUERIES=1 in the environment.

* [AAP-74343] Use Ansible plugin config system for collect_host_queries

Declare collect_host_queries as a formal plugin option in DOCUMENTATION
with env var AWX_COLLECT_HOST_QUERIES, replacing the raw os.getenv() call
with self.get_option(). This follows the standard Ansible plugin
configuration pattern.

* [AAP-74343] Add test for disabled collect_host_queries path

Verify that when collect_host_queries is false, the plugin still
enumerates collections for metadata but skips host query file scanning.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-22 14:45:08 +02:00
..

Test Environments

Several of the subfolders of awx/main/tests/ indicate a different required environment where you can run the tests. Those folders are:

  • functional/ - requires a test database and no other services running
  • live/ - must run in tools_awx_1 container launched by make docker-compose
  • unit/ - does not require a test database or any active services

Functional and unit test environment

The functional and unit tests have an invocation in make test, and this attaches several other things like schema that piggybacks on requests. These tests are ran from the root AWX folder.

Functional tests

Only tests in the functional/ folder should use the @pytest.mark.django_db decorator. This is the only difference between the functional and unit folders, the test environment is otherwise the same for both.

Functional tests use a sqlite3 database, so the postgres service is not necessary.

Live tests

The live tests have an invocation in make live_test which will change directory before running, which is required to pick up a different pytest configuration.

This will use the postges container from make docker-compose for the database, and will disable the pytest-django features of running with a test database and running tests in transactions. This means that any changes done in the course of the test could potentially be seen in your browser via the API or UI, and anything the test fails to clean up will remain in the database.

Folders that should not contain tests

  • data/ - just files other tests use
  • docs/ - utilities for schema generation
  • factories/ - general utilities
  • manual/ - python files to be ran directly