From 7d2b2d672c31a6afb09f33786861a08df34a4fa6 Mon Sep 17 00:00:00 2001 From: Alan Rominger Date: Sat, 8 Feb 2025 21:07:56 -0500 Subject: [PATCH] Make awx/main/tests/live dramatically faster (#15780) * Make awx/main/tests/live dramatically faster * Add new setting to exclude list --- awx/main/dispatch/publish.py | 4 ++-- awx/main/tests/settings_for_test.py | 3 +++ awx/main/tests/unit/test_settings.py | 1 + awx/settings/defaults.py | 5 +++++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/awx/main/dispatch/publish.py b/awx/main/dispatch/publish.py index 8ff158eafa..df39e06de3 100644 --- a/awx/main/dispatch/publish.py +++ b/awx/main/dispatch/publish.py @@ -5,9 +5,9 @@ import time from uuid import uuid4 from django_guid import get_guid +from django.conf import settings from . import pg_bus_conn -from awx.main.utils import is_testing logger = logging.getLogger('awx.main.dispatch') @@ -101,7 +101,7 @@ class task: obj = cls.get_async_body(args=args, kwargs=kwargs, uuid=uuid, **kw) if callable(queue): queue = queue() - if not is_testing(): + if not settings.DISPATCHER_MOCK_PUBLISH: with pg_bus_conn() as conn: conn.notify(queue, json.dumps(obj)) return (obj, queue) diff --git a/awx/main/tests/settings_for_test.py b/awx/main/tests/settings_for_test.py index 5634494c33..b7d5cdf023 100644 --- a/awx/main/tests/settings_for_test.py +++ b/awx/main/tests/settings_for_test.py @@ -7,6 +7,9 @@ from awx.settings.development import * # NOQA # Some things make decisions based on settings.SETTINGS_MODULE, so this is done for that SETTINGS_MODULE = 'awx.settings.development' +# Turn off task submission, because sqlite3 does not have pg_notify +DISPATCHER_MOCK_PUBLISH = True + # Use SQLite for unit tests instead of PostgreSQL. If the lines below are # commented out, Django will create the test_awx-dev database in PostgreSQL to # run unit tests. diff --git a/awx/main/tests/unit/test_settings.py b/awx/main/tests/unit/test_settings.py index dae5929655..7ff2e3f4ab 100644 --- a/awx/main/tests/unit/test_settings.py +++ b/awx/main/tests/unit/test_settings.py @@ -11,6 +11,7 @@ LOCAL_SETTINGS = ( 'CACHES', 'DEBUG', 'NAMED_URL_GRAPH', + 'DISPATCHER_MOCK_PUBLISH', ) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index ffffa1e21a..2f83414a48 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -424,6 +424,11 @@ EXECUTION_NODE_REMEDIATION_CHECKS = 60 * 30 # once every 30 minutes check if an # Amount of time dispatcher will try to reconnect to database for jobs and consuming new work DISPATCHER_DB_DOWNTIME_TOLERANCE = 40 +# If you set this, nothing will ever be sent to pg_notify +# this is not practical to use, although periodic schedules may still run slugish but functional tasks +# sqlite3 based tests will use this +DISPATCHER_MOCK_PUBLISH = False + BROKER_URL = 'unix:///var/run/redis/redis.sock' CELERYBEAT_SCHEDULE = { 'tower_scheduler': {'task': 'awx.main.tasks.system.awx_periodic_scheduler', 'schedule': timedelta(seconds=30), 'options': {'expires': 20}},