roma-client 0.4.4 → 0.4.5

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 (87) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +22 -15
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +34 -18
  5. data/README.md +4 -0
  6. data/lib/roma/client/client_pool.rb +15 -25
  7. data/lib/roma/client/client_rttable.rb +1 -2
  8. data/lib/roma/client/tools/showbalance.rb +0 -1
  9. data/lib/roma/client/version.rb +1 -1
  10. data/spec/roma/client/client_pool_spec.rb +133 -173
  11. data/spec/spec_helper.rb +9 -0
  12. metadata +3 -79
  13. data/doc/CHANGELOG_md.html +0 -119
  14. data/doc/README_md.html +0 -161
  15. data/doc/Roma.html +0 -95
  16. data/doc/Roma/Client.html +0 -95
  17. data/doc/Roma/Client/ClientPool.html +0 -716
  18. data/doc/Roma/Client/ClientRoutingTable.html +0 -495
  19. data/doc/Roma/Client/ConPool.html +0 -484
  20. data/doc/Roma/Client/Plugin.html +0 -95
  21. data/doc/Roma/Client/Plugin/Alist.html +0 -1276
  22. data/doc/Roma/Client/Plugin/Map.html +0 -531
  23. data/doc/Roma/Client/Plugin/MapCount.html +0 -401
  24. data/doc/Roma/Client/Proxy.html +0 -95
  25. data/doc/Roma/Client/Proxy/ClientHandler.html +0 -273
  26. data/doc/Roma/Client/Proxy/Conpool.html +0 -394
  27. data/doc/Roma/Client/Proxy/Daemon.html +0 -305
  28. data/doc/Roma/Client/Proxy/RomaHandler.html +0 -217
  29. data/doc/Roma/Client/RomaClient.html +0 -1339
  30. data/doc/Roma/Client/Sender.html +0 -482
  31. data/doc/Roma/Client/Stats.html +0 -162
  32. data/doc/Roma/Client/VERSION.html +0 -141
  33. data/doc/Roma/Logging.html +0 -95
  34. data/doc/Roma/Logging/RLogger.html +0 -786
  35. data/doc/Roma/Logging/RLogger/ExtLogDev.html +0 -159
  36. data/doc/Roma/Logging/RLogger/ExtShiftAge.html +0 -95
  37. data/doc/Roma/Logging/RLogger/ExtTrace.html +0 -109
  38. data/doc/Roma/Logging/RLogger/Severity.html +0 -139
  39. data/doc/Roma/Routing.html +0 -95
  40. data/doc/Roma/Routing/RoutingData.html +0 -912
  41. data/doc/Roma/Routing/RoutingData/RandomNodeListMaker.html +0 -311
  42. data/doc/created.rid +0 -20
  43. data/doc/css/fonts.css +0 -167
  44. data/doc/css/rdoc.css +0 -590
  45. data/doc/fonts/Lato-Light.ttf +0 -0
  46. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  47. data/doc/fonts/Lato-Regular.ttf +0 -0
  48. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  49. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  50. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  51. data/doc/images/add.png +0 -0
  52. data/doc/images/arrow_up.png +0 -0
  53. data/doc/images/brick.png +0 -0
  54. data/doc/images/brick_link.png +0 -0
  55. data/doc/images/bug.png +0 -0
  56. data/doc/images/bullet_black.png +0 -0
  57. data/doc/images/bullet_toggle_minus.png +0 -0
  58. data/doc/images/bullet_toggle_plus.png +0 -0
  59. data/doc/images/date.png +0 -0
  60. data/doc/images/delete.png +0 -0
  61. data/doc/images/find.png +0 -0
  62. data/doc/images/loadingAnimation.gif +0 -0
  63. data/doc/images/macFFBgHack.png +0 -0
  64. data/doc/images/package.png +0 -0
  65. data/doc/images/page_green.png +0 -0
  66. data/doc/images/page_white_text.png +0 -0
  67. data/doc/images/page_white_width.png +0 -0
  68. data/doc/images/plugin.png +0 -0
  69. data/doc/images/ruby.png +0 -0
  70. data/doc/images/tag_blue.png +0 -0
  71. data/doc/images/tag_green.png +0 -0
  72. data/doc/images/transparent.png +0 -0
  73. data/doc/images/wrench.png +0 -0
  74. data/doc/images/wrench_orange.png +0 -0
  75. data/doc/images/zoom.png +0 -0
  76. data/doc/index.html +0 -210
  77. data/doc/js/darkfish.js +0 -161
  78. data/doc/js/jquery.js +0 -4
  79. data/doc/js/navigation.js +0 -142
  80. data/doc/js/navigation.js.gz +0 -0
  81. data/doc/js/search.js +0 -109
  82. data/doc/js/search_index.js +0 -1
  83. data/doc/js/search_index.js.gz +0 -0
  84. data/doc/js/searcher.js +0 -228
  85. data/doc/js/searcher.js.gz +0 -0
  86. data/doc/table_of_contents.html +0 -972
  87. data/lib/roma/client/routing/routing_data.rb +0 -241
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3882ceb6dec6a018d78a0f23d25b6fc5c2f2596a
4
- data.tar.gz: 3cd22d1e1be6fd376547c32c4505152cb7dfe48b
2
+ SHA256:
3
+ metadata.gz: cb5d75ac6fd6ae1afe804171d6e9d4b64bb734c6245e91ae89349ac09aa1d6ed
4
+ data.tar.gz: 5b62386df9e8e179deed3b740c5982ea43d30638b53456e6b1153979a20ae258
5
5
  SHA512:
6
- metadata.gz: 1502d199fbaa1018cb3dd083c4b7ae0f3b6800ce81fc7a51f59d0ad3b897fbcbeb6d6af5ebd101888c33b05ae73ed9ef1b0d7136632bcafc6590088c87d32ce6
7
- data.tar.gz: 446d8fd9ea5021e539da7743b579ca6083bc7597688b61e208e8b9775daf4ecdd45abbebaae15189ccf7e19f585c9f737bed47bf10fd767dad3df42dd6e93c04
6
+ metadata.gz: ce830cf733b74d7daa035e7c38e6eaea8dc345ccdb905fafa4e02436b0d9e4eba24d717de282836a128829c0f139eefbca32997978ee9424ccaf9d435fa033b9
7
+ data.tar.gz: dc7e4c89e63d3bf73d43ed5064997c621b25b00b6e80537209486c1260d6c133ae05b2bf5a03e7a0a542679694ea7c2a20af2caea32f6124202e9059285f3cbd
@@ -1,22 +1,29 @@
1
- # 0.4.4 (Aug 23 2016)
1
+ # CHANGELOG
2
2
 
3
- * Started use Travis CI [#8](https://github.com/roma/roma-ruby-client/pull/8)
4
- * Replace the deprecated method `Object.timeout` with `Timeout.timeout` [#9](https://github.com/roma/roma-ruby-client/pull/9)
3
+ ## 0.4.5 (Jun 17 2019)
5
4
 
6
- # 0.4.3 (Aug 19 2015)
5
+ - Remove RoutingData since it's not used [#16](https://github.com/roma/roma-ruby-client/pull/16)
6
+ - Remove dependencies on roma server from test [#15](https://github.com/roma/roma-ruby-client/pull/15)
7
7
 
8
- * Change interface of Stat object and refactoring [Hiroki Matsue] 7438faf
9
- * Add tests for argumetns of stats [Hiroki Matsue] 9939760
10
- * Refactor codes [Hiroki Matsue] 3d37030
11
- * Support stat command [Hiroki Matsue] 1d75694
8
+ ## 0.4.4 (Aug 23 2016)
12
9
 
13
- # 0.4.2 (Mar 31 2015)
10
+ - Started use Travis CI [#8](https://github.com/roma/roma-ruby-client/pull/8)
11
+ - Replace the deprecated method `Object.timeout` with `Timeout.timeout` [#9](https://github.com/roma/roma-ruby-client/pull/9)
14
12
 
15
- * Add gemspec and convert "should" to "expect" on rspec tests. [Hiroki Matsue] 4c7c465
16
- * modify to reproduce environment with Gemfile [tarr1124] 2205ed7
13
+ ## 0.4.3 (Aug 19 2015)
17
14
 
18
- # 0.4.1 (Feb 20 2012)
15
+ - Change interface of Stat object and refactoring [Hiroki Matsue] 7438faf
16
+ - Add tests for argumetns of stats [Hiroki Matsue] 9939760
17
+ - Refactor codes [Hiroki Matsue] 3d37030
18
+ - Support stat command [Hiroki Matsue] 1d75694
19
19
 
20
- * add client plugin files. [junji torii] caa2201
21
- * 0.4.0
22
- * support ClientPool
20
+ ## 0.4.2 (Mar 31 2015)
21
+
22
+ - Add gemspec and convert "should" to "expect" on rspec tests. [Hiroki Matsue] 4c7c465
23
+ - modify to reproduce environment with Gemfile [tarr1124] 2205ed7
24
+
25
+ ## 0.4.1 (Feb 20 2012)
26
+
27
+ - add client plugin files. [junji torii] caa2201
28
+ - 0.4.0
29
+ - support ClientPool
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ gem 'coveralls', require: nil
@@ -1,39 +1,55 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roma-client (0.4.4)
4
+ roma-client (0.4.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- diff-lcs (1.2.5)
9
+ coveralls (0.8.23)
10
+ json (>= 1.8, < 3)
11
+ simplecov (~> 0.16.1)
12
+ term-ansicolor (~> 1.3)
13
+ thor (>= 0.19.4, < 2.0)
14
+ tins (~> 1.6)
15
+ diff-lcs (1.3)
16
+ docile (1.3.2)
10
17
  eventmachine (1.0.9.1)
11
18
  jaro_winkler (1.3.7)
12
- json (1.8.3)
13
- rake (11.2.2)
14
- rdoc (4.2.2)
15
- json (~> 1.4)
19
+ json (2.2.0)
20
+ rake (12.3.2)
21
+ rdoc (6.1.1)
16
22
  roma (1.3.0)
17
23
  eventmachine (~> 1.0.0)
18
24
  jaro_winkler (~> 1.3.5)
19
- rspec (3.5.0)
20
- rspec-core (~> 3.5.0)
21
- rspec-expectations (~> 3.5.0)
22
- rspec-mocks (~> 3.5.0)
23
- rspec-core (3.5.2)
24
- rspec-support (~> 3.5.0)
25
- rspec-expectations (3.5.0)
25
+ rspec (3.8.0)
26
+ rspec-core (~> 3.8.0)
27
+ rspec-expectations (~> 3.8.0)
28
+ rspec-mocks (~> 3.8.0)
29
+ rspec-core (3.8.1)
30
+ rspec-support (~> 3.8.0)
31
+ rspec-expectations (3.8.4)
26
32
  diff-lcs (>= 1.2.0, < 2.0)
27
- rspec-support (~> 3.5.0)
28
- rspec-mocks (3.5.0)
33
+ rspec-support (~> 3.8.0)
34
+ rspec-mocks (3.8.1)
29
35
  diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.5.0)
31
- rspec-support (3.5.0)
36
+ rspec-support (~> 3.8.0)
37
+ rspec-support (3.8.2)
38
+ simplecov (0.16.1)
39
+ docile (~> 1.1)
40
+ json (>= 1.8, < 3)
41
+ simplecov-html (~> 0.10.0)
42
+ simplecov-html (0.10.2)
43
+ term-ansicolor (1.7.1)
44
+ tins (~> 1.0)
45
+ thor (0.20.3)
46
+ tins (1.20.3)
32
47
 
33
48
  PLATFORMS
34
49
  ruby
35
50
 
36
51
  DEPENDENCIES
52
+ coveralls
37
53
  rake
38
54
  rdoc
39
55
  roma
@@ -41,4 +57,4 @@ DEPENDENCIES
41
57
  rspec
42
58
 
43
59
  BUNDLED WITH
44
- 1.12.5
60
+ 2.0.1
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # ROMA Client for Ruby
2
2
 
3
+ [![Build Status](https://travis-ci.org/roma/roma-ruby-client.svg?branch=master)](https://travis-ci.org/roma/roma-ruby-client)
4
+ [![Gem Version](https://badge.fury.io/rb/roma-client.svg)](https://badge.fury.io/rb/roma-client)
5
+ [![Coverage Status](https://coveralls.io/repos/github/roma/roma-ruby-client/badge.svg?branch=master)](https://coveralls.io/github/roma/roma-ruby-client?branch=master)
6
+
3
7
  ROMA is one of the data storing systems for distributed key-value stores in Ruby.
4
8
  The gem `roma-client` is Ruby client to talk with ROMA severs.
5
9
 
@@ -17,24 +17,23 @@ module Roma
17
17
  attr_accessor :servers
18
18
  attr_accessor :default_hash_name
19
19
  attr_accessor :start_sync_routing_proc
20
-
21
- @@client_pools = {}
20
+ attr_accessor :max_pool_size
22
21
 
23
22
  # get ClientPool instance
24
23
  # type:: identifier for client groups.
25
24
  def self.instance(type = :default)
26
- @@client_pools[type] ||= new
27
- @@client_pools[type]
25
+ client_pools[type] ||= new
26
+ client_pools[type]
28
27
  end
29
28
 
30
29
  # get all pool
31
30
  def self.client_pools
32
- @@client_pools
31
+ @@client_pools ||= {}
33
32
  end
34
33
 
35
34
  # release all pool
36
35
  def self.release_all
37
- @@client_pools.each do |k,v|
36
+ client_pools.each do |k,v|
38
37
  v.release
39
38
  end
40
39
  end
@@ -46,21 +45,22 @@ module Roma
46
45
  def client
47
46
  c = nil
48
47
  if @clients.empty?
49
- client = Roma::Client::RomaClient.new(servers,
48
+ c = Roma::Client::RomaClient.new(servers,
50
49
  plugin_modules,
51
50
  start_sync_routing_proc)
52
- client.default_hash_name = default_hash_name
53
- c = client
51
+ c.default_hash_name = default_hash_name
54
52
  else
55
53
  c = @clients.pop
56
54
  end
57
55
 
58
- return c unless block_given?
59
-
60
- begin
61
- yield c
62
- ensure
63
- push_client(c)
56
+ if block_given?
57
+ begin
58
+ yield c
59
+ ensure
60
+ push_client(c)
61
+ end
62
+ else
63
+ return c
64
64
  end
65
65
  end
66
66
 
@@ -82,16 +82,6 @@ module Roma
82
82
  end
83
83
  end
84
84
 
85
- # get max pool size
86
- def max_pool_size
87
- @max_pool_size
88
- end
89
-
90
- # set max_pool_size
91
- def max_pool_size=(count)
92
- @max_pool_size = count
93
- end
94
-
95
85
  # get all clients
96
86
  def clients
97
87
  @clients
@@ -1,6 +1,5 @@
1
1
  require 'yaml'
2
2
  require 'digest/sha1'
3
- require 'roma/client/routing/routing_data'
4
3
 
5
4
  module Roma
6
5
  module Client
@@ -38,7 +37,7 @@ module Roma
38
37
  d & @search_mask
39
38
  end
40
39
 
41
- # Returns a node-is list at the vnode.
40
+ # Returns a node-is list at the vnode.
42
41
  # +vn+: vnode-id
43
42
  def search_nodes(vn)
44
43
  @rd.v_idx[vn].clone
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'roma/client/sender'
4
- require 'roma/client/routing/routing_data'
5
4
 
6
5
  if ARGV.length < 1
7
6
  STDERR.puts "usage:#{$0} node-id"
@@ -12,7 +12,7 @@ module Roma #:nodoc:
12
12
 
13
13
  MINOR = 4
14
14
 
15
- TINY = 4
15
+ TINY = 5
16
16
 
17
17
  STRING = [MAJOR, MINOR, TINY].join('.')
18
18
  end
@@ -1,127 +1,153 @@
1
- require File.expand_path(File.join('..', '..', 'spec_helper'), File.dirname(__FILE__))
1
+ require 'spec_helper'
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
+ let(:test_nodes) do
13
6
  DEFAULT_PORTS.map { |port| "#{DEFAULT_HOST}:#{port}" }
14
7
  end
15
8
 
16
9
  context 'Singleton' do
17
10
  subject { Roma::Client::ClientPool.instance(:test) }
18
- it { expect(subject.class).to eq(Roma::Client::ClientPool) }
19
11
 
12
+ it { expect(subject.class).to eq(Roma::Client::ClientPool) }
20
13
  it { expect(subject).to be_equal Roma::Client::ClientPool.instance(:test) }
21
-
22
14
  it { expect(subject).not_to be_equal Roma::Client::ClientPool.instance(:test2) }
23
-
24
15
  it do
25
16
  expect { Roma::Client::ClientPool.new }.to raise_error(NoMethodError,
26
17
  "private method `new' called for Roma::Client::ClientPool:Class")
27
18
  end
28
19
  end
29
20
 
30
- context 'max pool size of default' do
31
- subject { Roma::Client::ClientPool.instance(:test) }
21
+ describe '#max_pool_size' do
22
+ context 'max pool size of default' do
23
+ subject { Roma::Client::ClientPool.instance(:test) }
24
+
25
+ describe '#max_pool_size' do
26
+ subject { super().max_pool_size }
32
27
 
33
- describe '#max_pool_size' do
34
- subject { super().max_pool_size }
35
- it { is_expected.to eq(1) }
28
+ it { is_expected.to eq(1) }
29
+ end
36
30
  end
37
- end
38
31
 
39
- context 'set max pool size ' do
40
- it do
41
- pool = Roma::Client::ClientPool.instance(:test)
42
- expect(pool.max_pool_size).to eq(1)
43
- pool.max_pool_size = 3
44
- expect(pool.max_pool_size).to eq(3)
32
+ context 'set max pool size ' do
33
+ it do
34
+ pool = Roma::Client::ClientPool.instance(:test)
35
+ expect(pool.max_pool_size).to eq(1)
36
+ pool.max_pool_size = 3
37
+ expect(pool.max_pool_size).to eq(3)
45
38
 
46
- pool2 = Roma::Client::ClientPool.instance(:test2)
47
- expect(pool2.max_pool_size).to eq(1)
39
+ pool2 = Roma::Client::ClientPool.instance(:test2)
40
+ expect(pool2.max_pool_size).to eq(1)
41
+ end
48
42
  end
49
43
  end
50
44
 
51
- context 'servers default' do
52
- subject { Roma::Client::ClientPool.instance(:test) }
45
+ describe '#servers' do
46
+ subject { Roma::Client::ClientPool.instance(:test).servers }
53
47
 
54
- describe '#servers' do
55
- subject { super().servers }
56
- it { is_expected.to be_nil }
57
- end
58
- end
48
+ it { is_expected.to be_nil }
59
49
 
60
- context 'servers set' do
61
- it do
62
- pool = Roma::Client::ClientPool.instance(:test_servers_set)
63
- expect(pool.servers).to be_nil
64
- nodes = get_nodes
65
- pool.servers = nodes
66
- expect(pool.servers).to eq(nodes)
50
+ context 'servers set' do
51
+ it do
52
+ pool = Roma::Client::ClientPool.instance(:test_servers_set)
53
+ expect(pool.servers).to be_nil
54
+ nodes = test_nodes
55
+ pool.servers = nodes
56
+ expect(pool.servers).to eq(nodes)
67
57
 
68
- expect(Roma::Client::ClientPool.instance(:test_ini_nodes_set2).servers).to be_nil
58
+ expect(Roma::Client::ClientPool.instance(:test_ini_nodes_set2).servers).to be_nil
59
+ end
69
60
  end
70
61
  end
71
62
 
72
- context 'client' do
63
+ describe '#client' do
73
64
  subject do
74
65
  pool = Roma::Client::ClientPool.instance(:test_client)
75
- pool.servers = get_nodes
66
+ pool.max_pool_size = 1
67
+ pool.servers = test_nodes
76
68
  pool
77
69
  end
78
70
 
79
- it { expect(subject.pool_count).to eq(0) }
80
- it do
81
- client = subject.client
82
- expect(client.class).to eq(Roma::Client::RomaClient)
83
- subject.push_client(client)
84
- expect(subject.pool_count).to eq(1)
71
+ before do
72
+ subject.release
85
73
  end
86
- it { expect(subject.servers).to eq(get_nodes) }
87
- end
88
74
 
89
- context 'client multi pool' do
90
- subject do
91
- pool = Roma::Client::ClientPool.instance(:test_client2)
92
- pool.servers = get_nodes
93
- pool
75
+ context 'When the pool is empty' do
76
+ it 'should generate client instance' do
77
+ dummy_client = double(:client).as_null_object
78
+ expect(Roma::Client::RomaClient).to receive(:new).and_return(dummy_client)
79
+
80
+ subject.client
81
+ end
82
+
83
+ context 'When the pool is full' do
84
+ let(:pushed_client) { double('pushed_client') }
85
+ let(:ignored_client) { double('new dummy client to be ignored') }
86
+
87
+ before do
88
+ subject.push_client(pushed_client)
89
+ subject.push_client(ignored_client)
90
+ end
91
+
92
+ it 'the last pushed client is ignored' do
93
+ expect(subject.pool_count).to eq(1)
94
+ expect(subject.clients).to include(pushed_client)
95
+ expect(subject.clients).to_not include(ignored_client)
96
+ end
97
+ end
94
98
  end
95
99
 
96
- it do
97
- expect(subject.pool_count).to eq(0)
98
- client = subject.client
99
- expect(client).not_to be_nil
100
+ context 'client multi pool' do
101
+ subject do
102
+ pool = Roma::Client::ClientPool.instance(:test_client2)
103
+ pool.servers = test_nodes
104
+ pool
105
+ end
100
106
 
101
- client2 = subject.client
102
- expect(client2).not_to be_nil
107
+ it do
108
+ dummy_client = double(:client).as_null_object
109
+ expect(Roma::Client::RomaClient).to receive(:new).and_return(dummy_client).twice
103
110
 
104
- subject.push_client(client)
105
- expect(subject.pool_count).to eq(1)
111
+ expect(subject.pool_count).to eq(0)
112
+ client = subject.client
113
+ expect(client).not_to be_nil
106
114
 
107
- subject.push_client(client2)
108
- expect(subject.pool_count).to eq(1)
115
+ client2 = subject.client
116
+ expect(client2).not_to be_nil
109
117
 
110
- expect(client).to be_equal subject.client
111
- expect(subject.pool_count).to eq(0)
118
+ subject.push_client(client)
119
+ expect(subject.pool_count).to eq(1)
120
+
121
+ subject.push_client(client2)
122
+ expect(subject.pool_count).to eq(1)
123
+
124
+ expect(client).to be_equal subject.client
125
+ expect(subject.pool_count).to eq(0)
126
+ end
112
127
  end
113
- end
114
128
 
115
- context 'plugin modules' do
116
- module TestPlugin
117
- def test_plugin
118
- 'test_plugin'
129
+ context 'When block is given' do
130
+ it do
131
+ dummy_client = double(:client).as_null_object
132
+ expect(Roma::Client::RomaClient).to receive(:new).and_return(dummy_client)
133
+
134
+ expect { |b| subject.client(&b) }.to yield_with_args(dummy_client)
119
135
  end
120
136
  end
137
+ end
121
138
 
122
- module TestPlugin2
123
- def test_plugin2
124
- 'test_plugin2'
139
+ describe '#plugin_modules' do
140
+ before do
141
+ module TestPlugin
142
+ def test_plugin
143
+ 'test_plugin'
144
+ end
145
+ end
146
+
147
+ module TestPlugin2
148
+ def test_plugin2
149
+ 'test_plugin2'
150
+ end
125
151
  end
126
152
  end
127
153
 
@@ -132,34 +158,34 @@ describe Roma::Client::ClientPool do
132
158
  pool.add_plugin_module(TestPlugin)
133
159
  expect(pool.plugin_modules).not_to be_nil
134
160
  expect(pool.plugin_modules.size).to eq(1)
135
- pool.plugin_modules[0] == TestPlugin
161
+ expect(pool.plugin_modules[0]).to eq(TestPlugin)
136
162
  end
137
163
 
138
- it do
139
- pool = Roma::Client::ClientPool.instance(:pms_test)
140
- expect(pool.plugin_modules).to be_nil
164
+ context 'the pool has some plugin moudles' do
165
+ let(:pool) { Roma::Client::ClientPool.instance(:pms_test) }
141
166
 
142
- pool.plugin_modules = [TestPlugin, TestPlugin2]
143
- expect(pool.plugin_modules.size).to eq(2)
144
- pool.plugin_modules[0] == TestPlugin
145
- pool.plugin_modules[1] == TestPlugin2
146
- end
167
+ before do
168
+ pool.plugin_modules = [TestPlugin, TestPlugin2]
169
+ end
147
170
 
148
- it do
149
- pool = Roma::Client::ClientPool.instance(:pms_test2)
150
- pool.servers = get_nodes
151
- expect(pool.plugin_modules).to be_nil
171
+ it do
172
+ expect(pool.plugin_modules.size).to eq(2)
173
+ expect(pool.plugin_modules).to contain_exactly(TestPlugin, TestPlugin2)
174
+ end
175
+
176
+ it 'pool.client generates roma client with pool.plugin_modules' do
177
+ client = double('roma client').as_null_object
178
+ expect(Roma::Client::RomaClient).to receive(:new).
179
+ with(pool.servers, pool.plugin_modules, pool.start_sync_routing_proc).and_return(client)
152
180
 
153
- pool.plugin_modules = [TestPlugin, TestPlugin2]
154
- client = pool.client
155
- expect(client).not_to be_nil
156
- expect(client.test_plugin).to eq('test_plugin')
157
- expect(client.test_plugin2).to eq('test_plugin2')
181
+ pool.client
182
+ end
158
183
  end
159
184
  end
160
185
 
161
186
  context 'default type' do
162
187
  subject { Roma::Client::ClientPool.instance }
188
+
163
189
  it { is_expected.not_to be_nil }
164
190
  it { expect(subject.class).to eq(Roma::Client::ClientPool) }
165
191
  it { expect(subject).to be_equal Roma::Client::ClientPool.instance(:default) }
@@ -170,7 +196,7 @@ describe Roma::Client::ClientPool do
170
196
 
171
197
  subject do
172
198
  pool = Roma::Client::ClientPool.instance
173
- pool.servers = get_nodes
199
+ pool.servers = test_nodes
174
200
  pool
175
201
  end
176
202
 
@@ -181,112 +207,46 @@ describe Roma::Client::ClientPool do
181
207
  expect(Roma::Client::ClientPool.instance.default_hash_name).to eq('new_name')
182
208
  expect(Roma::Client::ClientPool.instance(:other).default_hash_name).to eq('roma')
183
209
 
184
- client = subject.client
185
- expect(client.default_hash_name).to eq('new_name')
210
+ client = double('roma client').as_null_object
211
+ expect(client).to receive(:default_hash_name=).with('new_name')
212
+ expect(Roma::Client::RomaClient).to receive(:new).and_return(client)
213
+ subject.client
186
214
  end
187
215
  end
188
216
 
189
217
  context 'release' do
190
218
  subject do
191
219
  pool = Roma::Client::ClientPool.instance(:release_test)
192
- pool.servers = get_nodes
220
+ pool.servers = test_nodes
193
221
  pool
194
222
  end
195
223
 
196
224
  it do
197
- expect(subject.pool_count).to eq(0)
198
- subject.client do |client|
199
- end
200
-
225
+ subject.push_client(double('dummy client'))
201
226
  expect(subject.pool_count).to eq(1)
202
227
  expect(subject.release).to be_truthy
203
228
  expect(subject.pool_count).to eq(0)
204
229
  end
205
230
  end
206
231
 
207
- context 'client block' do
208
- before(:each) do
209
- pool = Roma::Client::ClientPool.instance(:client_block)
210
- pool.release
211
- end
212
-
213
- subject do
214
- pool = Roma::Client::ClientPool.instance(:client_block)
215
- pool.servers = get_nodes
216
- pool
217
- end
218
-
219
- it 'use block'do
220
- expect(subject.pool_count).to eq(0)
221
- subject.client do |client|
222
- expect(client.set('test', 'value')).to eq('STORED')
223
- end
224
- expect(subject.pool_count).to eq(1)
225
- end
226
-
227
- it 'raise exception in block, but pool certainly' do
228
- expect(subject.pool_count).to eq(0)
229
- subject.client do |client|
230
- expect(client.set('test', 'value')).to eq('STORED')
231
- end
232
- expect(subject.pool_count).to eq(1)
233
-
234
- expect do
235
- subject.client do |client|
236
- raise 'test error'
237
- end
238
- end.to raise_error RuntimeError, 'test error'
239
-
240
- expect(subject.pool_count).to eq(1)
241
- end
242
- end
243
-
244
- context 'start sync routing proc' do
245
- it do
246
- pool = Roma::Client::ClientPool.instance(:sync_test)
247
- pool.servers = get_nodes
248
- old_thread_count = Thread.list.length
249
- pool.client do |c|
250
- end
251
-
252
- expect(pool.pool_count).to eq(1)
253
- expect(Thread.list.length).to eq(old_thread_count + 1)
254
- end
255
-
256
- it do
257
- pool = Roma::Client::ClientPool.instance(:no_sync_test)
258
- pool.servers = get_nodes
259
- pool.start_sync_routing_proc = false
260
- old_thread_count = Thread.list.length
261
- pool.client do |c|
262
- end
263
-
264
- expect(pool.pool_count).to eq(1)
265
- expect(Thread.list.length).to eq(old_thread_count)
266
- end
267
- end
268
-
269
232
  context 'release all' do
270
233
  it do
271
234
  pool = Roma::Client::ClientPool.instance(:release_all_1)
272
- pool.servers = get_nodes
273
- pool.client do |c|
274
- end
235
+ pool.servers = test_nodes
236
+ pool.push_client(double('dummy client 1'))
275
237
  expect(Roma::Client::ClientPool.instance(:release_all_1).pool_count).to eq(1)
276
238
 
277
239
  pool = Roma::Client::ClientPool.instance(:release_all_2)
278
- pool.servers = get_nodes
279
- pool.client do |c|
280
- end
240
+ pool.servers = test_nodes
241
+ pool.push_client(double('dummy client 1'))
281
242
  expect(pool.pool_count).to eq(1)
282
243
  expect(Roma::Client::ClientPool.instance(:release_all_2).pool_count).to eq(1)
283
244
 
284
245
  Roma::Client::ClientPool.release_all
285
246
  expect(Roma::Client::ClientPool.instance(:release_all_1).pool_count).to eq(0)
286
247
  expect(Roma::Client::ClientPool.instance(:release_all_2).pool_count).to eq(0)
287
-
288
- expect(Roma::Client::ClientPool.instance(:release_all_1).servers).to eq(get_nodes)
289
- expect(Roma::Client::ClientPool.instance(:release_all_2).servers).to eq(get_nodes)
248
+ expect(Roma::Client::ClientPool.instance(:release_all_1).servers).to eq(test_nodes)
249
+ expect(Roma::Client::ClientPool.instance(:release_all_2).servers).to eq(test_nodes)
290
250
  end
291
251
  end
292
252
  end