zk 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,176 @@
1
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
2
+
3
+ describe ZK do
4
+ before do
5
+ @zk = ZK.new("localhost:#{ZK_TEST_PORT}", :watcher => nil)
6
+
7
+ # @zk.set_debug_level(:debug) unless defined?(::JRUBY_VERSION)
8
+
9
+ wait_until{ @zk.connected? }
10
+ end
11
+
12
+ describe ZK, "with no paths" do
13
+ before(:each) do
14
+ delete_test!
15
+ end
16
+
17
+ after(:each) do
18
+ delete_test!
19
+ @zk.close!
20
+ wait_until{ @zk.closed? }
21
+ end
22
+
23
+ def delete_test!
24
+ if (@zk.exists?('/test'))
25
+ @zk.children("/test").each do |child|
26
+ @zk.delete("/test/#{child}")
27
+ end
28
+ @zk.delete('/test')
29
+ end
30
+ end
31
+
32
+ it "should not exist" do
33
+ @zk.exists?("/test").should be_false
34
+ end
35
+
36
+ it "should create a path" do
37
+ @zk.create("/test", "test_data", :mode => :ephemeral).should == "/test"
38
+ end
39
+
40
+ it "should be able to set the data" do
41
+ @zk.create("/test", "something", :mode => :ephemeral)
42
+ @zk.set("/test", "somethingelse")
43
+ @zk.get("/test").first.should == "somethingelse"
44
+ end
45
+
46
+ it "should raise an exception for a non existent path" do
47
+ lambda { @zk.get("/non_existent_path") }.should raise_error(ZK::Exceptions::NoNode)
48
+ end
49
+
50
+ it "should create a path with sequence set" do
51
+ @zk.create("/test", "test_data", :mode => :persistent_sequential).should =~ /test(\d+)/
52
+ end
53
+
54
+ it "should create an ephemeral path" do
55
+ @zk.create("/test", "test_data", :mode => :ephemeral).should == "/test"
56
+ end
57
+
58
+ it "should remove ephemeral path when client session ends" do
59
+ @zk.create("/test", "test_data", :mode => :ephemeral).should == "/test"
60
+ @zk.exists?("/test").should_not be_nil
61
+ @zk.close!
62
+ wait_until(2) { !@zk.connected? }
63
+ @zk.should_not be_connected
64
+
65
+ @zk = ZK.new("localhost:#{ZK_TEST_PORT}", :watcher => nil)
66
+ wait_until{ @zk.connected? }
67
+ @zk.exists?("/test").should be_false
68
+ end
69
+
70
+ it "should remove sequential ephemeral path when client session ends" do
71
+ created = @zk.create("/test", "test_data", :mode => :ephemeral_sequential)
72
+ created.should =~ /test(\d+)/
73
+ @zk.exists?(created).should_not be_nil
74
+ @zk.close!
75
+
76
+ @zk = ZK.new("localhost:#{ZK_TEST_PORT}", :watcher => nil)
77
+ wait_until{ @zk.connected? }
78
+ @zk.exists?(created).should be_false
79
+ end
80
+
81
+ end
82
+
83
+ describe ZK, "with a path" do
84
+ before(:each) do
85
+ delete_test!
86
+ @zk.create("/test", "test_data", :mode => :persistent)
87
+ end
88
+
89
+ after(:each) do
90
+ delete_test!
91
+ @zk.close!
92
+ wait_until{ @zk.closed? }
93
+ end
94
+
95
+ def delete_test!
96
+ if (@zk.exists?('/test'))
97
+ @zk.children("/test").each do |child|
98
+ @zk.delete("/test/#{child}")
99
+ end
100
+ @zk.delete('/test')
101
+ end
102
+ end
103
+
104
+ it "should return a stat" do
105
+ @zk.stat("/test").should be_instance_of(ZookeeperStat::Stat)
106
+ end
107
+
108
+ it "should return a boolean" do
109
+ @zk.exists?("/test").should be_true
110
+ end
111
+
112
+ it "should get data and stat" do
113
+ data, stat = @zk.get("/test")
114
+ data.should == "test_data"
115
+ stat.should be_a_kind_of(ZookeeperStat::Stat)
116
+ stat.created_time.should_not == 0
117
+ end
118
+
119
+ it "should set data with a file" do
120
+ file = File.read('spec/test_file.txt')
121
+ @zk.set("/test", file)
122
+ @zk.get("/test").first.should == file
123
+ end
124
+
125
+ it "should delete path" do
126
+ @zk.delete("/test")
127
+ @zk.exists?("/test").should be_false
128
+ end
129
+
130
+ it "should create a child path" do
131
+ @zk.create("/test/child", "child", :mode => :ephemeral).should == "/test/child"
132
+ end
133
+
134
+ it "should create sequential child paths" do
135
+ (child1 = @zk.create("/test/child", "child1", :mode => :persistent_sequential)).should =~ /\/test\/child(\d+)/
136
+ (child2 = @zk.create("/test/child", "child2", :mode => :persistent_sequential)).should =~ /\/test\/child(\d+)/
137
+ children = @zk.children("/test")
138
+ children.length.should == 2
139
+ children.should be_include(child1.match(/\/test\/(child\d+)/)[1])
140
+ children.should be_include(child2.match(/\/test\/(child\d+)/)[1])
141
+ end
142
+
143
+ it "should have no children" do
144
+ @zk.children("/test").should be_empty
145
+ end
146
+
147
+ end
148
+
149
+ describe ZK, "with children" do
150
+
151
+ before(:each) do
152
+ delete_test!
153
+ @zk.create("/test", "test_data", :mode => :persistent)
154
+ @zk.create("/test/child", "child", :mode => "persistent").should == "/test/child"
155
+ end
156
+
157
+ after(:each) do
158
+ delete_test!
159
+ @zk.close!
160
+ wait_until{ @zk.closed? }
161
+ end
162
+
163
+ def delete_test!
164
+ if (@zk.exists?('/test'))
165
+ @zk.children("/test").each do |child|
166
+ @zk.delete("/test/#{child}")
167
+ end
168
+ @zk.delete('/test')
169
+ end
170
+ end
171
+
172
+ it "should get children" do
173
+ @zk.children("/test").should eql(["child"])
174
+ end
175
+ end
176
+ end
data/zk.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "z_k/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "zk"
7
+ s.version = ZK::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jonathan D. Simms", "Topper Bowers"]
10
+ s.email = ["simms@hp.com", "tobowers@hp.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{A high-level wrapper around the zookeeper driver}
13
+ s.description = s.summary
14
+
15
+ s.add_runtime_dependency 'slyphon-zookeeper', '~> 0.1.4'
16
+ s.add_development_dependency 'rspec', '~> 2.4.0'
17
+ s.add_development_dependency 'wirble'
18
+ s.add_development_dependency 'flexmock', '~> 0.8.10'
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zk
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 6
9
+ - 4
10
+ version: 0.6.4
11
+ platform: ruby
12
+ authors:
13
+ - Jonathan D. Simms
14
+ - Topper Bowers
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-05-19 00:00:00 +00:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: slyphon-zookeeper
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ hash: 19
31
+ segments:
32
+ - 0
33
+ - 1
34
+ - 4
35
+ version: 0.1.4
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ hash: 31
47
+ segments:
48
+ - 2
49
+ - 4
50
+ - 0
51
+ version: 2.4.0
52
+ type: :development
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: wirble
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ type: :development
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: flexmock
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 43
77
+ segments:
78
+ - 0
79
+ - 8
80
+ - 10
81
+ version: 0.8.10
82
+ type: :development
83
+ version_requirements: *id004
84
+ description: A high-level wrapper around the zookeeper driver
85
+ email:
86
+ - simms@hp.com
87
+ - tobowers@hp.com
88
+ executables: []
89
+
90
+ extensions: []
91
+
92
+ extra_rdoc_files: []
93
+
94
+ files:
95
+ - .gitignore
96
+ - Gemfile
97
+ - Rakefile
98
+ - lib/z_k.rb
99
+ - lib/z_k/client.rb
100
+ - lib/z_k/election.rb
101
+ - lib/z_k/event_handler.rb
102
+ - lib/z_k/event_handler_subscription.rb
103
+ - lib/z_k/exceptions.rb
104
+ - lib/z_k/extensions.rb
105
+ - lib/z_k/locker.rb
106
+ - lib/z_k/logging.rb
107
+ - lib/z_k/message_queue.rb
108
+ - lib/z_k/mongoid.rb
109
+ - lib/z_k/pool.rb
110
+ - lib/z_k/threadpool.rb
111
+ - lib/z_k/version.rb
112
+ - lib/zk.rb
113
+ - spec/client_pool_spec.rb
114
+ - spec/client_spec.rb
115
+ - spec/election_spec.rb
116
+ - spec/locker_spec.rb
117
+ - spec/log4j.properties
118
+ - spec/message_queue_spec.rb
119
+ - spec/mongoid_spec.rb
120
+ - spec/spec_helper.rb
121
+ - spec/support/bogus_mongoid.rb
122
+ - spec/support/queuey_thread.rb
123
+ - spec/test_file.txt
124
+ - spec/threadpool_spec.rb
125
+ - spec/watch_spec.rb
126
+ - spec/zookeeper_spec.rb
127
+ - zk.gemspec
128
+ has_rdoc: true
129
+ homepage: ""
130
+ licenses: []
131
+
132
+ post_install_message:
133
+ rdoc_options: []
134
+
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ hash: 3
143
+ segments:
144
+ - 0
145
+ version: "0"
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ hash: 3
152
+ segments:
153
+ - 0
154
+ version: "0"
155
+ requirements: []
156
+
157
+ rubyforge_project:
158
+ rubygems_version: 1.6.2
159
+ signing_key:
160
+ specification_version: 3
161
+ summary: A high-level wrapper around the zookeeper driver
162
+ test_files:
163
+ - spec/client_pool_spec.rb
164
+ - spec/client_spec.rb
165
+ - spec/election_spec.rb
166
+ - spec/locker_spec.rb
167
+ - spec/log4j.properties
168
+ - spec/message_queue_spec.rb
169
+ - spec/mongoid_spec.rb
170
+ - spec/spec_helper.rb
171
+ - spec/support/bogus_mongoid.rb
172
+ - spec/support/queuey_thread.rb
173
+ - spec/test_file.txt
174
+ - spec/threadpool_spec.rb
175
+ - spec/watch_spec.rb
176
+ - spec/zookeeper_spec.rb