em-pg-client 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -168,6 +168,54 @@ describe 'em-synchrony-pg autoreconnect with on_autoreconnect' do
168
168
  EM.stop
169
169
  end
170
170
 
171
+ it "should execute on_connect before on_autoreconnect after server restart" do
172
+ @client.on_connect.should be_nil
173
+ run_on_connect = false
174
+ @client.on_connect = proc do |client, is_async, is_reset|
175
+ client.should be_an_instance_of PG::EM::Client
176
+ is_async.should be_true
177
+ is_reset.should be_true
178
+ client.query('SELECT pg_database_size(current_database());') {
179
+ run_on_connect = true
180
+ }
181
+ end
182
+ @client.on_autoreconnect = proc do |client, ex|
183
+ run_on_connect.should be_true
184
+ @on_autoreconnect.call(client, ex)
185
+ end
186
+ system($pgserver_cmd_stop).should be_true
187
+ system($pgserver_cmd_start).should be_true
188
+ @tested_proc.call
189
+ EM.stop
190
+ end
191
+
192
+ it "should skip on_autoreconnect when on_connect failed after server restart" do
193
+ run_on_connect = false
194
+ run_on_autoreconnect = false
195
+ @client.on_connect = proc do |client, is_async, is_reset|
196
+ client.should be_an_instance_of PG::EM::Client
197
+ is_async.should be_true
198
+ is_reset.should be_true
199
+ begin
200
+ client.query('SELLECT 1;')
201
+ ensure
202
+ run_on_connect = true
203
+ end
204
+ end
205
+ @client.on_autoreconnect = proc do |client, ex|
206
+ run_on_autoreconnect = true
207
+ end
208
+ system($pgserver_cmd_stop).should be_true
209
+ system($pgserver_cmd_start).should be_true
210
+ expect do
211
+ @client.exec_prepared('get_db_size')
212
+ end.to raise_error PG::SyntaxError
213
+ @client.status.should be PG::CONNECTION_OK
214
+ run_on_connect.should be_true
215
+ run_on_autoreconnect.should be_false
216
+ EM.stop
217
+ end
218
+
171
219
  before(:all) do
172
220
  @tested_proc = proc do
173
221
  @client.exec_prepared('get_db_size') do |result|
@@ -21,6 +21,7 @@ describe 'em-pg-client options' do
21
21
  :@async_autoreconnect => true,
22
22
  :@connect_timeout => 10,
23
23
  :@query_timeout=>1,
24
+ :@on_connect=>nil,
24
25
  :@on_autoreconnect=>nil,
25
26
  :@async_command_aborted=>false} }
26
27
 
@@ -78,7 +79,7 @@ describe 'em-pg-client options' do
78
79
  end.to raise_error(ArgumentError, /must respond to/)
79
80
 
80
81
  expect do
81
- subject.parse_async_options [on_autoreconnect: Object.new]
82
+ subject.parse_async_options ['on_autoreconnect' => Object.new]
82
83
  end.to raise_error(ArgumentError, /must respond to/)
83
84
 
84
85
  options = subject.parse_async_options [on_autoreconnect: callback]
@@ -86,10 +87,47 @@ describe 'em-pg-client options' do
86
87
  options[:@on_autoreconnect].should be callback
87
88
  end
88
89
 
90
+ it "should set only callable on_connect" do
91
+ expect do
92
+ subject.parse_async_options [on_connect: true]
93
+ end.to raise_error(ArgumentError, /must respond to/)
94
+
95
+ expect do
96
+ subject.parse_async_options ['on_connect' => Object.new]
97
+ end.to raise_error(ArgumentError, /must respond to/)
98
+
99
+ options = subject.parse_async_options [on_connect: callback]
100
+ options.should be_an_instance_of Hash
101
+ options[:@on_connect].should be callback
102
+ end
103
+
89
104
  it "should raise error with obsolete argument" do
90
105
  expect do
91
106
  subject.parse_async_options [on_reconnect: true]
92
107
  end.to raise_error ArgumentError
93
108
  end
94
109
 
110
+ it "should set on_* options with a writer or a block" do
111
+ async_args = subject.parse_async_options([])
112
+ client = subject.allocate
113
+ client.instance_eval {
114
+ async_args.each {|k, v| instance_variable_set(k, v) }
115
+ }
116
+ client.should be_an_instance_of subject
117
+ client.on_connect.should be_nil
118
+ client.on_autoreconnect.should be_nil
119
+ client.on_connect = callback
120
+ client.on_connect.should be callback
121
+ client.on_autoreconnect = callback
122
+ client.on_autoreconnect.should be callback
123
+ client.on_connect = nil
124
+ client.on_connect.should be_nil
125
+ client.on_autoreconnect = nil
126
+ client.on_autoreconnect.should be_nil
127
+ client.on_connect(&callback).should be callback
128
+ client.on_connect.should be callback
129
+ client.on_autoreconnect(&callback).should be callback
130
+ client.on_autoreconnect.should be callback
131
+ end
132
+
95
133
  end
@@ -19,6 +19,7 @@ describe PG::EM::ConnectionPool do
19
19
  let(:pgerror) { PG::Error.new }
20
20
  let(:fooerror) { RuntimeError.new 'foo' }
21
21
  let(:timeout) { 10 }
22
+ let(:hook) { proc {|c| }}
22
23
 
23
24
  it "should allocate one connection" do
24
25
  client.should_receive(:new).with({}).once.and_return(client.allocate)
@@ -60,6 +61,8 @@ describe PG::EM::ConnectionPool do
60
61
  client.allocate.tap do |conn|
61
62
  conn.should_receive(:connect_timeout=).with(timeout).once
62
63
  conn.should_receive(:query_timeout=).with(timeout).once
64
+ conn.should_receive(:on_autoreconnect=).with(hook).twice
65
+ conn.should_receive(:on_connect=).with(hook).twice
63
66
  conn.should_receive(:finish).once
64
67
  end
65
68
  end.exactly(3)
@@ -87,6 +90,12 @@ describe PG::EM::ConnectionPool do
87
90
  pool.allocated.length.should eq 2
88
91
  pool.connect_timeout = timeout
89
92
  pool.query_timeout = timeout
93
+ pool.on_connect = hook
94
+ pool.on_connect.should be hook
95
+ pool.on_connect(&hook)
96
+ pool.on_autoreconnect = hook
97
+ pool.on_autoreconnect.should be hook
98
+ pool.on_autoreconnect(&hook)
90
99
  end
91
100
  end.resume
92
101
  end
@@ -99,12 +108,15 @@ describe PG::EM::ConnectionPool do
99
108
  pool.max_size.should eq 3
100
109
  pool.available.length.should eq 0
101
110
  pool.allocated.length.should eq 0
111
+ pool.on_connect.should be hook
112
+ pool.on_autoreconnect.should be hook
102
113
  pool.size.should eq 0
103
114
  end
104
115
 
105
116
  it "should allocate new connection with altered attributes" do
106
117
  client.should_receive(:new).with(
107
- {connect_timeout: timeout, query_timeout: timeout}
118
+ {connect_timeout: timeout, query_timeout: timeout,
119
+ on_connect: hook, on_autoreconnect: hook}
108
120
  ).once.and_return(client.allocate)
109
121
  pool = subject.new connection_class: client, size: 1, lazy: true
110
122
  pool.should be_an_instance_of subject
@@ -112,8 +124,12 @@ describe PG::EM::ConnectionPool do
112
124
  pool.query_timeout.should be_nil
113
125
  pool.connect_timeout = timeout
114
126
  pool.query_timeout = timeout
127
+ pool.on_connect = hook
128
+ pool.on_autoreconnect(&hook)
115
129
  pool.connect_timeout.should eq timeout
116
130
  pool.query_timeout.should eq timeout
131
+ pool.on_connect.should be hook
132
+ pool.on_autoreconnect.should be hook
117
133
  pool.max_size.should eq 1
118
134
  pool.available.length.should eq 0
119
135
  pool.allocated.length.should eq 0
@@ -130,19 +146,27 @@ describe PG::EM::ConnectionPool do
130
146
  options.should be_empty
131
147
  pool.connect_timeout = timeout
132
148
  pool.query_timeout = timeout
149
+ pool.on_connect = hook
150
+ pool.on_autoreconnect(&hook)
133
151
  client.allocate.tap do |conn|
134
152
  conn.should_receive(:connect_timeout=).with(timeout).once
135
153
  conn.should_receive(:query_timeout=).with(timeout).once
154
+ conn.should_receive(:on_autoreconnect=).with(hook).once
155
+ conn.should_receive(:on_connect=).with(hook).once
136
156
  end
137
157
  end.once
138
158
  client.should_receive(:connect_defer) do |options|
139
159
  options.should be_empty
140
160
  pool.connect_timeout = timeout
141
161
  pool.query_timeout = timeout
162
+ pool.on_connect(&hook)
163
+ pool.on_autoreconnect = hook
142
164
  deferrable.new.tap do |df|
143
165
  df.succeed(client.allocate.tap do |conn|
144
166
  conn.should_receive(:connect_timeout=).with(timeout).once
145
167
  conn.should_receive(:query_timeout=).with(timeout).once
168
+ conn.should_receive(:on_autoreconnect=).with(hook).once
169
+ conn.should_receive(:on_connect=).with(hook).once
146
170
  end)
147
171
  end
148
172
  end.once
metadata CHANGED
@@ -1,36 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-pg-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
5
- prerelease:
4
+ version: 0.3.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Rafal Michalski
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-01-07 00:00:00.000000000 Z
11
+ date: 2014-03-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: pg
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.17.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.17.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: eventmachine
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: em-synchrony
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,33 +69,29 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: coveralls
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: 0.7.0
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: 0.7.0
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: simplecov
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: 0.8.2
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: 0.8.2
110
97
  description: PostgreSQL asynchronous EventMachine client, based on pg interface (PG::Connection)
@@ -144,6 +131,8 @@ files:
144
131
  - spec/em_client.rb
145
132
  - spec/em_client_autoreconnect.rb
146
133
  - spec/em_client_common.rb
134
+ - spec/em_client_on_connect.rb
135
+ - spec/em_connection_pool.rb
147
136
  - spec/em_synchrony_client.rb
148
137
  - spec/em_synchrony_client_autoreconnect.rb
149
138
  - spec/pg_em_client_connect_finish.rb
@@ -155,6 +144,7 @@ files:
155
144
  homepage: http://github.com/royaltm/ruby-em-pg-client
156
145
  licenses:
157
146
  - MIT
147
+ metadata: {}
158
148
  post_install_message:
159
149
  rdoc_options:
160
150
  - --title
@@ -164,23 +154,21 @@ rdoc_options:
164
154
  require_paths:
165
155
  - lib
166
156
  required_ruby_version: !ruby/object:Gem::Requirement
167
- none: false
168
157
  requirements:
169
- - - ! '>='
158
+ - - '>='
170
159
  - !ruby/object:Gem::Version
171
160
  version: 1.9.2
172
161
  required_rubygems_version: !ruby/object:Gem::Requirement
173
- none: false
174
162
  requirements:
175
- - - ! '>='
163
+ - - '>='
176
164
  - !ruby/object:Gem::Version
177
165
  version: '0'
178
166
  requirements:
179
167
  - PostgreSQL server
180
168
  rubyforge_project:
181
- rubygems_version: 1.8.25
169
+ rubygems_version: 2.0.14
182
170
  signing_key:
183
- specification_version: 3
171
+ specification_version: 4
184
172
  summary: EventMachine PostgreSQL client
185
173
  test_files:
186
174
  - spec/pg_em_client_connect_timeout.rb
@@ -189,8 +177,10 @@ test_files:
189
177
  - spec/connection_pool_helpers.rb
190
178
  - spec/pg_em_client_options.rb
191
179
  - spec/em_synchrony_client.rb
180
+ - spec/em_client_on_connect.rb
192
181
  - spec/em_client_common.rb
193
182
  - spec/em_synchrony_client_autoreconnect.rb
183
+ - spec/em_connection_pool.rb
194
184
  - spec/pg_em_client_connect_finish.rb
195
185
  - spec/pg_em_connection_pool.rb
196
186
  - spec/em_client_autoreconnect.rb