1818def dummy_task (msg ):
1919 return msg
2020
21+ @task ()
22+ def repeating_group_task (count ):
23+ if count > 0 :
24+ repeating_group_task .delay (count - 1 , group_id = 'group-id' , execute_inline = True )
25+
26+ @task (max_retries = 5 )
27+ def max_retries_group_task ():
28+ repeating_group_task .delay (3 , group_id = 'group-id' , execute_inline = True )
29+ max_retries_group_task .retry ()
30+
2131global_group_mock = Mock ()
2232
2333class WorkerTest (TestCase ):
@@ -81,7 +91,7 @@ def test_delay_with_group(self):
8191 def test_group_callback (self ):
8292 settings .GROUP_CALLBACK_TASK = Mock ()
8393
84- self .worker .delay ('group-id' , 'queue' , dummy_task , [], {'msg' : 'Hello World!' }, 5 , False , 3 , True )
94+ self .worker .delay ('group-id' , 'queue' , dummy_task , [], {'msg' : 'Hello World!' }, 5 , False , 0 , True )
8595
8696 self .group_mock .remove .assert_called_once ()
8797 settings .GROUP_CALLBACK_TASK .delay .assert_called_once ()
@@ -91,13 +101,40 @@ def test_group_callback(self):
91101 def test_group_callback_string (self ):
92102 settings .GROUP_CALLBACK_TASK = 'eb_sqs.tests.worker.tests_worker.global_group_mock'
93103
94- self .worker .delay ('group-id' , 'queue' , dummy_task , [], {'msg' : 'Hello World!' }, 5 , False , 3 , True )
104+ self .worker .delay ('group-id' , 'queue' , dummy_task , [], {'msg' : 'Hello World!' }, 5 , False , 0 , True )
95105
96106 self .group_mock .remove .assert_called_once ()
97107 global_group_mock .delay .assert_called_once ()
98108
99109 settings .GROUP_CALLBACK_TASK = None
100110
111+ def test_group (self ):
112+ settings .GROUP_CALLBACK_TASK = Mock ()
113+
114+ group_set = set ()
115+ self .group_mock .add .side_effect = lambda task : group_set .add (task .id )
116+ self .group_mock .remove .side_effect = lambda task : len (group_set ) == 0 if group_set .discard (task .id ) is None else False
117+
118+ repeating_group_task .delay (3 , group_id = 'group-id' , execute_inline = True )
119+
120+ settings .GROUP_CALLBACK_TASK .delay .assert_called_once ()
121+
122+ settings .GROUP_CALLBACK_TASK = None
123+
124+ def test_group_match_retries_reached (self ):
125+ settings .GROUP_CALLBACK_TASK = Mock ()
126+
127+ group_set = set ()
128+ self .group_mock .add .side_effect = lambda task : group_set .add (task .id )
129+ self .group_mock .remove .side_effect = lambda task : len (group_set ) == 0 if group_set .discard (
130+ task .id ) is None else False
131+
132+ max_retries_group_task .delay (group_id = 'group-id' , execute_inline = True )
133+
134+ settings .GROUP_CALLBACK_TASK .delay .assert_called_once ()
135+
136+ settings .GROUP_CALLBACK_TASK = None
137+
101138 def test_retry_execution (self ):
102139 task = WorkerTask ('id' , None , 'queue' , dummy_task , [], {'msg' : 'Hello World!' }, 5 , 0 , False )
103140 self .assertEqual (dummy_task .retry_num , 0 )
0 commit comments