11import pytest
2- from unittest import mock
32import os
43import tempfile
54import shutil
@@ -27,16 +26,24 @@ def test_no_worker_info_on_AWX_nodes(node_type):
2726
2827
2928@pytest .fixture
30- def mock_job_folder (request ):
31- pdd_path = tempfile .mkdtemp (prefix = 'awx_123_' )
29+ def job_folder_factory (request ):
30+ def _rf (job_id = '1234' ):
31+ pdd_path = tempfile .mkdtemp (prefix = f'awx_{ job_id } _' )
3232
33- def test_folder_cleanup ():
34- if os .path .exists (pdd_path ):
35- shutil .rmtree (pdd_path )
33+ def test_folder_cleanup ():
34+ if os .path .exists (pdd_path ):
35+ shutil .rmtree (pdd_path )
3636
37- request .addfinalizer (test_folder_cleanup )
37+ request .addfinalizer (test_folder_cleanup )
3838
39- return pdd_path
39+ return pdd_path
40+
41+ return _rf
42+
43+
44+ @pytest .fixture
45+ def mock_job_folder (job_folder_factory ):
46+ return job_folder_factory ()
4047
4148
4249@pytest .mark .django_db
@@ -49,17 +56,31 @@ def test_folder_cleanup_stale_file(mock_job_folder, mock_me):
4956
5057
5158@pytest .mark .django_db
52- def test_folder_cleanup_running_job (mock_job_folder , mock_me ):
53- me_inst = Instance .objects .create (hostname = 'local_node' , uuid = '00000000-0000-0000-0000-000000000000' )
54- with mock .patch .object (Instance .objects , 'me' , return_value = me_inst ):
55- job = Job .objects .create (id = 123 , controller_node = me_inst .hostname , status = 'running' )
56- _cleanup_images_and_files (grace_period = 0 )
57- assert os .path .exists (mock_job_folder ) # running job should prevent folder from getting deleted
58-
59- job .status = 'failed'
60- job .save (update_fields = ['status' ])
61- _cleanup_images_and_files (grace_period = 0 )
62- assert not os .path .exists (mock_job_folder ) # job is finished and no grace period, should delete
59+ def test_folder_cleanup_running_job (mock_job_folder , me_inst ):
60+ job = Job .objects .create (id = 1234 , controller_node = me_inst .hostname , status = 'running' )
61+ _cleanup_images_and_files (grace_period = 0 )
62+ assert os .path .exists (mock_job_folder ) # running job should prevent folder from getting deleted
63+
64+ job .status = 'failed'
65+ job .save (update_fields = ['status' ])
66+ _cleanup_images_and_files (grace_period = 0 )
67+ assert not os .path .exists (mock_job_folder ) # job is finished and no grace period, should delete
68+
69+
70+ @pytest .mark .django_db
71+ def test_folder_cleanup_multiple_running_jobs (job_folder_factory , me_inst ):
72+ jobs = []
73+ dirs = []
74+ num_jobs = 3
75+
76+ for i in range (num_jobs ):
77+ job = Job .objects .create (controller_node = me_inst .hostname , status = 'running' )
78+ dirs .append (job_folder_factory (job .id ))
79+ jobs .append (job )
80+
81+ _cleanup_images_and_files (grace_period = 0 )
82+
83+ assert [os .path .exists (d ) for d in dirs ] == [True for i in range (num_jobs )]
6384
6485
6586@pytest .mark .django_db
0 commit comments