zk 1.9.6 → 1.10.0

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.
Files changed (40) hide show
  1. checksums.yaml +5 -13
  2. data/.github/workflows/build.yml +55 -0
  3. data/Gemfile +15 -6
  4. data/README.markdown +9 -9
  5. data/RELEASES.markdown +10 -1
  6. data/lib/zk/client.rb +1 -1
  7. data/lib/zk/event_handler.rb +15 -7
  8. data/lib/zk/fork_hook.rb +2 -2
  9. data/lib/zk/locker/locker_base.rb +13 -0
  10. data/lib/zk/locker/semaphore.rb +1 -3
  11. data/lib/zk/node_deletion_watcher.rb +3 -4
  12. data/lib/zk/pool.rb +11 -11
  13. data/lib/zk/version.rb +1 -1
  14. data/spec/event_catcher_spec.rb +1 -1
  15. data/spec/message_queue_spec.rb +6 -6
  16. data/spec/shared/client_examples.rb +81 -81
  17. data/spec/shared/locker_examples.rb +13 -13
  18. data/spec/spec_helper.rb +10 -11
  19. data/spec/zk/00_forked_client_integration_spec.rb +3 -3
  20. data/spec/zk/client/locking_and_session_death_spec.rb +2 -2
  21. data/spec/zk/client_spec.rb +19 -19
  22. data/spec/zk/election_spec.rb +44 -44
  23. data/spec/zk/extensions_spec.rb +2 -2
  24. data/spec/zk/locker/exclusive_locker_spec.rb +41 -41
  25. data/spec/zk/locker/locker_basic_spec.rb +55 -33
  26. data/spec/zk/locker/semaphore_spec.rb +39 -32
  27. data/spec/zk/locker/shared_exclusive_integration_spec.rb +37 -37
  28. data/spec/zk/locker/shared_locker_spec.rb +43 -43
  29. data/spec/zk/locker_spec.rb +2 -2
  30. data/spec/zk/module_spec.rb +25 -25
  31. data/spec/zk/mongoid_spec.rb +47 -47
  32. data/spec/zk/node_deletion_watcher_spec.rb +39 -31
  33. data/spec/zk/pool_spec.rb +56 -65
  34. data/spec/zk/threaded_callback_spec.rb +10 -10
  35. data/spec/zk/threadpool_spec.rb +25 -25
  36. data/spec/zk/watch_spec.rb +67 -79
  37. data/spec/zk/zookeeper_spec.rb +31 -31
  38. data/zk.gemspec +1 -1
  39. metadata +23 -24
  40. data/.travis.yml +0 -30
@@ -15,18 +15,18 @@ describe ZK::NodeDeletionWatcher do
15
15
  @zk.mkdir_p(@path)
16
16
 
17
17
  th = Thread.new { @n.block_until_deleted }
18
-
19
- @n.wait_until_blocked(5).should be_true
18
+
19
+ expect(@n.wait_until_blocked(5)).to be(true)
20
20
 
21
21
  logger.debug { "wait_until_blocked returned" }
22
22
 
23
- @n.should be_blocked
23
+ expect(@n).to be_blocked
24
24
 
25
25
  @zk.rm_rf(@path)
26
26
 
27
- th.join(5).should == th
28
- @n.should_not be_blocked
29
- @n.should be_done
27
+ expect(th.join(5)).to eq(th)
28
+ expect(@n).not_to be_blocked
29
+ expect(@n).to be_done
30
30
  end
31
31
 
32
32
  it %[should wake up if interrupt! is called] do
@@ -43,12 +43,12 @@ describe ZK::NodeDeletionWatcher do
43
43
 
44
44
  @n.wait_until_blocked(5)
45
45
 
46
- @n.should be_blocked
46
+ expect(@n).to be_blocked
47
47
 
48
48
  @n.interrupt!
49
- th.join(5).should == th
49
+ expect(th.join(5)).to eq(th)
50
50
 
51
- @exc.should be_kind_of(ZK::Exceptions::WakeUpException)
51
+ expect(@exc).to be_kind_of(ZK::Exceptions::WakeUpException)
52
52
  end
53
53
 
54
54
  it %[should raise LockWaitTimeoutError if we time out waiting for a node to be deleted] do
@@ -62,28 +62,28 @@ describe ZK::NodeDeletionWatcher do
62
62
  end
63
63
  end
64
64
 
65
- @n.wait_until_blocked(5).should be_true
65
+ expect(@n.wait_until_blocked(5)).to be(true)
66
66
 
67
67
  logger.debug { "wait_until_blocked returned" }
68
68
 
69
- th.join(5).should == th
70
-
71
- @exc.should be_kind_of(ZK::Exceptions::LockWaitTimeoutError)
72
- @n.should be_done
73
- @n.should be_timed_out
69
+ expect(th.join(5)).to eq(th)
70
+
71
+ expect(@exc).to be_kind_of(ZK::Exceptions::LockWaitTimeoutError)
72
+ expect(@n).to be_done
73
+ expect(@n).to be_timed_out
74
74
  end
75
75
  end
76
76
 
77
77
  describe %[when the node doesn't exist] do
78
78
  it %[should not block the caller and be done] do
79
- @zk.exists?(@path).should be_false
79
+ expect(@zk.exists?(@path)).to be(false)
80
80
 
81
81
  th = Thread.new { @n.block_until_deleted }
82
82
 
83
83
  @n.wait_until_blocked
84
- @n.should_not be_blocked
85
- th.join(5).should == th
86
- @n.should be_done
84
+ expect(@n).not_to be_blocked
85
+ expect(th.join(5)).to eq(th)
86
+ expect(@n).to be_done
87
87
  end
88
88
  end
89
89
 
@@ -140,23 +140,27 @@ describe ZK::NodeDeletionWatcher do
140
140
  runner.run
141
141
  controller.run
142
142
  controller.join
143
- runner.join(5).should == runner
144
- watcher.should be_done
143
+ expect(runner.join(5)).to eq(runner)
144
+ expect(watcher).to be_done
145
145
  end
146
146
 
147
147
  context %[threshold not supplied] do
148
148
  let(:watcher_params){}
149
149
 
150
150
  it 'should raise' do
151
- expect{ watcher }.to_not raise_exception
151
+ expect{ watcher }.to_not raise_error
152
+ end
153
+
154
+ describe '#threshold' do
155
+ subject { super().threshold }
156
+ it { should be_zero }
152
157
  end
153
- its(:threshold){ should be_zero }
154
158
  end
155
159
 
156
160
  context %[invalid threshold given] do
157
161
  let(:watcher_params){ {:threshold => :foo} }
158
162
  it 'should raise' do
159
- expect{ watcher }.to raise_exception
163
+ expect{ watcher }.to raise_error(ZK::Exceptions::BadArguments)
160
164
  end
161
165
  end
162
166
 
@@ -168,10 +172,14 @@ describe ZK::NodeDeletionWatcher do
168
172
  runner.run
169
173
  controller.run
170
174
  controller.join
171
- runner.join(5).should == runner
172
- watcher.should be_done
175
+ expect(runner.join(5)).to eq(runner)
176
+ expect(watcher).to be_done
177
+ end
178
+
179
+ describe '#threshold' do
180
+ subject { super().threshold }
181
+ it { should == 1 }
173
182
  end
174
- its(:threshold){ should == 1 }
175
183
  end
176
184
 
177
185
  context do
@@ -181,10 +189,10 @@ describe ZK::NodeDeletionWatcher do
181
189
  runner.run
182
190
  controller.run
183
191
  controller.join
184
- runner.join(5).should == runner
185
- @exc.should be_kind_of(ZK::Exceptions::LockWaitTimeoutError)
186
- watcher.should be_done
187
- watcher.should be_timed_out
192
+ expect(runner.join(5)).to eq(runner)
193
+ expect(@exc).to be_kind_of(ZK::Exceptions::LockWaitTimeoutError)
194
+ expect(watcher).to be_done
195
+ expect(watcher).to be_timed_out
188
196
  end
189
197
  end
190
198
  end
data/spec/zk/pool_spec.rb CHANGED
@@ -8,7 +8,7 @@ describe ZK::Pool do
8
8
  report_realtime('opening pool') do
9
9
  @pool_size = 2
10
10
  @connection_pool = ZK::Pool::Simple.new(connection_host, @pool_size, :watcher => :default)
11
- @connection_pool.should be_open
11
+ expect(@connection_pool).to be_open
12
12
  end
13
13
  end
14
14
 
@@ -22,7 +22,7 @@ describe ZK::Pool do
22
22
  unless th.join(5) == th
23
23
  logger.warn { "Forcing pool closed!" }
24
24
  @connection_pool.force_close!
25
- th.join(5).should == th
25
+ expect(th.join(5)).to eq(th)
26
26
  end
27
27
  end
28
28
  end
@@ -40,7 +40,7 @@ describe ZK::Pool do
40
40
  it "should allow you to execute commands on a connection" do
41
41
  @connection_pool.with_connection do |zk|
42
42
  zk.create("/test_pool", "", :mode => :ephemeral)
43
- zk.exists?("/test_pool").should be_true
43
+ expect(zk.exists?("/test_pool")).to be(true)
44
44
  end
45
45
  end
46
46
 
@@ -48,14 +48,12 @@ describe ZK::Pool do
48
48
  it %[should allow you to execute commands on the connection pool itself] do
49
49
  @connection_pool.create('/test_pool', '', :mode => :persistent)
50
50
  wait_until(2) { @connection_pool.exists?('/test_pool') }
51
- @connection_pool.exists?('/test_pool').should be_true
51
+ expect(@connection_pool.exists?('/test_pool')).to be(true)
52
52
  end
53
53
  end
54
54
 
55
55
  describe :close_all! do
56
56
  it %[should shutdown gracefully] do
57
- release_q = Queue.new
58
-
59
57
  latch = Latch.new
60
58
 
61
59
  @about_to_block = false
@@ -76,30 +74,30 @@ describe ZK::Pool do
76
74
  @cond.wait(@mutex) while @cnx.nil?
77
75
  end
78
76
 
79
- @cnx.should_not be_nil
77
+ expect(@cnx).not_to be_nil
80
78
 
81
79
  closing_th = Thread.new do
82
80
  @connection_pool.close_all!
83
81
  end
84
82
 
85
83
  wait_until(5) { @connection_pool.closing? }
86
- @connection_pool.should be_closing
84
+ expect(@connection_pool).to be_closing
87
85
  logger.debug { "connection pool is closing" }
88
86
 
89
- lambda { @connection_pool.with_connection { |c| c } }.should raise_error(ZK::Exceptions::PoolIsShuttingDownException)
87
+ expect { @connection_pool.with_connection { |c| c } }.to raise_error(ZK::Exceptions::PoolIsShuttingDownException)
90
88
 
91
89
  latch.release
92
90
 
93
- open_th.join(5).should == open_th
91
+ expect(open_th.join(5)).to eq(open_th)
94
92
 
95
93
  @connection_pool.wait_until_closed
96
94
 
97
- @connection_pool.should be_closed
95
+ expect(@connection_pool).to be_closed
98
96
 
99
- lambda do
100
- closing_th.join(1).should == closing_th
101
- open_th.join(1).should == open_th
102
- end.should_not raise_error
97
+ expect do
98
+ expect(closing_th.join(1)).to eq(closing_th)
99
+ expect(open_th.join(1)).to eq(open_th)
100
+ end.not_to raise_error
103
101
  end
104
102
  end
105
103
 
@@ -111,8 +109,8 @@ describe ZK::Pool do
111
109
  @cnx << @connection_pool.checkout
112
110
  end
113
111
 
114
- @cnx.length.should_not be_zero
115
-
112
+ expect(@cnx.length).not_to be_zero
113
+
116
114
  # this exc nonsense is because 1.8.7's scheduler is broken
117
115
  @exc = nil
118
116
 
@@ -131,8 +129,8 @@ describe ZK::Pool do
131
129
 
132
130
  @connection_pool.wait_until_closed
133
131
 
134
- th.join(5).should == th
135
- @exc.should be_kind_of(ZK::Exceptions::PoolIsShuttingDownException)
132
+ expect(th.join(5)).to eq(th)
133
+ expect(@exc).to be_kind_of(ZK::Exceptions::PoolIsShuttingDownException)
136
134
  end
137
135
  end
138
136
 
@@ -143,7 +141,7 @@ describe ZK::Pool do
143
141
 
144
142
  @connection_pool.with_connection do |zk|
145
143
  begin
146
- zk.delete(@path)
144
+ zk.delete(@path)
147
145
  rescue ZK::Exceptions::NoNode
148
146
  end
149
147
  end
@@ -152,63 +150,59 @@ describe ZK::Pool do
152
150
  zk.watcher.register(@path) do |event|
153
151
 
154
152
  @callback_called = true
155
- event.path.should == @path
153
+ expect(event.path).to eq(@path)
156
154
  end
157
155
 
158
- zk.exists?(@path, :watch => true).should be_false
156
+ expect(zk.exists?(@path, :watch => true)).to be(false)
159
157
  end
160
158
 
161
159
  @connection_pool.with_connection do |zk|
162
- zk.create(@path, "", :mode => :ephemeral).should == @path
160
+ expect(zk.create(@path, "", :mode => :ephemeral)).to eq(@path)
163
161
  end
164
162
 
165
163
  wait_until(1) { @callback_called }
166
164
 
167
- @callback_called.should be_true
165
+ expect(@callback_called).to be(true)
168
166
  end
169
167
 
170
168
  # These tests are seriously yucky, but they show that when a client is !connected?
171
169
  # the pool behaves properly and will not return that client to the caller.
172
-
170
+
173
171
  describe 'health checking with disconnected client', :rbx => :broken do
174
172
  before do
175
173
  wait_until(2) { @connection_pool.available_size == 2 }
176
- @connection_pool.available_size.should == 2
174
+ expect(@connection_pool.available_size).to eq(2)
177
175
 
178
176
  @connections = @connection_pool.connections
179
- @connections.length.should == 2
177
+ expect(@connections.length).to eq(2)
180
178
 
181
179
  @cnx1 = @connections.shift
182
180
 
183
- mock_sub = flexmock(:subscription)
181
+ mock_sub = double(:subscription)
184
182
 
185
- @mcnx1 = flexmock(@cnx1) do |m|
186
- m.should_receive(:connected?).at_least.once.and_return(false)
187
- m.should_receive(:on_connected).with(Proc).at_least.once.and_return(mock_sub)
188
- end
183
+ expect(@cnx1).to receive(:connected?).at_least(1).and_return(false)
184
+ expect(@cnx1).to receive(:on_connected).at_least(1).and_yield.and_return(mock_sub)
189
185
 
190
- @connections.unshift(@mcnx1)
186
+ @connections.unshift(@cnx1)
191
187
  end
192
188
 
193
189
  after do
194
- @connections.delete(@mcnx1)
195
- @connections.unshift(@cnx1)
196
190
  [@cnx1, @cnx2].each { |c| @connection_pool.checkin(c) }
197
191
  end
198
192
 
199
193
  it %[should remove the disconnected client from the pool] do
200
- @connection_pool.available_size.should == 2
194
+ expect(@connection_pool.available_size).to eq(2)
201
195
 
202
196
  @cnx2 = @connection_pool.checkout
203
-
197
+
204
198
  # this is gross and relies on knowing internal state
205
- @connection_pool.checkout(false).should be_false
199
+ expect(@connection_pool.checkout(false)).to be(false)
206
200
 
207
- @cnx2.should_not be_nil
208
- @cnx2.should_not == @mcnx1
201
+ expect(@cnx2).not_to be_nil
202
+ expect(@cnx2).not_to eq(@cnx1)
209
203
 
210
- @connection_pool.available_size.should == 0
211
- @connections.should include(@mcnx1)
204
+ expect(@connection_pool.available_size).to eq(0)
205
+ expect(@connections).to include(@cnx1)
212
206
  end
213
207
  end
214
208
  end # Simple
@@ -221,18 +215,18 @@ describe ZK::Pool do
221
215
  @max_clients = 2
222
216
  @timeout = 10
223
217
  @connection_pool = ZK::Pool::Bounded.new(connection_host, :min_clients => @min_clients, :max_clients => @max_clients, :timeout => @timeout)
224
- @connection_pool.should be_open
218
+ expect(@connection_pool).to be_open
225
219
  wait_until(2) { @connection_pool.available_size > 0 }
226
220
  end
227
221
 
228
222
  after do
229
223
  @connection_pool.force_close! unless @connection_pool.closed?
230
- @connection_pool.should be_closed
224
+ expect(@connection_pool).to be_closed
231
225
  end
232
226
 
233
227
  describe 'initial state' do
234
228
  it %[should have initialized the minimum number of clients] do
235
- @connection_pool.size.should == @min_clients
229
+ expect(@connection_pool.size).to eq(@min_clients)
236
230
  end
237
231
  end
238
232
 
@@ -248,41 +242,38 @@ describe ZK::Pool do
248
242
 
249
243
  it %[should grow if it can] do
250
244
  wait_until(2) { @connection_pool.available_size > 0 }
251
- @connection_pool.available_size.should > 0
245
+ expect(@connection_pool.available_size > 0).to be(true)
252
246
 
253
- @connection_pool.size.should == 1
247
+ expect(@connection_pool.size).to eq(1)
254
248
 
255
249
  logger.debug { "checking out @cnx1" }
256
250
  @cnx1 = @connection_pool.checkout
257
- @cnx1.should_not be_false
251
+ expect(@cnx1).not_to be(false)
258
252
 
259
- @connection_pool.can_grow_pool?.should be_true
253
+ expect(@connection_pool.can_grow_pool?).to be(true)
260
254
 
261
255
  logger.debug { "checking out @cnx2" }
262
256
  @cnx2 = @connection_pool.checkout
263
- @cnx2.should_not be_false
264
- @cnx2.should be_connected
257
+ expect(@cnx2).not_to be(false)
258
+ expect(@cnx2).to be_connected
265
259
 
266
- @cnx1.object_id.should_not == @cnx2.object_id
260
+ expect(@cnx1.object_id).not_to eq(@cnx2.object_id)
267
261
 
268
262
  [@cnx1, @cnx2].each { |c| @connection_pool.checkin(c) }
269
263
  end
270
264
 
271
265
  it %[should not grow past max_clients and block] do
272
- win_q = Queue.new
273
266
  lose_q = Queue.new
274
267
 
275
- threads = []
276
-
277
268
  @cnx1 = @connection_pool.checkout
278
- @cnx1.should_not be_false
269
+ expect(@cnx1).not_to be(false)
279
270
 
280
- @connection_pool.can_grow_pool?.should be_true
271
+ expect(@connection_pool.can_grow_pool?).to be(true)
281
272
 
282
273
  @cnx2 = @connection_pool.checkout
283
- @cnx2.should_not be_false
274
+ expect(@cnx2).not_to be(false)
284
275
 
285
- @connection_pool.can_grow_pool?.should be_false
276
+ expect(@connection_pool.can_grow_pool?).to be(false)
286
277
 
287
278
  logger.debug { "spawning losing thread" }
288
279
 
@@ -299,22 +290,22 @@ describe ZK::Pool do
299
290
  # logger.debug { "count waiters: #{@connection_pool.count_waiters}" }
300
291
  # @connection_pool.count_waiters.should == 1
301
292
 
302
- loser[:cnx].should be_nil
293
+ expect(loser[:cnx]).to be_nil
303
294
 
304
295
  [@cnx1, @cnx2].each { |c| @connection_pool.checkin(c) }
305
296
 
306
297
  loser.join_until(2) { loser[:cnx] }
307
- loser[:cnx].should_not be_nil
298
+ expect(loser[:cnx]).not_to be_nil
308
299
 
309
300
  lose_q.enq(:release)
310
301
 
311
- lambda { loser.join(2).should == loser }.should_not raise_error
302
+ expect { expect(loser.join(2)).to eq(loser) }.not_to raise_error
312
303
 
313
304
  logger.debug { "joined losing thread" }
314
305
 
315
- @connection_pool.count_waiters.should be_zero
316
- @connection_pool.available_size.should == 2
317
- @connection_pool.size.should == 2
306
+ expect(@connection_pool.count_waiters).to be_zero
307
+ expect(@connection_pool.available_size).to eq(2)
308
+ expect(@connection_pool.size).to eq(2)
318
309
  end
319
310
  end # should grow to max_clients
320
311
 
@@ -17,11 +17,11 @@ describe ZK::ThreadedCallback do
17
17
  end
18
18
 
19
19
  after do
20
- @tcb.shutdown.should be_true
20
+ expect(@tcb.shutdown).to be(true)
21
21
  end
22
22
 
23
23
  it %[should have started the thread] do
24
- @tcb.should be_alive
24
+ expect(@tcb).to be_alive
25
25
  end
26
26
 
27
27
  describe %[pausing for fork] do
@@ -31,19 +31,19 @@ describe ZK::ThreadedCallback do
31
31
  end
32
32
 
33
33
  it %[should stop the thread] do
34
- @tcb.should_not be_alive
34
+ expect(@tcb).not_to be_alive
35
35
  end
36
36
 
37
37
  it %[should allow calls] do
38
- lambda { @tcb.call(:a) }.should_not raise_error
38
+ expect { @tcb.call(:a) }.not_to raise_error
39
39
  end
40
40
  end
41
41
 
42
42
  describe %[when not running] do
43
43
  it %[should barf with InvalidStateError] do
44
- @tcb.shutdown.should be_true
45
- @tcb.should_not be_alive
46
- lambda { @tcb.pause_before_fork_in_parent }.should raise_error(ZK::Exceptions::InvalidStateError)
44
+ expect(@tcb.shutdown).to be(true)
45
+ expect(@tcb).not_to be_alive
46
+ expect { @tcb.pause_before_fork_in_parent }.to raise_error(ZK::Exceptions::InvalidStateError)
47
47
  end
48
48
  end
49
49
  end
@@ -52,7 +52,7 @@ describe ZK::ThreadedCallback do
52
52
  describe %[after pause] do
53
53
  before do
54
54
  @tcb.pause_before_fork_in_parent
55
- @tcb.should_not be_alive
55
+ expect(@tcb).not_to be_alive
56
56
  end
57
57
 
58
58
  it %[should deliver any calls on resume] do
@@ -65,13 +65,13 @@ describe ZK::ThreadedCallback do
65
65
 
66
66
  wait_until { @called.length >= 2 }
67
67
 
68
- @called.length.should >= 2
68
+ expect(@called.length).to be >= 2
69
69
  end
70
70
  end
71
71
 
72
72
  describe %[if not paused] do
73
73
  it %[should barf with InvalidStateError] do
74
- lambda { @tcb.resume_after_fork_in_parent }.should raise_error(ZK::Exceptions::InvalidStateError)
74
+ expect { @tcb.resume_after_fork_in_parent }.to raise_error(ZK::Exceptions::InvalidStateError)
75
75
  end
76
76
  end
77
77
  end
@@ -11,11 +11,11 @@ describe ZK::Threadpool do
11
11
 
12
12
  describe :new do
13
13
  it %[should be running] do
14
- @threadpool.should be_running
14
+ expect(@threadpool).to be_running
15
15
  end
16
16
 
17
17
  it %[should use the default size] do
18
- @threadpool.size.should == ZK::Threadpool.default_size
18
+ expect(@threadpool.size).to eq(ZK::Threadpool.default_size)
19
19
  end
20
20
  end
21
21
 
@@ -27,19 +27,19 @@ describe ZK::Threadpool do
27
27
 
28
28
  wait_until(2) { @th }
29
29
 
30
- @th.should_not == Thread.current
30
+ expect(@th).not_to eq(Thread.current)
31
31
  end
32
32
 
33
33
  it %[should barf if the argument is not callable] do
34
- bad_obj = flexmock(:not_callable)
35
- bad_obj.should_not respond_to(:call)
34
+ bad_obj = double(:not_callable)
35
+ expect(bad_obj).not_to respond_to(:call)
36
36
 
37
- lambda { @threadpool.defer(bad_obj) }.should raise_error(ArgumentError)
37
+ expect { @threadpool.defer(bad_obj) }.to raise_error(ArgumentError)
38
38
  end
39
39
 
40
40
  it %[should not barf if the threadpool is not running] do
41
41
  @threadpool.shutdown
42
- lambda { @threadpool.defer { "hai!" } }.should_not raise_error
42
+ expect { @threadpool.defer { "hai!" } }.not_to raise_error
43
43
  end
44
44
  end
45
45
 
@@ -48,42 +48,42 @@ describe ZK::Threadpool do
48
48
  @ary = []
49
49
 
50
50
  @threadpool.on_exception { |exc| @ary << exc }
51
-
51
+
52
52
  @threadpool.defer { raise "ZOMG!" }
53
53
 
54
54
  wait_while(2) { @ary.empty? }
55
55
 
56
- @ary.length.should == 1
56
+ expect(@ary.length).to eq(1)
57
57
 
58
58
  e = @ary.shift
59
59
 
60
- e.should be_kind_of(RuntimeError)
61
- e.message.should == 'ZOMG!'
60
+ expect(e).to be_kind_of(RuntimeError)
61
+ expect(e.message).to eq('ZOMG!')
62
62
  end
63
63
  end
64
64
 
65
65
  describe :shutdown do
66
66
  it %[should set running to false] do
67
67
  @threadpool.shutdown
68
- @threadpool.should_not be_running
68
+ expect(@threadpool).not_to be_running
69
69
  end
70
70
  end
71
71
 
72
72
  describe :start! do
73
73
  it %[should be able to start a threadpool that had previously been shutdown (reuse)] do
74
74
  @threadpool.shutdown
75
- @threadpool.start!.should be_true
75
+ expect(@threadpool.start!).to be(true)
76
76
 
77
- @threadpool.should be_running
77
+ expect(@threadpool).to be_running
78
78
 
79
79
  @rval = nil
80
80
 
81
- @threadpool.defer do
81
+ @threadpool.defer do
82
82
  @rval = true
83
83
  end
84
84
 
85
85
  wait_until(2) { @rval }
86
- @rval.should be_true
86
+ expect(@rval).to be(true)
87
87
  end
88
88
  end
89
89
 
@@ -93,24 +93,24 @@ describe ZK::Threadpool do
93
93
  @threadpool.defer { @a << @threadpool.on_threadpool? }
94
94
 
95
95
  wait_while(2) { @a.empty? }
96
- @a.should_not be_empty
96
+ expect(@a).not_to be_empty
97
97
 
98
- @a.first.should be_true
98
+ expect(@a.first).to be(true)
99
99
  end
100
100
  end
101
101
 
102
102
  describe :pause_before_fork_in_parent do
103
103
  it %[should stop all running threads] do
104
- @threadpool.should be_running
105
- @threadpool.should be_alive
104
+ expect(@threadpool).to be_running
105
+ expect(@threadpool).to be_alive
106
106
  @threadpool.pause_before_fork_in_parent
107
107
 
108
- @threadpool.should_not be_alive
108
+ expect(@threadpool).not_to be_alive
109
109
  end
110
110
 
111
111
  it %[should raise InvalidStateError if already paused] do
112
112
  @threadpool.pause_before_fork_in_parent
113
- lambda { @threadpool.pause_before_fork_in_parent }.should raise_error(ZK::Exceptions::InvalidStateError)
113
+ expect { @threadpool.pause_before_fork_in_parent }.to raise_error(ZK::Exceptions::InvalidStateError)
114
114
  end
115
115
  end
116
116
 
@@ -121,12 +121,12 @@ describe ZK::Threadpool do
121
121
 
122
122
  it %[should start all threads running again] do
123
123
  @threadpool.resume_after_fork_in_parent
124
- @threadpool.should be_alive
124
+ expect(@threadpool).to be_alive
125
125
  end
126
126
 
127
127
  it %[should raise InvalidStateError if not in paused state] do
128
128
  @threadpool.shutdown
129
- lambda { @threadpool.resume_after_fork_in_parent }.should raise_error(ZK::Exceptions::InvalidStateError)
129
+ expect { @threadpool.resume_after_fork_in_parent }.to raise_error(ZK::Exceptions::InvalidStateError)
130
130
  end
131
131
 
132
132
  it %[should run callbacks deferred while paused] do
@@ -147,7 +147,7 @@ describe ZK::Threadpool do
147
147
 
148
148
  latch.await(2)
149
149
 
150
- calls.should_not be_empty
150
+ expect(calls).not_to be_empty
151
151
  end
152
152
  end
153
153
  end