From bb6bf33b9e0784542937b5489a1f04e13b2e5e2c Mon Sep 17 00:00:00 2001 From: Mauricio Magnani Jr Date: Wed, 21 May 2025 14:18:24 -0300 Subject: [PATCH] fix: ensure temp files are cleaned up after failed HCC (#6952) --- awx/main/analytics/core.py | 8 +++---- .../tests/functional/analytics/test_core.py | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/awx/main/analytics/core.py b/awx/main/analytics/core.py index 9d652e5463..318f675c75 100644 --- a/awx/main/analytics/core.py +++ b/awx/main/analytics/core.py @@ -322,10 +322,10 @@ def gather(dest=None, module=None, subset=None, since=None, until=None, collecti settings.AUTOMATION_ANALYTICS_LAST_ENTRIES = json.dumps(last_entries, cls=DjangoJSONEncoder) if collection_type != 'dry-run': - if succeeded: - for fpath in tarfiles: - if os.path.exists(fpath): - os.remove(fpath) + for fpath in tarfiles: + if os.path.exists(fpath): + os.remove(fpath) + with disable_activity_stream(): if not settings.AUTOMATION_ANALYTICS_LAST_GATHER or until > settings.AUTOMATION_ANALYTICS_LAST_GATHER: # `AUTOMATION_ANALYTICS_LAST_GATHER` is set whether collection succeeds or fails; diff --git a/awx/main/tests/functional/analytics/test_core.py b/awx/main/tests/functional/analytics/test_core.py index de71f7d043..a2c525c836 100644 --- a/awx/main/tests/functional/analytics/test_core.py +++ b/awx/main/tests/functional/analytics/test_core.py @@ -150,3 +150,24 @@ def test_ship_credential(setting_map, expected_result, expected_auth, temp_analy assert mock_analytic_post.call_args[1]['auth'] == expected_auth else: mock_analytic_post.assert_not_called() + + +@pytest.mark.django_db +def test_gather_cleanup_on_auth_failure(mock_valid_license, temp_analytic_tar): + settings.INSIGHTS_TRACKING_STATE = True + settings.AUTOMATION_ANALYTICS_URL = 'https://example.com/api' + settings.REDHAT_USERNAME = 'test_user' + settings.REDHAT_PASSWORD = 'test_password' + + with tempfile.NamedTemporaryFile(delete=False, suffix='.tar.gz') as temp_file: + temp_file_path = temp_file.name + + try: + with mock.patch('awx.main.analytics.core.ship', return_value=False): + with mock.patch('awx.main.analytics.core.package', return_value=temp_file_path): + gather(module=importlib.import_module(__name__), collection_type='scheduled') + + assert not os.path.exists(temp_file_path), "Temp file was not cleaned up after ship failure" + finally: + if os.path.exists(temp_file_path): + os.remove(temp_file_path)