em-pg-client 0.3.0 → 0.3.1

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.
@@ -5,8 +5,10 @@ require 'date'
5
5
  require 'em-synchrony'
6
6
  require 'pg/em'
7
7
 
8
- $pgserver_cmd_stop = %Q[sudo -i -u postgres pg_ctl -D "#{ENV['PGDATA']}" stop -s -m fast]
9
- $pgserver_cmd_start = %Q[sudo -i -u postgres pg_ctl -D "#{ENV['PGDATA']}" start -s -w]
8
+ $pgserver_cmd_stop = ENV['PG_CTL_STOP_CMD'] || %Q[sudo -i -u postgres pg_ctl -D "#{ENV['PGDATA']}" stop -s -m fast]
9
+ $pgserver_cmd_start = ENV['PG_CTL_START_CMD'] || %Q[sudo -i -u postgres pg_ctl -D "#{ENV['PGDATA']}" start -s -w]
10
+
11
+ DISCONNECTED_ERROR = ENV['PGHOST'].include?('/') ? PG::UnableToSend : PG::ConnectionBad
10
12
 
11
13
  shared_context 'em-synchrony-pg common' do
12
14
  around(:each) do |testcase|
@@ -42,7 +44,7 @@ describe 'em-synchrony-pg default autoreconnect' do
42
44
  system($pgserver_cmd_stop).should be_true
43
45
  expect {
44
46
  @tested_proc.call
45
- }.to raise_error(@client.host.include?('/') ? PG::UnableToSend : PG::ConnectionBad)
47
+ }.to raise_error DISCONNECTED_ERROR
46
48
  end
47
49
 
48
50
  it "should get database size using query after server startup" do
@@ -57,10 +59,40 @@ describe 'em-synchrony-pg default autoreconnect' do
57
59
  system($pgserver_cmd_start).should be_true
58
60
  @tested_proc.call
59
61
  end
60
- end.to raise_error(@client.host.include?('/') ? PG::UnableToSend : PG::ConnectionBad)
62
+ end.to raise_error DISCONNECTED_ERROR
61
63
  @tested_proc.call
62
64
  end
63
65
 
66
+ it "should fail to get last result asynchronously after server restart" do
67
+ @client.send_query('SELECT pg_sleep(5); SELECT pg_database_size(current_database());')
68
+ system($pgserver_cmd_stop).should be_true
69
+ system($pgserver_cmd_start).should be_true
70
+ expect do
71
+ @client.get_last_result
72
+ end.to raise_error PG::ConnectionBad
73
+ @client.status.should be PG::CONNECTION_OK
74
+ @client.get_last_result.should be_nil
75
+ EM.stop
76
+ end
77
+
78
+ it "should fail to get each result asynchronously after server restart" do
79
+ @client.send_query('SELECT pg_sleep(5); SELECT pg_database_size(current_database());')
80
+ system($pgserver_cmd_stop).should be_true
81
+ system($pgserver_cmd_start).should be_true
82
+ result = @client.get_result
83
+ result.should be_an_instance_of PG::Result
84
+ expect do
85
+ result.check
86
+ end.to raise_error PG::Error
87
+ @client.status.should be PG::CONNECTION_OK
88
+ expect do
89
+ @client.get_result
90
+ end.to raise_error PG::ConnectionBad
91
+ @client.status.should be PG::CONNECTION_OK
92
+ @client.get_result.should be_nil
93
+ EM.stop
94
+ end
95
+
64
96
  before(:all) do
65
97
  @tested_proc = proc do
66
98
  @client.query('SELECT pg_database_size(current_database());') do |result|
@@ -98,10 +130,44 @@ describe 'em-synchrony-pg autoreconnect with on_autoreconnect' do
98
130
  system($pgserver_cmd_start).should be_true
99
131
  @tested_proc.call
100
132
  end
101
- end.to raise_error(@client.host.include?('/') ? PG::UnableToSend : PG::ConnectionBad)
133
+ end.to raise_error DISCONNECTED_ERROR
102
134
  @tested_proc.call
103
135
  end
104
136
 
137
+ it "should fail to get last result asynchronously after server restart" do
138
+ @client.on_autoreconnect = proc {
139
+ EM::DefaultDeferrable.new.tap {|df| df.succeed }
140
+ }
141
+ @client.send_query('SELECT pg_sleep(5); SELECT pg_database_size(current_database());')
142
+ system($pgserver_cmd_stop).should be_true
143
+ system($pgserver_cmd_start).should be_true
144
+ expect do
145
+ @client.get_last_result
146
+ end.to raise_error PG::ConnectionBad
147
+ @client.status.should be PG::CONNECTION_OK
148
+ @client.get_last_result.should be_nil
149
+ EM.stop
150
+ end
151
+
152
+ it "should fail to get each result asynchronously after server restart" do
153
+ @client.on_autoreconnect = proc { true }
154
+ @client.send_query('SELECT pg_sleep(5); SELECT pg_database_size(current_database());')
155
+ system($pgserver_cmd_stop).should be_true
156
+ system($pgserver_cmd_start).should be_true
157
+ result = @client.get_result
158
+ result.should be_an_instance_of PG::Result
159
+ expect do
160
+ result.check
161
+ end.to raise_error PG::Error
162
+ @client.status.should be PG::CONNECTION_OK
163
+ expect do
164
+ @client.get_result
165
+ end.to raise_error PG::ConnectionBad
166
+ @client.status.should be PG::CONNECTION_OK
167
+ @client.get_result.should be_nil
168
+ EM.stop
169
+ end
170
+
105
171
  before(:all) do
106
172
  @tested_proc = proc do
107
173
  @client.exec_prepared('get_db_size') do |result|
@@ -131,7 +197,7 @@ describe 'em-synchrony-pg with autoreconnect disabled' do
131
197
  system($pgserver_cmd_start).should be_true
132
198
  expect {
133
199
  @tested_proc.call
134
- }.to raise_error(@client.host.include?('/') ? PG::UnableToSend : PG::ConnectionBad)
200
+ }.to raise_error DISCONNECTED_ERROR
135
201
  end
136
202
 
137
203
  it "should get database size using query after manual connection reset" do
@@ -141,6 +207,54 @@ describe 'em-synchrony-pg with autoreconnect disabled' do
141
207
  @tested_proc.call
142
208
  end
143
209
 
210
+ it "should fail to get last result asynchronously after server restart" do
211
+ system($pgserver_cmd_stop).should be_true
212
+ system($pgserver_cmd_start).should be_true
213
+ begin
214
+ @client.send_query('SELECT pg_sleep(5); SELECT pg_database_size(current_database());')
215
+ rescue PG::UnableToSend
216
+ end
217
+ expect do
218
+ @client.get_last_result
219
+ end.to raise_error PG::ConnectionBad
220
+ @client.status.should be PG::CONNECTION_BAD
221
+ expect do
222
+ @client.get_last_result
223
+ end.to raise_error PG::ConnectionBad
224
+ @client.reset
225
+ @client.status.should be PG::CONNECTION_OK
226
+ @client.get_last_result.should be_nil
227
+ EM.stop
228
+ end
229
+
230
+ it "should fail to get each result asynchronously after server restart" do
231
+ system($pgserver_cmd_stop).should be_true
232
+ system($pgserver_cmd_start).should be_true
233
+ begin
234
+ @client.send_query('SELECT pg_sleep(5); SELECT pg_database_size(current_database());')
235
+ rescue PG::UnableToSend
236
+ expect do
237
+ @client.get_result
238
+ end.to raise_error PG::ConnectionBad
239
+ @client.status.should be PG::CONNECTION_BAD
240
+ else
241
+ result = @client.get_result
242
+ result.should be_an_instance_of PG::Result
243
+ expect do
244
+ result.check
245
+ end.to raise_error PG::Error
246
+ @client.status.should be PG::CONNECTION_OK
247
+ end
248
+ expect do
249
+ @client.get_result
250
+ end.to raise_error PG::ConnectionBad
251
+ @client.status.should be PG::CONNECTION_BAD
252
+ @client.reset
253
+ @client.status.should be PG::CONNECTION_OK
254
+ @client.get_result.should be_nil
255
+ EM.stop
256
+ end
257
+
144
258
  before(:all) do
145
259
  @tested_proc = proc do
146
260
  @client.query('SELECT pg_database_size(current_database());') do |result|
@@ -47,7 +47,7 @@ describe 'connect failure and finished? status' do
47
47
  end
48
48
 
49
49
  describe 'with unix socket' do
50
- let(:options) { {host: '/tmp', port: bogus_port} }
50
+ let(:options) { {host: ENV['PGHOST_UNIX'] || '/tmp', port: bogus_port} }
51
51
  include_context 'test deferred'
52
52
  include_context 'test blocking'
53
53
  end unless RSpec.windows_os?
@@ -9,14 +9,18 @@ describe 'em-pg-client options' do
9
9
  subject { PG::EM::Client }
10
10
 
11
11
  let(:callback) { proc {|c, e| false } }
12
- let(:args) { [{async_autoreconnect: true, connect_timeout: 10, host: 'foo'}] }
13
- let(:str_key_args) { [{'async_autoreconnect'=>true, 'connect_timeout'=>10, 'host'=>'foo'}] }
12
+ let(:args) { [{
13
+ query_timeout: 1, async_autoreconnect: true, connect_timeout: 10, host: 'foo'
14
+ }]}
15
+ let(:str_key_args) { [{
16
+ 'query_timeout'=>1, 'async_autoreconnect'=>true, 'connect_timeout'=>10, 'host'=>'foo'
17
+ }]}
14
18
  let(:pgconn_args) { [{connect_timeout: 10, host: 'foo'}] }
15
19
  let(:str_key_pgconn_args) { [{'connect_timeout'=>10, 'host'=>'foo'}] }
16
20
  let(:async_options) { {
17
21
  :@async_autoreconnect => true,
18
22
  :@connect_timeout => 10,
19
- :@query_timeout=>0,
23
+ :@query_timeout=>1,
20
24
  :@on_autoreconnect=>nil,
21
25
  :@async_command_aborted=>false} }
22
26
 
@@ -82,4 +86,10 @@ describe 'em-pg-client options' do
82
86
  options[:@on_autoreconnect].should be callback
83
87
  end
84
88
 
89
+ it "should raise error with obsolete argument" do
90
+ expect do
91
+ subject.parse_async_options [on_reconnect: true]
92
+ end.to raise_error ArgumentError
93
+ end
94
+
85
95
  end
@@ -0,0 +1,9 @@
1
+ if ENV["COVERAGE"]
2
+ require 'simplecov'
3
+ require 'coveralls'
4
+
5
+ SimpleCov.start do
6
+ add_filter "/spec/"
7
+ end
8
+ SimpleCov.command_name ENV['COVNAME'] || 'RSpec'
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-pg-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-31 00:00:00.000000000 Z
12
+ date: 2014-01-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pg
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 2.8.0
53
+ version: '2.14'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 2.8.0
61
+ version: '2.14'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: em-synchrony
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +75,38 @@ dependencies:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: 1.0.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: coveralls
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 0.7.0
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 0.7.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: simplecov
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: 0.8.2
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.8.2
78
110
  description: PostgreSQL asynchronous EventMachine client, based on pg interface (PG::Connection)
79
111
  email: rafal@yeondir.com
80
112
  executables: []
@@ -85,14 +117,18 @@ extra_rdoc_files:
85
117
  - LICENSE
86
118
  - HISTORY.md
87
119
  files:
120
+ - .rspec
121
+ - .travis.yml
88
122
  - .yardopts
89
123
  - BENCHMARKS.md
124
+ - Gemfile
90
125
  - HISTORY.md
91
126
  - LICENSE
92
127
  - README.md
93
128
  - Rakefile
94
129
  - benchmarks/em_pg.rb
95
130
  - em-pg-client.gemspec
131
+ - examples/single_row_mode.rb
96
132
  - lib/em-pg-client.rb
97
133
  - lib/em-synchrony/pg.rb
98
134
  - lib/pg/em-version.rb
@@ -112,6 +148,7 @@ files:
112
148
  - spec/pg_em_client_options.rb
113
149
  - spec/pg_em_connection_pool.rb
114
150
  - spec/pg_em_featured_deferrable.rb
151
+ - spec/spec_helper.rb
115
152
  homepage: http://github.com/royaltm/ruby-em-pg-client
116
153
  licenses:
117
154
  - MIT
@@ -144,6 +181,7 @@ specification_version: 3
144
181
  summary: EventMachine PostgreSQL client
145
182
  test_files:
146
183
  - spec/pg_em_client_connect_timeout.rb
184
+ - spec/spec_helper.rb
147
185
  - spec/em_client.rb
148
186
  - spec/connection_pool_helpers.rb
149
187
  - spec/pg_em_client_options.rb