@@ -49,28 +49,51 @@ class SolidQueue::ReadyExecutionTest < ActiveSupport::TestCase
49
49
end
50
50
end
51
51
52
- test "queue order and then priority is respected when using a list of queues " do
52
+ test "claim jobs using a wildcard " do
53
53
AddToBufferJob . perform_later ( "hey" )
54
- job = SolidQueue ::Job . last
55
- assert_equal "background" , job . queue_name
56
54
57
- assert_claimed_jobs ( 3 ) do
58
- SolidQueue ::ReadyExecution . claim ( %w[ background backend ] , 3 , 42 )
55
+ assert_claimed_jobs ( 6 ) do
56
+ SolidQueue ::ReadyExecution . claim ( "*" , SolidQueue :: Job . count + 1 , 42 )
59
57
end
58
+ end
60
59
61
- assert job . reload . claimed?
62
- @jobs . first ( 2 ) . each do |job |
63
- assert_not job . reload . ready?
64
- assert job . claimed?
60
+ test "claim jobs using queue prefixes" do
61
+ AddToBufferJob . perform_later ( "hey" )
62
+
63
+ assert_claimed_jobs ( 1 ) do
64
+ SolidQueue ::ReadyExecution . claim ( "backgr*" , SolidQueue ::Job . count + 1 , 42 )
65
65
end
66
+
67
+ assert @jobs . none? ( &:claimed? )
66
68
end
67
69
68
- test "claim jobs using a wildcard" do
70
+ test "claim jobs using a wildcard and having paused queues " do
69
71
AddToBufferJob . perform_later ( "hey" )
70
72
71
- assert_claimed_jobs ( 6 ) do
73
+ SolidQueue ::Queue . find_by_name ( "backend" ) . pause
74
+
75
+ assert_claimed_jobs ( 1 ) do
72
76
SolidQueue ::ReadyExecution . claim ( "*" , SolidQueue ::Job . count + 1 , 42 )
73
77
end
78
+
79
+ @jobs . each ( &:reload )
80
+ assert @jobs . none? ( &:claimed? )
81
+ end
82
+
83
+ test "claim jobs using both exact names and a prefix" do
84
+ AddToBufferJob . perform_later ( "hey" )
85
+
86
+ assert_claimed_jobs ( 6 ) do
87
+ SolidQueue ::ReadyExecution . claim ( %w[ backe* background ] , SolidQueue ::Job . count + 1 , 42 )
88
+ end
89
+ end
90
+
91
+ test "claim jobs for queue without jobs at the moment using prefixes" do
92
+ AddToBufferJob . perform_later ( "hey" )
93
+
94
+ assert_claimed_jobs ( 0 ) do
95
+ SolidQueue ::ReadyExecution . claim ( %w[ none* ] , SolidQueue ::Job . count + 1 , 42 )
96
+ end
74
97
end
75
98
76
99
test "priority order is used when claiming jobs using a wildcard" do
@@ -88,43 +111,61 @@ class SolidQueue::ReadyExecutionTest < ActiveSupport::TestCase
88
111
end
89
112
end
90
113
91
- test "claim jobs using queue prefixes " do
114
+ test "queue order and then priority is respected when using a list of queues " do
92
115
AddToBufferJob . perform_later ( "hey" )
116
+ job = SolidQueue ::Job . last
117
+ assert_equal "background" , job . queue_name
93
118
94
- assert_claimed_jobs ( 1 ) do
95
- SolidQueue ::ReadyExecution . claim ( "backgr*" , SolidQueue :: Job . count + 1 , 42 )
119
+ assert_claimed_jobs ( 3 ) do
120
+ SolidQueue ::ReadyExecution . claim ( %w[ background backend ] , 3 , 42 )
96
121
end
97
122
98
- assert @jobs . none? ( &:claimed? )
123
+ assert job . reload . claimed?
124
+ @jobs . first ( 2 ) . each do |job |
125
+ assert_not job . reload . ready?
126
+ assert job . claimed?
127
+ end
99
128
end
100
129
101
- test "claim jobs using a wildcard and having paused queues" do
102
- AddToBufferJob . perform_later ( "hey" )
130
+ test "queue order is respected when using prefixes" do
131
+ %w[ queue_b1 queue_b2 queue_a2 queue_a1 queue_b1 queue_a2 queue_b2 queue_a1 ] . each do |queue_name |
132
+ AddToBufferJob . set ( queue : queue_name ) . perform_later ( 1 )
133
+ end
103
134
104
- SolidQueue ::Queue . find_by_name ( "backend" ) . pause
135
+ # Claim 8 jobs
136
+ claimed_jobs = [ ]
137
+ 4 . times do
138
+ assert_claimed_jobs ( 2 ) do
139
+ SolidQueue ::ReadyExecution . claim ( %w[ queue_b* queue_a* ] , 2 , 42 )
140
+ end
105
141
106
- assert_claimed_jobs ( 1 ) do
107
- SolidQueue ::ReadyExecution . claim ( "*" , SolidQueue ::Job . count + 1 , 42 )
142
+ claimed_jobs += SolidQueue ::ClaimedExecution . order ( :id ) . last ( 2 ) . map ( &:job )
108
143
end
109
144
110
- @jobs . each ( &:reload )
111
- assert @jobs . none? ( &:claimed? )
145
+ # Check claim order
146
+ assert_equal %w[ queue_b1 queue_b1 queue_b2 queue_b2 queue_a1 queue_a1 queue_a2 queue_a2 ] ,
147
+ claimed_jobs . map ( &:queue_name )
112
148
end
113
149
114
- test "claim jobs using both exact names and a prefixes" do
115
- AddToBufferJob . perform_later ( "hey" )
116
150
117
- assert_claimed_jobs ( 6 ) do
118
- SolidQueue ::ReadyExecution . claim ( %w[ backe* background ] , SolidQueue ::Job . count + 1 , 42 )
151
+ test "queue order is respected when mixing exact names with prefixes" do
152
+ %w[ queue_b1 queue_b2 queue_a2 queue_c2 queue_a1 queue_c1 queue_b1 queue_a2 queue_b2 queue_a1 ] . each do |queue_name |
153
+ AddToBufferJob . set ( queue : queue_name ) . perform_later ( 1 )
119
154
end
120
- end
121
155
122
- test "claim jobs for queue without jobs at the moment using prefixes" do
123
- AddToBufferJob . perform_later ( "hey" )
156
+ # Claim 10 jobs
157
+ claimed_jobs = [ ]
158
+ 5 . times do
159
+ assert_claimed_jobs ( 2 ) do
160
+ SolidQueue ::ReadyExecution . claim ( %w[ queue_a2 queue_c1 queue_b* queue_c2 queue_a* ] , 2 , 42 )
161
+ end
124
162
125
- assert_claimed_jobs ( 0 ) do
126
- SolidQueue ::ReadyExecution . claim ( %w[ none* ] , SolidQueue ::Job . count + 1 , 42 )
163
+ claimed_jobs += SolidQueue ::ClaimedExecution . order ( :id ) . last ( 2 ) . map ( &:job )
127
164
end
165
+
166
+ # Check claim order
167
+ assert_equal %w[ queue_a2 queue_a2 queue_c1 queue_b1 queue_b1 queue_b2 queue_b2 queue_c2 queue_a1 queue_a1 ] ,
168
+ claimed_jobs . map ( &:queue_name )
128
169
end
129
170
130
171
test "discard all" do
0 commit comments