@@ -415,6 +415,8 @@ def test_enqueue_logs(self) -> None:
415
415
}
416
416
)
417
417
class DatabaseBackendWorkerTestCase (TransactionTestCase ):
418
+ worker_id = uuid .uuid4 ()
419
+
418
420
run_worker = staticmethod (
419
421
partial (
420
422
call_command ,
@@ -423,6 +425,7 @@ class DatabaseBackendWorkerTestCase(TransactionTestCase):
423
425
batch = True ,
424
426
interval = 0 ,
425
427
startup_delay = False ,
428
+ worker_id = worker_id ,
426
429
)
427
430
)
428
431
@@ -454,6 +457,7 @@ def test_run_enqueued_task(self) -> None:
454
457
self .assertGreaterEqual (result .started_at , result .enqueued_at ) # type:ignore[arg-type,misc]
455
458
self .assertGreaterEqual (result .finished_at , result .started_at ) # type:ignore[arg-type,misc]
456
459
self .assertEqual (result .status , ResultStatus .SUCCEEDED )
460
+ self .assertIsNone (result .worker_id )
457
461
458
462
self .assertEqual (DBTaskResult .objects .ready ().count (), 0 )
459
463
@@ -629,6 +633,15 @@ def test_fractional_interval(self) -> None:
629
633
630
634
self .assertEqual (worker_class .mock_calls [0 ].kwargs ["interval" ], 0.1 )
631
635
636
+ def test_invalid_worker_id (self ) -> None :
637
+ output = StringIO ()
638
+ with redirect_stderr (output ):
639
+ with self .assertRaises (SystemExit ):
640
+ execute_from_command_line (
641
+ ["django-admin" , "db_worker" , "--worker-id" , "123" ]
642
+ )
643
+ self .assertIn ("invalid UUID value" , output .getvalue ())
644
+
632
645
def test_run_after (self ) -> None :
633
646
result = test_tasks .noop_task .using (
634
647
run_after = timezone .now () + timedelta (hours = 10 )
@@ -702,10 +715,10 @@ def test_verbose_logging(self) -> None:
702
715
self .assertEqual (
703
716
stdout .getvalue ().splitlines (),
704
717
[
705
- "Starting worker for queues=default" ,
718
+ f "Starting worker worker_id= { self . worker_id } for queues=default" ,
706
719
f"Task id={ result .id } path=tests.tasks.noop_task state=RUNNING" ,
707
720
f"Task id={ result .id } path=tests.tasks.noop_task state=SUCCEEDED" ,
708
- "No more tasks to run - exiting gracefully." ,
721
+ f "No more tasks to run for worker_id= { self . worker_id } - exiting gracefully." ,
709
722
],
710
723
)
711
724
@@ -1333,6 +1346,7 @@ def test_interrupt_signals(self) -> None:
1333
1346
1334
1347
result .refresh ()
1335
1348
self .assertEqual (result .status , ResultStatus .RUNNING )
1349
+ self .assertIsNotNone (result .worker_id )
1336
1350
1337
1351
process .send_signal (sig )
1338
1352
@@ -1343,6 +1357,7 @@ def test_interrupt_signals(self) -> None:
1343
1357
result .refresh ()
1344
1358
1345
1359
self .assertEqual (result .status , ResultStatus .SUCCEEDED )
1360
+ self .assertIsNone (result .worker_id )
1346
1361
1347
1362
@skipIf (sys .platform == "win32" , "Cannot emulate CTRL-C on Windows" )
1348
1363
def test_repeat_ctrl_c (self ) -> None :
@@ -1355,6 +1370,7 @@ def test_repeat_ctrl_c(self) -> None:
1355
1370
1356
1371
result .refresh ()
1357
1372
self .assertEqual (result .status , ResultStatus .RUNNING )
1373
+ self .assertIsNotNone (result .worker_id )
1358
1374
1359
1375
process .send_signal (signal .SIGINT )
1360
1376
@@ -1373,6 +1389,7 @@ def test_repeat_ctrl_c(self) -> None:
1373
1389
result .refresh ()
1374
1390
self .assertEqual (result .status , ResultStatus .FAILED )
1375
1391
self .assertEqual (result .exception_class , SystemExit )
1392
+ self .assertIsNone (result .worker_id )
1376
1393
1377
1394
@skipIf (sys .platform == "win32" , "Windows doesn't support SIGKILL" )
1378
1395
def test_kill (self ) -> None :
@@ -1411,6 +1428,7 @@ def test_system_exit_task(self) -> None:
1411
1428
result .refresh ()
1412
1429
self .assertEqual (result .status , ResultStatus .FAILED )
1413
1430
self .assertEqual (result .exception_class , SystemExit )
1431
+ self .assertIsNone (result .worker_id )
1414
1432
1415
1433
def test_keyboard_interrupt_task (self ) -> None :
1416
1434
result = test_tasks .failing_task_keyboard_interrupt .enqueue ()
@@ -1423,6 +1441,7 @@ def test_keyboard_interrupt_task(self) -> None:
1423
1441
result .refresh ()
1424
1442
self .assertEqual (result .status , ResultStatus .FAILED )
1425
1443
self .assertEqual (result .exception_class , KeyboardInterrupt )
1444
+ self .assertIsNone (result .worker_id )
1426
1445
1427
1446
def test_multiple_workers (self ) -> None :
1428
1447
results = [test_tasks .sleep_for .enqueue (0.1 ) for _ in range (10 )]
@@ -1439,6 +1458,7 @@ def test_multiple_workers(self) -> None:
1439
1458
for result in results :
1440
1459
result .refresh ()
1441
1460
self .assertEqual (result .status , ResultStatus .SUCCEEDED )
1461
+ self .assertIsNone (result .worker_id )
1442
1462
1443
1463
all_output = ""
1444
1464
0 commit comments