appsignal 2.5.3 → 2.6.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -1
  3. data/.rubocop_todo.yml +1 -1
  4. data/.travis.yml +8 -1
  5. data/CHANGELOG.md +12 -0
  6. data/appsignal.gemspec +2 -2
  7. data/benchmark.rake +6 -0
  8. data/ext/agent.yml +35 -35
  9. data/ext/appsignal_extension.c +27 -9
  10. data/lib/appsignal.rb +15 -19
  11. data/lib/appsignal/auth_check.rb +2 -0
  12. data/lib/appsignal/capistrano.rb +2 -0
  13. data/lib/appsignal/cli.rb +2 -0
  14. data/lib/appsignal/cli/demo.rb +2 -0
  15. data/lib/appsignal/cli/diagnose.rb +2 -0
  16. data/lib/appsignal/cli/helpers.rb +2 -0
  17. data/lib/appsignal/cli/install.rb +15 -1
  18. data/lib/appsignal/cli/notify_of_deploy.rb +8 -0
  19. data/lib/appsignal/config.rb +44 -5
  20. data/lib/appsignal/demo.rb +2 -0
  21. data/lib/appsignal/event_formatter.rb +2 -0
  22. data/lib/appsignal/event_formatter/action_view/render_formatter.rb +2 -0
  23. data/lib/appsignal/event_formatter/active_record/instantiation_formatter.rb +2 -0
  24. data/lib/appsignal/event_formatter/active_record/sql_formatter.rb +2 -0
  25. data/lib/appsignal/event_formatter/elastic_search/search_formatter.rb +2 -0
  26. data/lib/appsignal/event_formatter/faraday/request_formatter.rb +2 -0
  27. data/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter.rb +2 -0
  28. data/lib/appsignal/event_formatter/moped/query_formatter.rb +2 -0
  29. data/lib/appsignal/extension.rb +2 -0
  30. data/lib/appsignal/extension/jruby.rb +15 -13
  31. data/lib/appsignal/garbage_collection_profiler.rb +2 -0
  32. data/lib/appsignal/hooks.rb +2 -0
  33. data/lib/appsignal/hooks/action_cable.rb +2 -0
  34. data/lib/appsignal/hooks/active_support_notifications.rb +2 -0
  35. data/lib/appsignal/hooks/celluloid.rb +2 -0
  36. data/lib/appsignal/hooks/data_mapper.rb +2 -0
  37. data/lib/appsignal/hooks/delayed_job.rb +2 -0
  38. data/lib/appsignal/hooks/mongo_ruby_driver.rb +2 -0
  39. data/lib/appsignal/hooks/net_http.rb +2 -0
  40. data/lib/appsignal/hooks/passenger.rb +2 -0
  41. data/lib/appsignal/hooks/puma.rb +2 -0
  42. data/lib/appsignal/hooks/que.rb +2 -0
  43. data/lib/appsignal/hooks/rake.rb +2 -0
  44. data/lib/appsignal/hooks/redis.rb +2 -0
  45. data/lib/appsignal/hooks/sequel.rb +2 -0
  46. data/lib/appsignal/hooks/shoryuken.rb +6 -2
  47. data/lib/appsignal/hooks/sidekiq.rb +4 -2
  48. data/lib/appsignal/hooks/unicorn.rb +2 -0
  49. data/lib/appsignal/hooks/webmachine.rb +2 -0
  50. data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +2 -0
  51. data/lib/appsignal/integrations/data_mapper.rb +2 -0
  52. data/lib/appsignal/integrations/delayed_job_plugin.rb +6 -2
  53. data/lib/appsignal/integrations/grape.rb +2 -0
  54. data/lib/appsignal/integrations/mongo_ruby_driver.rb +2 -0
  55. data/lib/appsignal/integrations/object.rb +2 -0
  56. data/lib/appsignal/integrations/padrino.rb +3 -4
  57. data/lib/appsignal/integrations/que.rb +2 -0
  58. data/lib/appsignal/integrations/railtie.rb +2 -0
  59. data/lib/appsignal/integrations/rake.rb +2 -0
  60. data/lib/appsignal/integrations/resque.rb +2 -0
  61. data/lib/appsignal/integrations/resque_active_job.rb +6 -2
  62. data/lib/appsignal/integrations/sinatra.rb +2 -0
  63. data/lib/appsignal/integrations/webmachine.rb +2 -0
  64. data/lib/appsignal/js_exception_transaction.rb +2 -0
  65. data/lib/appsignal/marker.rb +2 -0
  66. data/lib/appsignal/minutely.rb +2 -0
  67. data/lib/appsignal/rack/generic_instrumentation.rb +2 -0
  68. data/lib/appsignal/rack/js_exception_catcher.rb +2 -0
  69. data/lib/appsignal/rack/rails_instrumentation.rb +2 -0
  70. data/lib/appsignal/rack/sinatra_instrumentation.rb +2 -0
  71. data/lib/appsignal/rack/streaming_listener.rb +2 -0
  72. data/lib/appsignal/system.rb +2 -0
  73. data/lib/appsignal/transaction.rb +13 -10
  74. data/lib/appsignal/transmitter.rb +2 -0
  75. data/lib/appsignal/utils.rb +3 -1
  76. data/lib/appsignal/utils/{params_sanitizer.rb → hash_sanitizer.rb} +12 -11
  77. data/lib/appsignal/utils/query_params_sanitizer.rb +2 -0
  78. data/lib/appsignal/version.rb +3 -1
  79. data/lib/sequel/extensions/appsignal_integration.rb +2 -0
  80. data/resources/appsignal.yml.erb +5 -0
  81. data/spec/lib/appsignal/auth_check_spec.rb +11 -2
  82. data/spec/lib/appsignal/cli/install_spec.rb +33 -0
  83. data/spec/lib/appsignal/config_spec.rb +76 -18
  84. data/spec/lib/appsignal/extension_spec.rb +3 -3
  85. data/spec/lib/appsignal/integrations/padrino_spec.rb +8 -28
  86. data/spec/lib/appsignal/transaction_spec.rb +63 -30
  87. data/spec/lib/appsignal/utils/{params_sanitizer_spec.rb → hash_sanitizer_spec.rb} +6 -6
  88. data/spec/lib/appsignal_spec.rb +180 -158
  89. data/spec/support/helpers/std_streams_helper.rb +19 -12
  90. data/spec/support/project_fixture/config/appsignal.yml +21 -0
  91. metadata +11 -11
@@ -30,7 +30,7 @@ describe Appsignal::Config do
30
30
  end
31
31
 
32
32
  describe "config based on the system" do
33
- let(:config) { project_fixture_config(:none) }
33
+ let(:config) { silence { project_fixture_config(:none) } }
34
34
 
35
35
  describe ":active" do
36
36
  subject { config[:active] }
@@ -76,7 +76,9 @@ describe Appsignal::Config do
76
76
  "production",
77
77
  :push_api_key => "abc",
78
78
  :name => "TestApp",
79
- :active => true
79
+ :active => true,
80
+ :revision => "v2.5.1",
81
+ :request_headers => []
80
82
  )
81
83
  end
82
84
 
@@ -88,6 +90,7 @@ describe Appsignal::Config do
88
90
  :ignore_errors => [],
89
91
  :ignore_namespaces => [],
90
92
  :filter_parameters => [],
93
+ :filter_session_data => [],
91
94
  :instrument_net_http => true,
92
95
  :instrument_redis => true,
93
96
  :instrument_sequel => true,
@@ -103,10 +106,11 @@ describe Appsignal::Config do
103
106
  :enable_gc_instrumentation => false,
104
107
  :enable_host_metrics => true,
105
108
  :enable_minutely_probes => false,
106
- :hostname => Socket.gethostname,
107
109
  :ca_file_path => File.join(resources_dir, "cacert.pem"),
108
110
  :dns_servers => [],
109
- :files_world_accessible => true
111
+ :files_world_accessible => true,
112
+ :revision => "v2.5.1",
113
+ :request_headers => []
110
114
  )
111
115
  end
112
116
 
@@ -134,7 +138,8 @@ describe Appsignal::Config do
134
138
  described_class.new(
135
139
  "non-existing-path",
136
140
  "production",
137
- :active => false
141
+ :active => false,
142
+ :request_headers => []
138
143
  )
139
144
  end
140
145
  before { ENV["APPSIGNAL_PUSH_API_KEY"] = "abc" }
@@ -298,6 +303,8 @@ describe Appsignal::Config do
298
303
  ENV["APPSIGNAL_INSTRUMENT_REDIS"] = "false"
299
304
  ENV["APPSIGNAL_INSTRUMENT_SEQUEL"] = "false"
300
305
  ENV["APPSIGNAL_FILES_WORLD_ACCESSIBLE"] = "false"
306
+ ENV["APPSIGNAL_REQUEST_HEADERS"] = "accept,accept-charset"
307
+ ENV["APP_REVISION"] = "v2.5.1"
301
308
  end
302
309
 
303
310
  it "overrides config with environment values" do
@@ -316,6 +323,8 @@ describe Appsignal::Config do
316
323
  expect(config[:instrument_redis]).to eq(false)
317
324
  expect(config[:instrument_sequel]).to eq(false)
318
325
  expect(config[:files_world_accessible]).to eq(false)
326
+ expect(config[:request_headers]).to eq(%w[accept accept-charset])
327
+ expect(config[:revision]).to eq("v2.5.1")
319
328
  end
320
329
 
321
330
  context "with mixed case `true` env variables values" do
@@ -356,7 +365,7 @@ describe Appsignal::Config do
356
365
  end
357
366
 
358
367
  describe "#[]" do
359
- let(:config) { project_fixture_config(:none, :push_api_key => "foo") }
368
+ let(:config) { project_fixture_config(:none, :push_api_key => "foo", :request_headers => []) }
360
369
 
361
370
  context "with existing key" do
362
371
  it "gets the value" do
@@ -400,10 +409,10 @@ describe Appsignal::Config do
400
409
  config[:ignore_namespaces] = %w[admin private_namespace]
401
410
  config[:log] = "stdout"
402
411
  config[:log_path] = "/tmp"
403
- config[:hostname] = "app1.local"
404
412
  config[:filter_parameters] = %w[password confirm_password]
405
413
  config[:running_in_container] = false
406
414
  config[:dns_servers] = ["8.8.8.8", "8.8.4.4"]
415
+ config[:revision] = "v2.5.1"
407
416
  config.write_to_environment
408
417
  end
409
418
 
@@ -423,19 +432,30 @@ describe Appsignal::Config do
423
432
  expect(ENV["_APPSIGNAL_IGNORE_ACTIONS"]).to eq "action1,action2"
424
433
  expect(ENV["_APPSIGNAL_IGNORE_ERRORS"]).to eq "ExampleStandardError,AnotherError"
425
434
  expect(ENV["_APPSIGNAL_IGNORE_NAMESPACES"]).to eq "admin,private_namespace"
426
- expect(ENV["_APPSIGNAL_FILTER_PARAMETERS"]).to eq "password,confirm_password"
427
435
  expect(ENV["_APPSIGNAL_SEND_PARAMS"]).to eq "true"
428
436
  expect(ENV["_APPSIGNAL_RUNNING_IN_CONTAINER"]).to eq "false"
429
437
  expect(ENV["_APPSIGNAL_ENABLE_HOST_METRICS"]).to eq "true"
430
438
  expect(ENV["_APPSIGNAL_ENABLE_MINUTELY_PROBES"]).to eq "false"
431
- expect(ENV["_APPSIGNAL_HOSTNAME"]).to eq "app1.local"
439
+ expect(ENV["_APPSIGNAL_HOSTNAME"]).to eq ""
432
440
  expect(ENV["_APPSIGNAL_PROCESS_NAME"]).to include "rspec"
433
441
  expect(ENV["_APPSIGNAL_CA_FILE_PATH"]).to eq File.join(resources_dir, "cacert.pem")
434
442
  expect(ENV["_APPSIGNAL_DNS_SERVERS"]).to eq "8.8.8.8,8.8.4.4"
435
443
  expect(ENV["_APPSIGNAL_FILES_WORLD_ACCESSIBLE"]).to eq "true"
444
+ expect(ENV["_APP_REVISION"]).to eq "v2.5.1"
436
445
  expect(ENV).to_not have_key("_APPSIGNAL_WORKING_DIR_PATH")
437
446
  end
438
447
 
448
+ context "with :hostname" do
449
+ before do
450
+ config[:hostname] = "Alices-MBP.example.com"
451
+ config.write_to_environment
452
+ end
453
+
454
+ it "sets the modified :hostname" do
455
+ expect(ENV["_APPSIGNAL_HOSTNAME"]).to eq "Alices-MBP.example.com"
456
+ end
457
+ end
458
+
439
459
  context "with :working_dir_path" do
440
460
  before do
441
461
  config[:working_dir_path] = "/tmp/appsignal2"
@@ -613,23 +633,61 @@ describe Appsignal::Config do
613
633
  end
614
634
 
615
635
  describe "#validate" do
616
- before { config.validate }
617
636
  subject { config.valid? }
618
- let(:config) { described_class.new(Dir.pwd, "production", :push_api_key => push_api_key) }
637
+ let(:config) do
638
+ described_class.new(Dir.pwd, "production", config_options)
639
+ end
619
640
 
620
- context "with missing push_api_key" do
621
- let(:push_api_key) { nil }
641
+ describe "push_api_key" do
642
+ let(:config_options) { { :push_api_key => push_api_key, :request_headers => [] } }
643
+ before { config.validate }
622
644
 
623
- it "sets valid to false" do
624
- is_expected.to eq(false)
645
+ context "with missing push_api_key" do
646
+ let(:push_api_key) { nil }
647
+
648
+ it "sets valid to false" do
649
+ is_expected.to eq(false)
650
+ end
651
+ end
652
+
653
+ context "with push_api_key present" do
654
+ let(:push_api_key) { "abc" }
655
+
656
+ it "sets valid to true" do
657
+ is_expected.to eq(true)
658
+ end
625
659
  end
626
660
  end
627
661
 
628
- context "with push_api_key present" do
662
+ describe "request_headers option validation" do
663
+ let(:out_stream) { std_stream }
664
+ let(:output) { out_stream.read }
629
665
  let(:push_api_key) { "abc" }
666
+ let(:config_options) { { :push_api_key => push_api_key } }
667
+ before do
668
+ capture_stdout(out_stream) do
669
+ config.validate
670
+ end
671
+ end
630
672
 
631
- it "sets valid to true" do
632
- is_expected.to eq(true)
673
+ context "with missing request_headers config option" do
674
+ let(:config_options) { { :push_api_key => "abc" } }
675
+
676
+ it "logs a warning" do
677
+ is_expected.to eq(true)
678
+ expect(output).to include "Warning: The `request_headers` config " \
679
+ "option was not set in the AppSignal configuration"
680
+ end
681
+ end
682
+
683
+ context "with request_headers config option present" do
684
+ let(:config_options) { { :push_api_key => "abc", :request_headers => [] } }
685
+
686
+ it "logs no warning" do
687
+ is_expected.to eq(true)
688
+ expect(output).to_not include "Warning: The `request_headers` config " \
689
+ "option was not set in the AppSignal configuration"
690
+ end
633
691
  end
634
692
  end
635
693
  end
@@ -103,15 +103,15 @@ describe Appsignal::Extension do
103
103
  end
104
104
 
105
105
  it "should have a set_gauge method" do
106
- subject.set_gauge("key", 1.0)
106
+ subject.set_gauge("key", 1.0, Appsignal::Extension.data_map_new)
107
107
  end
108
108
 
109
109
  it "should have a increment_counter method" do
110
- subject.increment_counter("key", 1)
110
+ subject.increment_counter("key", 1, Appsignal::Extension.data_map_new)
111
111
  end
112
112
 
113
113
  it "should have a add_distribution_value method" do
114
- subject.add_distribution_value("key", 1.0)
114
+ subject.add_distribution_value("key", 1.0, Appsignal::Extension.data_map_new)
115
115
  end
116
116
  end
117
117
  end
@@ -141,7 +141,7 @@ if DependencyHelper.padrino_present?
141
141
  it "instruments the request" do
142
142
  expect_a_transaction_to_be_created
143
143
  # Uses path for action name
144
- expect(transaction).to receive(:set_action_if_nil).with("PadrinoTestApp:#/404")
144
+ expect(transaction).to receive(:set_action_if_nil).with("PadrinoTestApp#unknown")
145
145
  expect(response).to match_response(404, "<h1>Not Found</h1>")
146
146
  end
147
147
  end
@@ -162,52 +162,32 @@ if DependencyHelper.padrino_present?
162
162
 
163
163
  # Older Padrino versions don't support `action` (v11.0+)
164
164
  context "without #action on Sinatra::Request" do
165
- let(:path) { "/my_original_path" }
166
- let(:request_kind) do
167
- double(
168
- :params => {},
169
- :path => path,
170
- :path_info => path,
171
- :request_method => "GET",
172
- :head? => false,
173
- :route_obj => double(:original_path => "original_path method"),
174
- :route_obj= => nil # Make sure route_obj doesn't get overwritten
175
- )
176
- end
165
+ let(:path) { "/my_original_path/10" }
177
166
  before do
178
- expect(Sinatra::Request).to receive(:new).and_return(request_kind)
179
- app.controllers { get(:my_original_path) { "content" } }
167
+ allow_any_instance_of(Sinatra::Request).to receive(:action).and_return(nil)
168
+ app.controllers { get(:my_original_path, :with => :id) { "content" } }
180
169
  end
181
170
  after { expect(response).to match_response(200, "content") }
182
171
 
183
172
  it "falls back on Sinatra::Request#route_obj.original_path" do
184
173
  expect_a_transaction_to_be_created
185
174
  expect(transaction)
186
- .to receive(:set_action_if_nil).with("PadrinoTestApp:original_path method")
175
+ .to receive(:set_action_if_nil).with("PadrinoTestApp:/my_original_path/:id")
187
176
  end
188
177
  end
189
178
 
190
179
  context "without Sinatra::Request#route_obj.original_path" do
191
180
  let(:path) { "/my_original_path" }
192
- let(:request_kind) do
193
- double(
194
- :params => {},
195
- :path => path,
196
- :path_info => path,
197
- :request_method => "GET",
198
- :head? => false,
199
- :route_obj= => nil # Make sure route_obj doesn't get overwritten
200
- )
201
- end
202
181
  before do
203
- expect(Sinatra::Request).to receive(:new).and_return(request_kind)
182
+ allow_any_instance_of(Sinatra::Request).to receive(:action).and_return(nil)
183
+ allow_any_instance_of(Sinatra::Request).to receive(:route_obj).and_return(nil)
204
184
  app.controllers { get(:my_original_path) { "content" } }
205
185
  end
206
186
  after { expect(response).to match_response(200, "content") }
207
187
 
208
188
  it "falls back on app name" do
209
189
  expect_a_transaction_to_be_created
210
- expect(transaction).to receive(:set_action_if_nil).with("PadrinoTestApp")
190
+ expect(transaction).to receive(:set_action_if_nil).with("PadrinoTestApp#unknown")
211
191
  end
212
192
  end
213
193
 
@@ -912,8 +912,7 @@ describe Appsignal::Transaction do
912
912
  end
913
913
 
914
914
  describe "#sanitized_environment" do
915
- let(:whitelisted_keys) { Appsignal::Transaction::ENV_METHODS }
916
-
915
+ let(:whitelisted_keys) { Appsignal.config[:request_headers] }
917
916
  subject { transaction.send(:sanitized_environment) }
918
917
 
919
918
  context "when request is nil" do
@@ -940,6 +939,16 @@ describe Appsignal::Transaction do
940
939
  it "only sets whitelisted keys" do
941
940
  expect(subject.keys).to match_array(whitelisted_keys)
942
941
  end
942
+
943
+ context "with configured request_headers" do
944
+ before do
945
+ Appsignal.config.config_hash[:request_headers] = %w[CONTENT_LENGTH]
946
+ end
947
+
948
+ it "only sets whitelisted keys" do
949
+ expect(subject.keys).to match_array(%w[CONTENT_LENGTH])
950
+ end
951
+ end
943
952
  end
944
953
  end
945
954
 
@@ -970,37 +979,42 @@ describe Appsignal::Transaction do
970
979
  it { is_expected.to be_nil }
971
980
  end
972
981
 
973
- context "when there is a session" do
974
- before do
975
- expect(transaction).to respond_to(:request)
976
- allow(transaction).to receive_message_chain(:request, :session => { :foo => :bar })
977
- allow(transaction).to receive_message_chain(:request, :fullpath => :bar)
978
- end
982
+ context "with a session" do
983
+ let(:session_data_filter) { [] }
984
+ before { Appsignal.config[:filter_session_data] = session_data_filter }
985
+ after { Appsignal.config[:filter_session_data] = [] }
979
986
 
980
- it "passes the session data into the params sanitizer" do
981
- expect(Appsignal::Utils::ParamsSanitizer).to receive(:sanitize).with(:foo => :bar)
982
- .and_return(:sanitized_foo)
983
- expect(subject).to eq :sanitized_foo
984
- end
987
+ context "with generic session object" do
988
+ before do
989
+ expect(transaction).to respond_to(:request)
990
+ allow(transaction).to receive_message_chain(
991
+ :request,
992
+ :session => { :foo => :bar, :abc => :def }
993
+ )
994
+ allow(transaction).to receive_message_chain(:request, :fullpath => :bar)
995
+ end
985
996
 
986
- if defined? ActionDispatch::Request::Session
987
- context "with ActionDispatch::Request::Session" do
988
- before do
989
- expect(transaction).to respond_to(:request)
990
- allow(transaction).to receive_message_chain(:request, :session => action_dispatch_session)
991
- allow(transaction).to receive_message_chain(:request, :fullpath => :bar)
997
+ context "without session filtering" do
998
+ it "keeps the session data intact" do
999
+ expect(subject).to eq(:foo => :bar, :abc => :def)
992
1000
  end
1001
+ end
1002
+
1003
+ context "with session filtering" do
1004
+ let(:session_data_filter) { %w[foo] }
993
1005
 
994
- it "should return an session hash" do
995
- expect(Appsignal::Utils::ParamsSanitizer).to receive(:sanitize).with("foo" => :bar)
996
- .and_return(:sanitized_foo)
997
- subject
1006
+ it "filters the session data" do
1007
+ expect(subject).to eq(:foo => "[FILTERED]", :abc => :def)
998
1008
  end
1009
+ end
1010
+ end
999
1011
 
1000
- def action_dispatch_session
1012
+ if defined? ActionDispatch::Request::Session
1013
+ context "with ActionDispatch::Request::Session" do
1014
+ let(:action_dispatch_session) do
1001
1015
  store = Class.new do
1002
1016
  def load_session(_env)
1003
- [1, { :foo => :bar }]
1017
+ [1, { :foo => :bar, :abc => :def }]
1004
1018
  end
1005
1019
 
1006
1020
  def session_exists?(_env)
@@ -1009,16 +1023,35 @@ describe Appsignal::Transaction do
1009
1023
  end.new
1010
1024
  ActionDispatch::Request::Session.create(store, ActionDispatch::Request.new("rack.input" => StringIO.new), {})
1011
1025
  end
1026
+ before do
1027
+ expect(transaction).to respond_to(:request)
1028
+ allow(transaction).to receive_message_chain(
1029
+ :request,
1030
+ :session => action_dispatch_session
1031
+ )
1032
+ allow(transaction).to receive_message_chain(:request, :fullpath => :bar)
1033
+ end
1034
+
1035
+ context "without session filtering" do
1036
+ it "keeps the session data intact" do
1037
+ expect(subject).to eq("foo" => :bar, "abc" => :def)
1038
+ end
1039
+ end
1040
+
1041
+ context "with session filtering" do
1042
+ let(:session_data_filter) { %w[foo] }
1043
+
1044
+ it "filters the session data" do
1045
+ expect(subject).to eq("foo" => "[FILTERED]", "abc" => :def)
1046
+ end
1047
+ end
1012
1048
  end
1013
1049
  end
1014
1050
 
1015
1051
  context "when skipping session data" do
1016
- before do
1017
- Appsignal.config = { :skip_session_data => true }
1018
- end
1052
+ before { Appsignal.config[:skip_session_data] = true }
1019
1053
 
1020
- it "does not pass the session data into the params sanitizer" do
1021
- expect(Appsignal::Utils::ParamsSanitizer).to_not receive(:sanitize)
1054
+ it "does not set any session data on the transaction" do
1022
1055
  expect(subject).to be_nil
1023
1056
  end
1024
1057
  end
@@ -1,4 +1,4 @@
1
- describe Appsignal::Utils::ParamsSanitizer do
1
+ describe Appsignal::Utils::HashSanitizer do
2
2
  let(:file) { uploaded_file }
3
3
  let(:params) do
4
4
  {
@@ -80,9 +80,9 @@ describe Appsignal::Utils::ParamsSanitizer do
80
80
  end
81
81
  end
82
82
 
83
- context "with :filter_parameters option" do
83
+ context "with filter_keys" do
84
84
  let(:sanitized_params) do
85
- described_class.sanitize(params, :filter_parameters => %w[text hash])
85
+ described_class.sanitize(params, %w[text hash])
86
86
  end
87
87
  subject { sanitized_params }
88
88
 
@@ -100,7 +100,7 @@ describe Appsignal::Utils::ParamsSanitizer do
100
100
 
101
101
  context "with strings as key filter values" do
102
102
  let(:sanitized_params) do
103
- described_class.sanitize(params, :filter_parameters => %w[string])
103
+ described_class.sanitize(params, %w[string])
104
104
  end
105
105
 
106
106
  it "sanitizes values" do
@@ -110,7 +110,7 @@ describe Appsignal::Utils::ParamsSanitizer do
110
110
 
111
111
  describe ":hash" do
112
112
  let(:sanitized_params) do
113
- described_class.sanitize(params, :filter_parameters => %w[nested_text])
113
+ described_class.sanitize(params, %w[nested_text])
114
114
  end
115
115
  subject { sanitized_params[:hash] }
116
116
 
@@ -121,7 +121,7 @@ describe Appsignal::Utils::ParamsSanitizer do
121
121
  describe ":nested_array" do
122
122
  describe ":nested_hash" do
123
123
  let(:sanitized_params) do
124
- described_class.sanitize(params, :filter_parameters => %w[key])
124
+ described_class.sanitize(params, %w[key])
125
125
  end
126
126
  subject { sanitized_params[:hash][:nested_array][3] }
127
127