roma-client 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9bf98250d1cdace281868bb804e5b6ff0f8967ba
4
- data.tar.gz: b509fa06dc3c6e732a0f3c472c5641f93ee0dff4
3
+ metadata.gz: 8fa08ca4abf7e429b64dd7ccede43f0cc1b8df38
4
+ data.tar.gz: 4229f43985000b6c82ff5dac4b87251988bbf60f
5
5
  SHA512:
6
- metadata.gz: 6df5d76cfb1a9ff408fc930a0b33b883a558a8da3764cb483914430cf064cb08d95b39c9312fb87adad1359578f9f9d3c4ef42dd2c01324c4c382f5345bad3cc
7
- data.tar.gz: de2c9ed944175faa9db14b203840f9ac9f406ad202befa783a9c0338ad49c9faddbe89d0d46e4f2e36c5a6ef8ce1106a05dd9f950b54cdd623592804b17d5f6c
6
+ metadata.gz: 2724bde9c6a933562b4729e05bdaad563fe6e604d8ed7840410b516ff366c706f844605e1205339a24cc88a5fc5640b15c815bab2dbbad51f8d7096b126e5aeb
7
+ data.tar.gz: 8e62fccf9a0a168c494500fe3509a3cad98eeb5cbfd4aafd86110a2df53fd1477699dc94989259a1e7c62262dbc81abdb8193f7b19654bb0464974f80e75e82c
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ * 0.4.3 (Aug 19 2015)
2
+
3
+ * Change interface of Stat object and refactoring [Hiroki Matsue] 7438faf
4
+ * Add tests for argumetns of stats [Hiroki Matsue] 9939760
5
+ * Refactor codes [Hiroki Matsue] 3d37030
6
+ * Support stat command [Hiroki Matsue] 1d75694
7
+
1
8
  * 0.4.2 (Mar 31 2015)
2
9
 
3
10
  * Add gemspec and convert "should" to "expect" on rspec tests. [Hiroki Matsue] 4c7c465
data/Gemfile.lock CHANGED
@@ -1,30 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roma-client (0.4.2)
4
+ roma-client (0.4.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.2.5)
10
- json (1.8.2)
11
- rake (10.4.2)
12
- rdoc (4.2.0)
10
+ eventmachine (1.0.3)
11
+ jaro_winkler (1.3.5)
12
+ json (1.8.1)
13
+ rake (10.2.2)
14
+ rdoc (4.1.1)
13
15
  json (~> 1.4)
14
- rr (1.1.2)
15
- rspec (3.2.0)
16
- rspec-core (~> 3.2.0)
17
- rspec-expectations (~> 3.2.0)
18
- rspec-mocks (~> 3.2.0)
19
- rspec-core (3.2.2)
20
- rspec-support (~> 3.2.0)
21
- rspec-expectations (3.2.0)
22
- diff-lcs (>= 1.2.0, < 2.0)
23
- rspec-support (~> 3.2.0)
24
- rspec-mocks (3.2.1)
25
- diff-lcs (>= 1.2.0, < 2.0)
26
- rspec-support (~> 3.2.0)
27
- rspec-support (3.2.2)
16
+ roma (1.2.0)
17
+ eventmachine (~> 1.0.0)
18
+ jaro_winkler (~> 1.3.5)
19
+ rspec (2.14.1)
20
+ rspec-core (~> 2.14.0)
21
+ rspec-expectations (~> 2.14.0)
22
+ rspec-mocks (~> 2.14.0)
23
+ rspec-core (2.14.8)
24
+ rspec-expectations (2.14.5)
25
+ diff-lcs (>= 1.1.3, < 2.0)
26
+ rspec-mocks (2.14.6)
28
27
 
29
28
  PLATFORMS
30
29
  ruby
@@ -32,6 +31,6 @@ PLATFORMS
32
31
  DEPENDENCIES
33
32
  rake
34
33
  rdoc
34
+ roma
35
35
  roma-client!
36
- rr
37
36
  rspec
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  require 'singleton'
3
2
 
4
3
  module Roma
@@ -117,6 +116,7 @@ module Roma
117
116
  end
118
117
 
119
118
  private
119
+
120
120
  def initialize
121
121
  @max_pool_size = 1
122
122
  @clients = []
@@ -1,25 +1,24 @@
1
- # -*- coding: utf-8 -*-
2
1
  #
3
2
  # = roma/client/proxy/version.rb
4
3
  # This file is derived from roma client proxy daemon.
5
4
  #
6
5
  module Roma #:nodoc:
7
- module Client #:nodoc:
8
- # == What Is This Library?
9
- # ROMA client proxy daemon's version module
10
- #
11
- module VERSION
12
- # メジャーバージョン
13
- MAJOR = 0
6
+ module Client #:nodoc:
7
+ # == What Is This Library?
8
+ # ROMA client proxy daemon's version module
9
+ #
10
+ module VERSION
11
+ # MAJOR version
12
+ MAJOR = 0
14
13
 
15
- # マイナバージョン
16
- MINOR = 1
14
+ # MINOR version
15
+ MINOR = 1
17
16
 
18
- # TINY version
19
- TINY = 0
17
+ # TINY version
18
+ TINY = 0
20
19
 
21
- # バージョン文字列
22
- STRING = [MAJOR, MINOR, TINY].join('.')
23
- end
20
+ # Version string
21
+ STRING = [MAJOR, MINOR, TINY].join('.')
24
22
  end
23
+ end
25
24
  end
@@ -7,10 +7,8 @@ require 'roma/client/sender'
7
7
 
8
8
  module Roma
9
9
  module Client
10
-
11
10
  # Class to access ROMA .
12
11
  class RomaClient
13
-
14
12
  # ROMA server connect timeout .
15
13
  @@timeout = 5
16
14
 
@@ -24,33 +22,33 @@ module Roma
24
22
  #
25
23
  # [ini_nodes] ROMA nodes array
26
24
  # [plugin_modules] set plugin modules if you use .
27
- def initialize(ini_nodes,plugin_modules = nil, start_sync_routing_proc = true)
25
+ def initialize(ini_nodes, plugin_modules = nil, start_sync_routing_proc = true)
28
26
  @retry_count_write = 10
29
27
  @retry_count_read = 5
30
28
  @default_hash_name = 'roma'
31
29
 
32
30
  if plugin_modules
33
- plugin_modules.each do|plugin|
31
+ plugin_modules.each do |plugin|
34
32
  self.extend plugin
35
33
  end
36
34
  end
37
35
 
38
36
  init_sender
39
- update_rttable(ini_nodes.map{|n| n.sub(':','_')})
37
+ update_rttable(ini_nodes.map { |n| n.sub(':', '_') })
40
38
  init_sync_routing_proc if start_sync_routing_proc
41
39
  end
42
40
 
43
41
  def init_sync_routing_proc
44
- Thread.new {
42
+ Thread.new do
45
43
  begin
46
- loop {
44
+ loop do
47
45
  sleep 10
48
46
  update_rttable
49
- }
47
+ end
50
48
  rescue => e
51
49
  puts "#{e}\n#{$@}"
52
50
  end
53
- }
51
+ end
54
52
  end
55
53
  private :init_sync_routing_proc
56
54
 
@@ -377,9 +375,8 @@ module Roma
377
375
  ret.to_i
378
376
  end
379
377
 
380
- def stats
381
- raise RuntimeError.new("Unsupported yet") # TODO
382
- @sender.send_stats_command
378
+ def stats(filter: "", node: @rttable.nodes.first)
379
+ @sender.send_stats_command(filter, node)
383
380
  end
384
381
 
385
382
  def version
@@ -1,30 +1,29 @@
1
1
  require 'timeout'
2
2
  require 'yaml'
3
3
  require 'roma/client/con_pool'
4
+ require 'roma/client/stats'
4
5
 
5
6
  module Roma
6
7
  module Client
7
-
8
8
  class Sender
9
-
10
9
  def initialize
11
10
  end
12
11
 
13
12
  def send_route_mklhash_command(node_id)
14
- timeout(1){
13
+ timeout(1) do
15
14
  conn = ConPool.instance.get_connection(node_id)
16
15
  conn.write "mklhash 0\r\n"
17
16
  ret = conn.gets
18
17
  ConPool.instance.return_connection(node_id, conn)
19
18
  return ret.chomp if ret
20
- }
21
- rescue =>e
19
+ end
20
+ rescue => e
22
21
  STDERR.puts "#{node_id} #{e.inspect}"
23
22
  return nil
24
23
  end
25
24
 
26
25
  def send_routedump_command(node_id)
27
- timeout(1){
26
+ timeout(1) do
28
27
  buf = RUBY_VERSION.split('.')
29
28
  if buf[0].to_i == 1 && buf[1].to_i == 8
30
29
  return send_routedump_yaml_command(node_id)
@@ -47,8 +46,8 @@ module Roma
47
46
  rd = Marshal.load(routes)
48
47
  ConPool.instance.return_connection(node_id, conn)
49
48
  return rd
50
- }
51
- rescue =>e
49
+ end
50
+ rescue => e
52
51
  STDERR.puts "#{node_id} #{e.inspect}"
53
52
  nil
54
53
  end
@@ -58,17 +57,29 @@ module Roma
58
57
  conn.write "routingdump yaml\r\n"
59
58
 
60
59
  yaml = ''
61
- while( (line = conn.gets) != "END\r\n" )
60
+ while ((line = conn.gets) != "END\r\n")
62
61
  yaml << line
63
62
  end
64
63
 
65
64
  rd = YAML.load(yaml)
66
65
  ConPool.instance.return_connection(node_id, conn)
67
- return rd
66
+ rd
68
67
  end
69
68
 
70
- def send_stats_command
71
- # TODO
69
+ def send_stats_command(filter, node_id)
70
+ conn = ConPool.instance.get_connection(node_id)
71
+ cmd = 'stats'
72
+ cmd += " #{filter}" if filter
73
+ conn.write "#{cmd}\r\n"
74
+
75
+ stats_str = ''
76
+ while ((line = conn.gets) != "END\r\n")
77
+ stats_str << line
78
+ end
79
+
80
+ stats = Roma::Client::Stats.new(stats_str)
81
+ ConPool.instance.return_connection(node_id, conn)
82
+ stats
72
83
  end
73
84
 
74
85
  def send_version_command(ap)
@@ -76,8 +87,8 @@ module Roma
76
87
  conn.write("version\r\n")
77
88
  res = conn.gets.chomp
78
89
  ConPool.instance.return_connection(ap, conn)
79
- raise unless res
80
- return res
90
+ fail unless res
91
+ res
81
92
  end
82
93
 
83
94
  def send_verbosity_command(ap)
@@ -88,7 +99,7 @@ module Roma
88
99
 
89
100
  def send_command(nid, cmd, value = nil, receiver = :oneline_receiver)
90
101
  con = ConPool.instance.get_connection(nid)
91
- raise unless con
102
+ fail unless con
92
103
  if value
93
104
  con.write "#{cmd}\r\n#{value}\r\n"
94
105
  else
@@ -97,8 +108,8 @@ module Roma
97
108
  ret = send(receiver, con)
98
109
  ConPool.instance.return_connection(nid, con)
99
110
  if ret && ret.instance_of?(String) &&
100
- (ret =~ /^SERVER_ERROR/ || ret =~ /^CLIENT_ERROR/)
101
- raise ret
111
+ (ret =~ /^SERVER_ERROR/ || ret =~ /^CLIENT_ERROR/)
112
+ fail ret
102
113
  end
103
114
  ret
104
115
  end
@@ -107,7 +118,7 @@ module Roma
107
118
 
108
119
  def oneline_receiver(con)
109
120
  ret = con.gets
110
- raise "connection closed" if ret.nil?
121
+ fail 'connection closed' if ret.nil?
111
122
  ret.chomp
112
123
  end
113
124
 
@@ -160,7 +171,6 @@ module Roma
160
171
  end
161
172
  ret
162
173
  end
163
-
164
174
  end
165
175
  end
166
176
  end
@@ -0,0 +1,17 @@
1
+ module Roma
2
+ module Client
3
+ # TODO: Implement accessors and return values with correct type
4
+ # Now: client.stats["routing.redundant"] #=> "2"
5
+ # Better: client.stats.routing.redundant #=> 2
6
+ class Stats < Hash
7
+ def initialize(stats_str)
8
+ stats_str.each_line do |line|
9
+ line =~ /^(.+?)\s(.+)/
10
+ key = Regexp.last_match(1)
11
+ value = Regexp.last_match(2).chomp
12
+ self[key] = value
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,21 +1,20 @@
1
- # -*- coding: utf-8 -*-
2
1
  #
3
2
  # = roma/client/version.rb
4
3
  # This file is derived from roma client.
5
4
  #
6
5
  module Roma #:nodoc:
7
- module Client #:nodoc:
8
- # == What Is This Library?
9
- # ROMA client version info.
10
- #
11
- module VERSION
12
- MAJOR = 0
6
+ module Client #:nodoc:
7
+ # == What Is This Library?
8
+ # ROMA client version info.
9
+ #
10
+ module VERSION
11
+ MAJOR = 0
13
12
 
14
- MINOR = 4
13
+ MINOR = 4
15
14
 
16
- TINY = 2
15
+ TINY = 3
17
16
 
18
- STRING = [MAJOR, MINOR, TINY].join('.')
19
- end
17
+ STRING = [MAJOR, MINOR, TINY].join('.')
20
18
  end
19
+ end
21
20
  end
@@ -1,44 +1,42 @@
1
1
  require File.expand_path(File.join('..', '..', 'spec_helper'), File.dirname(__FILE__))
2
2
 
3
3
  describe Roma::Client::ClientPool do
4
+ before(:all) do
5
+ start_roma
6
+ end
7
+
8
+ after(:all) do
9
+ stop_roma
10
+ end
11
+
4
12
  def get_nodes
5
- ['127.0.0.1:12001', '127.0.0.1:12002']
13
+ DEFAULT_PORTS.map { |port| "#{DEFAULT_HOST}:#{port}" }
6
14
  end
7
15
 
8
- context "Singleton" do
16
+ context 'Singleton' do
9
17
  subject { Roma::Client::ClientPool.instance(:test) }
10
- it {
11
- expect(subject.class).to eq(Roma::Client::ClientPool)
12
- }
13
-
14
- it {
15
- expect(subject).to be_equal Roma::Client::ClientPool.instance(:test)
16
- }
17
-
18
- it {
19
- expect(subject).not_to be_equal Roma::Client::ClientPool.instance(:test2)
20
- }
21
-
22
- it {
23
- expect {
24
- Roma::Client::ClientPool.new
25
- }.to raise_error(NoMethodError,
26
- "private method `new' called for Roma::Client::ClientPool:Class")
27
- }
18
+ it { expect(subject.class).to eq(Roma::Client::ClientPool) }
19
+
20
+ it { expect(subject).to be_equal Roma::Client::ClientPool.instance(:test) }
21
+
22
+ it { expect(subject).not_to be_equal Roma::Client::ClientPool.instance(:test2) }
23
+
24
+ it do
25
+ expect { Roma::Client::ClientPool.new }.to raise_error(NoMethodError,
26
+ "private method `new' called for Roma::Client::ClientPool:Class")
27
+ end
28
28
  end
29
29
 
30
- context "max pool size of default" do
31
- subject{ Roma::Client::ClientPool.instance(:test) }
30
+ context 'max pool size of default' do
31
+ subject { Roma::Client::ClientPool.instance(:test) }
32
32
 
33
33
  describe '#max_pool_size' do
34
34
  subject { super().max_pool_size }
35
- it {
36
- is_expected.to eq(1)
37
- }
35
+ it { is_expected.to eq(1) }
38
36
  end
39
37
  end
40
38
 
41
- context "set max pool size " do
39
+ context 'set max pool size ' do
42
40
  it do
43
41
  pool = Roma::Client::ClientPool.instance(:test)
44
42
  expect(pool.max_pool_size).to eq(1)
@@ -50,7 +48,7 @@ describe Roma::Client::ClientPool do
50
48
  end
51
49
  end
52
50
 
53
- context "servers default" do
51
+ context 'servers default' do
54
52
  subject { Roma::Client::ClientPool.instance(:test) }
55
53
 
56
54
  describe '#servers' do
@@ -59,8 +57,8 @@ describe Roma::Client::ClientPool do
59
57
  end
60
58
  end
61
59
 
62
- context "servers set" do
63
- it {
60
+ context 'servers set' do
61
+ it do
64
62
  pool = Roma::Client::ClientPool.instance(:test_servers_set)
65
63
  expect(pool.servers).to be_nil
66
64
  nodes = get_nodes
@@ -68,35 +66,34 @@ describe Roma::Client::ClientPool do
68
66
  expect(pool.servers).to eq(nodes)
69
67
 
70
68
  expect(Roma::Client::ClientPool.instance(:test_ini_nodes_set2).servers).to be_nil
71
- }
69
+ end
72
70
  end
73
71
 
74
- context "client" do
72
+ context 'client' do
75
73
  subject do
76
74
  pool = Roma::Client::ClientPool.instance(:test_client)
77
75
  pool.servers = get_nodes
78
76
  pool
79
77
  end
80
78
 
81
- it { skip 'TODO: startup or mock roma server'}
82
79
  it { expect(subject.pool_count).to eq(0) }
83
- it {
80
+ it do
84
81
  client = subject.client
85
82
  expect(client.class).to eq(Roma::Client::RomaClient)
86
83
  subject.push_client(client)
87
84
  expect(subject.pool_count).to eq(1)
88
- }
89
- it { skip "TODO: check nodes" }
85
+ end
86
+ it { expect(subject.servers).to eq(get_nodes) }
90
87
  end
91
88
 
92
- context "client multi pool" do
89
+ context 'client multi pool' do
93
90
  subject do
94
91
  pool = Roma::Client::ClientPool.instance(:test_client2)
95
92
  pool.servers = get_nodes
96
93
  pool
97
94
  end
98
95
 
99
- it {
96
+ it do
100
97
  expect(subject.pool_count).to eq(0)
101
98
  client = subject.client
102
99
  expect(client).not_to be_nil
@@ -112,23 +109,23 @@ describe Roma::Client::ClientPool do
112
109
 
113
110
  expect(client).to be_equal subject.client
114
111
  expect(subject.pool_count).to eq(0)
115
- }
112
+ end
116
113
  end
117
114
 
118
- context "plugin modules" do
115
+ context 'plugin modules' do
119
116
  module TestPlugin
120
117
  def test_plugin
121
- "test_plugin"
118
+ 'test_plugin'
122
119
  end
123
120
  end
124
121
 
125
122
  module TestPlugin2
126
123
  def test_plugin2
127
- "test_plugin2"
124
+ 'test_plugin2'
128
125
  end
129
126
  end
130
127
 
131
- it {
128
+ it do
132
129
  pool = Roma::Client::ClientPool.instance(:pm_test)
133
130
  expect(pool.plugin_modules).to be_nil
134
131
 
@@ -136,9 +133,9 @@ describe Roma::Client::ClientPool do
136
133
  expect(pool.plugin_modules).not_to be_nil
137
134
  expect(pool.plugin_modules.size).to eq(1)
138
135
  pool.plugin_modules[0] == TestPlugin
139
- }
136
+ end
140
137
 
141
- it {
138
+ it do
142
139
  pool = Roma::Client::ClientPool.instance(:pms_test)
143
140
  expect(pool.plugin_modules).to be_nil
144
141
 
@@ -146,9 +143,9 @@ describe Roma::Client::ClientPool do
146
143
  expect(pool.plugin_modules.size).to eq(2)
147
144
  pool.plugin_modules[0] == TestPlugin
148
145
  pool.plugin_modules[1] == TestPlugin2
149
- }
146
+ end
150
147
 
151
- it {
148
+ it do
152
149
  pool = Roma::Client::ClientPool.instance(:pms_test2)
153
150
  pool.servers = get_nodes
154
151
  expect(pool.plugin_modules).to be_nil
@@ -156,31 +153,29 @@ describe Roma::Client::ClientPool do
156
153
  pool.plugin_modules = [TestPlugin, TestPlugin2]
157
154
  client = pool.client
158
155
  expect(client).not_to be_nil
159
- expect(client.test_plugin).to eq("test_plugin")
160
- expect(client.test_plugin2).to eq("test_plugin2")
161
- }
156
+ expect(client.test_plugin).to eq('test_plugin')
157
+ expect(client.test_plugin2).to eq('test_plugin2')
158
+ end
162
159
  end
163
160
 
164
- context "default type" do
161
+ context 'default type' do
165
162
  subject { Roma::Client::ClientPool.instance }
166
163
  it { is_expected.not_to be_nil }
167
164
  it { expect(subject.class).to eq(Roma::Client::ClientPool) }
168
165
  it { expect(subject).to be_equal Roma::Client::ClientPool.instance(:default) }
169
166
  end
170
167
 
171
- context "support hash name" do
172
- after(:all) {
173
- Roma::Client::ClientPool.instance.default_hash_name = 'roma'
174
- }
168
+ context 'support hash name' do
169
+ after(:all) { Roma::Client::ClientPool.instance.default_hash_name = 'roma' }
175
170
 
176
- subject {
171
+ subject do
177
172
  pool = Roma::Client::ClientPool.instance
178
173
  pool.servers = get_nodes
179
174
  pool
180
- }
175
+ end
181
176
 
182
177
  it { expect(subject.default_hash_name).to eq('roma') }
183
- it {
178
+ it do
184
179
  subject.default_hash_name = 'new_name'
185
180
  expect(subject.default_hash_name).to eq('new_name')
186
181
  expect(Roma::Client::ClientPool.instance.default_hash_name).to eq('new_name')
@@ -188,17 +183,17 @@ describe Roma::Client::ClientPool do
188
183
 
189
184
  client = subject.client
190
185
  expect(client.default_hash_name).to eq('new_name')
191
- }
186
+ end
192
187
  end
193
188
 
194
- context "release" do
195
- subject {
189
+ context 'release' do
190
+ subject do
196
191
  pool = Roma::Client::ClientPool.instance(:release_test)
197
192
  pool.servers = get_nodes
198
193
  pool
199
- }
194
+ end
200
195
 
201
- it {
196
+ it do
202
197
  expect(subject.pool_count).to eq(0)
203
198
  subject.client do |client|
204
199
  end
@@ -206,48 +201,48 @@ describe Roma::Client::ClientPool do
206
201
  expect(subject.pool_count).to eq(1)
207
202
  expect(subject.release).to be_truthy
208
203
  expect(subject.pool_count).to eq(0)
209
- }
204
+ end
210
205
  end
211
206
 
212
- context "client block" do
207
+ context 'client block' do
213
208
  before(:each) do
214
209
  pool = Roma::Client::ClientPool.instance(:client_block)
215
210
  pool.release
216
211
  end
217
212
 
218
- subject {
213
+ subject do
219
214
  pool = Roma::Client::ClientPool.instance(:client_block)
220
215
  pool.servers = get_nodes
221
216
  pool
222
- }
217
+ end
223
218
 
224
- it "use block"do
219
+ it 'use block'do
225
220
  expect(subject.pool_count).to eq(0)
226
221
  subject.client do |client|
227
- expect(client.set("test", "value")).to eq("STORED")
222
+ expect(client.set('test', 'value')).to eq('STORED')
228
223
  end
229
224
  expect(subject.pool_count).to eq(1)
230
225
  end
231
226
 
232
- it "raise exception in block, but pool certainly" do
227
+ it 'raise exception in block, but pool certainly' do
233
228
  expect(subject.pool_count).to eq(0)
234
229
  subject.client do |client|
235
- expect(client.set("test", "value")).to eq("STORED")
230
+ expect(client.set('test', 'value')).to eq('STORED')
236
231
  end
237
232
  expect(subject.pool_count).to eq(1)
238
233
 
239
- expect {
234
+ expect do
240
235
  subject.client do |client|
241
- raise "test error"
236
+ raise 'test error'
242
237
  end
243
- }.to raise_error RuntimeError, "test error"
238
+ end.to raise_error RuntimeError, 'test error'
244
239
 
245
240
  expect(subject.pool_count).to eq(1)
246
241
  end
247
242
  end
248
243
 
249
- context "start sync routing proc" do
250
- it {
244
+ context 'start sync routing proc' do
245
+ it do
251
246
  pool = Roma::Client::ClientPool.instance(:sync_test)
252
247
  pool.servers = get_nodes
253
248
  old_thread_count = Thread.list.length
@@ -256,9 +251,9 @@ describe Roma::Client::ClientPool do
256
251
 
257
252
  expect(pool.pool_count).to eq(1)
258
253
  expect(Thread.list.length).to eq(old_thread_count + 1)
259
- }
254
+ end
260
255
 
261
- it {
256
+ it do
262
257
  pool = Roma::Client::ClientPool.instance(:no_sync_test)
263
258
  pool.servers = get_nodes
264
259
  pool.start_sync_routing_proc = false
@@ -268,11 +263,11 @@ describe Roma::Client::ClientPool do
268
263
 
269
264
  expect(pool.pool_count).to eq(1)
270
265
  expect(Thread.list.length).to eq(old_thread_count)
271
- }
266
+ end
272
267
  end
273
268
 
274
- context "release all" do
275
- it {
269
+ context 'release all' do
270
+ it do
276
271
  pool = Roma::Client::ClientPool.instance(:release_all_1)
277
272
  pool.servers = get_nodes
278
273
  pool.client do |c|
@@ -292,7 +287,6 @@ describe Roma::Client::ClientPool do
292
287
 
293
288
  expect(Roma::Client::ClientPool.instance(:release_all_1).servers).to eq(get_nodes)
294
289
  expect(Roma::Client::ClientPool.instance(:release_all_2).servers).to eq(get_nodes)
295
- }
290
+ end
296
291
  end
297
292
  end
298
-
@@ -0,0 +1,63 @@
1
+ require File.expand_path(File.join('..', '..', 'spec_helper'), File.dirname(__FILE__))
2
+
3
+ describe Roma::Client::Stats do
4
+ before(:all) do
5
+ start_roma
6
+ nodes = DEFAULT_PORTS.map { |port| "#{DEFAULT_HOST}:#{port}" }
7
+ @client = Roma::Client::RomaClient.new(nodes)
8
+ @stats = @client.stats
9
+ end
10
+
11
+ after(:all) do
12
+ stop_roma
13
+ end
14
+
15
+ context 'first level' do
16
+ it 'accessible to version' do
17
+ expect(@stats['version']).to match(/\d+\.\d+\.\d+.*/)
18
+ end
19
+ end
20
+
21
+ context 'second level' do
22
+ it 'accessible to routing.redundant' do
23
+ expect(@stats['routing.redundant']).to eq('2')
24
+ end
25
+ end
26
+
27
+ context 'third level' do
28
+ it 'accessible to routing.nodes.length' do
29
+ expect(@stats['routing.vnodes.length']).to eq('512')
30
+ end
31
+ end
32
+
33
+ context 'filter argument' do
34
+ it 'responce only stats.run_recover' do
35
+ keyword = 'stats.run_recover'
36
+ stat = @client.stats(filter: keyword)
37
+ expect(stat.keys.size).to eq(1)
38
+ expect(stat[keyword]).to eq('false')
39
+ end
40
+ end
41
+
42
+ context 'node argument' do
43
+ it 'responce from accessed port' do
44
+ DEFAULT_PORTS.each do |port|
45
+ stat = @client.stats(node: "#{DEFAULT_HOST}:#{port}")
46
+ expect(stat['stats.address']).to eq(DEFAULT_HOST)
47
+ expect(stat['stats.port']).to eq(port)
48
+ end
49
+ end
50
+ end
51
+
52
+ context 'filter and node arguments' do
53
+ it 'responce only stats.address and stats.port from accessed port' do
54
+ DEFAULT_PORTS.each do |port|
55
+ keywords = %w(address port)
56
+ stat = @client.stats(filter: keywords.join('|'), node: "#{DEFAULT_HOST}:#{port}")
57
+ expect(stat.keys.size).to eq(2)
58
+ expect(stat['stats.address']).to eq(DEFAULT_HOST)
59
+ expect(stat['stats.port']).to eq(port)
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  require File.expand_path(File.join('..', '..', 'spec_helper'), File.dirname(__FILE__))
3
2
 
4
3
  describe Roma::Client::VERSION do
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,39 @@
1
- # -*- coding: utf-8 -*-
2
1
  require 'rspec'
2
+ require 'roma/romad'
3
3
 
4
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- Dir[File.dirname(__FILE__) + "/supports/**/*.rb"].each {|f| require f}
4
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ Dir[File.dirname(__FILE__) + '/supports/**/*.rb'].each { |f| require f }
6
6
 
7
7
  require 'roma-client'
8
8
 
9
- RSpec.configure do |config|
10
- config.mock_with :rr
9
+ DEFAULT_HOST = '127.0.0.1'
10
+ DEFAULT_PORTS = %w(12001 12002)
11
+ SHELL_LOG_PATH = 'roma_spec_outputs.log'
12
+
13
+ def start_roma(host: DEFAULT_HOST, ports: DEFAULT_PORTS)
14
+ nodes = ports.map { |port| "#{host}_#{port}" }
15
+
16
+ nodes.each do |node|
17
+ FileUtils.rm(Dir.glob(["#{node}.log*", "#{node}.route*"]))
18
+ end
19
+
20
+ system("mkroute #{nodes.join(' ')} --replication_in_host >> #{SHELL_LOG_PATH} 2>&1")
21
+
22
+ ports.each do |port|
23
+ system("romad #{host} -p #{port} -d --replication_in_host --disabled_cmd_protect >> #{SHELL_LOG_PATH} 2>&1")
24
+ end
11
25
  end
12
26
 
27
+ def stop_roma(host: DEFAULT_HOST, port: DEFAULT_PORTS[0])
28
+ conn = Roma::Messaging::ConPool.instance.get_connection("#{host}_#{port}")
29
+ if conn
30
+ conn.write "balse\r\n"
31
+ conn.gets
32
+ conn.write "yes\r\n"
33
+ conn.gets
34
+ conn.close
35
+ end
36
+ Roma::Client::ConPool.instance.close_all
37
+ rescue => e
38
+ puts "#{e} #{ $ERROR_POSITION}"
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roma-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muga Nishizawa
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-31 00:00:00.000000000 Z
12
+ date: 2015-08-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -40,7 +40,7 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
- name: rr
43
+ name: rdoc
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
@@ -54,7 +54,7 @@ dependencies:
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: rdoc
57
+ name: roma
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ">="
@@ -98,9 +98,11 @@ files:
98
98
  - lib/roma/client/rlogger.rb
99
99
  - lib/roma/client/routing/routing_data.rb
100
100
  - lib/roma/client/sender.rb
101
+ - lib/roma/client/stats.rb
101
102
  - lib/roma/client/tools/showbalance.rb
102
103
  - lib/roma/client/version.rb
103
104
  - spec/roma/client/client_pool_spec.rb
105
+ - spec/roma/client/stats_spec.rb
104
106
  - spec/roma/client/version_spec.rb
105
107
  - spec/spec_helper.rb
106
108
  homepage: http://roma-kvs.org/