rpush 2.3.2 → 2.4.0

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +1 -1
  4. data/lib/generators/rpush_migration_generator.rb +21 -6
  5. data/lib/generators/templates/rpush.rb +5 -5
  6. data/lib/generators/templates/rpush_2_0_0_updates.rb +24 -0
  7. data/lib/rpush/client/active_model/apns/notification.rb +1 -1
  8. data/lib/rpush/client/mongoid.rb +31 -0
  9. data/lib/rpush/client/mongoid/adm/app.rb +14 -0
  10. data/lib/rpush/client/mongoid/adm/notification.rb +11 -0
  11. data/lib/rpush/client/mongoid/apns/app.rb +11 -0
  12. data/lib/rpush/client/mongoid/apns/feedback.rb +21 -0
  13. data/lib/rpush/client/mongoid/apns/notification.rb +15 -0
  14. data/lib/rpush/client/mongoid/app.rb +23 -0
  15. data/lib/rpush/client/mongoid/gcm/app.rb +11 -0
  16. data/lib/rpush/client/mongoid/gcm/notification.rb +11 -0
  17. data/lib/rpush/client/mongoid/notification.rb +43 -0
  18. data/lib/rpush/client/mongoid/wpns/app.rb +11 -0
  19. data/lib/rpush/client/mongoid/wpns/notification.rb +11 -0
  20. data/lib/rpush/client/redis.rb +2 -2
  21. data/lib/rpush/configuration.rb +48 -29
  22. data/lib/rpush/daemon/adm/delivery.rb +1 -1
  23. data/lib/rpush/daemon/apns.rb +1 -1
  24. data/lib/rpush/daemon/apns/feedback_receiver.rb +2 -3
  25. data/lib/rpush/daemon/dispatcher/apns_tcp.rb +2 -1
  26. data/lib/rpush/daemon/feeder.rb +4 -7
  27. data/lib/rpush/daemon/gcm/delivery.rb +1 -1
  28. data/lib/rpush/daemon/interruptible_sleep.rb +5 -50
  29. data/lib/rpush/daemon/proc_title.rb +2 -1
  30. data/lib/rpush/daemon/store/active_record.rb +4 -0
  31. data/lib/rpush/daemon/store/interface.rb +1 -1
  32. data/lib/rpush/daemon/store/mongoid.rb +157 -0
  33. data/lib/rpush/daemon/store/redis.rb +6 -2
  34. data/lib/rpush/deprecatable.rb +1 -2
  35. data/lib/rpush/deprecation.rb +6 -0
  36. data/lib/rpush/embed.rb +5 -0
  37. data/lib/rpush/logger.rb +5 -8
  38. data/lib/rpush/push.rb +5 -0
  39. data/lib/rpush/version.rb +1 -1
  40. data/lib/tasks/quality.rake +1 -1
  41. data/lib/tasks/test.rake +9 -4
  42. data/spec/functional/apns_spec.rb +2 -1
  43. data/spec/functional_spec_helper.rb +2 -2
  44. data/spec/spec_helper.rb +18 -7
  45. data/spec/support/config/mongoid.yml +69 -0
  46. data/spec/support/mongoid_setup.rb +10 -0
  47. data/spec/unit/client/active_record/adm/app_spec.rb +1 -1
  48. data/spec/unit/client/active_record/adm/notification_spec.rb +1 -1
  49. data/spec/unit/client/active_record/apns/app_spec.rb +1 -1
  50. data/spec/unit/client/active_record/apns/feedback_spec.rb +1 -1
  51. data/spec/unit/client/active_record/apns/notification_spec.rb +11 -11
  52. data/spec/unit/client/active_record/app_spec.rb +1 -1
  53. data/spec/unit/client/active_record/gcm/notification_spec.rb +1 -1
  54. data/spec/unit/client/active_record/notification_spec.rb +1 -1
  55. data/spec/unit/client/active_record/wpns/notification_spec.rb +1 -1
  56. data/spec/unit/configuration_spec.rb +7 -0
  57. data/spec/unit/daemon/apns/feedback_receiver_spec.rb +5 -5
  58. data/spec/unit/daemon/feeder_spec.rb +2 -2
  59. data/spec/unit/daemon/proc_title_spec.rb +11 -0
  60. data/spec/unit/daemon/store/active_record/reconnectable_spec.rb +1 -1
  61. data/spec/unit/daemon/store/active_record_spec.rb +21 -12
  62. data/spec/unit/daemon/store/mongoid_spec.rb +339 -0
  63. data/spec/unit/daemon/store/redis_spec.rb +365 -0
  64. data/spec/unit/embed_spec.rb +4 -2
  65. data/spec/unit/logger_spec.rb +14 -5
  66. data/spec/unit/notification_shared.rb +1 -1
  67. data/spec/unit/push_spec.rb +4 -2
  68. data/spec/unit_spec_helper.rb +3 -3
  69. metadata +25 -2
@@ -2,6 +2,11 @@ module Rpush
2
2
  def self.push(options = {})
3
3
  require 'rpush/daemon'
4
4
 
5
+ unless options.empty?
6
+ warning = "Passing configuration options directly to Rpush.push is deprecated and will be removed from Rpush 2.5.0. Please setup configuration using Rpush.configure { |config| ... } before calling push."
7
+ Rpush::Deprecation.warn_with_backtrace(warning)
8
+ end
9
+
5
10
  config = Rpush::ConfigurationWithoutDefaults.new
6
11
  options.each { |k, v| config.send("#{k}=", v) }
7
12
  config.push = true
@@ -1,3 +1,3 @@
1
1
  module Rpush
2
- VERSION = '2.3.2'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -3,7 +3,7 @@ begin
3
3
 
4
4
  desc 'Run cane to check quality metrics'
5
5
  Cane::RakeTask.new(:cane_quality) do |cane|
6
- cane.add_threshold 'coverage/covered_percent', :>=, 95
6
+ cane.add_threshold 'coverage/covered_percent', :>=, 80
7
7
  cane.no_style = false
8
8
  cane.style_measure = 1000
9
9
  cane.no_doc = true
@@ -7,6 +7,11 @@ def cmd(str, clean_env = true)
7
7
  retval
8
8
  end
9
9
 
10
+ def add_ruby_dot_files
11
+ cmd("echo '#{RUBY_ENGINE}-#{RUBY_VERSION}' > .ruby-version")
12
+ cmd("echo 'rpush_test' > .ruby-gemset")
13
+ end
14
+
10
15
  desc 'Build Rails app bundled with Rpush'
11
16
  task :build_rails do
12
17
  rpush_root = Dir.pwd
@@ -20,10 +25,10 @@ task :build_rails do
20
25
 
21
26
  begin
22
27
  Dir.chdir(path)
28
+ add_ruby_dot_files
23
29
  cmd('echo "gem \'rake\'" >> Gemfile')
24
30
  cmd('echo "gem \'pg\'" >> Gemfile')
25
- cmd("echo \"gem 'rpush', :path => '#{rpush_root}'\" >> Gemfile")
26
- cmd('bundle install')
31
+ cmd("echo \"gem 'rpush', path: '#{rpush_root}'\" >> Gemfile")
27
32
 
28
33
  File.open('config/database.yml', 'w') do |fd|
29
34
  fd.write(<<-YML)
@@ -51,11 +56,11 @@ task :build_standalone do
51
56
 
52
57
  begin
53
58
  Dir.chdir(path)
59
+ add_ruby_dot_files
54
60
  cmd('echo "source \'https://rubygems.org\'" >> Gemfile')
55
61
  cmd('echo "gem \'rake\'" >> Gemfile')
56
62
  cmd('echo "gem \'rpush-redis\'" >> Gemfile')
57
- cmd("echo \"gem 'rpush', :path => '#{rpush_root}'\" >> Gemfile")
58
- cmd('bundle install')
63
+ cmd("echo \"gem 'rpush', path: '#{rpush_root}'\" >> Gemfile")
59
64
  ensure
60
65
  Dir.chdir(pwd)
61
66
  end
@@ -55,7 +55,8 @@ describe 'APNs' do
55
55
  end
56
56
 
57
57
  def fail_notification(notification)
58
- allow(ssl_socket).to receive_messages(read: [8, 4, notification.id].pack('ccN'))
58
+ id = (defined?(Mongoid) && notification.is_a?(Mongoid::Document)) ? notification.integer_id : notification.id
59
+ allow(ssl_socket).to receive_messages(read: [8, 4, id].pack('ccN'))
59
60
  enable_io_select
60
61
  end
61
62
 
@@ -11,12 +11,12 @@ RSpec.configure do |config|
11
11
  config.before(:each) do
12
12
  Modis.with_connection do |redis|
13
13
  redis.keys('rpush:*').each { |key| redis.del(key) }
14
- end
14
+ end if redis?
15
15
 
16
16
  Rpush.config.logger = ::Logger.new(STDOUT) if functional_example?(self.class.metadata)
17
17
  end
18
18
 
19
19
  config.after(:each) do
20
- DatabaseCleaner.clean if functional_example?(self.class.metadata)
20
+ DatabaseCleaner.clean if active_record? && functional_example?(self.class.metadata)
21
21
  end
22
22
  end
@@ -1,5 +1,7 @@
1
1
  ENV['RAILS_ENV'] = 'test'
2
- client = (ENV['CLIENT'] || :active_record).to_sym
2
+ def client
3
+ (ENV['CLIENT'] || :active_record).to_sym
4
+ end
3
5
 
4
6
  require 'bundler/setup'
5
7
  Bundler.require(:default)
@@ -21,7 +23,20 @@ require 'rpush/client/active_record'
21
23
  require 'rpush/daemon/store/active_record'
22
24
  require 'rpush/daemon/store/redis'
23
25
 
24
- require 'support/active_record_setup'
26
+ def active_record?
27
+ client == :active_record
28
+ end
29
+
30
+ def redis?
31
+ client == :redis
32
+ end
33
+
34
+ def mongoid?
35
+ client == :mongoid
36
+ end
37
+
38
+ require 'support/mongoid_setup' if mongoid?
39
+ require 'support/active_record_setup' if active_record?
25
40
 
26
41
  RPUSH_ROOT = '/tmp/rails_root'
27
42
 
@@ -31,10 +46,6 @@ end
31
46
 
32
47
  RPUSH_CLIENT = Rpush.config.client
33
48
 
34
- def active_record?
35
- Rpush.config.client == :active_record
36
- end
37
-
38
49
  path = File.join(File.dirname(__FILE__), 'support')
39
50
  TEST_CERT = File.read(File.join(path, 'cert_without_password.pem'))
40
51
  TEST_CERT_WITH_PASSWORD = File.read(File.join(path, 'cert_with_password.pem'))
@@ -43,7 +54,7 @@ def after_example_cleanup
43
54
  Rpush.logger = nil
44
55
  Rpush::Daemon.store = nil
45
56
  Rpush::Deprecation.muted do
46
- Rpush.config.set_defaults if Rpush.config.is_a?(Rpush::Configuration)
57
+ Rpush.config = nil
47
58
  Rpush.config.client = RPUSH_CLIENT
48
59
  end
49
60
  Rpush.plugins.values.each(&:unload)
@@ -0,0 +1,69 @@
1
+ development:
2
+ # Configure available database sessions. (required)
3
+ sessions:
4
+ # Defines the default session. (required)
5
+ default:
6
+ # Defines the name of the default database that Mongoid can connect to.
7
+ # (required).
8
+ database: rpush_development
9
+ # Provides the hosts the default session can connect to. Must be an array
10
+ # of host:port pairs. (required)
11
+ hosts:
12
+ - localhost:27017
13
+ options:
14
+ # Change the default write concern. (default = { w: 1 })
15
+ # write:
16
+ # w: 1
17
+
18
+ # Change the default consistency model to primary, secondary.
19
+ # 'secondary' will send reads to secondaries, 'primary' sends everything
20
+ # to master. (default: primary)
21
+ # read: secondary_preferred
22
+
23
+ # How many times Moped should attempt to retry an operation after
24
+ # failure. (default: The number of nodes in the cluster)
25
+ # max_retries: 20
26
+
27
+ # The time in seconds that Moped should wait before retrying an
28
+ # operation on failure. (default: 0.25)
29
+ # retry_interval: 0.25
30
+ # Configure Mongoid specific options. (optional)
31
+ options:
32
+ # Includes the root model name in json serialization. (default: false)
33
+ # include_root_in_json: false
34
+
35
+ # Include the _type field in serialization. (default: false)
36
+ # include_type_for_serialization: false
37
+
38
+ # Preload all models in development, needed when models use
39
+ # inheritance. (default: false)
40
+ # preload_models: false
41
+
42
+ # Protect id and type from mass assignment. (default: true)
43
+ # protect_sensitive_fields: true
44
+
45
+ # Raise an error when performing a #find and the document is not found.
46
+ # (default: true)
47
+ # raise_not_found_error: true
48
+
49
+ # Raise an error when defining a scope with the same name as an
50
+ # existing method. (default: false)
51
+ # scope_overwrite_exception: false
52
+
53
+ # Use Active Support's time zone in conversions. (default: true)
54
+ # use_activesupport_time_zone: true
55
+
56
+ # Ensure all times are UTC in the app side. (default: false)
57
+ # use_utc: false
58
+ test:
59
+ sessions:
60
+ default:
61
+ database: rpush_test
62
+ hosts:
63
+ - localhost:27017
64
+ options:
65
+ read: primary
66
+ # In the test environment we lower the retries and retry interval to
67
+ # low amounts for fast failures.
68
+ max_retries: 1
69
+ retry_interval: 0
@@ -0,0 +1,10 @@
1
+ require 'mongoid'
2
+
3
+ mongoid_yml = File.expand_path("config/mongoid.yml", File.dirname(__FILE__))
4
+ Mongoid.load!(mongoid_yml)
5
+
6
+ RSpec.configure do |config|
7
+ config.before(:each) do
8
+ Mongoid.purge!
9
+ end
10
+ end
@@ -55,4 +55,4 @@ describe Rpush::Client::ActiveRecord::Adm::App do
55
55
  expect(subject.access_token_expired?).to eq(false)
56
56
  end
57
57
  end
58
- end
58
+ end if active_record?
@@ -40,4 +40,4 @@ describe Rpush::Client::ActiveRecord::Adm::Notification do
40
40
  notification.expiry = 100
41
41
  expect(notification.as_json['expiresAfter']).to eq 100
42
42
  end
43
- end
43
+ end if active_record?
@@ -26,4 +26,4 @@ describe Rpush::Client::ActiveRecord::App do
26
26
  app.valid?
27
27
  expect(app.errors[:certificate]).to eq ['value must contain a certificate and a private key.']
28
28
  end
29
- end
29
+ end if active_record?
@@ -6,4 +6,4 @@ describe Rpush::Client::ActiveRecord::Apns::Feedback do
6
6
  expect(notification.valid?).to be_falsey
7
7
  expect(notification.errors[:device_token]).to include('is invalid')
8
8
  end
9
- end
9
+ end if active_record?
@@ -30,7 +30,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification do
30
30
  it "should default the expiry to 1 day" do
31
31
  expect(notification.expiry).to eq 1.day.to_i
32
32
  end
33
- end
33
+ end if active_record?
34
34
 
35
35
  describe Rpush::Client::ActiveRecord::Apns::Notification, "when assigning the device token" do
36
36
  it "should strip spaces from the given string" do
@@ -42,7 +42,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "when assigning the de
42
42
  notification = Rpush::Client::ActiveRecord::Apns::Notification.new(device_token: "<omg>")
43
43
  expect(notification.device_token).to eq "omg"
44
44
  end
45
- end
45
+ end if active_record?
46
46
 
47
47
  describe Rpush::Client::ActiveRecord::Apns::Notification, "as_json" do
48
48
  it "should include the alert if present" do
@@ -92,7 +92,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "as_json" do
92
92
  notification.data = { omg: { ilike: :hashes } }
93
93
  expect(notification.as_json["omg"]["ilike"]).to eq "hashes"
94
94
  end
95
- end
95
+ end if active_record?
96
96
 
97
97
  describe Rpush::Client::ActiveRecord::Apns::Notification, 'MDM' do
98
98
  let(:magic) { 'abc123' }
@@ -108,7 +108,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'MDM' do
108
108
  notification.mdm = magic
109
109
  expect(notification.as_json.key?('aps')).to be_falsey
110
110
  end
111
- end
111
+ end if active_record?
112
112
 
113
113
  describe Rpush::Client::ActiveRecord::Apns::Notification, 'content-available' do
114
114
  let(:notification) { Rpush::Client::ActiveRecord::Apns::Notification.new }
@@ -140,7 +140,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'content-available' do
140
140
  expect(notification.as_json['aps']['content-available']).to eq 1
141
141
  expect(notification.as_json['hi']).to eq 'mom'
142
142
  end
143
- end
143
+ end if active_record?
144
144
 
145
145
  describe Rpush::Client::ActiveRecord::Apns::Notification, 'url-args' do
146
146
  let(:notification) { Rpush::Client::ActiveRecord::Apns::Notification.new }
@@ -153,7 +153,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'url-args' do
153
153
  it 'does not include url-args in the payload if not set' do
154
154
  expect(notification.as_json['aps'].key?('url-args')).to be_falsey
155
155
  end
156
- end
156
+ end if active_record?
157
157
 
158
158
  describe Rpush::Client::ActiveRecord::Apns::Notification, 'category' do
159
159
  let(:notification) { Rpush::Client::ActiveRecord::Apns::Notification.new }
@@ -166,7 +166,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'category' do
166
166
  it 'does not include category in the payload if not set' do
167
167
  expect(notification.as_json['aps'].key?('category')).to be_falsey
168
168
  end
169
- end
169
+ end if active_record?
170
170
 
171
171
  describe Rpush::Client::ActiveRecord::Apns::Notification, 'to_binary' do
172
172
  let(:notification) { Rpush::Client::ActiveRecord::Apns::Notification.new }
@@ -206,7 +206,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'to_binary' do
206
206
  notification.app = Rpush::Client::ActiveRecord::Apns::App.new(name: 'my_app', environment: 'development', certificate: TEST_CERT)
207
207
  expect(notification.to_binary).to eq "\x02\x00\x00\x00\x99\x01\x00 \xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\x02\x00a{\"aps\":{\"alert\":\"Don't panic Mr Mainwaring, don't panic!\",\"badge\":3,\"sound\":\"1.aiff\"},\"hi\":\"mom\"}\x03\x00\x04\x00\x00\x04\xD2\x04\x00\x04\x00\x01Q\x80\x05\x00\x01\n"
208
208
  end
209
- end
209
+ end if active_record?
210
210
 
211
211
  describe Rpush::Client::ActiveRecord::Apns::Notification, "bug #31" do
212
212
  it 'does not confuse a JSON looking string as JSON' do
@@ -221,7 +221,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "bug #31" do
221
221
  notification.alert = "{\"one\":2}"
222
222
  expect(notification.alert).to eq('one' => 2)
223
223
  end
224
- end
224
+ end if active_record?
225
225
 
226
226
  describe Rpush::Client::ActiveRecord::Apns::Notification, "bug #35" do
227
227
  it "should limit payload size to 256 bytes but not the entire packet" do
@@ -235,7 +235,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "bug #35" do
235
235
  expect(notification.payload.bytesize).to be < 256
236
236
  expect(notification).to be_valid
237
237
  end
238
- end
238
+ end if active_record?
239
239
 
240
240
  describe Rpush::Client::ActiveRecord::Apns::Notification, "multi_json usage" do
241
241
  describe Rpush::Client::ActiveRecord::Apns::Notification, "alert" do
@@ -253,4 +253,4 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "multi_json usage" do
253
253
  notification.alert
254
254
  end
255
255
  end
256
- end
256
+ end if active_record?
@@ -27,4 +27,4 @@ describe Rpush::Client::ActiveRecord::App do
27
27
  expect { app.valid? }.to raise_error(NameError)
28
28
  end
29
29
  end
30
- end
30
+ end if active_record?
@@ -31,4 +31,4 @@ describe Rpush::Client::ActiveRecord::Gcm::Notification do
31
31
  notification.expiry = 100
32
32
  expect(notification.as_json['time_to_live']).to eq 100
33
33
  end
34
- end
34
+ end if active_record?
@@ -18,4 +18,4 @@ describe Rpush::Client::ActiveRecord::Notification do
18
18
  expect(notification.app).to be_valid
19
19
  expect(notification).to be_valid
20
20
  end
21
- end
21
+ end if active_record?
@@ -18,4 +18,4 @@ describe Rpush::Client::ActiveRecord::Wpns::Notification do
18
18
  notification.valid?
19
19
  expect(notification.errors[:data]).to include("can't be blank")
20
20
  end
21
- end
21
+ end if active_record?
@@ -43,4 +43,11 @@ describe Rpush::Configuration do
43
43
  Rpush.config.redis_options = { hi: :mom }
44
44
  expect(Modis.redis_options).to eq(hi: :mom)
45
45
  end
46
+
47
+ it 'deprecates feedback_poll=' do
48
+ expect(Rpush::Deprecation).to receive(:warn).with(/feedback_poll= is deprecated/)
49
+ expect do
50
+ Rpush.config.feedback_poll = 123
51
+ end.to change { Rpush.config.apns.feedback_receiver.frequency }.to(123)
52
+ end
46
53
  end
@@ -4,7 +4,7 @@ require 'rpush/daemon/store/active_record'
4
4
  describe Rpush::Daemon::Apns::FeedbackReceiver, 'check_for_feedback' do
5
5
  let(:host) { 'feedback.push.apple.com' }
6
6
  let(:port) { 2196 }
7
- let(:poll) { 60 }
7
+ let(:frequency) { 60 }
8
8
  let(:certificate) { double }
9
9
  let(:password) { double }
10
10
  let(:app) { double(name: 'my_app', password: password, certificate: certificate, environment: 'production') }
@@ -12,11 +12,11 @@ describe Rpush::Daemon::Apns::FeedbackReceiver, 'check_for_feedback' do
12
12
  let(:logger) { double(error: nil, info: nil) }
13
13
  let(:receiver) { Rpush::Daemon::Apns::FeedbackReceiver.new(app) }
14
14
  let(:feedback) { double }
15
- let(:sleeper) { double(Rpush::Daemon::InterruptibleSleep, sleep: nil, start: nil, stop: nil) }
15
+ let(:sleeper) { double(Rpush::Daemon::InterruptibleSleep, sleep: nil, stop: nil) }
16
16
  let(:store) { double(Rpush::Daemon::Store::ActiveRecord, create_apns_feedback: feedback, release_connection: nil) }
17
17
 
18
18
  before do
19
- Rpush.config.feedback_poll = poll
19
+ Rpush.config.apns.feedback_receiver.frequency = frequency
20
20
  allow(Rpush::Daemon::InterruptibleSleep).to receive_messages(new: sleeper)
21
21
  allow(Rpush).to receive_messages(logger: logger)
22
22
  allow(Rpush::Daemon::TcpConnection).to receive_messages(new: connection)
@@ -33,8 +33,8 @@ describe Rpush::Daemon::Apns::FeedbackReceiver, 'check_for_feedback' do
33
33
  end
34
34
  end
35
35
 
36
- it 'initializes the sleeper with the feedback polling duration' do
37
- expect(Rpush::Daemon::InterruptibleSleep).to receive(:new).with(poll).and_return(sleeper)
36
+ it 'initializes the sleeper with the feedback polling frequency' do
37
+ expect(Rpush::Daemon::InterruptibleSleep).to receive_messages(new: sleeper)
38
38
  Rpush::Daemon::Apns::FeedbackReceiver.new(app)
39
39
  end
40
40
 
@@ -4,7 +4,7 @@ describe Rpush::Daemon::Feeder do
4
4
  let!(:app) { Rpush::Apns::App.create!(name: 'my_app', environment: 'development', certificate: TEST_CERT) }
5
5
  let(:notification) { Rpush::Apns::Notification.create!(device_token: "a" * 64, app: app) }
6
6
  let(:logger) { double }
7
- let(:interruptible_sleeper) { double(sleep: nil, stop: nil, start: nil) }
7
+ let(:interruptible_sleeper) { double(sleep: nil, stop: nil) }
8
8
  let(:store) { double(Rpush::Daemon::Store::ActiveRecord, deliverable_notifications: [notification], release_connection: nil) }
9
9
 
10
10
  before do
@@ -86,7 +86,7 @@ describe Rpush::Daemon::Feeder do
86
86
 
87
87
  describe 'wakeup' do
88
88
  it 'interrupts sleep' do
89
- expect(interruptible_sleeper).to receive(:wakeup)
89
+ expect(interruptible_sleeper).to receive(:stop)
90
90
  Rpush::Daemon::Feeder.start
91
91
  Rpush::Daemon::Feeder.wakeup
92
92
  end
@@ -0,0 +1,11 @@
1
+ require 'unit_spec_helper'
2
+
3
+ describe Rpush::Daemon::ProcTitle do
4
+ it 'sets the process title' do
5
+ Rpush.config.embedded = false
6
+ Rpush.config.push = false
7
+ allow(Rpush::Daemon::AppRunner).to receive_messages(total_dispatchers: 2, total_queued: 10)
8
+ expect(Process).to receive(:setproctitle).with('rpush | 10 queued | 2 dispatchers')
9
+ Rpush::Daemon::ProcTitle.update
10
+ end
11
+ end