airbrake-ruby 2.2.3 → 2.2.4
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.rb +1 -2
- data/lib/airbrake-ruby/filter_chain.rb +1 -25
- data/lib/airbrake-ruby/filters/keys_filter.rb +5 -0
- data/lib/airbrake-ruby/filters/thread_filter.rb +25 -12
- data/lib/airbrake-ruby/notice.rb +11 -21
- data/lib/airbrake-ruby/notifier.rb +24 -4
- data/lib/airbrake-ruby/{payload_truncator.rb → truncator.rb} +22 -39
- data/lib/airbrake-ruby/version.rb +1 -1
- data/spec/filter_chain_spec.rb +22 -198
- data/spec/filters/gem_root_filter_spec.rb +46 -0
- data/spec/filters/keys_blacklist_spec.rb +181 -6
- data/spec/filters/keys_whitelist_spec.rb +213 -0
- data/spec/filters/root_directory_filter_spec.rb +44 -0
- data/spec/filters/system_exit_filter_spec.rb +16 -0
- data/spec/filters/thread_filter_spec.rb +197 -51
- data/spec/notice_spec.rb +1 -1
- data/spec/sync_sender_spec.rb +1 -1
- data/spec/{payload_truncator_spec.rb → truncator_spec.rb} +15 -35
- metadata +13 -10
- data/lib/airbrake-ruby/filters.rb +0 -10
- data/spec/notifier_spec/blacklist_keys_spec.rb +0 -192
- data/spec/notifier_spec/whitelist_keys_spec.rb +0 -248
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: airbrake-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Airbrake Technologies, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -115,7 +115,6 @@ files:
|
|
115
115
|
- lib/airbrake-ruby/config.rb
|
116
116
|
- lib/airbrake-ruby/config/validator.rb
|
117
117
|
- lib/airbrake-ruby/filter_chain.rb
|
118
|
-
- lib/airbrake-ruby/filters.rb
|
119
118
|
- lib/airbrake-ruby/filters/gem_root_filter.rb
|
120
119
|
- lib/airbrake-ruby/filters/keys_blacklist.rb
|
121
120
|
- lib/airbrake-ruby/filters/keys_filter.rb
|
@@ -126,10 +125,10 @@ files:
|
|
126
125
|
- lib/airbrake-ruby/nested_exception.rb
|
127
126
|
- lib/airbrake-ruby/notice.rb
|
128
127
|
- lib/airbrake-ruby/notifier.rb
|
129
|
-
- lib/airbrake-ruby/payload_truncator.rb
|
130
128
|
- lib/airbrake-ruby/promise.rb
|
131
129
|
- lib/airbrake-ruby/response.rb
|
132
130
|
- lib/airbrake-ruby/sync_sender.rb
|
131
|
+
- lib/airbrake-ruby/truncator.rb
|
133
132
|
- lib/airbrake-ruby/version.rb
|
134
133
|
- spec/airbrake_spec.rb
|
135
134
|
- spec/async_sender_spec.rb
|
@@ -137,18 +136,20 @@ files:
|
|
137
136
|
- spec/config/validator_spec.rb
|
138
137
|
- spec/config_spec.rb
|
139
138
|
- spec/filter_chain_spec.rb
|
139
|
+
- spec/filters/gem_root_filter_spec.rb
|
140
140
|
- spec/filters/keys_blacklist_spec.rb
|
141
|
+
- spec/filters/keys_whitelist_spec.rb
|
142
|
+
- spec/filters/root_directory_filter_spec.rb
|
143
|
+
- spec/filters/system_exit_filter_spec.rb
|
141
144
|
- spec/filters/thread_filter_spec.rb
|
142
145
|
- spec/nested_exception_spec.rb
|
143
146
|
- spec/notice_spec.rb
|
144
147
|
- spec/notifier_spec.rb
|
145
|
-
- spec/notifier_spec/blacklist_keys_spec.rb
|
146
148
|
- spec/notifier_spec/options_spec.rb
|
147
|
-
- spec/notifier_spec/whitelist_keys_spec.rb
|
148
|
-
- spec/payload_truncator_spec.rb
|
149
149
|
- spec/promise_spec.rb
|
150
150
|
- spec/spec_helper.rb
|
151
151
|
- spec/sync_sender_spec.rb
|
152
|
+
- spec/truncator_spec.rb
|
152
153
|
homepage: https://airbrake.io
|
153
154
|
licenses:
|
154
155
|
- MIT
|
@@ -180,15 +181,17 @@ test_files:
|
|
180
181
|
- spec/config/validator_spec.rb
|
181
182
|
- spec/config_spec.rb
|
182
183
|
- spec/filter_chain_spec.rb
|
184
|
+
- spec/filters/gem_root_filter_spec.rb
|
183
185
|
- spec/filters/keys_blacklist_spec.rb
|
186
|
+
- spec/filters/keys_whitelist_spec.rb
|
187
|
+
- spec/filters/root_directory_filter_spec.rb
|
188
|
+
- spec/filters/system_exit_filter_spec.rb
|
184
189
|
- spec/filters/thread_filter_spec.rb
|
185
190
|
- spec/nested_exception_spec.rb
|
186
191
|
- spec/notice_spec.rb
|
187
|
-
- spec/notifier_spec/blacklist_keys_spec.rb
|
188
192
|
- spec/notifier_spec/options_spec.rb
|
189
|
-
- spec/notifier_spec/whitelist_keys_spec.rb
|
190
193
|
- spec/notifier_spec.rb
|
191
|
-
- spec/payload_truncator_spec.rb
|
192
194
|
- spec/promise_spec.rb
|
193
195
|
- spec/spec_helper.rb
|
194
196
|
- spec/sync_sender_spec.rb
|
197
|
+
- spec/truncator_spec.rb
|
@@ -1,10 +0,0 @@
|
|
1
|
-
module Airbrake
|
2
|
-
##
|
3
|
-
# Represents a namespace for default Airbrake Ruby filters.
|
4
|
-
module Filters
|
5
|
-
##
|
6
|
-
# @return [Array<Symbol>] parts of a Notice's payload that can be modified
|
7
|
-
# by various filters
|
8
|
-
FILTERABLE_KEYS = %i[environment session params].freeze
|
9
|
-
end
|
10
|
-
end
|
@@ -1,192 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe "Airbrake::Notifier blacklist_keys" do
|
4
|
-
def expect_a_request_with_body(body)
|
5
|
-
expect(a_request(:post, endpoint).with(body: body)).to have_been_made.once
|
6
|
-
end
|
7
|
-
|
8
|
-
let(:project_id) { 105138 }
|
9
|
-
let(:project_key) { 'fd04e13d806a90f96614ad8e529b2822' }
|
10
|
-
let(:localhost) { 'http://localhost:8080' }
|
11
|
-
|
12
|
-
let(:endpoint) do
|
13
|
-
"https://airbrake.io/api/v3/projects/#{project_id}/notices?key=#{project_key}"
|
14
|
-
end
|
15
|
-
|
16
|
-
let(:airbrake_params) do
|
17
|
-
{ project_id: project_id,
|
18
|
-
project_key: project_key,
|
19
|
-
logger: Logger.new(StringIO.new) }
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:ex) { AirbrakeTestError.new }
|
23
|
-
|
24
|
-
shared_examples 'blacklisting' do |keys, params|
|
25
|
-
it "filters out the value" do
|
26
|
-
blacklist = { blacklist_keys: keys }
|
27
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(blacklist))
|
28
|
-
|
29
|
-
notifier.notify_sync(ex, params)
|
30
|
-
|
31
|
-
expect_a_request_with_body(expected_body)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
shared_examples 'logging' do |keys, params|
|
36
|
-
it "logs the error" do
|
37
|
-
out = StringIO.new
|
38
|
-
blacklist = { blacklist_keys: keys, logger: Logger.new(out) }
|
39
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(blacklist))
|
40
|
-
|
41
|
-
notifier.notify_sync(ex, params)
|
42
|
-
|
43
|
-
expect(out.string).to match(expected_output)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
before do
|
48
|
-
stub_request(:post, endpoint).to_return(status: 201, body: '{}')
|
49
|
-
end
|
50
|
-
|
51
|
-
context "when blacklisting with a Regexp" do
|
52
|
-
let(:expected_body) { /"params":{"bingo":"\[Filtered\]".*}/ }
|
53
|
-
include_examples('blacklisting', [/\Abin/], bingo: 'bango')
|
54
|
-
end
|
55
|
-
|
56
|
-
context "when blacklisting with a Symbol" do
|
57
|
-
let(:expected_body) { /"params":{"bingo":"\[Filtered\]".*}/ }
|
58
|
-
include_examples('blacklisting', [:bingo], bingo: 'bango')
|
59
|
-
end
|
60
|
-
|
61
|
-
context "when blacklisting with a String" do
|
62
|
-
let(:expected_body) { /"params":{"bingo":"\[Filtered\]".*}/ }
|
63
|
-
include_examples('blacklisting', ['bingo'], bingo: 'bango')
|
64
|
-
end
|
65
|
-
|
66
|
-
context "when payload has a hash" do
|
67
|
-
context "and it is a non-recursive hash" do
|
68
|
-
let(:expected_body) { /"params":{"bongo":{"bish":"\[Filtered\]"}.*}/ }
|
69
|
-
include_examples('blacklisting', ['bish'], bongo: { bish: 'bash' })
|
70
|
-
end
|
71
|
-
|
72
|
-
context "and it is a recursive hash" do
|
73
|
-
let(:expected_body) { /"params":{"bingo":{"bango":"\[Filtered\]"}.*}/ }
|
74
|
-
|
75
|
-
bongo = { bingo: {} }
|
76
|
-
bongo[:bingo][:bango] = bongo
|
77
|
-
|
78
|
-
include_examples('blacklisting', ['bango'], bongo)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
context "when there was invalid pattern provided" do
|
83
|
-
let(:expected_output) do
|
84
|
-
/ERROR.+KeysBlacklist is invalid.+patterns: \[#<Object:.+>\]/
|
85
|
-
end
|
86
|
-
|
87
|
-
include_examples('logging', [Object.new], bingo: 'bango')
|
88
|
-
end
|
89
|
-
|
90
|
-
context "when there was a proc provided, which returns an array of keys" do
|
91
|
-
let(:expected_body) { /"params":{"bingo":"\[Filtered\]","bongo":"bish".*}/ }
|
92
|
-
include_examples('blacklisting', [proc { 'bingo' }], bingo: 'bango', bongo: 'bish')
|
93
|
-
end
|
94
|
-
|
95
|
-
context "when there was a proc provided along with normal keys" do
|
96
|
-
let(:expected_body) do
|
97
|
-
/"params":{"bingo":"bango","bongo":"\[Filtered\]","bash":"\[Filtered\]".*}/
|
98
|
-
end
|
99
|
-
|
100
|
-
include_examples(
|
101
|
-
'blacklisting',
|
102
|
-
[proc { 'bongo' }, :bash],
|
103
|
-
bingo: 'bango', bongo: 'bish', bash: 'bosh'
|
104
|
-
)
|
105
|
-
end
|
106
|
-
|
107
|
-
context "when there was a proc provided, which doesn't return an array of keys" do
|
108
|
-
let(:expected_output) do
|
109
|
-
/ERROR.+KeysBlacklist is invalid.+patterns: \[#<Object:.+>\]/
|
110
|
-
end
|
111
|
-
|
112
|
-
include_examples('logging', [proc { Object.new }], bingo: 'bango')
|
113
|
-
|
114
|
-
it "doesn't blacklist keys" do
|
115
|
-
blacklist = { blacklist_keys: [proc { Object.new }] }
|
116
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(blacklist))
|
117
|
-
|
118
|
-
notifier.notify_sync(ex, bingo: 'bango', bongo: 'bish')
|
119
|
-
|
120
|
-
expect_a_request_with_body(/"params":{"bingo":"bango","bongo":"bish".*}/)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
context "when there was a proc provided, which returns another proc" do
|
125
|
-
context "when called once" do
|
126
|
-
let(:expected_output) do
|
127
|
-
/ERROR.+KeysBlacklist is invalid.+patterns: \[#<Proc:.+>\]/
|
128
|
-
end
|
129
|
-
|
130
|
-
include_examples('logging', [proc { proc { ['bingo'] } }], bingo: 'bango')
|
131
|
-
end
|
132
|
-
|
133
|
-
context "when called twice" do
|
134
|
-
it "unwinds procs and filters keys" do
|
135
|
-
blacklist = { blacklist_keys: [proc { proc { ['bingo'] } }] }
|
136
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(blacklist))
|
137
|
-
|
138
|
-
notifier.notify_sync(ex, bingo: 'bango', bongo: 'bish')
|
139
|
-
notifier.notify_sync(ex, bingo: 'bango', bongo: 'bish')
|
140
|
-
|
141
|
-
expect_a_request_with_body(
|
142
|
-
/"params":{"bingo":"\[Filtered\]","bongo":"bish".*}/
|
143
|
-
)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
it "filters query parameters correctly" do
|
149
|
-
blacklist = { blacklist_keys: ['bish'] }
|
150
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(blacklist))
|
151
|
-
|
152
|
-
notice = notifier.build_notice(ex)
|
153
|
-
notice[:context][:url] = 'http://localhost:3000/crash?foo=bar&baz=bongo&bish=bash&color=%23FFAAFF'
|
154
|
-
|
155
|
-
notifier.notify_sync(notice)
|
156
|
-
|
157
|
-
# rubocop:disable Metrics/LineLength
|
158
|
-
expected_body =
|
159
|
-
%r("context":{.*"url":"http://localhost:3000/crash\?foo=bar&baz=bongo&bish=\[Filtered\]&color=%23FFAAFF".*})
|
160
|
-
# rubocop:enable Metrics/LineLength
|
161
|
-
|
162
|
-
expect_a_request_with_body(expected_body)
|
163
|
-
end
|
164
|
-
|
165
|
-
context "when the user payload is present" do
|
166
|
-
context "and when the user key is ignored" do
|
167
|
-
it "filters out user entirely" do
|
168
|
-
blacklist = { blacklist_keys: ['user'] }
|
169
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(blacklist))
|
170
|
-
|
171
|
-
notice = notifier.build_notice(ex)
|
172
|
-
notice[:context][:user] = { id: 1337, name: 'Bingo Bango' }
|
173
|
-
|
174
|
-
notifier.notify_sync(notice)
|
175
|
-
|
176
|
-
expect_a_request_with_body(/"user":"\[Filtered\]"/)
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
it "filters out individual user fields" do
|
181
|
-
blacklist = { blacklist_keys: ['name'] }
|
182
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(blacklist))
|
183
|
-
|
184
|
-
notice = notifier.build_notice(ex)
|
185
|
-
notice[:context][:user] = { id: 1337, name: 'Bingo Bango' }
|
186
|
-
|
187
|
-
notifier.notify_sync(notice)
|
188
|
-
|
189
|
-
expect_a_request_with_body(/"user":{"id":1337,"name":"\[Filtered\]"}/)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
@@ -1,248 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe "Airbrake::Notifier whitelist_keys" do
|
4
|
-
def expect_a_request_with_body(body)
|
5
|
-
expect(a_request(:post, endpoint).with(body: body)).to have_been_made.once
|
6
|
-
end
|
7
|
-
|
8
|
-
let(:project_id) { 105138 }
|
9
|
-
let(:project_key) { 'fd04e13d806a90f96614ad8e529b2822' }
|
10
|
-
let(:localhost) { 'http://localhost:8080' }
|
11
|
-
|
12
|
-
let(:endpoint) do
|
13
|
-
"https://airbrake.io/api/v3/projects/#{project_id}/notices?key=#{project_key}"
|
14
|
-
end
|
15
|
-
|
16
|
-
let(:airbrake_params) do
|
17
|
-
{ project_id: project_id,
|
18
|
-
project_key: project_key,
|
19
|
-
logger: Logger.new(StringIO.new) }
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:ex) { AirbrakeTestError.new }
|
23
|
-
|
24
|
-
shared_examples 'whitelisting' do |keys, params|
|
25
|
-
it "filters everything but the value of the specified key" do
|
26
|
-
whitelist = { whitelist_keys: keys }
|
27
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(whitelist))
|
28
|
-
|
29
|
-
notifier.notify_sync(ex, params)
|
30
|
-
|
31
|
-
expect_a_request_with_body(expected_body)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
shared_examples 'logging' do |keys, params|
|
36
|
-
it "logs the error" do
|
37
|
-
out = StringIO.new
|
38
|
-
whitelist = { whitelist_keys: keys, logger: Logger.new(out) }
|
39
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(whitelist))
|
40
|
-
|
41
|
-
notifier.notify_sync(ex, params)
|
42
|
-
|
43
|
-
expect(out.string).to match(expected_output)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
before do
|
48
|
-
stub_request(:post, endpoint).to_return(status: 201, body: '{}')
|
49
|
-
end
|
50
|
-
|
51
|
-
context "when whitelisting with a Regexp" do
|
52
|
-
let(:expected_body) do
|
53
|
-
/"params":{"bingo":"bango","bongo":"\[Filtered\]","bash":"\[Filtered\]".*}/
|
54
|
-
end
|
55
|
-
|
56
|
-
include_examples(
|
57
|
-
'whitelisting',
|
58
|
-
[/\Abin/],
|
59
|
-
bingo: 'bango', bongo: 'bish', bash: 'bosh'
|
60
|
-
)
|
61
|
-
end
|
62
|
-
|
63
|
-
context "when whitelisting with a Symbol" do
|
64
|
-
let(:expected_body) do
|
65
|
-
/"params":{"bingo":"\[Filtered\]","bongo":"bish","bash":"\[Filtered\]".*}/
|
66
|
-
end
|
67
|
-
|
68
|
-
include_examples(
|
69
|
-
'whitelisting',
|
70
|
-
[:bongo],
|
71
|
-
bingo: 'bango', bongo: 'bish', bash: 'bosh'
|
72
|
-
)
|
73
|
-
end
|
74
|
-
|
75
|
-
context "when whitelisting with a String" do
|
76
|
-
let(:expected_body) do
|
77
|
-
/"params":{"bingo":"\[Filtered\]","bongo":"\[Filtered\]",
|
78
|
-
"bash":"bosh","bbashh":"\[Filtered\]".*}/x
|
79
|
-
end
|
80
|
-
|
81
|
-
include_examples(
|
82
|
-
'whitelisting',
|
83
|
-
['bash'],
|
84
|
-
bingo: 'bango', bongo: 'bish', bash: 'bosh', bbashh: 'bboshh'
|
85
|
-
)
|
86
|
-
end
|
87
|
-
|
88
|
-
context "when payload has a hash" do
|
89
|
-
context "and it is a non-recursive hash" do
|
90
|
-
let(:expected_body) do
|
91
|
-
/"params":{"bingo":"\[Filtered\]","bongo":{"bish":"bash"}.*}/
|
92
|
-
end
|
93
|
-
|
94
|
-
include_examples(
|
95
|
-
'whitelisting',
|
96
|
-
%w[bongo bish],
|
97
|
-
bingo: 'bango', bongo: { bish: 'bash' }
|
98
|
-
)
|
99
|
-
end
|
100
|
-
|
101
|
-
context "and it is a recursive hash" do
|
102
|
-
it "errors when nested hashes are not filtered" do
|
103
|
-
whitelist = airbrake_params.merge(whitelist_keys: %w[bingo bango])
|
104
|
-
notifier = Airbrake::Notifier.new(whitelist)
|
105
|
-
|
106
|
-
bongo = { bingo: {} }
|
107
|
-
bongo[:bingo][:bango] = bongo
|
108
|
-
|
109
|
-
if RUBY_ENGINE == 'jruby'
|
110
|
-
# JRuby might raise two different exceptions, which represent the
|
111
|
-
# same thing. One is a Java exception, the other is a Ruby
|
112
|
-
# exception. It's probably a JRuby bug:
|
113
|
-
# https://github.com/jruby/jruby/issues/1903
|
114
|
-
begin
|
115
|
-
expect do
|
116
|
-
notifier.notify_sync(ex, bongo)
|
117
|
-
end.to raise_error(SystemStackError)
|
118
|
-
rescue RSpec::Expectations::ExpectationNotMetError
|
119
|
-
expect do
|
120
|
-
notifier.notify_sync(ex, bongo)
|
121
|
-
end.to raise_error(java.lang.StackOverflowError)
|
122
|
-
end
|
123
|
-
else
|
124
|
-
expect do
|
125
|
-
notifier.notify_sync(ex, bongo)
|
126
|
-
end.to raise_error(SystemStackError)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context "when there was a proc provided, which returns an array of keys" do
|
133
|
-
let(:expected_body) do
|
134
|
-
/"params":{"bingo":"\[Filtered\]","bongo":"bish","bash":"\[Filtered\]".*}/
|
135
|
-
end
|
136
|
-
|
137
|
-
include_examples(
|
138
|
-
'whitelisting',
|
139
|
-
[proc { 'bongo' }],
|
140
|
-
bingo: 'bango', bongo: 'bish', bash: 'bosh'
|
141
|
-
)
|
142
|
-
end
|
143
|
-
|
144
|
-
context "when there was a proc provided along with normal keys" do
|
145
|
-
let(:expected_body) do
|
146
|
-
/"params":{"bingo":"\[Filtered\]","bongo":"bish","bash":"bosh".*}/
|
147
|
-
end
|
148
|
-
|
149
|
-
include_examples(
|
150
|
-
'whitelisting',
|
151
|
-
[proc { 'bongo' }, :bash],
|
152
|
-
bingo: 'bango', bongo: 'bish', bash: 'bosh'
|
153
|
-
)
|
154
|
-
end
|
155
|
-
|
156
|
-
context "when there was a proc provided, which returns another proc" do
|
157
|
-
context "when called once" do
|
158
|
-
let(:expected_output) do
|
159
|
-
/ERROR.+KeysWhitelist is invalid.+patterns: \[#<Proc:.+>\]/
|
160
|
-
end
|
161
|
-
|
162
|
-
include_examples('logging', [proc { proc { ['bingo'] } }], bingo: 'bango')
|
163
|
-
end
|
164
|
-
|
165
|
-
context "when called twice" do
|
166
|
-
it "unwinds procs and filters keys" do
|
167
|
-
whitelist = { whitelist_keys: [proc { proc { ['bingo'] } }] }
|
168
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(whitelist))
|
169
|
-
|
170
|
-
notifier.notify_sync(ex, bingo: 'bango', bongo: 'bish')
|
171
|
-
notifier.notify_sync(ex, bingo: 'bango', bongo: 'bish')
|
172
|
-
|
173
|
-
expect_a_request_with_body(
|
174
|
-
/"params":{"bingo":"bango","bongo":"\[Filtered\]".*}/
|
175
|
-
)
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
context "when there was a proc provided, which doesn't return an array of keys" do
|
181
|
-
let(:expected_output) do
|
182
|
-
/ERROR.+KeysWhitelist is invalid.+patterns: \[#<Object:.+>\]/
|
183
|
-
end
|
184
|
-
|
185
|
-
include_examples('logging', [proc { Object.new }], bingo: 'bango')
|
186
|
-
|
187
|
-
it "doesn't whitelist keys" do
|
188
|
-
whitelist = { whitelist_keys: [proc { Object.new }] }
|
189
|
-
notifier = Airbrake::Notifier.new(airbrake_params.merge(whitelist))
|
190
|
-
|
191
|
-
notifier.notify_sync(ex, bingo: 'bango', bongo: 'bish')
|
192
|
-
|
193
|
-
expect_a_request_with_body(
|
194
|
-
/"params":{"bingo":"\[Filtered\]","bongo":"\[Filtered\]".*}/
|
195
|
-
)
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
describe "context/url" do
|
200
|
-
let(:notifier) do
|
201
|
-
Airbrake::Notifier.new(airbrake_params.merge(whitelist_keys: %w[bish]))
|
202
|
-
end
|
203
|
-
|
204
|
-
context "given a standard URL" do
|
205
|
-
it "filters query parameters correctly" do
|
206
|
-
notice = notifier.build_notice(ex)
|
207
|
-
notice[:context][:url] = 'http://localhost:3000/crash?foo=bar&baz=bongo&bish=bash'
|
208
|
-
|
209
|
-
notifier.notify_sync(notice)
|
210
|
-
|
211
|
-
expect_a_request_with_body(
|
212
|
-
# rubocop:disable Metrics/LineLength
|
213
|
-
%r("context":{.*"url":"http://localhost:3000/crash\?foo=\[Filtered\]&baz=\[Filtered\]&bish=bash".*})
|
214
|
-
# rubocop:enable Metrics/LineLength
|
215
|
-
)
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
context "given a non-standard URL" do
|
220
|
-
it "leaves the URL unfiltered" do
|
221
|
-
notice = notifier.build_notice(ex)
|
222
|
-
notice[:context][:url] =
|
223
|
-
'http://localhost:3000/cra]]]sh?foo=bar&baz=bongo&bish=bash'
|
224
|
-
|
225
|
-
notifier.notify_sync(notice)
|
226
|
-
|
227
|
-
expect_a_request_with_body(
|
228
|
-
# rubocop:disable Metrics/LineLength
|
229
|
-
%r("context":{.*"url":"http://localhost:3000/cra\]\]\]sh\?foo=bar&baz=bongo&bish=bash".*})
|
230
|
-
# rubocop:enable Metrics/LineLength
|
231
|
-
)
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
context "given a URL without a query" do
|
236
|
-
it "skips params filtering and leaves the URL untouched" do
|
237
|
-
notice = notifier.build_notice(ex)
|
238
|
-
notice[:context][:url] = 'http://localhost:3000/crash'
|
239
|
-
|
240
|
-
notifier.notify_sync(notice)
|
241
|
-
|
242
|
-
expect_a_request_with_body(
|
243
|
-
%r("context":{.*"url":"http://localhost:3000/crash".*})
|
244
|
-
)
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
end
|