rpush 2.2.0-java → 2.3.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +17 -9
- data/lib/generators/rpush_migration_generator.rb +1 -1
- data/lib/rpush.rb +4 -1
- data/lib/rpush/apns_feedback.rb +1 -1
- data/lib/rpush/cli.rb +24 -21
- data/lib/rpush/client/active_model/apns/app.rb +1 -1
- data/lib/rpush/client/active_model/apns/notification.rb +2 -2
- data/lib/rpush/client/active_model/wpns/notification.rb +7 -1
- data/lib/rpush/configuration.rb +32 -22
- data/lib/rpush/daemon.rb +18 -9
- data/lib/rpush/daemon/adm/delivery.rb +4 -1
- data/lib/rpush/daemon/apns/delivery.rb +3 -0
- data/lib/rpush/daemon/apns/feedback_receiver.rb +6 -2
- data/lib/rpush/daemon/app_runner.rb +11 -16
- data/lib/rpush/daemon/batch.rb +9 -0
- data/lib/rpush/daemon/delivery.rb +10 -2
- data/lib/rpush/daemon/delivery_error.rb +3 -3
- data/lib/rpush/daemon/dispatcher/apns_tcp.rb +11 -11
- data/lib/rpush/daemon/dispatcher/tcp.rb +2 -10
- data/lib/rpush/daemon/gcm/delivery.rb +13 -7
- data/lib/rpush/daemon/signal_handler.rb +5 -3
- data/lib/rpush/daemon/store/active_record.rb +14 -0
- data/lib/rpush/daemon/store/interface.rb +2 -1
- data/lib/rpush/daemon/store/redis.rb +3 -0
- data/lib/rpush/daemon/tcp_connection.rb +47 -17
- data/lib/rpush/daemon/wpns/delivery.rb +19 -10
- data/lib/rpush/logger.rb +30 -12
- data/lib/rpush/plugin.rb +44 -0
- data/lib/rpush/push.rb +1 -1
- data/lib/rpush/reflectable.rb +13 -0
- data/lib/rpush/{reflection.rb → reflection_collection.rb} +1 -9
- data/lib/rpush/reflection_public_methods.rb +9 -0
- data/lib/rpush/version.rb +1 -1
- data/lib/tasks/test.rake +6 -4
- data/spec/functional/adm_spec.rb +12 -0
- data/spec/functional/apns_spec.rb +61 -42
- data/spec/functional/gcm_spec.rb +9 -0
- data/spec/functional/retry_spec.rb +1 -1
- data/spec/functional/wpns_spec.rb +44 -11
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/apns_feedback_spec.rb +2 -2
- data/spec/unit/client/active_record/apns/app_spec.rb +2 -2
- data/spec/unit/client/active_record/apns/notification_spec.rb +1 -2
- data/spec/unit/client/active_record/wpns/notification_spec.rb +9 -3
- data/spec/unit/configuration_spec.rb +1 -0
- data/spec/unit/daemon/adm/delivery_spec.rb +0 -1
- data/spec/unit/daemon/apns/feedback_receiver_spec.rb +0 -1
- data/spec/unit/daemon/app_runner_spec.rb +14 -9
- data/spec/unit/daemon/delivery_spec.rb +0 -1
- data/spec/unit/daemon/dispatcher/tcp_spec.rb +0 -7
- data/spec/unit/daemon/gcm/delivery_spec.rb +1 -1
- data/spec/unit/daemon/signal_handler_spec.rb +5 -1
- data/spec/unit/daemon/store/active_record_spec.rb +1 -1
- data/spec/unit/daemon/tcp_connection_spec.rb +18 -18
- data/spec/unit/daemon/wpns/delivery_spec.rb +1 -1
- data/spec/unit/daemon_spec.rb +10 -2
- data/spec/unit/logger_spec.rb +0 -1
- data/spec/unit/plugin_spec.rb +36 -0
- data/spec/unit/push_spec.rb +2 -2
- data/spec/unit/{daemon/reflectable_spec.rb → reflectable_spec.rb} +6 -6
- data/spec/unit/{reflection_spec.rb → reflection_collection_spec.rb} +4 -8
- metadata +34 -36
- data/lib/rpush/daemon/reflectable.rb +0 -11
- data/spec/integration/rpush_spec.rb +0 -13
- data/spec/integration/support/gcm_success_response.json +0 -1
- data/spec/support/install.sh +0 -68
@@ -2,7 +2,8 @@ require 'functional_spec_helper'
|
|
2
2
|
|
3
3
|
describe 'WPNs' do
|
4
4
|
let(:app) { Rpush::Wpns::App.new }
|
5
|
-
let(:
|
5
|
+
let(:notification_with_data) { Rpush::Wpns::Notification.new }
|
6
|
+
let(:notification_with_alert) { Rpush::Wpns::Notification.new }
|
6
7
|
let(:response) { double(Net::HTTPResponse, code: 200) }
|
7
8
|
let(:http) { double(Net::HTTP::Persistent, request: response, shutdown: nil) }
|
8
9
|
|
@@ -10,29 +11,61 @@ describe 'WPNs' do
|
|
10
11
|
app.name = 'test'
|
11
12
|
app.save!
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
notification_with_data.app = app
|
15
|
+
notification_with_data.uri = 'http://sn1.notify.live.net/'
|
16
|
+
notification_with_data.data = { title: "MyApp", body: "test", param: "new_user" }
|
17
|
+
notification_with_data.save!
|
18
|
+
|
19
|
+
notification_with_alert.app = app
|
20
|
+
notification_with_alert.uri = 'http://sn1.notify.live.net/'
|
21
|
+
notification_with_alert.alert = "Hello world!"
|
22
|
+
notification_with_alert.save!
|
17
23
|
|
18
24
|
Net::HTTP::Persistent.stub(new: http)
|
19
25
|
end
|
20
26
|
|
21
|
-
it 'delivers a notification successfully' do
|
27
|
+
it 'delivers a notification with data successfully' do
|
22
28
|
response.stub(to_hash: { 'x-notificationstatus' => ['Received'] })
|
23
29
|
|
24
30
|
expect do
|
25
31
|
Rpush.push
|
26
|
-
|
27
|
-
end.to change(
|
32
|
+
notification_with_data.reload
|
33
|
+
end.to change(notification_with_data, :delivered).to(true)
|
28
34
|
end
|
29
35
|
|
30
|
-
it 'fails to deliver a notification successfully' do
|
36
|
+
it 'fails to deliver a notification with data successfully' do
|
31
37
|
response.stub(code: 400)
|
32
38
|
|
33
39
|
expect do
|
34
40
|
Rpush.push
|
35
|
-
|
36
|
-
end.to_not change(
|
41
|
+
notification_with_data.reload
|
42
|
+
end.to_not change(notification_with_data, :delivered).to(true)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'delivers a notification with an alert successfully' do
|
46
|
+
response.stub(to_hash: { 'x-notificationstatus' => ['Received'] })
|
47
|
+
|
48
|
+
expect do
|
49
|
+
Rpush.push
|
50
|
+
notification_with_alert.reload
|
51
|
+
end.to change(notification_with_alert, :delivered).to(true)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'fails to deliver a notification with an alert successfully' do
|
55
|
+
response.stub(code: 400)
|
56
|
+
|
57
|
+
expect do
|
58
|
+
Rpush.push
|
59
|
+
notification_with_alert.reload
|
60
|
+
end.to_not change(notification_with_alert, :delivered).to(true)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'retries notification that fail due to a SocketError' do
|
64
|
+
expect(http).to receive(:request).and_raise(SocketError.new).twice
|
65
|
+
expect(notification_with_data.deliver_after).to be_nil
|
66
|
+
expect do
|
67
|
+
Rpush.push
|
68
|
+
notification_with_data.reload
|
69
|
+
end.to change(notification_with_data, :deliver_after).to(kind_of(Time))
|
37
70
|
end
|
38
71
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -46,6 +46,8 @@ def after_example_cleanup
|
|
46
46
|
Rpush.config.set_defaults if Rpush.config.is_a?(Rpush::Configuration)
|
47
47
|
Rpush.config.client = RPUSH_CLIENT
|
48
48
|
end
|
49
|
+
Rpush.plugins.values.each(&:unload)
|
50
|
+
Rpush.instance_variable_set('@plugins', {})
|
49
51
|
end
|
50
52
|
|
51
53
|
RSpec.configure do |config|
|
@@ -8,8 +8,8 @@ describe Rpush, 'apns_feedback' do
|
|
8
8
|
Rpush::Daemon::Apns::FeedbackReceiver.stub(new: receiver)
|
9
9
|
end
|
10
10
|
|
11
|
-
it 'initializes the
|
12
|
-
Rpush::Daemon.should_receive(:
|
11
|
+
it 'initializes the daemon' do
|
12
|
+
Rpush::Daemon.should_receive(:common_init)
|
13
13
|
Rpush.apns_feedback
|
14
14
|
end
|
15
15
|
|
@@ -4,7 +4,7 @@ describe Rpush::Client::ActiveRecord::App do
|
|
4
4
|
it 'does not validate an app with an invalid certificate' do
|
5
5
|
app = Rpush::Client::ActiveRecord::Apns::App.new(name: 'test', environment: 'development', certificate: 'foo')
|
6
6
|
app.valid?
|
7
|
-
app.errors[:certificate].should eq ['
|
7
|
+
app.errors[:certificate].should eq ['value must contain a certificate and a private key.']
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'validates a certificate without a password' do
|
@@ -24,6 +24,6 @@ describe Rpush::Client::ActiveRecord::App do
|
|
24
24
|
app = Rpush::Client::ActiveRecord::Apns::App.new name: 'test', environment: 'development',
|
25
25
|
certificate: TEST_CERT_WITH_PASSWORD, password: 'incorrect'
|
26
26
|
app.valid?
|
27
|
-
app.errors[:certificate].should eq [
|
27
|
+
app.errors[:certificate].should eq ['value must contain a certificate and a private key.']
|
28
28
|
end
|
29
29
|
end
|
@@ -76,7 +76,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "as_json" do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should not include the sound key if the sound is not present" do
|
79
|
-
notification = Rpush::Client::ActiveRecord::Apns::Notification.new(sound:
|
79
|
+
notification = Rpush::Client::ActiveRecord::Apns::Notification.new(sound: nil)
|
80
80
|
notification.as_json["aps"].key?("sound").should be_false
|
81
81
|
end
|
82
82
|
|
@@ -92,7 +92,6 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "as_json" do
|
|
92
92
|
notification.data = { omg: { ilike: :hashes } }
|
93
93
|
notification.as_json["omg"]["ilike"].should eq "hashes"
|
94
94
|
end
|
95
|
-
|
96
95
|
end
|
97
96
|
|
98
97
|
describe Rpush::Client::ActiveRecord::Apns::Notification, 'MDM' do
|
@@ -13,9 +13,15 @@ describe Rpush::Client::ActiveRecord::Wpns::Notification do
|
|
13
13
|
notification.errors[:uri].include?("is invalid").should be_true
|
14
14
|
end
|
15
15
|
|
16
|
-
it "should be invalid if there's no
|
17
|
-
notification = Rpush::Client::ActiveRecord::Wpns::Notification.new(
|
16
|
+
it "should be invalid if there's no data" do
|
17
|
+
notification = Rpush::Client::ActiveRecord::Wpns::Notification.new(data: {})
|
18
18
|
notification.valid?
|
19
|
-
notification.errors[:
|
19
|
+
notification.errors[:data].include?("can't be blank").should be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be invalid if there's no alert" do
|
23
|
+
notification = Rpush::Client::ActiveRecord::Wpns::Notification.new(alert: nil)
|
24
|
+
notification.valid?
|
25
|
+
notification.errors[:data].include?("can't be blank").should be_true
|
20
26
|
end
|
21
27
|
end
|
@@ -34,7 +34,7 @@ end
|
|
34
34
|
describe Rpush::Daemon::AppRunner, 'enqueue' do
|
35
35
|
let(:app) { double(id: 1, name: 'Test', connections: 1) }
|
36
36
|
let(:notification) { double(app_id: 1) }
|
37
|
-
let(:runner) { double(Rpush::Daemon::AppRunner, enqueue: nil,
|
37
|
+
let(:runner) { double(Rpush::Daemon::AppRunner, enqueue: nil, start_dispatchers: nil, start_loops: nil, stop: nil) }
|
38
38
|
let(:logger) { double(Rpush::Logger, error: nil, info: nil) }
|
39
39
|
|
40
40
|
before do
|
@@ -62,7 +62,7 @@ end
|
|
62
62
|
|
63
63
|
describe Rpush::Daemon::AppRunner, 'start_app' do
|
64
64
|
let(:app) { double(id: 1, name: 'test', connections: 1) }
|
65
|
-
let(:runner) { double(Rpush::Daemon::AppRunner, enqueue: nil,
|
65
|
+
let(:runner) { double(Rpush::Daemon::AppRunner, enqueue: nil, start_dispatchers: nil, stop: nil) }
|
66
66
|
let(:logger) { double(Rpush::Logger, error: nil, info: nil) }
|
67
67
|
|
68
68
|
before do
|
@@ -71,7 +71,7 @@ describe Rpush::Daemon::AppRunner, 'start_app' do
|
|
71
71
|
|
72
72
|
it 'logs an error if the runner could not be started' do
|
73
73
|
Rpush::Daemon::AppRunner.should_receive(:new).with(app).and_return(runner)
|
74
|
-
runner.stub(:
|
74
|
+
runner.stub(:start_dispatchers).and_raise(StandardError)
|
75
75
|
Rpush.logger.should_receive(:error)
|
76
76
|
Rpush::Daemon::AppRunner.start_app(app)
|
77
77
|
end
|
@@ -80,7 +80,8 @@ end
|
|
80
80
|
describe Rpush::Daemon::AppRunner, 'debug' do
|
81
81
|
let(:app) do
|
82
82
|
double(Rpush::AppRunnerSpecService::App, id: 1, name: 'test', connections: 1,
|
83
|
-
|
83
|
+
environment: 'development', certificate: TEST_CERT,
|
84
|
+
service_name: 'app_runner_spec_service')
|
84
85
|
end
|
85
86
|
let(:logger) { double(Rpush::Logger, info: nil) }
|
86
87
|
let(:store) { double(all_apps: [app], release_connection: nil) }
|
@@ -102,7 +103,8 @@ end
|
|
102
103
|
describe Rpush::Daemon::AppRunner do
|
103
104
|
let(:app) do
|
104
105
|
double(Rpush::AppRunnerSpecService::App, environment: :sandbox,
|
105
|
-
|
106
|
+
connections: 1, service_name: 'app_runner_spec_service',
|
107
|
+
name: 'test')
|
106
108
|
end
|
107
109
|
let(:runner) { Rpush::Daemon::AppRunner.new(app) }
|
108
110
|
let(:logger) { double(Rpush::Logger, info: nil) }
|
@@ -122,18 +124,18 @@ describe Rpush::Daemon::AppRunner do
|
|
122
124
|
describe 'start' do
|
123
125
|
it 'starts a delivery dispatcher for each connection' do
|
124
126
|
app.stub(connections: 2)
|
125
|
-
runner.
|
127
|
+
runner.start_dispatchers
|
126
128
|
runner.num_dispatcher_loops.should eq 2
|
127
129
|
end
|
128
130
|
|
129
131
|
it 'starts the dispatcher loop' do
|
130
132
|
dispatcher_loop.should_receive(:start)
|
131
|
-
runner.
|
133
|
+
runner.start_dispatchers
|
132
134
|
end
|
133
135
|
|
134
136
|
it 'starts the loops' do
|
135
137
|
service_loop.should_receive(:start)
|
136
|
-
runner.
|
138
|
+
runner.start_loops
|
137
139
|
end
|
138
140
|
end
|
139
141
|
|
@@ -169,7 +171,10 @@ describe Rpush::Daemon::AppRunner do
|
|
169
171
|
end
|
170
172
|
|
171
173
|
describe 'stop' do
|
172
|
-
before
|
174
|
+
before do
|
175
|
+
runner.start_dispatchers
|
176
|
+
runner.start_loops
|
177
|
+
end
|
173
178
|
|
174
179
|
it 'stops the delivery dispatchers' do
|
175
180
|
dispatcher_loop.should_receive(:stop)
|
@@ -16,12 +16,6 @@ describe Rpush::Daemon::Dispatcher::Tcp do
|
|
16
16
|
before { Rpush::Daemon::TcpConnection.stub(new: connection) }
|
17
17
|
|
18
18
|
describe 'dispatch' do
|
19
|
-
it 'lazily connects the socket' do
|
20
|
-
Rpush::Daemon::TcpConnection.should_receive(:new).with(app, host, port).and_return(connection)
|
21
|
-
connection.should_receive(:connect)
|
22
|
-
dispatcher.dispatch(queue_payload)
|
23
|
-
end
|
24
|
-
|
25
19
|
it 'delivers the notification' do
|
26
20
|
delivery_class.should_receive(:new).with(app, connection, notification, batch).and_return(delivery)
|
27
21
|
delivery.should_receive(:perform)
|
@@ -31,7 +25,6 @@ describe Rpush::Daemon::Dispatcher::Tcp do
|
|
31
25
|
|
32
26
|
describe 'cleanup' do
|
33
27
|
it 'closes the connection' do
|
34
|
-
dispatcher.dispatch(queue_payload) # lazily initialize connection
|
35
28
|
connection.should_receive(:close)
|
36
29
|
dispatcher.cleanup
|
37
30
|
end
|
@@ -291,7 +291,7 @@ describe Rpush::Daemon::Gcm::Delivery do
|
|
291
291
|
it 'logs a warning that the notification has been re-queued.' do
|
292
292
|
notification.retries = 3
|
293
293
|
notification.deliver_after = now + 2**3
|
294
|
-
Rpush.logger.should_receive(:warn).with("[MyApp] GCM responded with an Internal Error. Notification #{notification.id} will be retried after #{(now + 2**3).strftime(
|
294
|
+
Rpush.logger.should_receive(:warn).with("[MyApp] GCM responded with an Internal Error. Notification #{notification.id} will be retried after #{(now + 2**3).strftime('%Y-%m-%d %H:%M:%S')} (retry 3).")
|
295
295
|
perform
|
296
296
|
end
|
297
297
|
|
@@ -44,6 +44,7 @@ describe Rpush::Daemon::SignalHandler do
|
|
44
44
|
before do
|
45
45
|
Rpush::Daemon::Synchronizer.stub(:sync)
|
46
46
|
Rpush::Daemon::Feeder.stub(:wakeup)
|
47
|
+
Rpush::Daemon.stub(store: double(reopen_log: nil))
|
47
48
|
end
|
48
49
|
|
49
50
|
it 'syncs' do
|
@@ -73,7 +74,10 @@ describe Rpush::Daemon::SignalHandler do
|
|
73
74
|
describe 'error handing' do
|
74
75
|
let(:error) { StandardError.new('test') }
|
75
76
|
|
76
|
-
before
|
77
|
+
before do
|
78
|
+
Rpush.stub(logger: double(error: nil, info: nil, reopen: nil))
|
79
|
+
Rpush::Daemon.stub(store: double(reopen_log: nil))
|
80
|
+
end
|
77
81
|
|
78
82
|
it 'logs errors received when handling a signal' do
|
79
83
|
Rpush::Daemon::Synchronizer.stub(:sync).and_raise(error)
|
@@ -6,7 +6,7 @@ describe Rpush::Daemon::Store::ActiveRecord do
|
|
6
6
|
let(:notification) { Rpush::Client::ActiveRecord::Apns::Notification.create!(device_token: "a" * 64, app: app) }
|
7
7
|
let(:store) { Rpush::Daemon::Store::ActiveRecord.new }
|
8
8
|
let(:time) { Time.now.utc }
|
9
|
-
let(:logger) { double(Rpush::Logger, error: nil) }
|
9
|
+
let(:logger) { double(Rpush::Logger, error: nil, internal_logger: nil) }
|
10
10
|
|
11
11
|
before do
|
12
12
|
Rpush.stub(logger: logger)
|
@@ -72,12 +72,12 @@ describe Rpush::Daemon::TcpConnection do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it "sets the socket option TCP_NODELAY" do
|
75
|
-
tcp_socket.should_receive(:setsockopt).with(Socket::IPPROTO_TCP, Socket::TCP_NODELAY,
|
75
|
+
tcp_socket.should_receive(:setsockopt).with(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, true)
|
76
76
|
connection.connect
|
77
77
|
end
|
78
78
|
|
79
79
|
it "sets the socket option SO_KEEPALIVE" do
|
80
|
-
tcp_socket.should_receive(:setsockopt).with(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE,
|
80
|
+
tcp_socket.should_receive(:setsockopt).with(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
|
81
81
|
connection.connect
|
82
82
|
end
|
83
83
|
|
@@ -122,12 +122,12 @@ describe Rpush::Daemon::TcpConnection do
|
|
122
122
|
|
123
123
|
it 'reflects that the certificate has been revoked' do
|
124
124
|
connection.should_receive(:reflect).with(:ssl_certificate_revoked, app, cert_revoked_error)
|
125
|
-
expect { connection.connect }.to raise_error(
|
125
|
+
expect { connection.connect }.to raise_error(Rpush::Daemon::TcpConnectionError, 'OpenSSL::SSL::SSLError, certificate revoked')
|
126
126
|
end
|
127
127
|
|
128
128
|
it 'logs that the certificate has been revoked' do
|
129
129
|
logger.should_receive(:warn).with('[Connection 0] Certificate has been revoked.')
|
130
|
-
expect { connection.connect }.to raise_error(
|
130
|
+
expect { connection.connect }.to raise_error(Rpush::Daemon::TcpConnectionError, 'OpenSSL::SSL::SSLError, certificate revoked')
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
@@ -170,16 +170,16 @@ describe Rpush::Daemon::TcpConnection do
|
|
170
170
|
before do
|
171
171
|
connection.stub(:sleep)
|
172
172
|
connection.connect
|
173
|
-
ssl_socket.stub(:write).and_raise(
|
173
|
+
ssl_socket.stub(:write).and_raise(error)
|
174
174
|
end
|
175
175
|
|
176
176
|
it 'reflects the connection has been lost' do
|
177
|
-
connection.should_receive(:reflect).with(:tcp_connection_lost, app, kind_of(
|
177
|
+
connection.should_receive(:reflect).with(:tcp_connection_lost, app, kind_of(error.class))
|
178
178
|
expect { connection.write(nil) }.to raise_error(Rpush::Daemon::TcpConnectionError)
|
179
179
|
end
|
180
180
|
|
181
181
|
it "logs that the connection has been lost once only" do
|
182
|
-
logger.should_receive(:error).with("[Connection 0] Lost connection to gateway.push.apple.com:2195 (#{
|
182
|
+
logger.should_receive(:error).with("[Connection 0] Lost connection to gateway.push.apple.com:2195 (#{error.class.name}, #{error.message}), reconnecting...").once
|
183
183
|
expect { connection.write(nil) }.to raise_error(Rpush::Daemon::TcpConnectionError)
|
184
184
|
end
|
185
185
|
|
@@ -191,7 +191,7 @@ describe Rpush::Daemon::TcpConnection do
|
|
191
191
|
it "raises a TcpConnectionError after 3 attempts at reconnecting" do
|
192
192
|
expect do
|
193
193
|
connection.write(nil)
|
194
|
-
end.to raise_error(Rpush::Daemon::TcpConnectionError, "Connection 0 tried 3 times to reconnect but failed (#{
|
194
|
+
end.to raise_error(Rpush::Daemon::TcpConnectionError, "Connection 0 tried 3 times to reconnect but failed (#{error.class.name}, #{error.message}).")
|
195
195
|
end
|
196
196
|
|
197
197
|
it "sleeps 1 second before retrying the connection" do
|
@@ -203,32 +203,32 @@ describe Rpush::Daemon::TcpConnection do
|
|
203
203
|
describe "when write raises an Errno::EPIPE" do
|
204
204
|
it_should_behave_like "when the write fails"
|
205
205
|
|
206
|
-
def
|
207
|
-
Errno::EPIPE
|
206
|
+
def error
|
207
|
+
Errno::EPIPE.new('an message')
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
211
211
|
describe "when write raises an Errno::ETIMEDOUT" do
|
212
212
|
it_should_behave_like "when the write fails"
|
213
213
|
|
214
|
-
def
|
215
|
-
Errno::ETIMEDOUT
|
214
|
+
def error
|
215
|
+
Errno::ETIMEDOUT.new('an message')
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
219
219
|
describe "when write raises an OpenSSL::SSL::SSLError" do
|
220
220
|
it_should_behave_like "when the write fails"
|
221
221
|
|
222
|
-
def
|
223
|
-
OpenSSL::SSL::SSLError
|
222
|
+
def error
|
223
|
+
OpenSSL::SSL::SSLError.new('an message')
|
224
224
|
end
|
225
225
|
end
|
226
226
|
|
227
227
|
describe "when write raises an IOError" do
|
228
228
|
it_should_behave_like "when the write fails"
|
229
229
|
|
230
|
-
def
|
231
|
-
IOError
|
230
|
+
def error
|
231
|
+
IOError.new('an message')
|
232
232
|
end
|
233
233
|
end
|
234
234
|
|
@@ -270,11 +270,11 @@ describe Rpush::Daemon::TcpConnection do
|
|
270
270
|
connection.write('blah')
|
271
271
|
end
|
272
272
|
|
273
|
-
it 'resets the last
|
273
|
+
it 'resets the last touch time' do
|
274
274
|
now = Time.now
|
275
275
|
Time.stub(now: now)
|
276
276
|
connection.write('blah')
|
277
|
-
connection.
|
277
|
+
connection.last_touch.should eq now
|
278
278
|
end
|
279
279
|
|
280
280
|
it 'does not reconnect if the connection has not been idle for more than the defined period' do
|