77from django .test .utils import override_settings
88from django .utils import timezone
99
10- from django_dbq .management .commands .worker import process_job , Worker
10+ from django_dbq .management .commands .worker import Worker
1111from django_dbq .models import Job
1212
1313from io import StringIO
@@ -123,41 +123,53 @@ def test_queue_depth_for_queue_with_zero_jobs(self):
123123
124124@freezegun .freeze_time ()
125125@mock .patch ("django_dbq.management.commands.worker.sleep" )
126- @mock .patch ("django_dbq.management.commands.worker.process_job" )
127126class WorkerProcessProcessJobTestCase (TestCase ):
128127 def setUp (self ):
129128 super ().setUp ()
130- self .MockWorker = mock .MagicMock ()
131- self .MockWorker .queue_name = "default"
132- self .MockWorker .rate_limit_in_seconds = 5
133- self .MockWorker .last_job_finished = None
129+ self .mock_worker = mock .MagicMock ()
130+ self .mock_worker .queue_name = "default"
131+ self .mock_worker .rate_limit_in_seconds = 5
132+ self .mock_worker .last_job_finished = None
134133
135- def test_process_job_no_previous_job_run (self , mock_process_job , mock_sleep ):
136- Worker .process_job (self .MockWorker )
134+ def test_process_job_no_previous_job_run (self , mock_sleep ):
135+ Worker .process_job (self .mock_worker )
137136 self .assertEqual (mock_sleep .call_count , 1 )
138- self .assertEqual (mock_process_job .call_count , 1 )
139- self .assertEqual (self .MockWorker .last_job_finished , timezone .now ())
137+ self .assertEqual (self . mock_worker . _process_job .call_count , 1 )
138+ self .assertEqual (self .mock_worker .last_job_finished , timezone .now ())
140139
141- def test_process_job_previous_job_too_soon (self , mock_process_job , mock_sleep ):
142- self .MockWorker .last_job_finished = timezone .now () - timezone .timedelta (
140+ def test_process_job_previous_job_too_soon (self , mock_sleep ):
141+ self .mock_worker .last_job_finished = timezone .now () - timezone .timedelta (
143142 seconds = 2
144143 )
145- Worker .process_job (self .MockWorker )
144+ Worker .process_job (self .mock_worker )
146145 self .assertEqual (mock_sleep .call_count , 1 )
147- self .assertEqual (mock_process_job .call_count , 0 )
146+ self .assertEqual (self . mock_worker . _process_job .call_count , 0 )
148147 self .assertEqual (
149- self .MockWorker .last_job_finished ,
148+ self .mock_worker .last_job_finished ,
150149 timezone .now () - timezone .timedelta (seconds = 2 ),
151150 )
152151
153- def test_process_job_previous_job_long_time_ago (self , mock_process_job , mock_sleep ):
154- self .MockWorker .last_job_finished = timezone .now () - timezone .timedelta (
152+ def test_process_job_previous_job_long_time_ago (self , mock_sleep ):
153+ self .mock_worker .last_job_finished = timezone .now () - timezone .timedelta (
155154 seconds = 7
156155 )
157- Worker .process_job (self .MockWorker )
156+ Worker .process_job (self .mock_worker )
158157 self .assertEqual (mock_sleep .call_count , 1 )
159- self .assertEqual (mock_process_job .call_count , 1 )
160- self .assertEqual (self .MockWorker .last_job_finished , timezone .now ())
158+ self .assertEqual (self .mock_worker ._process_job .call_count , 1 )
159+ self .assertEqual (self .mock_worker .last_job_finished , timezone .now ())
160+
161+
162+ @override_settings (JOBS = {"testjob" : {"tasks" : ["a" ]}})
163+ class ShutdownTestCase (TestCase ):
164+ def test_shutdown_sets_state_to_stopping (self ):
165+ job = Job .objects .create (name = "testjob" )
166+ worker = Worker ("default" , 1 )
167+ worker .current_job = job
168+
169+ worker .shutdown (None , None )
170+
171+ job .refresh_from_db ()
172+ self .assertEqual (job .state , Job .STATES .STOPPING )
161173
162174
163175@override_settings (JOBS = {"testjob" : {"tasks" : ["a" ]}})
@@ -267,7 +279,7 @@ def test_task_sequence(self):
267279class ProcessJobTestCase (TestCase ):
268280 def test_process_job (self ):
269281 job = Job .objects .create (name = "testjob" )
270- process_job ("default" )
282+ Worker ("default" , 1 ). _process_job ( )
271283 job = Job .objects .get ()
272284 self .assertEqual (job .state , Job .STATES .COMPLETE )
273285
@@ -276,7 +288,7 @@ def test_process_job_wrong_queue(self):
276288 Processing a different queue shouldn't touch our other job
277289 """
278290 job = Job .objects .create (name = "testjob" , queue_name = "lol" )
279- process_job ("default" )
291+ Worker ("default" , 1 ). _process_job ( )
280292 job = Job .objects .get ()
281293 self .assertEqual (job .state , Job .STATES .NEW )
282294
@@ -315,7 +327,7 @@ def test_creation_hook_only_runs_on_create(self):
315327class JobFailureHookTestCase (TestCase ):
316328 def test_failure_hook (self ):
317329 job = Job .objects .create (name = "testjob" )
318- process_job ("default" )
330+ Worker ("default" , 1 ). _process_job ( )
319331 job = Job .objects .get ()
320332 self .assertEqual (job .state , Job .STATES .FAILED )
321333 self .assertEqual (job .workspace ["output" ], "failure hook ran" )
@@ -334,14 +346,18 @@ def test_delete_old_jobs(self):
334346 j2 .created = two_days_ago
335347 j2 .save ()
336348
337- j3 = Job .objects .create (name = "testjob" , state = Job .STATES .NEW )
349+ j3 = Job .objects .create (name = "testjob" , state = Job .STATES .STOPPING )
338350 j3 .created = two_days_ago
339351 j3 .save ()
340352
341- j4 = Job .objects .create (name = "testjob" , state = Job .STATES .COMPLETE )
353+ j4 = Job .objects .create (name = "testjob" , state = Job .STATES .NEW )
354+ j4 .created = two_days_ago
355+ j4 .save ()
356+
357+ j5 = Job .objects .create (name = "testjob" , state = Job .STATES .COMPLETE )
342358
343359 Job .objects .delete_old ()
344360
345361 self .assertEqual (Job .objects .count (), 2 )
346- self .assertTrue (j3 in Job .objects .all ())
347362 self .assertTrue (j4 in Job .objects .all ())
363+ self .assertTrue (j5 in Job .objects .all ())
0 commit comments