beanstalk_integration_tests 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +38 -0
- data/Rakefile +9 -0
- data/beanstalk_integration_tests.gemspec +26 -0
- data/lib/beanstalk_integration_tests.rb +2 -0
- data/lib/beanstalk_integration_tests/bury_test.rb +137 -0
- data/lib/beanstalk_integration_tests/delete_test.rb +160 -0
- data/lib/beanstalk_integration_tests/ignore_test.rb +127 -0
- data/lib/beanstalk_integration_tests/kick_job_test.rb +68 -0
- data/lib/beanstalk_integration_tests/kick_test.rb +207 -0
- data/lib/beanstalk_integration_tests/list_tube_used_test.rb +26 -0
- data/lib/beanstalk_integration_tests/list_tubes_test.rb +26 -0
- data/lib/beanstalk_integration_tests/list_tubes_watched_test.rb +26 -0
- data/lib/beanstalk_integration_tests/pause_tube_test.rb +166 -0
- data/lib/beanstalk_integration_tests/peek_test.rb +242 -0
- data/lib/beanstalk_integration_tests/put_test.rb +255 -0
- data/lib/beanstalk_integration_tests/quit_test.rb +24 -0
- data/lib/beanstalk_integration_tests/release_test.rb +191 -0
- data/lib/beanstalk_integration_tests/reserve_test.rb +385 -0
- data/lib/beanstalk_integration_tests/stats_job_test.rb +116 -0
- data/lib/beanstalk_integration_tests/stats_test.rb +130 -0
- data/lib/beanstalk_integration_tests/stats_tube_test.rb +141 -0
- data/lib/beanstalk_integration_tests/test_helper.rb +88 -0
- data/lib/beanstalk_integration_tests/tests.rb +4 -0
- data/lib/beanstalk_integration_tests/touch_test.rb +118 -0
- data/lib/beanstalk_integration_tests/use_test.rb +118 -0
- data/lib/beanstalk_integration_tests/version.rb +3 -0
- data/lib/beanstalk_integration_tests/watch_test.rb +128 -0
- metadata +157 -0
@@ -0,0 +1,242 @@
|
|
1
|
+
require 'beanstalk_integration_tests/test_helper'
|
2
|
+
|
3
|
+
class PeekTest < BeanstalkIntegrationTest
|
4
|
+
|
5
|
+
setup do
|
6
|
+
client.transmit("use #{tube_name}")
|
7
|
+
client.transmit("watch #{tube_name}")
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
context 'peek' do
|
12
|
+
|
13
|
+
should 'return job id and message' do
|
14
|
+
job_id, message = do_setup
|
15
|
+
response = client.transmit("peek #{job_id}")
|
16
|
+
assert_equal('FOUND', response[:status], 'Expected peek of existing job to return FOUND')
|
17
|
+
assert_equal(job_id, response[:id], 'Expected peek of existing job to return the correct job id')
|
18
|
+
assert_equal(message, response[:body], 'Expected peek of existing job to return the correct body')
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
should 'return NOT_FOUND if null, non-integer, or negative job id provided or no such job' do
|
23
|
+
relative_id = do_setup.first
|
24
|
+
['', -1, 'foo', relative_id.to_i + 1].each do |job_id|
|
25
|
+
initial_cmd_peek = client.transmit('stats')[:body]['cmd-peek']
|
26
|
+
assert_raises(Beaneater::NotFoundError, 'Expected peeking non-existent job to return NOT_FOUND') do
|
27
|
+
response = client.transmit("peek #{job_id}")
|
28
|
+
debugger
|
29
|
+
puts "#{job_id}: #{response.inspect}"
|
30
|
+
end
|
31
|
+
assert_equal(initial_cmd_peek + 1, client.transmit('stats')[:body]['cmd-peek'], 'Expected cmd-peek to be incremented')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
should 'return UNKNOWN_COMMAND if command does not include space' do
|
37
|
+
initial_cmd_peek = client.transmit('stats')[:body]['cmd-peek']
|
38
|
+
assert_raises(Beaneater::UnknownCommandError, 'Expected peek without space to return UNKNOWN_COMMAND') do
|
39
|
+
client.transmit('peek')
|
40
|
+
end
|
41
|
+
assert_equal(initial_cmd_peek, client.transmit('stats')[:body]['cmd-peek'], 'Expected cmd-peek to be unchanged')
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
should 'peek ignoring trailing space, args, and chars' do
|
46
|
+
job_id, message = do_setup
|
47
|
+
[' ', ' and ignore these arguments', '_and_ignore_these_letters'].each do |trailer|
|
48
|
+
initial_cmd_peek = client.transmit('stats')[:body]['cmd-peek']
|
49
|
+
response = client.transmit("peek #{job_id}#{trailer}")
|
50
|
+
assert_equal job_id, response[:id]
|
51
|
+
assert_equal message, response[:body]
|
52
|
+
assert_equal(initial_cmd_peek + 1, client.transmit('stats')[:body]['cmd-peek'], 'Expected cmd-peek to be unchanged')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
context 'peek-ready' do
|
60
|
+
|
61
|
+
should 'return job id and message' do
|
62
|
+
job_id, message = do_setup
|
63
|
+
initial_cmd_peek_ready = client.transmit('stats')[:body]['cmd-peek-ready']
|
64
|
+
response = client.transmit('peek-ready')
|
65
|
+
assert_equal('FOUND', response[:status], 'Expected peek-ready to return FOUND')
|
66
|
+
assert_equal(job_id, response[:id], 'Expected peek-ready to return the correct job id')
|
67
|
+
assert_equal(message, response[:body], 'Expected peek-ready to return the correct body')
|
68
|
+
assert_equal(initial_cmd_peek_ready + 1, client.transmit('stats')[:body]['cmd-peek-ready'], 'Expected cmd-peek-ready to be incremented')
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
should 'return the correct ready job' do
|
73
|
+
initial_cmd_peek_ready = client.transmit('stats')[:body]['cmd-peek-ready']
|
74
|
+
buried_id = do_setup.first
|
75
|
+
timeout(1) do
|
76
|
+
client.transmit('reserve')
|
77
|
+
end
|
78
|
+
client.transmit("bury #{buried_id} 0")
|
79
|
+
do_setup(10)
|
80
|
+
do_setup(0, 120)
|
81
|
+
job_id, message = do_setup
|
82
|
+
response = client.transmit('peek-ready')
|
83
|
+
assert_equal('FOUND', response[:status], 'Expected peek-ready to return FOUND')
|
84
|
+
assert_equal(job_id, response[:id], 'Expected peek-ready to return the correct job id')
|
85
|
+
assert_equal(message, response[:body], 'Expected peek-ready to return the correct body')
|
86
|
+
assert_equal(initial_cmd_peek_ready + 1, client.transmit('stats')[:body]['cmd-peek-ready'], 'Expected cmd-peek-ready to be incremented')
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
should 'return NOT_FOUND if no ready jobs' do
|
91
|
+
buried_id = do_setup.first
|
92
|
+
timeout(1) do
|
93
|
+
client.transmit('reserve')
|
94
|
+
end
|
95
|
+
client.transmit("bury #{buried_id} 0")
|
96
|
+
do_setup(0, 120)
|
97
|
+
assert_raises(Beaneater::NotFoundError, 'Expected peek-ready with no ready jobs to return NOT_FOUND') do
|
98
|
+
client.transmit('peek-ready')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
should 'return BAD_FORMAT with any trailing characters' do
|
104
|
+
initial_cmd_peek_ready = client.transmit('stats')[:body]['cmd-peek-ready']
|
105
|
+
assert_raises(Beaneater::BadFormatError, 'Expected peek-ready with trailing characters to return BAD_FORMAT') do
|
106
|
+
[' ', ' and other args'].each do |trailer|
|
107
|
+
client.transmit("peek-ready#{trailer}")
|
108
|
+
end
|
109
|
+
end
|
110
|
+
assert_equal(initial_cmd_peek_ready, client.transmit('stats')[:body]['cmd-peek-ready'], 'Expected cmd-peek-ready to be unchanged')
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
context 'peek-delayed' do
|
117
|
+
|
118
|
+
should 'return job id and message' do
|
119
|
+
job_id, message = do_setup(0, 120)
|
120
|
+
assert_equal('delayed', client.transmit("stats-job #{job_id}")[:body]['state'], 'Expected job enqueued with delay to be delayed')
|
121
|
+
initial_cmd_peek_delayed = client.transmit('stats')[:body]['cmd-peek-delayed']
|
122
|
+
response = client.transmit('peek-delayed')
|
123
|
+
assert_equal('FOUND', response[:status], 'Expected peek-delayed of existing job to return FOUND')
|
124
|
+
assert_equal(job_id, response[:id], 'Expected peek-delayed to return the correct job id')
|
125
|
+
assert_equal(message, response[:body], 'Expected peek-delayed to return the correct body')
|
126
|
+
assert_equal(initial_cmd_peek_delayed + 1, client.transmit('stats')[:body]['cmd-peek-delayed'], 'Expected cmd-peek-delayed to be incremented')
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
should 'return the correct delayed job' do
|
131
|
+
initial_cmd_peek_delayed = client.transmit('stats')[:body]['cmd-peek-delayed']
|
132
|
+
buried_id = do_setup.first
|
133
|
+
timeout(1) do
|
134
|
+
client.transmit('reserve')
|
135
|
+
end
|
136
|
+
client.transmit("bury #{buried_id} 0")
|
137
|
+
do_setup(10)
|
138
|
+
do_setup(0, 120)
|
139
|
+
do_setup(0, 60)
|
140
|
+
job_id, message = do_setup(10, 30)
|
141
|
+
response = client.transmit('peek-delayed')
|
142
|
+
assert_equal('FOUND', response[:status], 'Expected peek-delayed to return FOUND')
|
143
|
+
assert_equal(job_id, response[:id], 'Expected peek-delayed to return the correct job id')
|
144
|
+
assert_equal(message, response[:body], 'Expected peek-delayed to return the correct body')
|
145
|
+
assert_equal(initial_cmd_peek_delayed + 1, client.transmit('stats')[:body]['cmd-peek-delayed'], 'Expected cmd-peek-delayed to be incremented')
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
should 'return NOT_FOUND if no delayed jobs' do
|
150
|
+
buried_id = do_setup.first
|
151
|
+
timeout(1) do
|
152
|
+
client.transmit('reserve')
|
153
|
+
end
|
154
|
+
client.transmit("bury #{buried_id} 0")
|
155
|
+
do_setup
|
156
|
+
assert_raises(Beaneater::NotFoundError, 'Expected peek-delayed with no delayed jobs to return NOT_FOUND') do
|
157
|
+
client.transmit('peek-delayed')
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
should 'return BAD_FORMAT with any trailing characters' do
|
163
|
+
initial_cmd_peek_delayed = client.transmit('stats')[:body]['cmd-peek-delayed']
|
164
|
+
assert_raises(Beaneater::BadFormatError, 'Expected peek-delayed with trailing characters to return BAD_FORMAT') do
|
165
|
+
[' ', ' and other args'].each do |trailer|
|
166
|
+
client.transmit("peek-delayed#{trailer}")
|
167
|
+
end
|
168
|
+
end
|
169
|
+
assert_equal(initial_cmd_peek_delayed, client.transmit('stats')[:body]['cmd-peek-delayed'], 'Expected cmd-peek-delayed to be unchanged')
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
|
175
|
+
context 'peek-buried' do
|
176
|
+
|
177
|
+
should 'return job id and message' do
|
178
|
+
job_id, message = do_setup
|
179
|
+
timeout(1) do
|
180
|
+
client.transmit('reserve')
|
181
|
+
end
|
182
|
+
client.transmit("bury #{job_id} 0")
|
183
|
+
assert_equal('buried', client.transmit("stats-job #{job_id}")[:body]['state'], 'Expected job enqueued with delay to be delayed')
|
184
|
+
initial_cmd_peek_buried = client.transmit('stats')[:body]['cmd-peek-buried']
|
185
|
+
response = client.transmit('peek-buried')
|
186
|
+
assert_equal('FOUND', response[:status], 'Expected peek-buried of existing job to return FOUND')
|
187
|
+
assert_equal(job_id, response[:id], 'Expected peek-buried to return the correct job id')
|
188
|
+
assert_equal(message, response[:body], 'Expected peek-buried to return the correct body')
|
189
|
+
assert_equal(initial_cmd_peek_buried + 1, client.transmit('stats')[:body]['cmd-peek-buried'], 'Expected cmd-peek-buried to be incremented')
|
190
|
+
end
|
191
|
+
|
192
|
+
|
193
|
+
should 'return the correct buried job' do
|
194
|
+
initial_cmd_peek_buried = client.transmit('stats')[:body]['cmd-peek-buried']
|
195
|
+
do_setup(10)
|
196
|
+
do_setup(0, 120)
|
197
|
+
job_id, message = do_setup
|
198
|
+
timeout(1) do
|
199
|
+
client.transmit('reserve')
|
200
|
+
end
|
201
|
+
client.transmit("bury #{job_id} 0")
|
202
|
+
buried_id = do_setup.first
|
203
|
+
timeout(1) do
|
204
|
+
client.transmit('reserve')
|
205
|
+
end
|
206
|
+
client.transmit("bury #{buried_id} 0")
|
207
|
+
response = client.transmit('peek-buried')
|
208
|
+
assert_equal('FOUND', response[:status], 'Expected peek-buried to return FOUND')
|
209
|
+
assert_equal(job_id, response[:id], 'Expected peek-buried to return the correct job id')
|
210
|
+
assert_equal(message, response[:body], 'Expected peek-buried to return the correct body')
|
211
|
+
assert_equal(initial_cmd_peek_buried + 1, client.transmit('stats')[:body]['cmd-peek-buried'], 'Expected cmd-peek-buried to be incremented')
|
212
|
+
end
|
213
|
+
|
214
|
+
|
215
|
+
should 'return NOT_FOUND if no buried jobs' do
|
216
|
+
do_setup(0, 120)
|
217
|
+
do_setup
|
218
|
+
assert_raises(Beaneater::NotFoundError, 'Expected peek-buried with no buried jobs to return NOT_FOUND') do
|
219
|
+
client.transmit('peek-buried')
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
|
224
|
+
should 'return BAD_FORMAT with any trailing characters' do
|
225
|
+
initial_cmd_peek_buried = client.transmit('stats')[:body]['cmd-peek-buried']
|
226
|
+
assert_raises(Beaneater::BadFormatError, 'Expected peek-buried with trailing characters to return BAD_FORMAT') do
|
227
|
+
[' ', ' and other args'].each do |trailer|
|
228
|
+
client.transmit("peek-buried#{trailer}")
|
229
|
+
end
|
230
|
+
end
|
231
|
+
assert_equal(initial_cmd_peek_buried, client.transmit('stats')[:body]['cmd-peek-buried'], 'Expected cmd-peek-buried to be unchanged')
|
232
|
+
end
|
233
|
+
|
234
|
+
end
|
235
|
+
|
236
|
+
|
237
|
+
def do_setup(pri = 0, delay = 0, ttr = 120, message = uuid)
|
238
|
+
job_id = client.transmit("put #{pri} #{delay} #{ttr} #{message.bytesize}\r\n#{message}")[:id]
|
239
|
+
return [job_id, message]
|
240
|
+
end
|
241
|
+
|
242
|
+
end
|
@@ -0,0 +1,255 @@
|
|
1
|
+
require 'beanstalk_integration_tests/test_helper'
|
2
|
+
|
3
|
+
class PutTest < BeanstalkIntegrationTest
|
4
|
+
|
5
|
+
context 'put' do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
client.transmit("use #{tube_name}")
|
9
|
+
@message = uuid
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
should "insert a job into the connection's currently used tube" do
|
14
|
+
assert_equal tube_name, client.transmit('list-tube-used')[:id]
|
15
|
+
|
16
|
+
stats = client.transmit('stats')[:body]
|
17
|
+
initial_current_producers = stats['current-producers']
|
18
|
+
initial_cmd_put = stats['cmd-put']
|
19
|
+
response = client.transmit("put 1 0 120 #{@message.bytesize}\r\n#{@message}")
|
20
|
+
job_tube = client.transmit("stats-job #{response[:id]}")[:body]['tube']
|
21
|
+
stats = client.transmit('stats')[:body]
|
22
|
+
assert_equal initial_cmd_put + 1, stats['cmd-put']
|
23
|
+
assert_equal initial_current_producers + 1, stats['current-producers']
|
24
|
+
assert_equal tube_name, job_tube
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
should 'insert a job with the given priority' do
|
29
|
+
pri = rand(2**32) - 1
|
30
|
+
response = client.transmit("put #{pri} 0 120 #{@message.bytesize}\r\n#{@message}")
|
31
|
+
job_pri = client.transmit("stats-job #{response[:id]}")[:body]['pri']
|
32
|
+
|
33
|
+
assert_equal pri, job_pri
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
should 'should reduce excessive priorities to their modulus' do
|
38
|
+
overture = rand(10)
|
39
|
+
pri = 2**32 + overture
|
40
|
+
response = client.transmit("put #{pri} 0 120 #{@message.bytesize}\r\n#{@message}")
|
41
|
+
job_pri = client.transmit("stats-job #{response[:id]}")[:body]['pri']
|
42
|
+
|
43
|
+
assert_equal overture, job_pri
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
should 'return BAD_FORMAT for negative priority, delay, ttr, or size' do
|
48
|
+
initial_cmd_put = client.transmit('stats')[:body]['cmd-put']
|
49
|
+
args = [-1, 1, 1, 1]
|
50
|
+
4.times do |index|
|
51
|
+
assert_raises Beaneater::BadFormatError do
|
52
|
+
client.transmit("put #{args[0]} #{args[1]} #{args[2]} #{args[3]}")
|
53
|
+
assert_equal initial_cmd_put + 1 + index, client.transmit('stats')[:body]['cmd-put']
|
54
|
+
args.cycle
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
should 'insert a job with the given delay and a state of delayed' do
|
61
|
+
delay = 10
|
62
|
+
|
63
|
+
response = client.transmit("put 0 #{delay} 10 #{@message.bytesize}\r\n#{@message}")
|
64
|
+
job_stats = client.transmit("stats-job #{response[:id]}")[:body]
|
65
|
+
|
66
|
+
assert_equal delay, job_stats['delay']
|
67
|
+
assert_equal 'delayed', job_stats['state']
|
68
|
+
sleep 1
|
69
|
+
time_left = client.transmit("stats-job #{response[:id]}")[:body]['time-left']
|
70
|
+
assert(time_left < job_stats['time-left'], 'Expected time-left to decrement after a second')
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
should 'insert a delayed job which becomes ready after the timeout' do
|
75
|
+
delay = 1
|
76
|
+
|
77
|
+
response = client.transmit("put 0 #{delay} 10 #{@message.bytesize}\r\n#{@message}")
|
78
|
+
sleep 1
|
79
|
+
job_stats = client.transmit("stats-job #{response[:id]}")[:body]
|
80
|
+
assert_equal 'ready', job_stats['state']
|
81
|
+
|
82
|
+
stats = client.transmit('stats')[:body]
|
83
|
+
tube_stats = client.transmit("stats-tube #{tube_name}")[:body]
|
84
|
+
assert_equal(1, stats['current-jobs-urgent'])
|
85
|
+
assert_equal(1, stats['current-jobs-ready'])
|
86
|
+
assert_equal(1, tube_stats['current-jobs-urgent'])
|
87
|
+
assert_equal(1, tube_stats['current-jobs-ready'])
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
should 'only update current-jobs-delayed counter on tube and server for delayed job' do
|
92
|
+
tube_stats = client.transmit("stats-tube #{tube_name}")[:body]
|
93
|
+
tube_initial_jobs_ready = tube_stats['current-jobs-ready'].to_i
|
94
|
+
tube_initial_jobs_urgent = tube_stats['current-jobs-urgent'].to_i
|
95
|
+
tube_initial_jobs_delayed = tube_stats['current-jobs-delayed'].to_i
|
96
|
+
tube_initial_jobs_total = tube_stats['total-jobs'].to_i
|
97
|
+
server_stats = client.transmit('stats')[:body]
|
98
|
+
server_initial_jobs_ready = server_stats['current-jobs-ready'].to_i
|
99
|
+
server_initial_jobs_urgent = server_stats['current-jobs-urgent'].to_i
|
100
|
+
server_initial_jobs_delayed = server_stats['current-jobs-delayed'].to_i
|
101
|
+
server_initial_jobs_total = server_stats['total-jobs'].to_i
|
102
|
+
|
103
|
+
client.transmit("put 0 120 10 #{@message.bytesize}\r\n#{@message}")
|
104
|
+
|
105
|
+
tube_stats = client.transmit("stats-tube #{tube_name}")[:body]
|
106
|
+
assert_equal tube_initial_jobs_ready, tube_stats['current-jobs-ready'].to_i
|
107
|
+
assert_equal tube_initial_jobs_urgent, tube_stats['current-jobs-urgent'].to_i
|
108
|
+
assert_equal tube_initial_jobs_delayed + 1, tube_stats['current-jobs-delayed'].to_i
|
109
|
+
assert_equal tube_initial_jobs_total + 1, tube_stats['total-jobs'].to_i
|
110
|
+
server_stats = client.transmit('stats')[:body]
|
111
|
+
assert_equal server_initial_jobs_ready, server_stats['current-jobs-ready'].to_i
|
112
|
+
assert_equal server_initial_jobs_urgent, server_stats['current-jobs-urgent'].to_i
|
113
|
+
assert_equal server_initial_jobs_delayed + 1, server_stats['current-jobs-delayed'].to_i
|
114
|
+
assert_equal server_initial_jobs_total + 1, server_stats['total-jobs'].to_i
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
should 'insert a job with the given ttr' do
|
119
|
+
ttr = 10
|
120
|
+
|
121
|
+
response = client.transmit("put 0 0 #{ttr} #{@message.bytesize}\r\n#{@message}")
|
122
|
+
job_ttr = client.transmit("stats-job #{response[:id]}")[:body]['ttr']
|
123
|
+
|
124
|
+
assert_equal ttr, job_ttr
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
should 'increase TTR to 1 if 0 given' do
|
129
|
+
response = client.transmit("put 0 0 0 #{@message.bytesize}\r\n#{@message}")
|
130
|
+
job_ttr = client.transmit("stats-job #{response[:id]}")[:body]['ttr']
|
131
|
+
|
132
|
+
assert_equal 1, job_ttr
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
should 'raise EXPECTED_CRLF if job exceeds declared size but still increment cmd-job' do
|
137
|
+
stats = client.transmit('stats')[:body]
|
138
|
+
assert_raises Beaneater::ExpectedCrlfError do
|
139
|
+
client.transmit("put 0 0 10 #{@message.bytesize - 1}\r\n#{@message}")
|
140
|
+
end
|
141
|
+
assert_equal stats['cmd-put'] + 1, build_client.transmit('stats')[:body]['cmd-put']
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
should 'should be able to handle job of max-job-size' do
|
146
|
+
stats = client.transmit('stats')[:body]
|
147
|
+
max_job_size = stats['max-job-size']
|
148
|
+
dec_mod = max_job_size % 10
|
149
|
+
message = SecureRandom.base64(8)[0, 10] * ((max_job_size - dec_mod) / 10)
|
150
|
+
message += SecureRandom.base64(dec_mod)[0, dec_mod]
|
151
|
+
|
152
|
+
response = nil
|
153
|
+
begin
|
154
|
+
response = client.transmit("put 123 0 10 #{message.bytesize}\r\n#{message}")
|
155
|
+
rescue Beaneater::JobTooBigError => e
|
156
|
+
puts 'Either max-job-size is incorrect or server cannot handle max job size'
|
157
|
+
raise e
|
158
|
+
end
|
159
|
+
assert_equal 'INSERTED', response[:status]
|
160
|
+
assert_equal stats['cmd-put'] + 1, client.transmit('stats')[:body]['cmd-put']
|
161
|
+
assert_equal message, client.transmit("peek #{response[:id]}")[:body]
|
162
|
+
end
|
163
|
+
|
164
|
+
|
165
|
+
should 'raise JOB_TOO_BIG if job larger than max job size but still increment cmd-job' do
|
166
|
+
stats = client.transmit('stats')[:body]
|
167
|
+
max_job_size = stats['max-job-size']
|
168
|
+
dec_mod = max_job_size % 10
|
169
|
+
message = SecureRandom.base64(8)[0, 10] * ((max_job_size - dec_mod) / 10)
|
170
|
+
message += SecureRandom.base64(dec_mod)[0, dec_mod + 1]
|
171
|
+
|
172
|
+
assert_raises Beaneater::JobTooBigError do
|
173
|
+
client.transmit("put 123 0 10 #{message.bytesize}\r\n#{message}")
|
174
|
+
end
|
175
|
+
assert_equal stats['cmd-put'] + 1, client.transmit('stats')[:body]['cmd-put']
|
176
|
+
end
|
177
|
+
|
178
|
+
|
179
|
+
should 'insert a job with the given body' do
|
180
|
+
response = client.transmit("put 0 0 10 #{@message.bytesize}\r\n#{@message}")
|
181
|
+
assert_equal @message, client.transmit("peek #{response[:id]}")[:body]
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
should 'handle any byte value and incur no length weirdness' do
|
186
|
+
bytes = (0..255).to_a.pack("c*")
|
187
|
+
response = client.transmit("put 0 0 100 256\r\n#{bytes}")
|
188
|
+
assert_equal bytes, client.transmit("peek #{response[:id]}")[:body]
|
189
|
+
end
|
190
|
+
|
191
|
+
|
192
|
+
should 'pass non-terminal \r\n through without modification or length weirdness' do
|
193
|
+
message = "\r\n" * 10
|
194
|
+
response = client.transmit("put 0 0 100 20\r\n#{message}")
|
195
|
+
assert_equal message, client.transmit("peek #{response[:id]}")[:body]
|
196
|
+
end
|
197
|
+
|
198
|
+
|
199
|
+
should 'increment current-jobs-ready and current-jobs-urgent counters on server and tube if priority < 1024' do
|
200
|
+
tube_stats = client.transmit("stats-tube #{tube_name}")[:body]
|
201
|
+
tube_initial_jobs_ready = tube_stats['current-jobs-ready'].to_i
|
202
|
+
tube_initial_jobs_urgent = tube_stats['current-jobs-urgent'].to_i
|
203
|
+
tube_initial_jobs_total = tube_stats['total-jobs'].to_i
|
204
|
+
server_stats = client.transmit('stats')[:body]
|
205
|
+
server_initial_jobs_ready = server_stats['current-jobs-ready'].to_i
|
206
|
+
server_initial_jobs_urgent = server_stats['current-jobs-urgent'].to_i
|
207
|
+
server_initial_jobs_total = server_stats['total-jobs'].to_i
|
208
|
+
|
209
|
+
client.transmit("put 1023 0 100 #{@message.bytesize}\r\n#{@message}")
|
210
|
+
|
211
|
+
tube_stats = client.transmit("stats-tube #{tube_name}")[:body]
|
212
|
+
assert_equal tube_initial_jobs_ready + 1, tube_stats['current-jobs-ready'].to_i
|
213
|
+
assert_equal tube_initial_jobs_urgent + 1, tube_stats['current-jobs-urgent'].to_i
|
214
|
+
assert_equal tube_initial_jobs_total + 1, tube_stats['total-jobs'].to_i
|
215
|
+
server_stats = client.transmit('stats')[:body]
|
216
|
+
assert_equal server_initial_jobs_ready + 1, server_stats['current-jobs-ready'].to_i
|
217
|
+
assert_equal server_initial_jobs_urgent + 1, server_stats['current-jobs-urgent'].to_i
|
218
|
+
assert_equal server_initial_jobs_total + 1, server_stats['total-jobs'].to_i
|
219
|
+
end
|
220
|
+
|
221
|
+
|
222
|
+
should 'not update current-jobs-urgent counters on server and tube if priority >= 1024' do
|
223
|
+
tube_stats = client.transmit("stats-tube #{tube_name}")[:body]
|
224
|
+
tube_initial_jobs_ready = tube_stats['current-jobs-ready'].to_i
|
225
|
+
tube_initial_jobs_urgent = tube_stats['current-jobs-urgent'].to_i
|
226
|
+
tube_initial_jobs_total = tube_stats['total-jobs'].to_i
|
227
|
+
server_stats = client.transmit('stats')[:body]
|
228
|
+
server_initial_jobs_ready = server_stats['current-jobs-ready'].to_i
|
229
|
+
server_initial_jobs_urgent = server_stats['current-jobs-urgent'].to_i
|
230
|
+
server_initial_jobs_total = server_stats['total-jobs'].to_i
|
231
|
+
|
232
|
+
client.transmit("put 1024 0 100 #{@message.bytesize}\r\n#{@message}")
|
233
|
+
|
234
|
+
tube_stats = client.transmit("stats-tube #{tube_name}")[:body]
|
235
|
+
assert_equal tube_initial_jobs_ready + 1, tube_stats['current-jobs-ready'].to_i
|
236
|
+
assert_equal tube_initial_jobs_urgent, tube_stats['current-jobs-urgent'].to_i
|
237
|
+
assert_equal tube_initial_jobs_total + 1, tube_stats['total-jobs'].to_i
|
238
|
+
server_stats = client.transmit('stats')[:body]
|
239
|
+
assert_equal server_initial_jobs_ready + 1, server_stats['current-jobs-ready'].to_i
|
240
|
+
assert_equal server_initial_jobs_urgent, server_stats['current-jobs-urgent'].to_i
|
241
|
+
assert_equal server_initial_jobs_total + 1, server_stats['total-jobs'].to_i
|
242
|
+
end
|
243
|
+
|
244
|
+
|
245
|
+
should 'raise BAD_FORMAT with trailing_space but still increment cmd-put' do
|
246
|
+
initial_cmd_put = client.transmit('stats')[:body]['cmd-put']
|
247
|
+
assert_raises(Beaneater::BadFormatError, 'Expected put with trailing space to return BAD_FORMAT') do
|
248
|
+
client.transmit("put 0 0 120 2 \r\nxx")
|
249
|
+
end
|
250
|
+
assert_equal initial_cmd_put + 1, build_client.transmit('stats')[:body]['cmd-put']
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
254
|
+
|
255
|
+
end
|