1+ import json
2+ from threading import Thread
3+ from time import sleep
4+
15from scheduler .helpers .queues import get_queue
2- from scheduler .tests .jobs import test_job
6+ from scheduler .tests .jobs import test_job , two_seconds_job
7+ from ..test_job_decorator import long_running_func
38from ..test_views .base import BaseTestCase
4- from ...redis_models import JobModel
9+ from ...redis_models import JobModel , JobStatus , WorkerModel
510from ...worker import create_worker
6- from ...worker .commands import send_command
11+ from ...worker .commands import send_command , StopJobCommand
712from ...worker .commands .suspend_worker import SuspendWorkCommand
813
914
@@ -40,3 +45,29 @@ def test_stop_worker_command__bad_worker_name(self):
4045 self .assertFalse (worker ._model .is_suspended )
4146 job = JobModel .get (job .name , connection = queue .connection )
4247 self .assertFalse (job .is_queued )
48+
49+ def test_stop_job_command__success (self ):
50+ # Arrange
51+ worker_name = "test"
52+ queue = get_queue ("default" )
53+ job = queue .create_and_enqueue_job (two_seconds_job )
54+ self .assertTrue (job .is_queued )
55+ worker = create_worker ("default" , name = worker_name , burst = True , with_scheduler = False )
56+ worker .bootstrap ()
57+
58+ # Act
59+ t = Thread (target = worker .work , args = (0 ,), name = "worker-thread" )
60+ t .start ()
61+ sleep (0.1 )
62+ command = StopJobCommand (worker_name = worker_name , job_name = job .name )
63+ command_payload = json .dumps (command .command_payload ())
64+ worker ._command_listener .handle_payload (dict (data = command_payload ))
65+ worker .monitor_job_execution_process (job ,queue )
66+
67+ # Assert
68+ job = JobModel .get (job .name , connection = queue .connection )
69+ worker = WorkerModel .get (worker .name , connection = queue .connection )
70+ self .assertEqual (worker .stopped_job_name , job .name )
71+ self .assertIsNone (worker .current_job_name )
72+ self .assertEqual (job .status , JobStatus .STOPPED )
73+ t .join ()
0 commit comments