7
7
from django .test .utils import override_settings
8
8
from django .utils import timezone
9
9
10
- from django_dbq .management .commands .worker import process_job , Worker
10
+ from django_dbq .management .commands .worker import Worker
11
11
from django_dbq .models import Job
12
12
13
13
from io import StringIO
@@ -123,41 +123,53 @@ def test_queue_depth_for_queue_with_zero_jobs(self):
123
123
124
124
@freezegun .freeze_time ()
125
125
@mock .patch ("django_dbq.management.commands.worker.sleep" )
126
- @mock .patch ("django_dbq.management.commands.worker.process_job" )
127
126
class WorkerProcessProcessJobTestCase (TestCase ):
128
127
def setUp (self ):
129
128
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
134
133
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 )
137
136
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 ())
140
139
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 (
143
142
seconds = 2
144
143
)
145
- Worker .process_job (self .MockWorker )
144
+ Worker .process_job (self .mock_worker )
146
145
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 )
148
147
self .assertEqual (
149
- self .MockWorker .last_job_finished ,
148
+ self .mock_worker .last_job_finished ,
150
149
timezone .now () - timezone .timedelta (seconds = 2 ),
151
150
)
152
151
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 (
155
154
seconds = 7
156
155
)
157
- Worker .process_job (self .MockWorker )
156
+ Worker .process_job (self .mock_worker )
158
157
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 )
161
173
162
174
163
175
@override_settings (JOBS = {"testjob" : {"tasks" : ["a" ]}})
@@ -267,7 +279,7 @@ def test_task_sequence(self):
267
279
class ProcessJobTestCase (TestCase ):
268
280
def test_process_job (self ):
269
281
job = Job .objects .create (name = "testjob" )
270
- process_job ("default" )
282
+ Worker ("default" , 1 ). _process_job ( )
271
283
job = Job .objects .get ()
272
284
self .assertEqual (job .state , Job .STATES .COMPLETE )
273
285
@@ -276,7 +288,7 @@ def test_process_job_wrong_queue(self):
276
288
Processing a different queue shouldn't touch our other job
277
289
"""
278
290
job = Job .objects .create (name = "testjob" , queue_name = "lol" )
279
- process_job ("default" )
291
+ Worker ("default" , 1 ). _process_job ( )
280
292
job = Job .objects .get ()
281
293
self .assertEqual (job .state , Job .STATES .NEW )
282
294
@@ -315,7 +327,7 @@ def test_creation_hook_only_runs_on_create(self):
315
327
class JobFailureHookTestCase (TestCase ):
316
328
def test_failure_hook (self ):
317
329
job = Job .objects .create (name = "testjob" )
318
- process_job ("default" )
330
+ Worker ("default" , 1 ). _process_job ( )
319
331
job = Job .objects .get ()
320
332
self .assertEqual (job .state , Job .STATES .FAILED )
321
333
self .assertEqual (job .workspace ["output" ], "failure hook ran" )
@@ -334,14 +346,18 @@ def test_delete_old_jobs(self):
334
346
j2 .created = two_days_ago
335
347
j2 .save ()
336
348
337
- j3 = Job .objects .create (name = "testjob" , state = Job .STATES .NEW )
349
+ j3 = Job .objects .create (name = "testjob" , state = Job .STATES .STOPPING )
338
350
j3 .created = two_days_ago
339
351
j3 .save ()
340
352
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 )
342
358
343
359
Job .objects .delete_old ()
344
360
345
361
self .assertEqual (Job .objects .count (), 2 )
346
- self .assertTrue (j3 in Job .objects .all ())
347
362
self .assertTrue (j4 in Job .objects .all ())
363
+ self .assertTrue (j5 in Job .objects .all ())
0 commit comments