airbrake-ruby 5.0.0.rc.2 → 5.0.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.
- checksums.yaml +4 -4
- data/lib/airbrake-ruby/backtrace.rb +6 -5
- data/lib/airbrake-ruby/config.rb +8 -36
- data/lib/airbrake-ruby/config/processor.rb +7 -3
- data/lib/airbrake-ruby/config/validator.rb +2 -0
- data/lib/airbrake-ruby/file_cache.rb +1 -1
- data/lib/airbrake-ruby/filter_chain.rb +1 -0
- data/lib/airbrake-ruby/filters/dependency_filter.rb +1 -0
- data/lib/airbrake-ruby/filters/gem_root_filter.rb +1 -0
- data/lib/airbrake-ruby/filters/git_last_checkout_filter.rb +1 -2
- data/lib/airbrake-ruby/filters/git_repository_filter.rb +3 -0
- data/lib/airbrake-ruby/filters/git_revision_filter.rb +2 -0
- data/lib/airbrake-ruby/filters/keys_filter.rb +21 -13
- data/lib/airbrake-ruby/filters/root_directory_filter.rb +1 -0
- data/lib/airbrake-ruby/filters/sql_filter.rb +4 -4
- data/lib/airbrake-ruby/filters/system_exit_filter.rb +1 -0
- data/lib/airbrake-ruby/filters/thread_filter.rb +2 -0
- data/lib/airbrake-ruby/ignorable.rb +1 -0
- data/lib/airbrake-ruby/notice_notifier.rb +1 -0
- data/lib/airbrake-ruby/performance_breakdown.rb +1 -6
- data/lib/airbrake-ruby/performance_notifier.rb +1 -14
- data/lib/airbrake-ruby/promise.rb +1 -0
- data/lib/airbrake-ruby/query.rb +1 -6
- data/lib/airbrake-ruby/queue.rb +1 -8
- data/lib/airbrake-ruby/remote_settings.rb +7 -5
- data/lib/airbrake-ruby/remote_settings/settings_data.rb +13 -9
- data/lib/airbrake-ruby/request.rb +1 -8
- data/lib/airbrake-ruby/stat.rb +1 -12
- data/lib/airbrake-ruby/sync_sender.rb +1 -0
- data/lib/airbrake-ruby/tdigest.rb +2 -0
- data/lib/airbrake-ruby/thread_pool.rb +1 -0
- data/lib/airbrake-ruby/truncator.rb +8 -2
- data/lib/airbrake-ruby/version.rb +2 -2
- data/spec/backtrace_spec.rb +26 -26
- data/spec/code_hunk_spec.rb +2 -2
- data/spec/config/processor_spec.rb +5 -19
- data/spec/config_spec.rb +4 -29
- data/spec/filters/gem_root_filter_spec.rb +4 -4
- data/spec/filters/keys_allowlist_spec.rb +1 -0
- data/spec/filters/keys_blocklist_spec.rb +10 -0
- data/spec/filters/root_directory_filter_spec.rb +4 -4
- data/spec/filters/sql_filter_spec.rb +2 -2
- data/spec/notice_notifier/options_spec.rb +2 -2
- data/spec/notice_notifier_spec.rb +2 -2
- data/spec/notice_spec.rb +1 -1
- data/spec/performance_breakdown_spec.rb +0 -12
- data/spec/performance_notifier_spec.rb +0 -25
- data/spec/query_spec.rb +1 -11
- data/spec/queue_spec.rb +1 -13
- data/spec/remote_settings/settings_data_spec.rb +51 -13
- data/spec/remote_settings_spec.rb +14 -14
- data/spec/request_spec.rb +1 -13
- data/spec/spec_helper.rb +4 -4
- data/spec/stat_spec.rb +0 -9
- metadata +5 -5
data/spec/code_hunk_spec.rb
CHANGED
@@ -34,9 +34,9 @@ RSpec.describe Airbrake::CodeHunk do
|
|
34
34
|
eq(
|
35
35
|
1 => 'module Airbrake',
|
36
36
|
2 => ' ##',
|
37
|
-
# rubocop:disable
|
37
|
+
# rubocop:disable Layout/LineLength
|
38
38
|
3 => ' # Represents a chunk of information that is meant to be either sent to',
|
39
|
-
# rubocop:enable
|
39
|
+
# rubocop:enable Layout/LineLength
|
40
40
|
),
|
41
41
|
)
|
42
42
|
end
|
@@ -54,26 +54,13 @@ RSpec.describe Airbrake::Config::Processor do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
context "when the config defines a project_id" do
|
57
|
-
|
58
|
-
|
59
|
-
Airbrake::Config.new(project_id: 123, __remote_configuration: false)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "doesn't set remote settings" do
|
63
|
-
expect(Airbrake::RemoteSettings).not_to receive(:poll)
|
64
|
-
described_class.new(config).process_remote_configuration
|
65
|
-
end
|
57
|
+
let(:config) do
|
58
|
+
Airbrake::Config.new(project_id: 123)
|
66
59
|
end
|
67
60
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
it "sets remote settings" do
|
74
|
-
expect(Airbrake::RemoteSettings).to receive(:poll)
|
75
|
-
described_class.new(config).process_remote_configuration
|
76
|
-
end
|
61
|
+
it "sets remote settings" do
|
62
|
+
expect(Airbrake::RemoteSettings).to receive(:poll)
|
63
|
+
described_class.new(config).process_remote_configuration
|
77
64
|
end
|
78
65
|
end
|
79
66
|
end
|
@@ -142,7 +129,6 @@ RSpec.describe Airbrake::Config::Processor do
|
|
142
129
|
let(:config) do
|
143
130
|
Airbrake::Config.new(
|
144
131
|
project_id: 123,
|
145
|
-
__remote_configuration: true,
|
146
132
|
logger: logger,
|
147
133
|
)
|
148
134
|
end
|
data/spec/config_spec.rb
CHANGED
@@ -26,7 +26,10 @@ RSpec.describe Airbrake::Config do
|
|
26
26
|
its(:query_stats) { is_expected.to eq(true) }
|
27
27
|
its(:job_stats) { is_expected.to eq(true) }
|
28
28
|
its(:error_notifications) { is_expected.to eq(true) }
|
29
|
-
|
29
|
+
|
30
|
+
its(:remote_config_host) do
|
31
|
+
is_expected.to eq('https://v1-production-notifier-configs.s3.amazonaws.com')
|
32
|
+
end
|
30
33
|
|
31
34
|
describe "#new" do
|
32
35
|
context "when user config is passed" do
|
@@ -173,32 +176,4 @@ RSpec.describe Airbrake::Config do
|
|
173
176
|
expect(subject.logger.level).to eq(Logger::WARN)
|
174
177
|
end
|
175
178
|
end
|
176
|
-
|
177
|
-
describe "#blacklist_keys=" do
|
178
|
-
before { allow(Kernel).to receive(:warn) }
|
179
|
-
|
180
|
-
it "sets blocklist_keys instead" do
|
181
|
-
subject.blacklist_keys = [1, 2, 3]
|
182
|
-
expect(subject.blocklist_keys).to eq([1, 2, 3])
|
183
|
-
end
|
184
|
-
|
185
|
-
it "prints a warning" do
|
186
|
-
expect(Kernel).to receive(:warn).with(/use blocklist_keys= instead/)
|
187
|
-
subject.blacklist_keys = [1, 2, 3]
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
describe "#whitelist_keys=" do
|
192
|
-
before { allow(Kernel).to receive(:warn) }
|
193
|
-
|
194
|
-
it "sets allowlist_keys instead" do
|
195
|
-
subject.whitelist_keys = [1, 2, 3]
|
196
|
-
expect(subject.allowlist_keys).to eq([1, 2, 3])
|
197
|
-
end
|
198
|
-
|
199
|
-
it "prints a warning" do
|
200
|
-
expect(Kernel).to receive(:warn).with(/use allowlist_keys= instead/)
|
201
|
-
subject.whitelist_keys = [1, 2, 3]
|
202
|
-
end
|
203
|
-
end
|
204
179
|
end
|
@@ -7,18 +7,18 @@ RSpec.describe Airbrake::Filters::GemRootFilter do
|
|
7
7
|
after { 2.times { Gem.path.pop } }
|
8
8
|
|
9
9
|
it "replaces gem root in the backtrace with a label" do
|
10
|
-
# rubocop:disable
|
10
|
+
# rubocop:disable Layout/LineLength
|
11
11
|
notice[:errors].first[:backtrace] = [
|
12
12
|
{ file: "/home/kyrylo/code/airbrake/ruby/spec/spec_helper.rb" },
|
13
13
|
{ file: "#{root1}/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb" },
|
14
14
|
{ file: "/opt/rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb" },
|
15
15
|
{ file: "#{root2}/gems/rspec-core-3.3.2/exe/rspec" },
|
16
16
|
]
|
17
|
-
# rubocop:enable
|
17
|
+
# rubocop:enable Layout/LineLength
|
18
18
|
|
19
19
|
subject.call(notice)
|
20
20
|
|
21
|
-
# rubocop:disable
|
21
|
+
# rubocop:disable Layout/LineLength
|
22
22
|
expect(notice[:errors].first[:backtrace]).to(
|
23
23
|
eq(
|
24
24
|
[
|
@@ -29,7 +29,7 @@ RSpec.describe Airbrake::Filters::GemRootFilter do
|
|
29
29
|
],
|
30
30
|
),
|
31
31
|
)
|
32
|
-
# rubocop:enable
|
32
|
+
# rubocop:enable Layout/LineLength
|
33
33
|
end
|
34
34
|
|
35
35
|
it "does not filter file when it is nil" do
|
@@ -151,6 +151,7 @@ RSpec.describe Airbrake::Filters::KeysAllowlist do
|
|
151
151
|
# thing. One is a Java exception, the other is a Ruby exception.
|
152
152
|
# Likely a bug: https://github.com/jruby/jruby/issues/1903
|
153
153
|
raise ex unless RUBY_ENGINE == 'jruby'
|
154
|
+
|
154
155
|
expect { subject.call(notice) }.to raise_error(java.lang.StackOverflowError)
|
155
156
|
end
|
156
157
|
end
|
@@ -150,6 +150,16 @@ RSpec.describe Airbrake::Filters::KeysBlocklist do
|
|
150
150
|
{ bongo: { bish: '[Filtered]' } },
|
151
151
|
],
|
152
152
|
)
|
153
|
+
|
154
|
+
it "doesn't mutate the original hash" do
|
155
|
+
params = { bongo: { bish: 'bash' } }
|
156
|
+
notice[:params] = params
|
157
|
+
|
158
|
+
blocklist = described_class.new([:bish])
|
159
|
+
blocklist.call(notice)
|
160
|
+
|
161
|
+
expect(params[:bongo][:bish]).to eq('bash')
|
162
|
+
end
|
153
163
|
end
|
154
164
|
|
155
165
|
context "and it is recursive" do
|
@@ -5,18 +5,18 @@ RSpec.describe Airbrake::Filters::RootDirectoryFilter do
|
|
5
5
|
let(:notice) { Airbrake::Notice.new(AirbrakeTestError.new) }
|
6
6
|
|
7
7
|
it "replaces root directory in the backtrace with a label" do
|
8
|
-
# rubocop:disable
|
8
|
+
# rubocop:disable Layout/LineLength
|
9
9
|
notice[:errors].first[:backtrace] = [
|
10
10
|
{ file: "/home/kyrylo/code/airbrake/ruby/spec/spec_helper.rb" },
|
11
11
|
{ file: "#{root_directory}/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb " },
|
12
12
|
{ file: "/opt/rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb" },
|
13
13
|
{ file: "#{root_directory}/gems/rspec-core-3.3.2/exe/rspec" },
|
14
14
|
]
|
15
|
-
# rubocop:enable
|
15
|
+
# rubocop:enable Layout/LineLength
|
16
16
|
|
17
17
|
subject.call(notice)
|
18
18
|
|
19
|
-
# rubocop:disable
|
19
|
+
# rubocop:disable Layout/LineLength
|
20
20
|
expect(notice[:errors].first[:backtrace]).to(
|
21
21
|
eq(
|
22
22
|
[
|
@@ -27,7 +27,7 @@ RSpec.describe Airbrake::Filters::RootDirectoryFilter do
|
|
27
27
|
],
|
28
28
|
),
|
29
29
|
)
|
30
|
-
# rubocop:enable
|
30
|
+
# rubocop:enable Layout/LineLength
|
31
31
|
end
|
32
32
|
|
33
33
|
it "does not filter file when it is nil" do
|
@@ -22,7 +22,7 @@ RSpec.describe Airbrake::Filters::SqlFilter do
|
|
22
22
|
|
23
23
|
ALL_DIALECTS = %i[mysql postgres sqlite cassandra oracle].freeze
|
24
24
|
|
25
|
-
# rubocop:disable
|
25
|
+
# rubocop:disable Layout/LineLength
|
26
26
|
[
|
27
27
|
{
|
28
28
|
input: 'SELECT * FROM things;',
|
@@ -229,7 +229,7 @@ RSpec.describe Airbrake::Filters::SqlFilter do
|
|
229
229
|
].each do |test|
|
230
230
|
include_examples 'query filtering', test
|
231
231
|
end
|
232
|
-
# rubocop:enable
|
232
|
+
# rubocop:enable Layout/LineLength
|
233
233
|
|
234
234
|
[
|
235
235
|
'COMMIT',
|
@@ -149,10 +149,10 @@ RSpec.describe Airbrake::NoticeNotifier do
|
|
149
149
|
expect(proxied_request.header['proxy-authorization'].first)
|
150
150
|
.to eq('Basic dXNlcjpwYXNzd29yZA==')
|
151
151
|
|
152
|
-
# rubocop:disable
|
152
|
+
# rubocop:disable Layout/LineLength
|
153
153
|
expect(proxied_request.request_line)
|
154
154
|
.to eq("POST http://localhost:#{proxy.config[:Port]}/api/v3/projects/105138/notices HTTP/1.1\r\n")
|
155
|
-
# rubocop:enable
|
155
|
+
# rubocop:enable Layout/LineLength
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
@@ -309,7 +309,7 @@ RSpec.describe Airbrake::NoticeNotifier do
|
|
309
309
|
|
310
310
|
notice = subject.build_notice(Exception.new)
|
311
311
|
|
312
|
-
# rubocop:disable
|
312
|
+
# rubocop:disable Layout/LineLength
|
313
313
|
expect(notice[:errors].first[:backtrace]).to eq(
|
314
314
|
[
|
315
315
|
{ file: 'org/jruby/RubyKernel.java', line: 998, function: 'eval' },
|
@@ -317,7 +317,7 @@ RSpec.describe Airbrake::NoticeNotifier do
|
|
317
317
|
{ file: '/ruby/stdlib/irb.rb:489', line: 489, function: 'block in eval_input' },
|
318
318
|
],
|
319
319
|
)
|
320
|
-
# rubocop:enable
|
320
|
+
# rubocop:enable Layout/LineLength
|
321
321
|
end
|
322
322
|
end
|
323
323
|
|
data/spec/notice_spec.rb
CHANGED
@@ -268,7 +268,7 @@ RSpec.describe Airbrake::Notice do
|
|
268
268
|
it "sets a payload value" do
|
269
269
|
hash = { bingo: 'bango' }
|
270
270
|
notice[:params] = hash
|
271
|
-
expect(notice[:params]).to
|
271
|
+
expect(notice[:params]).to eq(hash)
|
272
272
|
end
|
273
273
|
|
274
274
|
it "raises error if notice is ignored" do
|
@@ -3,21 +3,9 @@ RSpec.describe Airbrake::PerformanceBreakdown do
|
|
3
3
|
subject do
|
4
4
|
described_class.new(
|
5
5
|
method: 'GET', route: '/', response_type: '', groups: {},
|
6
|
-
start_time: Time.now
|
7
6
|
)
|
8
7
|
end
|
9
8
|
|
10
9
|
it { is_expected.to respond_to(:stash) }
|
11
10
|
end
|
12
|
-
|
13
|
-
describe "#end_time" do
|
14
|
-
it "is always equal to start_time + 1 second by default" do
|
15
|
-
time = Time.now
|
16
|
-
performance_breakdown = described_class.new(
|
17
|
-
method: 'GET', route: '/', response_type: '', groups: {},
|
18
|
-
start_time: time
|
19
|
-
)
|
20
|
-
expect(performance_breakdown.end_time).to eq(time + 1)
|
21
|
-
end
|
22
|
-
end
|
23
11
|
end
|
@@ -541,31 +541,6 @@ RSpec.describe Airbrake::PerformanceNotifier do
|
|
541
541
|
end
|
542
542
|
end
|
543
543
|
|
544
|
-
context "when :start_time is specified (deprecated)" do
|
545
|
-
before do
|
546
|
-
allow(Kernel).to receive(:warn)
|
547
|
-
end
|
548
|
-
|
549
|
-
it "uses the value of :start_time to update stat" do
|
550
|
-
subject.notify(
|
551
|
-
Airbrake::Query.new(
|
552
|
-
method: 'POST',
|
553
|
-
route: '/foo',
|
554
|
-
query: 'SELECT * FROM things',
|
555
|
-
start_time: Time.new(2018, 1, 1, 0, 49, 0, 0),
|
556
|
-
end_time: Time.new(2018, 1, 1, 0, 50, 0, 0),
|
557
|
-
),
|
558
|
-
)
|
559
|
-
subject.close
|
560
|
-
|
561
|
-
expect(
|
562
|
-
a_request(:put, queries).with(
|
563
|
-
body: /"count":1,"sum":60000.0,"sumsq":3600000000.0/,
|
564
|
-
),
|
565
|
-
).to have_been_made
|
566
|
-
end
|
567
|
-
end
|
568
|
-
|
569
544
|
context "when provided :timing is zero" do
|
570
545
|
it "doesn't notify" do
|
571
546
|
queue = Airbrake::Queue.new(queue: 'bananas', error_count: 0, timing: 0)
|
data/spec/query_spec.rb
CHANGED
@@ -2,20 +2,10 @@ RSpec.describe Airbrake::Query do
|
|
2
2
|
describe "#stash" do
|
3
3
|
subject do
|
4
4
|
described_class.new(
|
5
|
-
method: 'GET', route: '/', query: '',
|
5
|
+
method: 'GET', route: '/', query: '',
|
6
6
|
)
|
7
7
|
end
|
8
8
|
|
9
9
|
it { is_expected.to respond_to(:stash) }
|
10
10
|
end
|
11
|
-
|
12
|
-
describe "#end_time" do
|
13
|
-
it "is always equal to start_time + 1 second by default" do
|
14
|
-
time = Time.now
|
15
|
-
query = described_class.new(
|
16
|
-
method: 'GET', route: '/', query: '', start_time: time,
|
17
|
-
)
|
18
|
-
expect(query.end_time).to eq(time + 1)
|
19
|
-
end
|
20
|
-
end
|
21
11
|
end
|
data/spec/queue_spec.rb
CHANGED
@@ -9,21 +9,9 @@ RSpec.describe Airbrake::Queue do
|
|
9
9
|
it { is_expected.to respond_to(:stash) }
|
10
10
|
end
|
11
11
|
|
12
|
-
describe "#end_time" do
|
13
|
-
it "is always equal to start_time + 1 second by default" do
|
14
|
-
time = Time.now
|
15
|
-
queue = described_class.new(
|
16
|
-
queue: 'bananas', error_count: 0, start_time: time,
|
17
|
-
)
|
18
|
-
expect(queue.end_time).to eq(time + 1)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
12
|
describe "#route" do
|
23
13
|
it "always returns an empty route" do
|
24
|
-
queue = described_class.new(
|
25
|
-
queue: 'a', error_count: 0, start_time: Time.now,
|
26
|
-
)
|
14
|
+
queue = described_class.new(queue: 'a', error_count: 0)
|
27
15
|
expect(queue.route).to be_empty
|
28
16
|
end
|
29
17
|
end
|
@@ -9,12 +9,11 @@ RSpec.describe Airbrake::RemoteSettings::SettingsData do
|
|
9
9
|
|
10
10
|
it "merges the given hash with the data" do
|
11
11
|
settings_data = described_class.new(project_id, {})
|
12
|
-
# rubocop:disable Performance/RedundantMerge
|
13
12
|
settings_data.merge!('poll_sec' => 123, 'config_route' => 'abc')
|
14
|
-
# rubocop:enable Performance/RedundantMerge
|
15
13
|
|
16
14
|
expect(settings_data.interval).to eq(123)
|
17
|
-
expect(settings_data.config_route
|
15
|
+
expect(settings_data.config_route(''))
|
16
|
+
.to eq('abc/2020-06-18/config/123/config.json')
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
@@ -61,25 +60,64 @@ RSpec.describe Airbrake::RemoteSettings::SettingsData do
|
|
61
60
|
end
|
62
61
|
|
63
62
|
describe "#config_route" do
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
let(:host) { 'https://v1-production-notifier-configs.s3.amazonaws.com' }
|
64
|
+
|
65
|
+
context "when given a remote host through the remote config" do
|
66
|
+
context "and when the remote host ends with a slash" do
|
67
|
+
let(:data) do
|
68
|
+
{ 'config_route' => 'http://example.com/' }
|
69
|
+
end
|
70
|
+
|
71
|
+
it "returns the route with the host" do
|
72
|
+
expect(described_class.new(project_id, data).config_route(host)).to eq(
|
73
|
+
"http://example.com/2020-06-18/config/#{project_id}/config.json",
|
74
|
+
)
|
75
|
+
end
|
67
76
|
end
|
68
77
|
|
69
|
-
|
70
|
-
|
71
|
-
|
78
|
+
context "and when the remote host doesn't with a slash" do
|
79
|
+
let(:data) do
|
80
|
+
{ 'config_route' => 'http://example.com' }
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns the route with the host" do
|
84
|
+
expect(described_class.new(project_id, data).config_route(host)).to eq(
|
85
|
+
"http://example.com/2020-06-18/config/#{project_id}/config.json",
|
86
|
+
)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context "when given a remote host through local configuration" do
|
92
|
+
context "and when the remote host ends with a slash" do
|
93
|
+
let(:host) { 'http://example.com/' }
|
94
|
+
|
95
|
+
it "returns the route with the host" do
|
96
|
+
expect(described_class.new(project_id, {}).config_route(host)).to eq(
|
97
|
+
"http://example.com/2020-06-18/config/#{project_id}/config.json",
|
98
|
+
)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "and when the remote host doesn't with a slash" do
|
103
|
+
let(:host) { 'http://example.com' }
|
104
|
+
|
105
|
+
it "returns the route with the host" do
|
106
|
+
expect(described_class.new(project_id, {}).config_route(host)).to eq(
|
107
|
+
"http://example.com/2020-06-18/config/#{project_id}/config.json",
|
108
|
+
)
|
109
|
+
end
|
72
110
|
end
|
73
111
|
end
|
74
112
|
|
75
|
-
context "when the
|
113
|
+
context "when the given remote host in the remote config is nil" do
|
76
114
|
let(:data) do
|
77
115
|
{ 'config_route' => nil }
|
78
116
|
end
|
79
117
|
|
80
|
-
it "returns the
|
81
|
-
expect(described_class.new(project_id, data).config_route).to eq(
|
82
|
-
'https://v1-
|
118
|
+
it "returns the route with the given host instead" do
|
119
|
+
expect(described_class.new(project_id, data).config_route(host)).to eq(
|
120
|
+
'https://v1-production-notifier-configs.s3.amazonaws.com/' \
|
83
121
|
"2020-06-18/config/#{project_id}/config.json",
|
84
122
|
)
|
85
123
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
RSpec.describe Airbrake::RemoteSettings do
|
2
2
|
let(:project_id) { 123 }
|
3
|
+
let(:host) { 'https://v1-production-notifier-configs.s3.amazonaws.com' }
|
3
4
|
|
4
5
|
let(:endpoint) do
|
5
|
-
"
|
6
|
-
"#{project_id}/config.json"
|
6
|
+
"#{host}/2020-06-18/config/#{project_id}/config.json"
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:body) do
|
@@ -51,7 +51,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
51
51
|
expect(File).to receive(:read).with(config_path)
|
52
52
|
expect(settings_data).to receive(:merge!).with(body).twice
|
53
53
|
|
54
|
-
remote_settings = described_class.poll(project_id) {}
|
54
|
+
remote_settings = described_class.poll(project_id, host) {}
|
55
55
|
sleep(0.2)
|
56
56
|
remote_settings.stop_polling
|
57
57
|
|
@@ -62,7 +62,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
62
62
|
block = proc {}
|
63
63
|
expect(block).to receive(:call).twice
|
64
64
|
|
65
|
-
remote_settings = described_class.poll(project_id, &block)
|
65
|
+
remote_settings = described_class.poll(project_id, host, &block)
|
66
66
|
sleep(0.2)
|
67
67
|
remote_settings.stop_polling
|
68
68
|
|
@@ -76,7 +76,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
76
76
|
'**Airbrake: config loading failed: StandardError',
|
77
77
|
)
|
78
78
|
|
79
|
-
remote_settings = described_class.poll(project_id) {}
|
79
|
+
remote_settings = described_class.poll(project_id, host) {}
|
80
80
|
sleep(0.2)
|
81
81
|
remote_settings.stop_polling
|
82
82
|
|
@@ -87,7 +87,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
87
87
|
|
88
88
|
context "when no errors are raised" do
|
89
89
|
it "makes a request to AWS S3" do
|
90
|
-
remote_settings = described_class.poll(project_id) {}
|
90
|
+
remote_settings = described_class.poll(project_id, host) {}
|
91
91
|
sleep(0.1)
|
92
92
|
remote_settings.stop_polling
|
93
93
|
|
@@ -95,7 +95,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
95
95
|
end
|
96
96
|
|
97
97
|
it "sends params about the environment with the request" do
|
98
|
-
remote_settings = described_class.poll(project_id) {}
|
98
|
+
remote_settings = described_class.poll(project_id, host) {}
|
99
99
|
sleep(0.1)
|
100
100
|
remote_settings.stop_polling
|
101
101
|
|
@@ -107,7 +107,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
107
107
|
|
108
108
|
it "fetches remote settings" do
|
109
109
|
settings = nil
|
110
|
-
remote_settings = described_class.poll(project_id) do |data|
|
110
|
+
remote_settings = described_class.poll(project_id, host) do |data|
|
111
111
|
settings = data
|
112
112
|
end
|
113
113
|
sleep(0.1)
|
@@ -126,7 +126,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
126
126
|
|
127
127
|
it "doesn't fetch remote settings" do
|
128
128
|
settings = nil
|
129
|
-
remote_settings = described_class.poll(project_id) do |data|
|
129
|
+
remote_settings = described_class.poll(project_id, host) do |data|
|
130
130
|
settings = data
|
131
131
|
end
|
132
132
|
sleep(0.1)
|
@@ -144,7 +144,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
144
144
|
|
145
145
|
it "doesn't update settings data" do
|
146
146
|
settings = nil
|
147
|
-
remote_settings = described_class.poll(project_id) do |data|
|
147
|
+
remote_settings = described_class.poll(project_id, host) do |data|
|
148
148
|
settings = data
|
149
149
|
end
|
150
150
|
sleep(0.1)
|
@@ -163,7 +163,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
163
163
|
|
164
164
|
it "doesn't update settings data" do
|
165
165
|
settings = nil
|
166
|
-
remote_settings = described_class.poll(project_id) do |data|
|
166
|
+
remote_settings = described_class.poll(project_id, host) do |data|
|
167
167
|
settings = data
|
168
168
|
end
|
169
169
|
sleep(0.1)
|
@@ -189,7 +189,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
189
189
|
end
|
190
190
|
|
191
191
|
it "makes the next request to the specified config route" do
|
192
|
-
remote_settings = described_class.poll(project_id) {}
|
192
|
+
remote_settings = described_class.poll(project_id, host) {}
|
193
193
|
sleep(0.2)
|
194
194
|
|
195
195
|
remote_settings.stop_polling
|
@@ -205,7 +205,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
205
205
|
expect(Dir).to receive(:mkdir).with(config_dir)
|
206
206
|
expect(File).to receive(:write).with(config_path, body.to_json)
|
207
207
|
|
208
|
-
remote_settings = described_class.poll(project_id) {}
|
208
|
+
remote_settings = described_class.poll(project_id, host) {}
|
209
209
|
sleep(0.2)
|
210
210
|
remote_settings.stop_polling
|
211
211
|
|
@@ -219,7 +219,7 @@ RSpec.describe Airbrake::RemoteSettings do
|
|
219
219
|
'**Airbrake: config dumping failed: StandardError',
|
220
220
|
)
|
221
221
|
|
222
|
-
remote_settings = described_class.poll(project_id) {}
|
222
|
+
remote_settings = described_class.poll(project_id, host) {}
|
223
223
|
sleep(0.2)
|
224
224
|
remote_settings.stop_polling
|
225
225
|
|