zookeeper 0.9.4 → 1.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.dotfiles/rvmrc +1 -0
  2. data/.gitignore +3 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +22 -0
  5. data/CHANGELOG +38 -5
  6. data/Gemfile +18 -1
  7. data/README.markdown +2 -0
  8. data/Rakefile +47 -109
  9. data/ext/c_zookeeper.rb +10 -6
  10. data/ext/zookeeper_base.rb +23 -11
  11. data/ext/zookeeper_c.c +14 -10
  12. data/java/{zookeeper_base.rb → java_base.rb} +13 -12
  13. data/lib/zookeeper.rb +32 -244
  14. data/lib/zookeeper/acls.rb +17 -13
  15. data/lib/zookeeper/callbacks.rb +28 -11
  16. data/lib/zookeeper/client.rb +30 -0
  17. data/lib/zookeeper/client_methods.rb +241 -0
  18. data/lib/zookeeper/common.rb +13 -12
  19. data/lib/zookeeper/common/queue_with_pipe.rb +3 -7
  20. data/lib/zookeeper/compatibility.rb +135 -0
  21. data/lib/zookeeper/constants.rb +35 -1
  22. data/lib/zookeeper/em_client.rb +1 -1
  23. data/lib/zookeeper/exceptions.rb +117 -93
  24. data/lib/zookeeper/rake_tasks.rb +165 -0
  25. data/lib/zookeeper/stat.rb +16 -16
  26. data/lib/zookeeper/version.rb +2 -4
  27. data/scripts/upgrade-1.0-sed-alike.rb +46 -0
  28. data/spec/c_zookeeper_spec.rb +10 -9
  29. data/spec/chrooted_connection_spec.rb +2 -2
  30. data/spec/default_watcher_spec.rb +4 -4
  31. data/spec/em_spec.rb +1 -1
  32. data/spec/shared/connection_examples.rb +52 -37
  33. data/spec/spec_helper.rb +22 -84
  34. data/spec/support/00_spawn_zookeeper.rb +20 -0
  35. data/spec/support/zookeeper_spec_helpers.rb +84 -0
  36. data/spec/zookeeper_spec.rb +1 -1
  37. metadata +47 -34
  38. data/examples/cloud_config.rb +0 -125
  39. data/test/test_basic.rb +0 -37
  40. data/test/test_callback1.rb +0 -36
  41. data/test/test_close.rb +0 -16
  42. data/test/test_esoteric.rb +0 -7
  43. data/test/test_watcher1.rb +0 -56
  44. data/test/test_watcher2.rb +0 -52
@@ -1,6 +1,4 @@
1
- # this "namespacing" is retarded. fix this in 1.0
2
- # @private
3
- module ZookeeperVersion
4
- VERSION = '0.9.4'
1
+ module Zookeeper
2
+ VERSION = '1.0.0.beta.1'
5
3
  DRIVER_VERSION = '3.3.5'
6
4
  end
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ARGV.empty?
4
+ $stderr.puts <<-EOS
5
+ Usage: #{File.basename(__FILE__)} file1 file2 file3
6
+
7
+ Fix references to Zookeeper classes and modules.
8
+
9
+ This script acts like sed and edits files in place (not saving backups,
10
+ as you *are* using source control and aren't a complete tool).
11
+
12
+ if you have any doubts, *read the script*:
13
+ ----------------------------------------------------------------------
14
+
15
+ #{File.read(__FILE__)}
16
+
17
+ EOS
18
+
19
+ exit 1
20
+ end
21
+
22
+
23
+ require 'tempfile'
24
+ require 'fileutils'
25
+
26
+ ARGV.each do |path|
27
+ Tempfile.open(File.basename(path)) do |tmp|
28
+ File.open(path) do |input|
29
+ while line = input.gets
30
+ tmp.puts line.gsub(/\bZookeeperStat::Stat\b/, 'Zookeeper::Stat').
31
+ gsub(/\bZookeeper::(\w+)Callback\b/, 'Zookeeper::Callbacks::\1Callback').
32
+ gsub(/\bZookeeperACLs::(ZOO_\w+)\b/, 'Zookeeper::Constants::\1').
33
+ gsub(/\bZookeeperExceptions::ZookeeperException::(\w+)\b/, 'Zookeeper::Exceptions::\1').
34
+ gsub(/\bZookeeper(Constants|Exceptions|Common|ACLs|Callbacks)\b/, 'Zookeeper::\1').
35
+ gsub(/\bZookeeperException::(\w+)\b/, 'Exceptions::\1')
36
+
37
+ end
38
+ end
39
+
40
+ tmp.fsync
41
+ tmp.close
42
+
43
+ FileUtils.mv(tmp.path, path)
44
+ end
45
+ end
46
+
@@ -1,8 +1,9 @@
1
1
  # tests the CZookeeper, obviously only available when running under MRI
2
- require 'spec_helper'
3
2
 
4
- if Module.const_defined?(:CZookeeper)
5
- describe CZookeeper do
3
+ unless defined?(::JRUBY_VERSION)
4
+ require 'spec_helper'
5
+
6
+ describe Zookeeper::CZookeeper do
6
7
  def pop_all_events
7
8
  [].tap do |rv|
8
9
  begin
@@ -13,13 +14,13 @@ if Module.const_defined?(:CZookeeper)
13
14
  end
14
15
 
15
16
  def wait_until_connected(timeout=2)
16
- wait_until(timeout) { @czk.state == ZookeeperConstants::ZOO_CONNECTED_STATE }
17
+ wait_until(timeout) { @czk.state == Zookeeper::Constants::ZOO_CONNECTED_STATE }
17
18
  end
18
19
 
19
20
  describe do
20
21
  before do
21
- @event_queue = ZookeeperCommon::QueueWithPipe.new
22
- @czk = CZookeeper.new('localhost:2181', @event_queue)
22
+ @event_queue = Zookeeper::Common::QueueWithPipe.new
23
+ @czk = Zookeeper::CZookeeper.new(Zookeeper.default_cnx_str, @event_queue)
23
24
  end
24
25
 
25
26
  after do
@@ -39,9 +40,9 @@ if Module.const_defined?(:CZookeeper)
39
40
  it %[should have a connection event after being connected] do
40
41
  event = wait_until(2) { @event_queue.pop }
41
42
  event.should be
42
- event[:req_id].should == ZookeeperCommon::ZKRB_GLOBAL_CB_REQ
43
- event[:type].should == ZookeeperConstants::ZOO_SESSION_EVENT
44
- event[:state].should == ZookeeperConstants::ZOO_CONNECTED_STATE
43
+ event[:req_id].should == Zookeeper::Common::ZKRB_GLOBAL_CB_REQ
44
+ event[:type].should == Zookeeper::Constants::ZOO_SESSION_EVENT
45
+ event[:state].should == Zookeeper::Constants::ZOO_CONNECTED_STATE
45
46
  end
46
47
  end
47
48
  end
@@ -6,7 +6,7 @@ describe 'Zookeeper chrooted' do
6
6
  let(:data) { "underpants" }
7
7
  let(:chroot_path) { '/slyphon-zookeeper-chroot' }
8
8
 
9
- let(:connection_string) { "localhost:2181#{chroot_path}" }
9
+ let(:connection_string) { "#{Zookeeper.default_cnx_str}#{chroot_path}" }
10
10
 
11
11
  before do
12
12
  @zk = Zookeeper.new(connection_string)
@@ -52,7 +52,7 @@ describe 'Zookeeper chrooted' do
52
52
  it %[should return ZNONODE] do
53
53
  rv = zk.create(:path => '/', :data => '')
54
54
  rv[:rc].should_not be_zero
55
- rv[:rc].should == ZookeeperExceptions::ZNONODE
55
+ rv[:rc].should == Zookeeper::Exceptions::ZNONODE
56
56
  end
57
57
  end
58
58
  end
@@ -5,18 +5,18 @@ describe Zookeeper do
5
5
  before do
6
6
  @events = []
7
7
  @watch_block = lambda do |hash|
8
- $stderr.puts "watch_block: #{hash.inspect}"
8
+ logger.debug "watch_block: #{hash.inspect}"
9
9
  @events << hash
10
10
  end
11
11
 
12
- @zk = Zookeeper.new('localhost:2181', 10, @watch_block)
12
+ @zk = Zookeeper.new(Zookeeper.default_cnx_str, 10, @watch_block)
13
13
 
14
14
  wait_until(2) { @zk.connected? }
15
15
  @zk.should be_connected
16
- $stderr.puts "connected!"
16
+ logger.debug "connected!"
17
17
 
18
18
  wait_until(2) { !@events.empty? }
19
- $stderr.puts "got events!"
19
+ logger.debug "got events!"
20
20
  end
21
21
 
22
22
  after do
@@ -11,7 +11,7 @@ describe 'ZookeeperEM' do
11
11
  default_timeout 3.0
12
12
 
13
13
  def setup_zk
14
- @zk = ZookeeperEM::Client.new('localhost:2181')
14
+ @zk = ZookeeperEM::Client.new(Zookeeper.default_cnx_str)
15
15
  em do
16
16
  @zk.on_attached do
17
17
  yield
@@ -34,7 +34,7 @@ shared_examples_for "connection" do
34
34
 
35
35
  it %[should return a stat] do
36
36
  @rv[:stat].should_not be_nil
37
- @rv[:stat].should be_kind_of(ZookeeperStat::Stat)
37
+ @rv[:stat].should be_kind_of(Zookeeper::Stat)
38
38
  end
39
39
  end
40
40
 
@@ -43,7 +43,7 @@ shared_examples_for "connection" do
43
43
 
44
44
  before do
45
45
  @event = nil
46
- @watcher = Zookeeper::WatcherCallback.new
46
+ @watcher = Zookeeper::Callbacks::WatcherCallback.new
47
47
 
48
48
  @rv = zk.get(:path => path, :watcher => @watcher, :watcher_context => path)
49
49
  end
@@ -67,7 +67,7 @@ shared_examples_for "connection" do
67
67
 
68
68
  describe :async do
69
69
  before do
70
- @cb = Zookeeper::DataCallback.new
70
+ @cb = Zookeeper::Callbacks::DataCallback.new
71
71
 
72
72
  @rv = zk.get(:path => path, :callback => @cb, :callback_context => path)
73
73
  wait_until(1.0) { @cb.completed? }
@@ -82,7 +82,7 @@ shared_examples_for "connection" do
82
82
 
83
83
  it %[should have the stat object in the callback] do
84
84
  @cb.stat.should_not be_nil
85
- @cb.stat.should be_kind_of(ZookeeperStat::Stat)
85
+ @cb.stat.should be_kind_of(Zookeeper::Stat)
86
86
  end
87
87
 
88
88
  it %[should have the data] do
@@ -94,8 +94,8 @@ shared_examples_for "connection" do
94
94
  it_should_behave_like "all success return values"
95
95
 
96
96
  before do
97
- @cb = Zookeeper::DataCallback.new
98
- @watcher = Zookeeper::WatcherCallback.new
97
+ @cb = Zookeeper::Callbacks::DataCallback.new
98
+ @watcher = Zookeeper::Callbacks::WatcherCallback.new
99
99
 
100
100
  @rv = zk.get(:path => path, :callback => @cb, :callback_context => path, :watcher => @watcher, :watcher_context => path)
101
101
  wait_until(1.0) { @cb.completed? }
@@ -104,7 +104,7 @@ shared_examples_for "connection" do
104
104
 
105
105
  it %[should have the stat object in the callback] do
106
106
  @cb.stat.should_not be_nil
107
- @cb.stat.should be_kind_of(ZookeeperStat::Stat)
107
+ @cb.stat.should be_kind_of(Zookeeper::Stat)
108
108
  end
109
109
 
110
110
  it %[should have the data] do
@@ -129,7 +129,7 @@ shared_examples_for "connection" do
129
129
 
130
130
  describe 'bad arguments' do
131
131
  it %[should barf with a BadArguments error] do
132
- lambda { zk.get(:bad_arg => 'what!?') }.should raise_error(ZookeeperExceptions::ZookeeperException::BadArguments)
132
+ lambda { zk.get(:bad_arg => 'what!?') }.should raise_error(Zookeeper::Exceptions::BadArguments)
133
133
  end
134
134
  end
135
135
  end # get
@@ -150,7 +150,7 @@ shared_examples_for "connection" do
150
150
 
151
151
  it %[should return the new stat] do
152
152
  @rv[:stat].should_not be_nil
153
- @rv[:stat].should be_kind_of(ZookeeperStat::Stat)
153
+ @rv[:stat].should be_kind_of(Zookeeper::Stat)
154
154
  @rv[:stat].version.should > @stat.version
155
155
  end
156
156
  end
@@ -164,7 +164,7 @@ shared_examples_for "connection" do
164
164
 
165
165
  it %[should return the new stat] do
166
166
  @rv[:stat].should_not be_nil
167
- @rv[:stat].should be_kind_of(ZookeeperStat::Stat)
167
+ @rv[:stat].should be_kind_of(Zookeeper::Stat)
168
168
  @rv[:stat].version.should > @stat.version
169
169
  end
170
170
  end
@@ -190,14 +190,14 @@ shared_examples_for "connection" do
190
190
  it %[should barf if the data size is too large], :input_size => true do
191
191
  large_data = '0' * (1024 ** 2)
192
192
 
193
- lambda { zk.set(:path => path, :data => large_data) }.should raise_error(ZookeeperExceptions::ZookeeperException::DataTooLargeException)
193
+ lambda { zk.set(:path => path, :data => large_data) }.should raise_error(Zookeeper::Exceptions::DataTooLargeException)
194
194
  end
195
195
  end
196
196
  end # sync
197
197
 
198
198
  describe :async do
199
199
  before do
200
- @cb = Zookeeper::StatCallback.new
200
+ @cb = Zookeeper::Callbacks::StatCallback.new
201
201
  end
202
202
 
203
203
  describe 'without version' do
@@ -264,7 +264,7 @@ shared_examples_for "connection" do
264
264
  it %[should barf if the data size is too large], :input_size => true do
265
265
  large_data = '0' * (1024 ** 2)
266
266
 
267
- lambda { zk.set(:path => path, :data => large_data, :callback => @cb, :callback_context => path) }.should raise_error(ZookeeperExceptions::ZookeeperException::DataTooLargeException)
267
+ lambda { zk.set(:path => path, :data => large_data, :callback => @cb, :callback_context => path) }.should raise_error(Zookeeper::Exceptions::DataTooLargeException)
268
268
  end
269
269
  end
270
270
 
@@ -303,7 +303,7 @@ shared_examples_for "connection" do
303
303
 
304
304
  it %[should have a stat object whose num_children is 3] do
305
305
  @rv[:stat].should_not be_nil
306
- @rv[:stat].should be_kind_of(ZookeeperStat::Stat)
306
+ @rv[:stat].should be_kind_of(Zookeeper::Stat)
307
307
  @rv[:stat].num_children.should == 3
308
308
  end
309
309
  end
@@ -314,7 +314,7 @@ shared_examples_for "connection" do
314
314
  before do
315
315
  @addtl_child = 'child3'
316
316
 
317
- @watcher = Zookeeper::WatcherCallback.new
317
+ @watcher = Zookeeper::Callbacks::WatcherCallback.new
318
318
 
319
319
  @rv = zk.get_children(:path => path, :watcher => @watcher, :watcher_context => path)
320
320
  end
@@ -331,7 +331,7 @@ shared_examples_for "connection" do
331
331
 
332
332
  it %[should have a stat object whose num_children is 3] do
333
333
  @rv[:stat].should_not be_nil
334
- @rv[:stat].should be_kind_of(ZookeeperStat::Stat)
334
+ @rv[:stat].should be_kind_of(Zookeeper::Stat)
335
335
  @rv[:stat].num_children.should == 3
336
336
  end
337
337
 
@@ -353,7 +353,7 @@ shared_examples_for "connection" do
353
353
  it_should_behave_like "all success return values"
354
354
 
355
355
  before do
356
- @cb = ZookeeperCallbacks::StringsCallback.new
356
+ @cb = Zookeeper::Callbacks::StringsCallback.new
357
357
  @rv = zk.get_children(:path => path, :callback => @cb, :callback_context => path)
358
358
 
359
359
  wait_until { @cb.completed? }
@@ -372,7 +372,7 @@ shared_examples_for "connection" do
372
372
 
373
373
  it %[should have a stat object whose num_children is 3] do
374
374
  @cb.stat.should_not be_nil
375
- @cb.stat.should be_kind_of(ZookeeperStat::Stat)
375
+ @cb.stat.should be_kind_of(Zookeeper::Stat)
376
376
  @cb.stat.num_children.should == 3
377
377
  end
378
378
  end
@@ -383,8 +383,8 @@ shared_examples_for "connection" do
383
383
  before do
384
384
  @addtl_child = 'child3'
385
385
 
386
- @watcher = Zookeeper::WatcherCallback.new
387
- @cb = ZookeeperCallbacks::StringsCallback.new
386
+ @watcher = Zookeeper::Callbacks::WatcherCallback.new
387
+ @cb = Zookeeper::Callbacks::StringsCallback.new
388
388
 
389
389
  @rv = zk.get_children(:path => path, :watcher => @watcher, :watcher_context => path, :callback => @cb, :callback_context => path)
390
390
  wait_until { @cb.completed? }
@@ -407,7 +407,7 @@ shared_examples_for "connection" do
407
407
 
408
408
  it %[should have a stat object whose num_children is 3] do
409
409
  @cb.stat.should_not be_nil
410
- @cb.stat.should be_kind_of(ZookeeperStat::Stat)
410
+ @cb.stat.should be_kind_of(Zookeeper::Stat)
411
411
  @cb.stat.num_children.should == 3
412
412
  end
413
413
 
@@ -445,7 +445,7 @@ shared_examples_for "connection" do
445
445
  it_should_behave_like "all success return values"
446
446
 
447
447
  before do
448
- @watcher = Zookeeper::WatcherCallback.new
448
+ @watcher = Zookeeper::Callbacks::WatcherCallback.new
449
449
 
450
450
  @rv = zk.stat(:path => path, :watcher => @watcher, :watcher_context => path)
451
451
  end
@@ -472,7 +472,7 @@ shared_examples_for "connection" do
472
472
  it_should_behave_like "all success return values"
473
473
 
474
474
  before do
475
- @cb = ZookeeperCallbacks::StatCallback.new
475
+ @cb = Zookeeper::Callbacks::StatCallback.new
476
476
  @rv = zk.stat(:path => path, :callback => @cb, :callback_context => path)
477
477
 
478
478
  wait_until { @cb.completed? }
@@ -494,9 +494,9 @@ shared_examples_for "connection" do
494
494
  before do
495
495
  @addtl_child = 'child3'
496
496
 
497
- @watcher = Zookeeper::WatcherCallback.new
497
+ @watcher = Zookeeper::Callbacks::WatcherCallback.new
498
498
 
499
- @cb = ZookeeperCallbacks::StatCallback.new
499
+ @cb = Zookeeper::Callbacks::StatCallback.new
500
500
  @rv = zk.stat(:path => path, :callback => @cb, :callback_context => path, :watcher => @watcher, :watcher_context => path)
501
501
 
502
502
  wait_until { @cb.completed? }
@@ -541,7 +541,7 @@ shared_examples_for "connection" do
541
541
  it %[should barf if the data size is too large], :input_size => true do
542
542
  large_data = '0' * (1024 ** 2)
543
543
 
544
- lambda { zk.create(:path => path, :data => large_data) }.should raise_error(ZookeeperExceptions::ZookeeperException::DataTooLargeException)
544
+ lambda { zk.create(:path => path, :data => large_data) }.should raise_error(Zookeeper::Exceptions::DataTooLargeException)
545
545
  end
546
546
  end
547
547
 
@@ -642,7 +642,7 @@ shared_examples_for "connection" do
642
642
 
643
643
  describe :async do
644
644
  before do
645
- @cb = ZookeeperCallbacks::StringCallback.new
645
+ @cb = Zookeeper::Callbacks::StringCallback.new
646
646
  end
647
647
 
648
648
  describe :default_flags do
@@ -676,7 +676,7 @@ shared_examples_for "connection" do
676
676
 
677
677
  lambda do
678
678
  zk.create(:path => path, :data => large_data, :callback => @cb, :callback_context => path)
679
- end.should raise_error(ZookeeperExceptions::ZookeeperException::DataTooLargeException)
679
+ end.should raise_error(Zookeeper::Exceptions::DataTooLargeException)
680
680
  end
681
681
  end
682
682
 
@@ -821,7 +821,7 @@ shared_examples_for "connection" do
821
821
 
822
822
  describe :async do
823
823
  before do
824
- @cb = ZookeeperCallbacks::VoidCallback.new
824
+ @cb = Zookeeper::Callbacks::VoidCallback.new
825
825
  end
826
826
 
827
827
  describe 'without version' do
@@ -886,7 +886,7 @@ shared_examples_for "connection" do
886
886
  end
887
887
 
888
888
  it %[should return a stat for the path] do
889
- @rv[:stat].should be_kind_of(ZookeeperStat::Stat)
889
+ @rv[:stat].should be_kind_of(Zookeeper::Stat)
890
890
  end
891
891
 
892
892
  it %[should return the acls] do
@@ -906,7 +906,7 @@ shared_examples_for "connection" do
906
906
  it_should_behave_like "all success return values"
907
907
 
908
908
  before do
909
- @cb = Zookeeper::ACLCallback.new
909
+ @cb = Zookeeper::Callbacks::ACLCallback.new
910
910
  @rv = zk.get_acl(:path => path, :callback => @cb, :callback_context => path)
911
911
 
912
912
  wait_until(2) { @cb.completed? }
@@ -914,7 +914,7 @@ shared_examples_for "connection" do
914
914
  end
915
915
 
916
916
  it %[should return a stat for the path] do
917
- @cb.stat.should be_kind_of(ZookeeperStat::Stat)
917
+ @cb.stat.should be_kind_of(Zookeeper::Stat)
918
918
  end
919
919
 
920
920
  it %[should return the acls] do
@@ -922,7 +922,7 @@ shared_examples_for "connection" do
922
922
  acls.should be_kind_of(Array)
923
923
 
924
924
  acl = acls.first
925
- acl.should be_kind_of(ZookeeperACLs::ACL)
925
+ acl.should be_kind_of(Zookeeper::ACLs::ACL)
926
926
 
927
927
  acl.perms.should == Zookeeper::ZOO_PERM_ALL
928
928
 
@@ -935,7 +935,7 @@ shared_examples_for "connection" do
935
935
  describe :set_acl do
936
936
  before do
937
937
  @perms = 5
938
- @new_acl = [ZookeeperACLs::ACL.new(:perms => @perms, :id => ZookeeperACLs::ZOO_ANYONE_ID_UNSAFE)]
938
+ @new_acl = [Zookeeper::ACLs::ACL.new(:perms => @perms, :id => Zookeeper::Constants::ZOO_ANYONE_ID_UNSAFE)]
939
939
  pending("No idea how to set ACLs")
940
940
  end
941
941
 
@@ -950,7 +950,7 @@ shared_examples_for "connection" do
950
950
 
951
951
  describe :session_id do
952
952
  it %[should return the session_id as a Fixnum] do
953
- zk.session_id.should be_kind_of(Fixnum)
953
+ zk.session_id.should be_kind_of(Integer)
954
954
  end
955
955
  end
956
956
 
@@ -965,7 +965,7 @@ shared_examples_for "connection" do
965
965
  it_should_behave_like "all success return values"
966
966
 
967
967
  before do
968
- @cb = Zookeeper::StringCallback.new
968
+ @cb = Zookeeper::Callbacks::StringCallback.new
969
969
  @rv = zk.sync(:path => path, :callback => @cb)
970
970
 
971
971
  wait_until(2) { @cb.completed }
@@ -975,7 +975,7 @@ shared_examples_for "connection" do
975
975
 
976
976
  describe :errors do
977
977
  it %[should barf with BadArguments if :callback is not given] do
978
- lambda { zk.sync(:path => path) }.should raise_error(ZookeeperExceptions::ZookeeperException::BadArguments)
978
+ lambda { zk.sync(:path => path) }.should raise_error(Zookeeper::Exceptions::BadArguments)
979
979
  end
980
980
  end
981
981
  end
@@ -1014,5 +1014,20 @@ shared_examples_for "connection" do
1014
1014
  end
1015
1015
  end
1016
1016
  end
1017
+
1018
+ unless defined?(::JRUBY_VERSION)
1019
+ describe 'fork protection' do
1020
+ it %[should raise an InheritedConnectionError if the current Process.pid is different from the one that created the client] do
1021
+ pid = Process.pid
1022
+ begin
1023
+ Process.stub(:pid => -1)
1024
+ lambda { zk.stat(:path => path) }.should raise_error(Zookeeper::Exceptions::InheritedConnectionError)
1025
+ ensure
1026
+ # ensure we reset this, only want it to fail during the test
1027
+ Process.stub(:pid => pid)
1028
+ end
1029
+ end
1030
+ end
1031
+ end
1017
1032
  end
1018
1033