77# http://www.eclipse.org/legal/epl-v10.html
88#
99# *****************************************************************************
10- from unittest .mock import patch , Mock
10+ from unittest .mock import patch , Mock , call
1111from mas .devops .saas .job_cleaner import JobCleaner
1212
1313
@@ -26,8 +26,16 @@ def mock_job(name, namespace, labels, creation_timestamp):
2626jobs_in_cluster = [
2727 mock_job ("job-xa-1" , "x" , {"mas.ibm.com/job-cleanup-group" : "a" }, 1 ),
2828 mock_job ("job-xa-2" , "x" , {"mas.ibm.com/job-cleanup-group" : "a" }, 2 ),
29+ mock_job ("job-xa-3" , "x" , {"mas.ibm.com/job-cleanup-group" : "a" }, 3 ),
30+
2931 mock_job ("job-xb-1" , "x" , {"mas.ibm.com/job-cleanup-group" : "b" }, 1 ),
32+ mock_job ("job-xb-2" , "x" , {"mas.ibm.com/job-cleanup-group" : "b" }, 2 ),
33+
34+ mock_job ("job-xc-1" , "x" , {"mas.ibm.com/job-cleanup-group" : "c" }, 2 ),
35+
36+ mock_job ("job-ya-2" , "y" , {"mas.ibm.com/job-cleanup-group" : "a" }, 2 ),
3037 mock_job ("job-ya-1" , "y" , {"mas.ibm.com/job-cleanup-group" : "a" }, 1 ),
38+
3139 mock_job ("job-yothera-1" , "y" , {"otherlabel" : "a" }, 1 ),
3240 mock_job ("job-zothera-1" , "z" , {"otherlabel" : "a" }, 1 )
3341]
@@ -78,24 +86,47 @@ def test_get_all_cleanup_groups(mock_batch_v1_api):
7886 mock_batch_v1_api .return_value .list_job_for_all_namespaces .side_effect = list_job_for_all_namespaces
7987 jc = JobCleaner (None )
8088 for limit in [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]:
81- assert jc ._get_all_cleanup_groups ("mas.ibm.com/job-cleanup-group" , limit ) == {('x' , 'a' ), ('x' , 'b' ), ('y' , 'a' )}
89+ assert jc ._get_all_cleanup_groups ("mas.ibm.com/job-cleanup-group" , limit ) == {('x' , 'a' ), ('x' , 'b' ), ('x' , 'c' ), ( ' y' , 'a' )}
8290
8391
8492@patch ("kubernetes.client.BatchV1Api" )
8593def test_get_all_jobs (mock_batch_v1_api ):
8694 mock_batch_v1_api .return_value .list_namespaced_job .side_effect = list_namespaced_job
8795 jc = JobCleaner (None )
8896 for limit in [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]:
89- assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("x" , "a" , "mas.ibm.com/job-cleanup-group" , limit ))) == ["job-xa-1" , "job-xa-2" ]
90- assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("x" , "b" , "mas.ibm.com/job-cleanup-group" , limit ))) == ["job-xb-1" ]
91- assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("y" , "a" , "mas.ibm.com/job-cleanup-group" , limit ))) == ["job-ya-1" ]
97+ assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("x" , "a" , "mas.ibm.com/job-cleanup-group" , limit ))) == ["job-xa-1" , "job-xa-2" , "job-xa-3" ]
98+ assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("x" , "b" , "mas.ibm.com/job-cleanup-group" , limit ))) == ["job-xb-1" , "job-xb-2" ]
99+ assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("x" , "c" , "mas.ibm.com/job-cleanup-group" , limit ))) == ["job-xc-1" ]
100+ assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("y" , "a" , "mas.ibm.com/job-cleanup-group" , limit ))) == ["job-ya-2" , "job-ya-1" ]
92101 assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("y" , "b" , "mas.ibm.com/job-cleanup-group" , limit ))) == []
93102 assert list (map (lambda job : job .metadata .name , jc ._get_all_jobs ("y" , "a" , "otherlabel" , limit ))) == ["job-yothera-1" ]
94103
95- # TODO
96- # @patch("kubernetes.client.BatchV1Api")
97- # def test_cleanup_jobs(mock_batch_v1_api):
98- # mock_batch_v1_api.return_value.list_job_for_all_namespaces.side_effect = list_job_for_all_namespaces
99- # mock_batch_v1_api.return_value.list_namespaced_job.side_effect = list_namespaced_job
100- # jc = JobCleaner(None)
101- # jc.cleanup_jobs()
104+
105+ @patch ("kubernetes.client.BatchV1Api" )
106+ def test_cleanup_jobs (mock_batch_v1_api ):
107+ mock_batch_v1_api .return_value .list_job_for_all_namespaces .side_effect = list_job_for_all_namespaces
108+ mock_batch_v1_api .return_value .list_namespaced_job .side_effect = list_namespaced_job
109+
110+ jc = JobCleaner (None )
111+ for dry_run in [False , True ]:
112+ dry_run_param = None
113+ if dry_run :
114+ dry_run_param = "All"
115+
116+ expected_calls = [
117+ call ('job-ya-1' , 'y' , dry_run = dry_run_param , propagation_policy = 'Foreground' ),
118+ call ('job-xa-2' , 'x' , dry_run = dry_run_param , propagation_policy = 'Foreground' ),
119+ call ('job-xa-1' , 'x' , dry_run = dry_run_param , propagation_policy = 'Foreground' ),
120+ call ('job-xb-1' , 'x' , dry_run = dry_run_param , propagation_policy = 'Foreground' ),
121+ ]
122+
123+ for limit in [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]:
124+ mock_batch_v1_api .return_value .delete_namespaced_job .reset_mock ()
125+ jc .cleanup_jobs ("mas.ibm.com/job-cleanup-group" , 3 , dry_run )
126+
127+ mock_batch_v1_api .return_value .delete_namespaced_job .assert_has_calls (
128+ expected_calls ,
129+ any_order = True
130+ )
131+
132+ assert mock_batch_v1_api .return_value .delete_namespaced_job .call_count == len (expected_calls )
0 commit comments