appsignal 4.0.5 → 4.0.7
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/CHANGELOG.md +20 -0
- data/Rakefile +9 -9
- data/appsignal.gemspec +22 -1
- data/build_matrix.yml +2 -1
- data/ext/agent.rb +27 -27
- data/lib/appsignal/check_in/scheduler.rb +3 -4
- data/lib/appsignal/check_in.rb +1 -1
- data/lib/appsignal/config.rb +1 -3
- data/lib/appsignal/integrations/que.rb +8 -2
- data/lib/appsignal/integrations/resque.rb +1 -6
- data/lib/appsignal/utils/hash_sanitizer.rb +4 -0
- data/lib/appsignal/version.rb +1 -1
- metadata +2 -191
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
- data/.github/ISSUE_TEMPLATE/chore.md +0 -14
- data/.github/workflows/ci.yml +0 -3150
- data/.github/workflows/create_release_from_tag.yml +0 -62
- data/.gitignore +0 -35
- data/.gitmodules +0 -3
- data/.rspec +0 -4
- data/.yardopts +0 -8
- data/benchmark.rake +0 -139
- data/gemfiles/capistrano2.gemfile +0 -6
- data/gemfiles/capistrano3.gemfile +0 -7
- data/gemfiles/dry-monitor.gemfile +0 -5
- data/gemfiles/grape.gemfile +0 -5
- data/gemfiles/hanami-2.0.gemfile +0 -7
- data/gemfiles/hanami-2.1.gemfile +0 -7
- data/gemfiles/http5.gemfile +0 -5
- data/gemfiles/no_dependencies.gemfile +0 -10
- data/gemfiles/padrino.gemfile +0 -7
- data/gemfiles/psych-3.gemfile +0 -5
- data/gemfiles/psych-4.gemfile +0 -5
- data/gemfiles/que.gemfile +0 -5
- data/gemfiles/rails-6.0.gemfile +0 -10
- data/gemfiles/rails-6.1.gemfile +0 -11
- data/gemfiles/rails-7.0.gemfile +0 -11
- data/gemfiles/rails-7.1.gemfile +0 -11
- data/gemfiles/rails-7.2.gemfile +0 -11
- data/gemfiles/redis-4.gemfile +0 -5
- data/gemfiles/redis-5.gemfile +0 -6
- data/gemfiles/resque-2.gemfile +0 -6
- data/gemfiles/sequel.gemfile +0 -10
- data/gemfiles/sinatra.gemfile +0 -5
- data/gemfiles/webmachine1.gemfile +0 -7
- data/gemfiles/webmachine2.gemfile +0 -6
- data/mono.yml +0 -16
- data/spec/.rubocop.yml +0 -7
- data/spec/lib/appsignal/auth_check_spec.rb +0 -84
- data/spec/lib/appsignal/capistrano2_spec.rb +0 -227
- data/spec/lib/appsignal/capistrano3_spec.rb +0 -284
- data/spec/lib/appsignal/check_in/cron_spec.rb +0 -202
- data/spec/lib/appsignal/check_in/scheduler_spec.rb +0 -443
- data/spec/lib/appsignal/cli/demo_spec.rb +0 -46
- data/spec/lib/appsignal/cli/diagnose/paths_spec.rb +0 -16
- data/spec/lib/appsignal/cli/diagnose/utils_spec.rb +0 -86
- data/spec/lib/appsignal/cli/diagnose_spec.rb +0 -1553
- data/spec/lib/appsignal/cli/helpers_spec.rb +0 -179
- data/spec/lib/appsignal/cli/install_spec.rb +0 -848
- data/spec/lib/appsignal/cli_spec.rb +0 -56
- data/spec/lib/appsignal/config_spec.rb +0 -1380
- data/spec/lib/appsignal/demo_spec.rb +0 -83
- data/spec/lib/appsignal/environment_spec.rb +0 -190
- data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +0 -60
- data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +0 -21
- data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +0 -21
- data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +0 -52
- data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +0 -21
- data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +0 -84
- data/spec/lib/appsignal/event_formatter/rom/sql_formatter_spec.rb +0 -22
- data/spec/lib/appsignal/event_formatter/sequel/sql_formatter_spec.rb +0 -30
- data/spec/lib/appsignal/event_formatter/view_component/render_formatter_spec.rb +0 -41
- data/spec/lib/appsignal/event_formatter_spec.rb +0 -193
- data/spec/lib/appsignal/extension/jruby_spec.rb +0 -46
- data/spec/lib/appsignal/extension_install_failure_spec.rb +0 -20
- data/spec/lib/appsignal/extension_spec.rb +0 -178
- data/spec/lib/appsignal/garbage_collection_spec.rb +0 -98
- data/spec/lib/appsignal/hooks/action_cable_spec.rb +0 -345
- data/spec/lib/appsignal/hooks/action_mailer_spec.rb +0 -55
- data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +0 -23
- data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +0 -99
- data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +0 -47
- data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +0 -47
- data/spec/lib/appsignal/hooks/activejob_spec.rb +0 -650
- data/spec/lib/appsignal/hooks/at_exit_spec.rb +0 -105
- data/spec/lib/appsignal/hooks/celluloid_spec.rb +0 -40
- data/spec/lib/appsignal/hooks/data_mapper_spec.rb +0 -40
- data/spec/lib/appsignal/hooks/delayed_job_spec.rb +0 -38
- data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +0 -83
- data/spec/lib/appsignal/hooks/excon_spec.rb +0 -67
- data/spec/lib/appsignal/hooks/gvl_spec.rb +0 -145
- data/spec/lib/appsignal/hooks/http_spec.rb +0 -37
- data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +0 -46
- data/spec/lib/appsignal/hooks/mri_spec.rb +0 -23
- data/spec/lib/appsignal/hooks/net_http_spec.rb +0 -18
- data/spec/lib/appsignal/hooks/passenger_spec.rb +0 -30
- data/spec/lib/appsignal/hooks/puma_spec.rb +0 -80
- data/spec/lib/appsignal/hooks/que_spec.rb +0 -19
- data/spec/lib/appsignal/hooks/rake_spec.rb +0 -144
- data/spec/lib/appsignal/hooks/redis_client_spec.rb +0 -218
- data/spec/lib/appsignal/hooks/redis_spec.rb +0 -124
- data/spec/lib/appsignal/hooks/resque_spec.rb +0 -27
- data/spec/lib/appsignal/hooks/sequel_spec.rb +0 -44
- data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -29
- data/spec/lib/appsignal/hooks/sidekiq_spec.rb +0 -115
- data/spec/lib/appsignal/hooks/unicorn_spec.rb +0 -63
- data/spec/lib/appsignal/hooks/webmachine_spec.rb +0 -24
- data/spec/lib/appsignal/hooks_spec.rb +0 -124
- data/spec/lib/appsignal/integrations/data_mapper_spec.rb +0 -74
- data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +0 -454
- data/spec/lib/appsignal/integrations/http_spec.rb +0 -111
- data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +0 -154
- data/spec/lib/appsignal/integrations/net_http_spec.rb +0 -33
- data/spec/lib/appsignal/integrations/object_spec.rb +0 -347
- data/spec/lib/appsignal/integrations/puma_spec.rb +0 -150
- data/spec/lib/appsignal/integrations/que_spec.rb +0 -152
- data/spec/lib/appsignal/integrations/railtie_spec.rb +0 -457
- data/spec/lib/appsignal/integrations/resque_spec.rb +0 -155
- data/spec/lib/appsignal/integrations/shoryuken_spec.rb +0 -165
- data/spec/lib/appsignal/integrations/sidekiq_spec.rb +0 -640
- data/spec/lib/appsignal/integrations/webmachine_spec.rb +0 -136
- data/spec/lib/appsignal/loaders/grape_spec.rb +0 -12
- data/spec/lib/appsignal/loaders/hanami_spec.rb +0 -92
- data/spec/lib/appsignal/loaders/padrino_spec.rb +0 -273
- data/spec/lib/appsignal/loaders/sinatra_spec.rb +0 -44
- data/spec/lib/appsignal/loaders_spec.rb +0 -144
- data/spec/lib/appsignal/logger_spec.rb +0 -205
- data/spec/lib/appsignal/marker_spec.rb +0 -51
- data/spec/lib/appsignal/probes/gvl_spec.rb +0 -164
- data/spec/lib/appsignal/probes/mri_spec.rb +0 -162
- data/spec/lib/appsignal/probes/sidekiq_spec.rb +0 -333
- data/spec/lib/appsignal/probes_spec.rb +0 -411
- data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +0 -370
- data/spec/lib/appsignal/rack/body_wrapper_spec.rb +0 -319
- data/spec/lib/appsignal/rack/event_handler_spec.rb +0 -441
- data/spec/lib/appsignal/rack/grape_middleware_spec.rb +0 -201
- data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +0 -36
- data/spec/lib/appsignal/rack/instrumentation_middleware_spec.rb +0 -38
- data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +0 -126
- data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +0 -217
- data/spec/lib/appsignal/rack_spec.rb +0 -243
- data/spec/lib/appsignal/sample_data_spec.rb +0 -238
- data/spec/lib/appsignal/span_spec.rb +0 -141
- data/spec/lib/appsignal/system_spec.rb +0 -126
- data/spec/lib/appsignal/transaction_spec.rb +0 -2111
- data/spec/lib/appsignal/transmitter_spec.rb +0 -198
- data/spec/lib/appsignal/utils/data_spec.rb +0 -166
- data/spec/lib/appsignal/utils/hash_sanitizer_spec.rb +0 -182
- data/spec/lib/appsignal/utils/integration_logger_spec.rb +0 -21
- data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -153
- data/spec/lib/appsignal/utils/json_spec.rb +0 -44
- data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +0 -192
- data/spec/lib/appsignal_spec.rb +0 -1919
- data/spec/lib/puma/appsignal_spec.rb +0 -334
- data/spec/spec_helper.rb +0 -173
- data/spec/support/fixtures/generated_config.yml +0 -24
- data/spec/support/fixtures/projects/broken/config/appsignal.yml +0 -1
- data/spec/support/fixtures/projects/valid/config/appsignal.yml +0 -57
- data/spec/support/fixtures/projects/valid/log/.gitkeep +0 -0
- data/spec/support/fixtures/projects/valid_with_rails_app/config/application.rb +0 -16
- data/spec/support/fixtures/projects/valid_with_rails_app/config/appsignal.yml +0 -56
- data/spec/support/fixtures/projects/valid_with_rails_app/config/environment.rb +0 -10
- data/spec/support/fixtures/projects/valid_with_rails_app/log/.gitkeep +0 -0
- data/spec/support/fixtures/uploaded_file.txt +0 -0
- data/spec/support/hanami/hanami_app.rb +0 -29
- data/spec/support/helpers/action_mailer_helpers.rb +0 -25
- data/spec/support/helpers/activejob_helpers.rb +0 -27
- data/spec/support/helpers/api_request_helper.rb +0 -20
- data/spec/support/helpers/cli_helpers.rb +0 -40
- data/spec/support/helpers/config_helpers.rb +0 -66
- data/spec/support/helpers/dependency_helper.rb +0 -150
- data/spec/support/helpers/directory_helper.rb +0 -27
- data/spec/support/helpers/env_helpers.rb +0 -41
- data/spec/support/helpers/environment_metdata_helper.rb +0 -16
- data/spec/support/helpers/example_exception.rb +0 -13
- data/spec/support/helpers/example_standard_error.rb +0 -13
- data/spec/support/helpers/loader_helper.rb +0 -21
- data/spec/support/helpers/log_helpers.rb +0 -36
- data/spec/support/helpers/rails_helper.rb +0 -28
- data/spec/support/helpers/std_streams_helper.rb +0 -94
- data/spec/support/helpers/system_helpers.rb +0 -8
- data/spec/support/helpers/take_at_most_helper.rb +0 -21
- data/spec/support/helpers/time_helpers.rb +0 -11
- data/spec/support/helpers/transaction_helpers.rb +0 -122
- data/spec/support/helpers/wait_for_helper.rb +0 -39
- data/spec/support/matchers/contains_log.rb +0 -26
- data/spec/support/matchers/have_colorized_text.rb +0 -28
- data/spec/support/matchers/transaction.rb +0 -200
- data/spec/support/mocks/appsignal_mock.rb +0 -18
- data/spec/support/mocks/dummy_app.rb +0 -20
- data/spec/support/mocks/fake_gc_profiler.rb +0 -19
- data/spec/support/mocks/fake_gvl_tools.rb +0 -28
- data/spec/support/mocks/hash_like.rb +0 -10
- data/spec/support/mocks/mock_probe.rb +0 -13
- data/spec/support/mocks/puma_mock.rb +0 -43
- data/spec/support/shared_examples/instrument.rb +0 -48
- data/spec/support/stubs/appsignal/loaders/loader_stub.rb +0 -7
- data/spec/support/stubs/delayed_job.rb +0 -0
- data/spec/support/stubs/sidekiq/api.rb +0 -4
- data/spec/support/testing.rb +0 -194
- data/support/bundler_wrapper +0 -12
- data/support/install_deps +0 -33
@@ -1,1380 +0,0 @@
|
|
1
|
-
describe Appsignal::Config do
|
2
|
-
describe ".add_loader_defaults" do
|
3
|
-
context "when the config is initialized" do
|
4
|
-
before { Appsignal.configure(:test) }
|
5
|
-
|
6
|
-
it "logs a warning" do
|
7
|
-
logs = capture_logs { described_class.add_loader_defaults(:loader1) }
|
8
|
-
|
9
|
-
expect(logs).to contains_log(
|
10
|
-
:warn,
|
11
|
-
"The config defaults from the 'loader1' loader are ignored"
|
12
|
-
)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
it "adds loader defaults to the list" do
|
17
|
-
described_class.add_loader_defaults(:loader1)
|
18
|
-
|
19
|
-
expect(described_class.loader_defaults).to include(
|
20
|
-
:name => :loader1,
|
21
|
-
:root_path => nil,
|
22
|
-
:env => nil,
|
23
|
-
:options => {}
|
24
|
-
)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "registers multiple loaders in order of registration" do
|
28
|
-
described_class.add_loader_defaults(:loader1)
|
29
|
-
described_class.add_loader_defaults(:loader2)
|
30
|
-
|
31
|
-
expect(described_class.loader_defaults).to eq([
|
32
|
-
{
|
33
|
-
:name => :loader1,
|
34
|
-
:root_path => nil,
|
35
|
-
:env => nil,
|
36
|
-
:options => {}
|
37
|
-
},
|
38
|
-
{
|
39
|
-
:name => :loader2,
|
40
|
-
:root_path => nil,
|
41
|
-
:env => nil,
|
42
|
-
:options => {}
|
43
|
-
}
|
44
|
-
])
|
45
|
-
end
|
46
|
-
|
47
|
-
it "adds loader with env and root_path" do
|
48
|
-
described_class.add_loader_defaults(
|
49
|
-
:loader1,
|
50
|
-
:root_path => "/some-path",
|
51
|
-
:env => "loader_env1"
|
52
|
-
)
|
53
|
-
|
54
|
-
expect(described_class.loader_defaults).to include(
|
55
|
-
:name => :loader1,
|
56
|
-
:root_path => "/some-path",
|
57
|
-
:env => "loader_env1",
|
58
|
-
:options => {}
|
59
|
-
)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "adds loader with options" do
|
63
|
-
described_class.add_loader_defaults(
|
64
|
-
:loader1,
|
65
|
-
:my_option1 => "some value1",
|
66
|
-
:my_option2 => "some value2"
|
67
|
-
)
|
68
|
-
|
69
|
-
expect(described_class.loader_defaults).to include(
|
70
|
-
:name => :loader1,
|
71
|
-
:root_path => nil,
|
72
|
-
:env => nil,
|
73
|
-
:options => {
|
74
|
-
:my_option1 => "some value1",
|
75
|
-
:my_option2 => "some value2"
|
76
|
-
}
|
77
|
-
)
|
78
|
-
end
|
79
|
-
|
80
|
-
it "does not set any nil options" do
|
81
|
-
described_class.add_loader_defaults(:loader1, :nil_option => nil)
|
82
|
-
|
83
|
-
expect(described_class.loader_defaults).to include(
|
84
|
-
:name => :loader1,
|
85
|
-
:root_path => nil,
|
86
|
-
:env => nil,
|
87
|
-
:options => {}
|
88
|
-
)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe ".determine_env" do
|
93
|
-
context "with env argument" do
|
94
|
-
before { clear_integration_env_vars! }
|
95
|
-
|
96
|
-
it "considers the given env leading" do
|
97
|
-
expect(described_class.determine_env("given_env")).to eq("given_env")
|
98
|
-
end
|
99
|
-
|
100
|
-
it "considers the given env leading over APPSIGNAL_APP_ENV" do
|
101
|
-
ENV["APPSIGNAL_APP_ENV"] = "env_env"
|
102
|
-
expect(described_class.determine_env("given_env")).to eq("given_env")
|
103
|
-
end
|
104
|
-
|
105
|
-
it "considers the given env leading over other env vars" do
|
106
|
-
ENV["RAILS_ENV"] = "rails_env"
|
107
|
-
ENV["RACK_ENV"] = "rack_env"
|
108
|
-
expect(described_class.determine_env("given_env")).to eq("given_env")
|
109
|
-
end
|
110
|
-
|
111
|
-
it "considers the given env leading over loader defaults" do
|
112
|
-
define_loader(:env_loader) do
|
113
|
-
def on_load
|
114
|
-
register_config_defaults(:env => "loader_env")
|
115
|
-
end
|
116
|
-
end
|
117
|
-
load_loader(:env_loader)
|
118
|
-
expect(described_class.determine_env("given_env")).to eq("given_env")
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
context "without env argument" do
|
123
|
-
before { clear_integration_env_vars! }
|
124
|
-
|
125
|
-
it "considers the APPSIGNAL_APP_ENV leading" do
|
126
|
-
ENV["APPSIGNAL_APP_ENV"] = "env_env"
|
127
|
-
ENV["RAILS_ENV"] = "rails_env"
|
128
|
-
ENV["RACK_ENV"] = "rack_env"
|
129
|
-
expect(described_class.determine_env).to eq("env_env")
|
130
|
-
end
|
131
|
-
|
132
|
-
it "considers the RAILS_ENV leading over other env vars" do
|
133
|
-
ENV["RAILS_ENV"] = "rails_env"
|
134
|
-
ENV["RACK_ENV"] = "rack_env"
|
135
|
-
expect(described_class.determine_env).to eq("rails_env")
|
136
|
-
end
|
137
|
-
|
138
|
-
it "reads from the RACK_ENV env last" do
|
139
|
-
ENV["RACK_ENV"] = "rack_env"
|
140
|
-
expect(described_class.determine_env).to eq("rack_env")
|
141
|
-
end
|
142
|
-
|
143
|
-
it "falls back on the first loader env" do
|
144
|
-
define_loader(:env_loader1) do
|
145
|
-
def on_load
|
146
|
-
register_config_defaults(:env => "loader_env1")
|
147
|
-
end
|
148
|
-
end
|
149
|
-
load_loader(:env_loader1)
|
150
|
-
|
151
|
-
define_loader(:env_loader2) do
|
152
|
-
def on_load
|
153
|
-
register_config_defaults(:env => "loader_env2")
|
154
|
-
end
|
155
|
-
end
|
156
|
-
load_loader(:env_loader2)
|
157
|
-
|
158
|
-
expect(described_class.determine_env).to eq("loader_env2")
|
159
|
-
end
|
160
|
-
|
161
|
-
it "returns nil if no env was found" do
|
162
|
-
expect(described_class.determine_env).to be_nil
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
describe ".determine_root_path" do
|
168
|
-
it "reads the root path from the first loader if any" do
|
169
|
-
define_loader(:path_loader1) do
|
170
|
-
def on_load
|
171
|
-
register_config_defaults(:root_path => "/loader_path1")
|
172
|
-
end
|
173
|
-
end
|
174
|
-
load_loader(:path_loader1)
|
175
|
-
|
176
|
-
define_loader(:path_loader2) do
|
177
|
-
def on_load
|
178
|
-
register_config_defaults(:root_path => "/loader_path2")
|
179
|
-
end
|
180
|
-
end
|
181
|
-
load_loader(:path_loader2)
|
182
|
-
|
183
|
-
expect(described_class.determine_root_path).to eq("/loader_path2")
|
184
|
-
end
|
185
|
-
|
186
|
-
it "falls back on the current working directory" do
|
187
|
-
expect(described_class.determine_root_path).to eq(Dir.pwd)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
describe "#initialize" do
|
192
|
-
describe "environment" do
|
193
|
-
context "when environment is nil" do
|
194
|
-
let(:config) { described_class.new("", nil) }
|
195
|
-
|
196
|
-
it "sets an empty string" do
|
197
|
-
expect(config.env).to eq("")
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
context "when environment is given" do
|
202
|
-
let(:env) { "my_env" }
|
203
|
-
let(:config) { described_class.new("/root/path", "my_env") }
|
204
|
-
|
205
|
-
it "sets the environment" do
|
206
|
-
expect(config.env).to eq(env)
|
207
|
-
end
|
208
|
-
|
209
|
-
it "sets the environment as loaded through the initial_config" do
|
210
|
-
expect(config.initial_config).to eq(:env => env)
|
211
|
-
expect(config.config_hash).to_not have_key(:env)
|
212
|
-
expect(config.config_hash).to_not have_key(:root_path)
|
213
|
-
end
|
214
|
-
|
215
|
-
context "with APPSIGNAL_APP_ENV environment variable" do
|
216
|
-
let(:env_env) { "my_env_env" }
|
217
|
-
before { ENV["APPSIGNAL_APP_ENV"] = env_env }
|
218
|
-
|
219
|
-
it "sets the environment as loaded through the env_config" do
|
220
|
-
expect(config.env_config).to eq(:env => env_env)
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
describe "config based on the system" do
|
228
|
-
let(:config) { silence { build_config(:env => :none) } }
|
229
|
-
|
230
|
-
describe ":active" do
|
231
|
-
subject { config[:active] }
|
232
|
-
|
233
|
-
context "with APPSIGNAL_PUSH_API_KEY env variable" do
|
234
|
-
context "when not empty" do
|
235
|
-
before { ENV["APPSIGNAL_PUSH_API_KEY"] = "abc" }
|
236
|
-
|
237
|
-
it "becomes active" do
|
238
|
-
expect(subject).to be_truthy
|
239
|
-
end
|
240
|
-
|
241
|
-
it "sets the push_api_key as loaded through the env_config" do
|
242
|
-
expect(config.env_config).to include(:push_api_key => "abc")
|
243
|
-
expect(config.system_config).to include(:active => true)
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
context "when empty string" do
|
248
|
-
before { ENV["APPSIGNAL_PUSH_API_KEY"] = "" }
|
249
|
-
|
250
|
-
it "does not becomes active" do
|
251
|
-
expect(subject).to be_falsy
|
252
|
-
end
|
253
|
-
|
254
|
-
it "sets the push_api_key as loaded through the env_config" do
|
255
|
-
expect(config.env_config).to include(:push_api_key => "")
|
256
|
-
expect(config.system_config).to_not have_key(:active)
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
context "when blank string" do
|
261
|
-
before { ENV["APPSIGNAL_PUSH_API_KEY"] = " " }
|
262
|
-
|
263
|
-
it "does not becomes active" do
|
264
|
-
expect(subject).to be_falsy
|
265
|
-
end
|
266
|
-
|
267
|
-
it "sets the push_api_key as loaded through the env_config" do
|
268
|
-
expect(config.env_config).to include(:push_api_key => " ")
|
269
|
-
expect(config.system_config).to_not have_key(:active)
|
270
|
-
end
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
context "without APPSIGNAL_PUSH_API_KEY env variable" do
|
275
|
-
it "remains inactive" do
|
276
|
-
expect(subject).to be_falsy
|
277
|
-
end
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
describe ":log" do
|
282
|
-
subject { config[:log] }
|
283
|
-
|
284
|
-
context "when running on Heroku" do
|
285
|
-
around { |example| recognize_as_heroku { example.run } }
|
286
|
-
|
287
|
-
it "is set to stdout" do
|
288
|
-
expect(subject).to eq("stdout")
|
289
|
-
end
|
290
|
-
|
291
|
-
it "sets the log as loaded through the system" do
|
292
|
-
expect(config.system_config).to include(:log => "stdout")
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
context "when not running on Heroku" do
|
297
|
-
it "is set to file" do
|
298
|
-
expect(subject).to eq("file")
|
299
|
-
end
|
300
|
-
|
301
|
-
it "does not set log as loaded through the system" do
|
302
|
-
expect(config.system_config).to_not have_key(:log)
|
303
|
-
end
|
304
|
-
end
|
305
|
-
end
|
306
|
-
end
|
307
|
-
|
308
|
-
describe "loader default config" do
|
309
|
-
let(:config) { described_class.new("some-path", "production") }
|
310
|
-
before do
|
311
|
-
define_loader(:options_loader) do
|
312
|
-
def on_load
|
313
|
-
register_config_defaults(
|
314
|
-
:env => "loader_env",
|
315
|
-
:root_path => "loader-path",
|
316
|
-
:ignore_actions => ["loader-action"],
|
317
|
-
:my_option => "my_value",
|
318
|
-
:nil_option => nil
|
319
|
-
)
|
320
|
-
end
|
321
|
-
end
|
322
|
-
load_loader(:options_loader)
|
323
|
-
end
|
324
|
-
|
325
|
-
it "overrides the default config option values" do
|
326
|
-
expect(config[:ignore_actions]).to eq(["loader-action"])
|
327
|
-
end
|
328
|
-
|
329
|
-
it "does not set any nil values" do
|
330
|
-
expect(config.config_hash).to_not have_key(:nil_option)
|
331
|
-
end
|
332
|
-
|
333
|
-
it "does not set the env" do
|
334
|
-
# This is done by Config.determine_env
|
335
|
-
expect(config.env).to eq("production")
|
336
|
-
end
|
337
|
-
|
338
|
-
it "does not set the root_path" do
|
339
|
-
# This is done by Config.determine_root_path
|
340
|
-
expect(config.root_path).to eq("some-path")
|
341
|
-
end
|
342
|
-
|
343
|
-
context "with multiple loaders" do
|
344
|
-
before do
|
345
|
-
define_loader(:options_loader2) do
|
346
|
-
def on_load
|
347
|
-
register_config_defaults(
|
348
|
-
:my_option => "second_value",
|
349
|
-
:second_option => "second_value"
|
350
|
-
)
|
351
|
-
end
|
352
|
-
end
|
353
|
-
load_loader(:options_loader2)
|
354
|
-
end
|
355
|
-
|
356
|
-
it "makes the first loader's config leading" do
|
357
|
-
expect(config.config_hash).to include(
|
358
|
-
:my_option => "my_value",
|
359
|
-
:second_option => "second_value"
|
360
|
-
)
|
361
|
-
end
|
362
|
-
end
|
363
|
-
end
|
364
|
-
|
365
|
-
context "when root path is nil" do
|
366
|
-
let(:config) { described_class.new(nil, "production") }
|
367
|
-
|
368
|
-
it "is not valid or active" do
|
369
|
-
expect(config.valid?).to be_falsy
|
370
|
-
expect(config.active?).to be_falsy
|
371
|
-
end
|
372
|
-
end
|
373
|
-
|
374
|
-
context "without config file" do
|
375
|
-
let(:config) { described_class.new(tmp_dir, "production") }
|
376
|
-
|
377
|
-
it "is not valid or active" do
|
378
|
-
expect(config.valid?).to be_falsy
|
379
|
-
expect(config.active?).to be_falsy
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
context "with a config file" do
|
384
|
-
let(:config) { build_config(:env => "production") }
|
385
|
-
|
386
|
-
context "with valid config" do
|
387
|
-
it "is valid and active" do
|
388
|
-
expect(config.valid?).to be_truthy
|
389
|
-
expect(config.active?).to be_truthy
|
390
|
-
end
|
391
|
-
|
392
|
-
it "does not log an error" do
|
393
|
-
log = capture_logs { config }
|
394
|
-
expect(log).to_not contains_log(:error)
|
395
|
-
end
|
396
|
-
end
|
397
|
-
|
398
|
-
context "with the config file causing an error" do
|
399
|
-
let(:config_path) do
|
400
|
-
File.expand_path(
|
401
|
-
File.join(File.dirname(__FILE__), "../../support/fixtures/projects/broken")
|
402
|
-
)
|
403
|
-
end
|
404
|
-
let(:config) { described_class.new(config_path, "production") }
|
405
|
-
|
406
|
-
it "does not start AppSignal, logs & prints an error" do
|
407
|
-
stdout = std_stream
|
408
|
-
stderr = std_stream
|
409
|
-
ENV["APPSIGNAL_ACTIVE"] = "true"
|
410
|
-
ENV["APPSIGNAL_APP_NAME"] = "My app"
|
411
|
-
ENV["APPSIGNAL_APP_ENV"] = "dev"
|
412
|
-
ENV["APPSIGNAL_PUSH_API_KEY"] = "something valid"
|
413
|
-
log = capture_logs { capture_std_streams(stdout, stderr) { config } }
|
414
|
-
message = "An error occurred while loading the AppSignal config file. " \
|
415
|
-
"Not starting AppSignal.\n" \
|
416
|
-
"File: #{File.join(config_path, "config", "appsignal.yml").inspect}\n" \
|
417
|
-
"KeyError: key not found"
|
418
|
-
expect(log).to contains_log :error, message
|
419
|
-
expect(log).to include("/appsignal/config.rb:") # Backtrace
|
420
|
-
expect(stdout.read).to_not include("appsignal:")
|
421
|
-
expect(stderr.read).to include "appsignal: #{message}"
|
422
|
-
expect(config.file_config).to eql({})
|
423
|
-
expect(config.active?).to be(false)
|
424
|
-
end
|
425
|
-
end
|
426
|
-
|
427
|
-
it "sets the file_config" do
|
428
|
-
# config found in spec/support/project_fixture/config/appsignal.yml
|
429
|
-
expect(config.file_config).to match(
|
430
|
-
:active => true,
|
431
|
-
:push_api_key => "abc",
|
432
|
-
:name => "TestApp",
|
433
|
-
:enable_minutely_probes => false
|
434
|
-
)
|
435
|
-
end
|
436
|
-
|
437
|
-
describe "overriding system and defaults config" do
|
438
|
-
let(:config) do
|
439
|
-
build_config(
|
440
|
-
:root_path => "non-existing-path",
|
441
|
-
:env => "production",
|
442
|
-
:options => {
|
443
|
-
:running_in_container => true,
|
444
|
-
:debug => true,
|
445
|
-
:log_level => "debug"
|
446
|
-
}
|
447
|
-
)
|
448
|
-
end
|
449
|
-
|
450
|
-
it "overrides system detected and defaults config" do
|
451
|
-
expect(config[:running_in_container]).to be_truthy
|
452
|
-
expect(config[:debug]).to be_truthy
|
453
|
-
expect(config[:log_level]).to eq("debug")
|
454
|
-
end
|
455
|
-
end
|
456
|
-
|
457
|
-
context "with the env name as a symbol" do
|
458
|
-
let(:config) { build_config(:env => :production) }
|
459
|
-
|
460
|
-
it "loads the config" do
|
461
|
-
expect(config.valid?).to be_truthy
|
462
|
-
expect(config.active?).to be_truthy
|
463
|
-
|
464
|
-
expect(config[:push_api_key]).to eq("abc")
|
465
|
-
end
|
466
|
-
end
|
467
|
-
|
468
|
-
context "without the selected env" do
|
469
|
-
let(:config) { build_config(:env => :nonsense) }
|
470
|
-
|
471
|
-
it "is not valid or active" do
|
472
|
-
expect(config.valid?).to be_falsy
|
473
|
-
expect(config.active?).to be_falsy
|
474
|
-
end
|
475
|
-
|
476
|
-
it "logs an error" do
|
477
|
-
logs = capture_logs { config }
|
478
|
-
expect(logs)
|
479
|
-
.to contains_log(:error, "Not loading from config file: config for 'nonsense' not found")
|
480
|
-
expect(logs)
|
481
|
-
.to contains_log(:error, "Push API key not set after loading config")
|
482
|
-
end
|
483
|
-
end
|
484
|
-
end
|
485
|
-
|
486
|
-
context "with config in the environment" do
|
487
|
-
let(:config) do
|
488
|
-
described_class.new(
|
489
|
-
"non-existing-path",
|
490
|
-
"production"
|
491
|
-
).tap(&:validate)
|
492
|
-
end
|
493
|
-
let(:working_directory_path) { File.join(tmp_dir, "test_working_directory_path") }
|
494
|
-
let(:env_config) do
|
495
|
-
{
|
496
|
-
:active => true,
|
497
|
-
:activejob_report_errors => "all",
|
498
|
-
:bind_address => "0.0.0.0",
|
499
|
-
:ca_file_path => "/some/path",
|
500
|
-
:cpu_count => 1.5,
|
501
|
-
:dns_servers => ["8.8.8.8", "8.8.4.4"],
|
502
|
-
:enable_allocation_tracking => false,
|
503
|
-
:enable_at_exit_reporter => false,
|
504
|
-
:enable_gvl_global_timer => false,
|
505
|
-
:enable_gvl_waiting_threads => false,
|
506
|
-
:enable_host_metrics => false,
|
507
|
-
:enable_minutely_probes => false,
|
508
|
-
:enable_nginx_metrics => false,
|
509
|
-
:enable_rails_error_reporter => false,
|
510
|
-
:enable_rake_performance_instrumentation => false,
|
511
|
-
:enable_statsd => false,
|
512
|
-
:endpoint => "https://test.appsignal.com",
|
513
|
-
:files_world_accessible => false,
|
514
|
-
:filter_metadata => ["key1", "key2"],
|
515
|
-
:filter_parameters => ["param1", "param2"],
|
516
|
-
:filter_session_data => ["session1", "session2"],
|
517
|
-
:host_role => "my host role",
|
518
|
-
:hostname => "my hostname",
|
519
|
-
:http_proxy => "some proxy",
|
520
|
-
:ignore_actions => ["action1", "action2"],
|
521
|
-
:ignore_errors => ["ExampleStandardError", "AnotherError"],
|
522
|
-
:ignore_logs => ["^start$", "^Completed 2.* in .*ms (.*)"],
|
523
|
-
:ignore_namespaces => ["admin", "private_namespace"],
|
524
|
-
:instrument_http_rb => false,
|
525
|
-
:instrument_net_http => false,
|
526
|
-
:instrument_redis => false,
|
527
|
-
:instrument_sequel => false,
|
528
|
-
:log => "file",
|
529
|
-
:log_level => "debug",
|
530
|
-
:log_path => "/tmp/something",
|
531
|
-
:logging_endpoint => "https://appsignal-endpoint.net/test",
|
532
|
-
:name => "App name",
|
533
|
-
:push_api_key => "aaa-bbb-ccc",
|
534
|
-
:request_headers => ["accept", "accept-charset"],
|
535
|
-
:revision => "v2.5.1",
|
536
|
-
:running_in_container => true,
|
537
|
-
:send_environment_metadata => false,
|
538
|
-
:send_params => false,
|
539
|
-
:send_session_data => false,
|
540
|
-
:sidekiq_report_errors => "all",
|
541
|
-
:statsd_port => "7890",
|
542
|
-
:working_directory_path => working_directory_path
|
543
|
-
}
|
544
|
-
end
|
545
|
-
let(:env_vars) do
|
546
|
-
{
|
547
|
-
# Strings
|
548
|
-
"APPSIGNAL_ACTIVEJOB_REPORT_ERRORS" => "all",
|
549
|
-
"APPSIGNAL_APP_NAME" => "App name",
|
550
|
-
"APPSIGNAL_BIND_ADDRESS" => "0.0.0.0",
|
551
|
-
"APPSIGNAL_CA_FILE_PATH" => "/some/path",
|
552
|
-
"APPSIGNAL_HOSTNAME" => "my hostname",
|
553
|
-
"APPSIGNAL_HOST_ROLE" => "my host role",
|
554
|
-
"APPSIGNAL_HTTP_PROXY" => "some proxy",
|
555
|
-
"APPSIGNAL_LOG" => "file",
|
556
|
-
"APPSIGNAL_LOGGING_ENDPOINT" => "https://appsignal-endpoint.net/test",
|
557
|
-
"APPSIGNAL_LOG_LEVEL" => "debug",
|
558
|
-
"APPSIGNAL_LOG_PATH" => "/tmp/something",
|
559
|
-
"APPSIGNAL_PUSH_API_ENDPOINT" => "https://test.appsignal.com",
|
560
|
-
"APPSIGNAL_PUSH_API_KEY" => "aaa-bbb-ccc",
|
561
|
-
"APPSIGNAL_SIDEKIQ_REPORT_ERRORS" => "all",
|
562
|
-
"APPSIGNAL_STATSD_PORT" => "7890",
|
563
|
-
"APPSIGNAL_WORKING_DIRECTORY_PATH" => working_directory_path,
|
564
|
-
"APP_REVISION" => "v2.5.1",
|
565
|
-
|
566
|
-
# Booleans
|
567
|
-
"APPSIGNAL_ACTIVE" => "true",
|
568
|
-
"APPSIGNAL_ENABLE_ALLOCATION_TRACKING" => "false",
|
569
|
-
"APPSIGNAL_ENABLE_AT_EXIT_REPORTER" => "false",
|
570
|
-
"APPSIGNAL_ENABLE_GVL_GLOBAL_TIMER" => "false",
|
571
|
-
"APPSIGNAL_ENABLE_GVL_WAITING_THREADS" => "false",
|
572
|
-
"APPSIGNAL_ENABLE_HOST_METRICS" => "false",
|
573
|
-
"APPSIGNAL_ENABLE_MINUTELY_PROBES" => "false",
|
574
|
-
"APPSIGNAL_ENABLE_NGINX_METRICS" => "false",
|
575
|
-
"APPSIGNAL_ENABLE_RAILS_ERROR_REPORTER" => "false",
|
576
|
-
"APPSIGNAL_ENABLE_RAKE_PERFORMANCE_INSTRUMENTATION" => "false",
|
577
|
-
"APPSIGNAL_ENABLE_STATSD" => "false",
|
578
|
-
"APPSIGNAL_FILES_WORLD_ACCESSIBLE" => "false",
|
579
|
-
"APPSIGNAL_INSTRUMENT_HTTP_RB" => "false",
|
580
|
-
"APPSIGNAL_INSTRUMENT_NET_HTTP" => "false",
|
581
|
-
"APPSIGNAL_INSTRUMENT_REDIS" => "false",
|
582
|
-
"APPSIGNAL_INSTRUMENT_SEQUEL" => "false",
|
583
|
-
"APPSIGNAL_RUNNING_IN_CONTAINER" => "true",
|
584
|
-
"APPSIGNAL_SEND_ENVIRONMENT_METADATA" => "false",
|
585
|
-
"APPSIGNAL_SEND_PARAMS" => "false",
|
586
|
-
"APPSIGNAL_SEND_SESSION_DATA" => "false",
|
587
|
-
|
588
|
-
# Arrays
|
589
|
-
"APPSIGNAL_DNS_SERVERS" => "8.8.8.8,8.8.4.4",
|
590
|
-
"APPSIGNAL_FILTER_METADATA" => "key1,key2",
|
591
|
-
"APPSIGNAL_FILTER_PARAMETERS" => "param1,param2",
|
592
|
-
"APPSIGNAL_FILTER_SESSION_DATA" => "session1,session2",
|
593
|
-
"APPSIGNAL_IGNORE_ACTIONS" => "action1,action2",
|
594
|
-
"APPSIGNAL_IGNORE_ERRORS" => "ExampleStandardError,AnotherError",
|
595
|
-
"APPSIGNAL_IGNORE_LOGS" => "^start$,^Completed 2.* in .*ms (.*)",
|
596
|
-
"APPSIGNAL_IGNORE_NAMESPACES" => "admin,private_namespace",
|
597
|
-
"APPSIGNAL_REQUEST_HEADERS" => "accept,accept-charset",
|
598
|
-
|
599
|
-
# Floats
|
600
|
-
"APPSIGNAL_CPU_COUNT" => "1.5"
|
601
|
-
}
|
602
|
-
end
|
603
|
-
before do
|
604
|
-
env_vars.each do |key, value|
|
605
|
-
ENV[key] = value
|
606
|
-
end
|
607
|
-
end
|
608
|
-
|
609
|
-
it "reads all string env keys" do
|
610
|
-
config
|
611
|
-
|
612
|
-
Appsignal::Config::ENV_STRING_KEYS.each do |env_key, option|
|
613
|
-
ENV.fetch(env_key) { raise "Config env var '#{env_key}' is not set for this test" }
|
614
|
-
expect(config[option]).to eq(ENV.fetch(env_key, nil))
|
615
|
-
end
|
616
|
-
end
|
617
|
-
|
618
|
-
it "reads all boolean env keys" do
|
619
|
-
config
|
620
|
-
|
621
|
-
Appsignal::Config::ENV_BOOLEAN_KEYS.each do |env_key, option|
|
622
|
-
ENV.fetch(env_key) { raise "Config env var '#{env_key}' is not set for this test" }
|
623
|
-
expect(config[option]).to eq(ENV.fetch(env_key, nil) == "true")
|
624
|
-
end
|
625
|
-
end
|
626
|
-
|
627
|
-
it "reads all array env keys" do
|
628
|
-
config
|
629
|
-
|
630
|
-
Appsignal::Config::ENV_ARRAY_KEYS.each do |env_key, option|
|
631
|
-
ENV.fetch(env_key) { raise "Config env var '#{env_key}' is not set for this test" }
|
632
|
-
expect(config[option]).to eq(ENV.fetch(env_key, nil).split(","))
|
633
|
-
end
|
634
|
-
end
|
635
|
-
|
636
|
-
it "reads all float env keys" do
|
637
|
-
config
|
638
|
-
|
639
|
-
Appsignal::Config::ENV_FLOAT_KEYS.each do |env_key, option|
|
640
|
-
ENV.fetch(env_key) { raise "Config env var '#{env_key}' is not set for this test" }
|
641
|
-
expect(config[option]).to eq(ENV.fetch(env_key, nil).to_f)
|
642
|
-
end
|
643
|
-
end
|
644
|
-
|
645
|
-
it "overrides config with environment values" do
|
646
|
-
expect(config.valid?).to be_truthy
|
647
|
-
expect(config.active?).to be_truthy
|
648
|
-
expect(config.config_hash).to include(env_config)
|
649
|
-
end
|
650
|
-
|
651
|
-
context "with mixed case `true` env variables values" do
|
652
|
-
before do
|
653
|
-
ENV["APPSIGNAL_ENABLE_RAKE_PERFORMANCE_INSTRUMENTATION"] = "TRUE"
|
654
|
-
ENV["APPSIGNAL_INSTRUMENT_SEQUEL"] = "True"
|
655
|
-
end
|
656
|
-
|
657
|
-
it "accepts mixed case `true` values" do
|
658
|
-
expect(config[:enable_rake_performance_instrumentation]).to eq(true)
|
659
|
-
expect(config[:instrument_sequel]).to eq(true)
|
660
|
-
end
|
661
|
-
end
|
662
|
-
|
663
|
-
it "sets the env_config" do
|
664
|
-
expect(config.env_config).to eq(env_config)
|
665
|
-
end
|
666
|
-
end
|
667
|
-
|
668
|
-
describe "DSL config" do
|
669
|
-
let(:dsl_config) do
|
670
|
-
{
|
671
|
-
:push_api_key => "abc",
|
672
|
-
:name => "TestApp",
|
673
|
-
:active => true,
|
674
|
-
:revision => "v2.5.1",
|
675
|
-
:request_headers => []
|
676
|
-
}
|
677
|
-
end
|
678
|
-
let(:config) do
|
679
|
-
build_config(
|
680
|
-
:root_path => "non-existing-path",
|
681
|
-
:env => "production",
|
682
|
-
:options => dsl_config
|
683
|
-
)
|
684
|
-
end
|
685
|
-
|
686
|
-
it "merges with the default config" do
|
687
|
-
expect(config.config_hash).to eq(
|
688
|
-
:active => true,
|
689
|
-
:activejob_report_errors => "all",
|
690
|
-
:ca_file_path => File.join(resources_dir, "cacert.pem"),
|
691
|
-
:dns_servers => [],
|
692
|
-
:enable_allocation_tracking => true,
|
693
|
-
:enable_at_exit_reporter => true,
|
694
|
-
:enable_gvl_global_timer => true,
|
695
|
-
:enable_gvl_waiting_threads => true,
|
696
|
-
:enable_host_metrics => true,
|
697
|
-
:enable_minutely_probes => true,
|
698
|
-
:enable_statsd => true,
|
699
|
-
:enable_nginx_metrics => false,
|
700
|
-
:enable_rails_error_reporter => true,
|
701
|
-
:enable_rake_performance_instrumentation => false,
|
702
|
-
:endpoint => "https://push.appsignal.com",
|
703
|
-
:files_world_accessible => true,
|
704
|
-
:filter_metadata => [],
|
705
|
-
:filter_parameters => [],
|
706
|
-
:filter_session_data => [],
|
707
|
-
:ignore_actions => [],
|
708
|
-
:ignore_errors => [],
|
709
|
-
:ignore_logs => [],
|
710
|
-
:ignore_namespaces => [],
|
711
|
-
:instrument_http_rb => true,
|
712
|
-
:instrument_net_http => true,
|
713
|
-
:instrument_redis => true,
|
714
|
-
:instrument_sequel => true,
|
715
|
-
:log => "file",
|
716
|
-
:logging_endpoint => "https://appsignal-endpoint.net",
|
717
|
-
:name => "TestApp",
|
718
|
-
:push_api_key => "abc",
|
719
|
-
:request_headers => [],
|
720
|
-
:revision => "v2.5.1",
|
721
|
-
:send_environment_metadata => true,
|
722
|
-
:send_params => true,
|
723
|
-
:send_session_data => true,
|
724
|
-
:sidekiq_report_errors => "all"
|
725
|
-
)
|
726
|
-
end
|
727
|
-
|
728
|
-
it "sets the dsl_config" do
|
729
|
-
expect(config.dsl_config).to eq(dsl_config)
|
730
|
-
end
|
731
|
-
|
732
|
-
describe "overriding system detected config" do
|
733
|
-
describe ":running_in_container" do
|
734
|
-
let(:dsl_config) { { :running_in_container => true } }
|
735
|
-
subject { config[:running_in_container] }
|
736
|
-
|
737
|
-
it "overrides system detected config" do
|
738
|
-
expect(subject).to be_truthy
|
739
|
-
end
|
740
|
-
end
|
741
|
-
|
742
|
-
describe ":active" do
|
743
|
-
subject { config[:active] }
|
744
|
-
|
745
|
-
context "with APPSIGNAL_PUSH_API_KEY env variable" do
|
746
|
-
let(:dsl_config) { { :active => false } }
|
747
|
-
before { ENV["APPSIGNAL_PUSH_API_KEY"] = "abc" }
|
748
|
-
|
749
|
-
it "sets given config rather than env variable" do
|
750
|
-
expect(subject).to be_falsy
|
751
|
-
end
|
752
|
-
end
|
753
|
-
end
|
754
|
-
end
|
755
|
-
|
756
|
-
describe "overriding loader config" do
|
757
|
-
let(:config) do
|
758
|
-
build_config(
|
759
|
-
:root_path => "non-existing-path",
|
760
|
-
:env => "production",
|
761
|
-
:options => { :my_option => "initial value" }
|
762
|
-
)
|
763
|
-
end
|
764
|
-
before do
|
765
|
-
define_loader(:test_loader) do
|
766
|
-
def on_load
|
767
|
-
register_config_defaults(:my_option => "loader value")
|
768
|
-
end
|
769
|
-
end
|
770
|
-
load_loader(:test_loader)
|
771
|
-
end
|
772
|
-
|
773
|
-
it "overrides loader config" do
|
774
|
-
expect(config[:my_option]).to eq("initial value")
|
775
|
-
end
|
776
|
-
end
|
777
|
-
end
|
778
|
-
|
779
|
-
describe "config keys" do
|
780
|
-
let(:config) { build_config(:options => options) }
|
781
|
-
|
782
|
-
describe ":endpoint" do
|
783
|
-
subject { config[:endpoint] }
|
784
|
-
|
785
|
-
context "with an pre-0.12-style endpoint" do
|
786
|
-
let(:options) { { :endpoint => "https://push.appsignal.com/1" } }
|
787
|
-
|
788
|
-
it "strips off the path" do
|
789
|
-
expect(subject).to eq "https://push.appsignal.com"
|
790
|
-
end
|
791
|
-
end
|
792
|
-
|
793
|
-
context "with a non-standard port" do
|
794
|
-
let(:options) { { :endpoint => "http://localhost:4567" } }
|
795
|
-
|
796
|
-
it "keeps the port" do
|
797
|
-
expect(subject).to eq "http://localhost:4567"
|
798
|
-
end
|
799
|
-
end
|
800
|
-
end
|
801
|
-
|
802
|
-
describe ":logging_endpoint" do
|
803
|
-
subject { config[:logging_endpoint] }
|
804
|
-
|
805
|
-
context "with a non-standard port" do
|
806
|
-
let(:options) { { :logging_endpoint => "http://localhost:4567" } }
|
807
|
-
|
808
|
-
it "keeps the port" do
|
809
|
-
expect(subject).to eq "http://localhost:4567"
|
810
|
-
end
|
811
|
-
end
|
812
|
-
end
|
813
|
-
end
|
814
|
-
|
815
|
-
describe "#[]" do
|
816
|
-
let(:config) do
|
817
|
-
build_config(:env => :none, :options => { :push_api_key => "foo", :request_headers => [] })
|
818
|
-
end
|
819
|
-
|
820
|
-
context "with existing key" do
|
821
|
-
it "gets the value" do
|
822
|
-
expect(config[:push_api_key]).to eq "foo"
|
823
|
-
end
|
824
|
-
end
|
825
|
-
|
826
|
-
context "without existing key" do
|
827
|
-
it "returns nil" do
|
828
|
-
expect(config[:nonsense]).to be_nil
|
829
|
-
end
|
830
|
-
end
|
831
|
-
end
|
832
|
-
|
833
|
-
describe "#[]=" do
|
834
|
-
let(:config) { build_config(:env => :none) }
|
835
|
-
|
836
|
-
context "with existing key" do
|
837
|
-
it "changes the value" do
|
838
|
-
expect(config[:push_api_key]).to be_nil
|
839
|
-
config[:push_api_key] = "abcde"
|
840
|
-
expect(config[:push_api_key]).to eq "abcde"
|
841
|
-
end
|
842
|
-
end
|
843
|
-
|
844
|
-
context "with new key" do
|
845
|
-
it "sets the value" do
|
846
|
-
expect(config[:foo]).to be_nil
|
847
|
-
config[:foo] = "bar"
|
848
|
-
expect(config[:foo]).to eq "bar"
|
849
|
-
end
|
850
|
-
end
|
851
|
-
end
|
852
|
-
|
853
|
-
describe "#write_to_environment" do
|
854
|
-
let(:config) { build_config }
|
855
|
-
before do
|
856
|
-
config[:bind_address] = "0.0.0.0"
|
857
|
-
config[:cpu_count] = 1.5
|
858
|
-
config[:logging_endpoint] = "http://localhost:123"
|
859
|
-
config[:http_proxy] = "http://localhost"
|
860
|
-
config[:ignore_actions] = %w[action1 action2]
|
861
|
-
config[:ignore_errors] = %w[ExampleStandardError AnotherError]
|
862
|
-
config[:ignore_logs] = ["^start$", "^Completed 2.* in .*ms (.*)"]
|
863
|
-
config[:ignore_namespaces] = %w[admin private_namespace]
|
864
|
-
config[:log] = "stdout"
|
865
|
-
config[:log_path] = "/tmp"
|
866
|
-
config[:filter_parameters] = %w[password confirm_password]
|
867
|
-
config[:filter_session_data] = %w[key1 key2]
|
868
|
-
config[:running_in_container] = false
|
869
|
-
config[:dns_servers] = ["8.8.8.8", "8.8.4.4"]
|
870
|
-
config[:transaction_debug_mode] = true
|
871
|
-
config[:send_environment_metadata] = false
|
872
|
-
config[:revision] = "v2.5.1"
|
873
|
-
config.write_to_environment
|
874
|
-
end
|
875
|
-
|
876
|
-
it "writes the current config to environment variables" do
|
877
|
-
expect(ENV.fetch("_APPSIGNAL_ACTIVE", nil)).to eq "true"
|
878
|
-
expect(ENV.fetch("_APPSIGNAL_APP_PATH", nil))
|
879
|
-
.to end_with("spec/support/fixtures/projects/valid")
|
880
|
-
expect(ENV.fetch("_APPSIGNAL_AGENT_PATH", nil)).to end_with("/ext")
|
881
|
-
expect(ENV.fetch("_APPSIGNAL_BIND_ADDRESS", nil)).to eq("0.0.0.0")
|
882
|
-
expect(ENV.fetch("_APPSIGNAL_CPU_COUNT", nil)).to eq("1.5")
|
883
|
-
expect(ENV.fetch("_APPSIGNAL_LOG", nil)).to eq "stdout"
|
884
|
-
expect(ENV.fetch("_APPSIGNAL_LOG_FILE_PATH", nil)).to end_with("/tmp/appsignal.log")
|
885
|
-
expect(ENV.fetch("_APPSIGNAL_LOGGING_ENDPOINT", nil)).to eq "http://localhost:123"
|
886
|
-
expect(ENV.fetch("_APPSIGNAL_PUSH_API_ENDPOINT", nil)).to eq "https://push.appsignal.com"
|
887
|
-
expect(ENV.fetch("_APPSIGNAL_PUSH_API_KEY", nil)).to eq "abc"
|
888
|
-
expect(ENV.fetch("_APPSIGNAL_APP_NAME", nil)).to eq "TestApp"
|
889
|
-
expect(ENV.fetch("_APPSIGNAL_APP_ENV", nil)).to eq "production"
|
890
|
-
expect(ENV.fetch("_APPSIGNAL_LANGUAGE_INTEGRATION_VERSION", nil))
|
891
|
-
.to eq "ruby-#{Appsignal::VERSION}"
|
892
|
-
expect(ENV.fetch("_APPSIGNAL_HTTP_PROXY", nil)).to eq "http://localhost"
|
893
|
-
expect(ENV.fetch("_APPSIGNAL_IGNORE_ACTIONS", nil)).to eq "action1,action2"
|
894
|
-
expect(ENV.fetch("_APPSIGNAL_IGNORE_ERRORS", nil)).to eq "ExampleStandardError,AnotherError"
|
895
|
-
expect(ENV.fetch("_APPSIGNAL_IGNORE_LOGS", nil)).to eq "^start$,^Completed 2.* in .*ms (.*)"
|
896
|
-
expect(ENV.fetch("_APPSIGNAL_IGNORE_NAMESPACES", nil)).to eq "admin,private_namespace"
|
897
|
-
expect(ENV.fetch("_APPSIGNAL_RUNNING_IN_CONTAINER", nil)).to eq "false"
|
898
|
-
expect(ENV.fetch("_APPSIGNAL_ENABLE_HOST_METRICS", nil)).to eq "true"
|
899
|
-
expect(ENV.fetch("_APPSIGNAL_HOSTNAME", nil)).to eq ""
|
900
|
-
expect(ENV.fetch("_APPSIGNAL_HOST_ROLE", nil)).to eq ""
|
901
|
-
expect(ENV.fetch("_APPSIGNAL_PROCESS_NAME", nil)).to include "rspec"
|
902
|
-
expect(ENV.fetch("_APPSIGNAL_CA_FILE_PATH", nil))
|
903
|
-
.to eq File.join(resources_dir, "cacert.pem")
|
904
|
-
expect(ENV.fetch("_APPSIGNAL_DNS_SERVERS", nil)).to eq "8.8.8.8,8.8.4.4"
|
905
|
-
expect(ENV.fetch("_APPSIGNAL_FILES_WORLD_ACCESSIBLE", nil)).to eq "true"
|
906
|
-
expect(ENV.fetch("_APPSIGNAL_SEND_ENVIRONMENT_METADATA", nil)).to eq "false"
|
907
|
-
expect(ENV.fetch("_APPSIGNAL_STATSD_PORT", nil)).to eq ""
|
908
|
-
expect(ENV.fetch("_APPSIGNAL_FILTER_PARAMETERS", nil)).to eq "password,confirm_password"
|
909
|
-
expect(ENV.fetch("_APPSIGNAL_FILTER_SESSION_DATA", nil)).to eq "key1,key2"
|
910
|
-
expect(ENV.fetch("_APP_REVISION", nil)).to eq "v2.5.1"
|
911
|
-
expect(ENV).to_not have_key("_APPSIGNAL_WORKING_DIRECTORY_PATH")
|
912
|
-
end
|
913
|
-
|
914
|
-
context "with :hostname" do
|
915
|
-
before do
|
916
|
-
config[:hostname] = "Alices-MBP.example.com"
|
917
|
-
config.write_to_environment
|
918
|
-
end
|
919
|
-
|
920
|
-
it "sets the modified :hostname" do
|
921
|
-
expect(ENV.fetch("_APPSIGNAL_HOSTNAME", nil)).to eq "Alices-MBP.example.com"
|
922
|
-
end
|
923
|
-
end
|
924
|
-
|
925
|
-
context "with :host_role" do
|
926
|
-
before do
|
927
|
-
config[:host_role] = "host role"
|
928
|
-
config.write_to_environment
|
929
|
-
end
|
930
|
-
|
931
|
-
it "sets the modified :host_role" do
|
932
|
-
expect(ENV.fetch("_APPSIGNAL_HOST_ROLE", nil)).to eq "host role"
|
933
|
-
end
|
934
|
-
end
|
935
|
-
|
936
|
-
context "with :working_directory_path" do
|
937
|
-
before do
|
938
|
-
config[:working_directory_path] = "/tmp/appsignal2"
|
939
|
-
config.write_to_environment
|
940
|
-
end
|
941
|
-
|
942
|
-
it "sets the modified :working_directory_path" do
|
943
|
-
expect(ENV.fetch("_APPSIGNAL_WORKING_DIRECTORY_PATH", nil)).to eq "/tmp/appsignal2"
|
944
|
-
end
|
945
|
-
end
|
946
|
-
|
947
|
-
context "with :statsd_port" do
|
948
|
-
before do
|
949
|
-
config[:statsd_port] = "1000"
|
950
|
-
config.write_to_environment
|
951
|
-
end
|
952
|
-
|
953
|
-
it "sets the statsd_port env var" do
|
954
|
-
expect(ENV.fetch("_APPSIGNAL_STATSD_PORT", nil)).to eq "1000"
|
955
|
-
end
|
956
|
-
end
|
957
|
-
end
|
958
|
-
|
959
|
-
describe "#log_file_path" do
|
960
|
-
let(:out_stream) { std_stream }
|
961
|
-
let(:output) { out_stream.read }
|
962
|
-
let(:config) { build_config(:options => { :log_path => log_path }) }
|
963
|
-
|
964
|
-
def log_file_path
|
965
|
-
capture_stdout(out_stream) { config.log_file_path }
|
966
|
-
end
|
967
|
-
|
968
|
-
context "when path is writable" do
|
969
|
-
let(:log_path) { File.join(tmp_dir, "writable-path") }
|
970
|
-
before { FileUtils.mkdir_p(log_path, :mode => 0o755) }
|
971
|
-
after { FileUtils.rm_rf(log_path) }
|
972
|
-
|
973
|
-
it "returns log file path" do
|
974
|
-
expect(log_file_path).to eq File.join(log_path, "appsignal.log")
|
975
|
-
end
|
976
|
-
|
977
|
-
it "prints no warning" do
|
978
|
-
log_file_path
|
979
|
-
expect(output).to be_empty
|
980
|
-
end
|
981
|
-
end
|
982
|
-
|
983
|
-
shared_examples "#log_file_path: tmp path" do
|
984
|
-
let(:system_tmp_dir) { described_class.system_tmp_dir }
|
985
|
-
before { FileUtils.mkdir_p(system_tmp_dir) }
|
986
|
-
after { FileUtils.rm_rf(system_tmp_dir) }
|
987
|
-
|
988
|
-
context "when the /tmp fallback path is writable" do
|
989
|
-
before { FileUtils.chmod(0o777, system_tmp_dir) }
|
990
|
-
|
991
|
-
it "returns returns the tmp location" do
|
992
|
-
expect(log_file_path).to eq(File.join(system_tmp_dir, "appsignal.log"))
|
993
|
-
end
|
994
|
-
|
995
|
-
it "prints a warning" do
|
996
|
-
log_file_path
|
997
|
-
expect(output).to include "appsignal: Unable to log to '#{log_path}'. " \
|
998
|
-
"Logging to '#{system_tmp_dir}' instead."
|
999
|
-
end
|
1000
|
-
|
1001
|
-
it "prints a warning once" do
|
1002
|
-
capture_stdout(out_stream) do
|
1003
|
-
log_file_path
|
1004
|
-
log_file_path
|
1005
|
-
end
|
1006
|
-
message = "appsignal: Unable to log to '#{log_path}'. " \
|
1007
|
-
"Logging to '#{system_tmp_dir}' instead."
|
1008
|
-
expect(output.scan(message).count).to eq(1)
|
1009
|
-
end
|
1010
|
-
end
|
1011
|
-
|
1012
|
-
context "when the /tmp fallback path is not writable" do
|
1013
|
-
before { FileUtils.chmod(0o555, system_tmp_dir) }
|
1014
|
-
|
1015
|
-
it "returns nil" do
|
1016
|
-
expect(log_file_path).to be_nil
|
1017
|
-
end
|
1018
|
-
|
1019
|
-
it "prints a warning" do
|
1020
|
-
log_file_path
|
1021
|
-
expect(output).to include "appsignal: Unable to log to '#{log_path}' " \
|
1022
|
-
"or the '#{system_tmp_dir}' fallback."
|
1023
|
-
end
|
1024
|
-
|
1025
|
-
it "prints a warning once" do
|
1026
|
-
capture_stdout(out_stream) do
|
1027
|
-
log_file_path
|
1028
|
-
log_file_path
|
1029
|
-
end
|
1030
|
-
message = "appsignal: Unable to log to '#{log_path}' or the '#{system_tmp_dir}' fallback."
|
1031
|
-
expect(output.scan(message).count).to eq(1)
|
1032
|
-
end
|
1033
|
-
end
|
1034
|
-
end
|
1035
|
-
|
1036
|
-
context "when path is nil" do
|
1037
|
-
let(:log_path) { nil }
|
1038
|
-
|
1039
|
-
context "when root_path is nil" do
|
1040
|
-
before { allow(config).to receive(:root_path).and_return(nil) }
|
1041
|
-
|
1042
|
-
include_examples "#log_file_path: tmp path"
|
1043
|
-
end
|
1044
|
-
|
1045
|
-
context "when root_path is set" do
|
1046
|
-
it "returns returns the project log location" do
|
1047
|
-
expect(log_file_path).to eq File.join(config.root_path, "log/appsignal.log")
|
1048
|
-
end
|
1049
|
-
|
1050
|
-
it "prints no warning" do
|
1051
|
-
log_file_path
|
1052
|
-
expect(output).to be_empty
|
1053
|
-
end
|
1054
|
-
end
|
1055
|
-
end
|
1056
|
-
|
1057
|
-
context "when path does not exist" do
|
1058
|
-
let(:log_path) { "/non-existing" }
|
1059
|
-
|
1060
|
-
include_examples "#log_file_path: tmp path"
|
1061
|
-
end
|
1062
|
-
|
1063
|
-
context "when path is not writable" do
|
1064
|
-
let(:log_path) { File.join(tmp_dir, "not-writable-path") }
|
1065
|
-
before { FileUtils.mkdir_p(log_path, :mode => 0o555) }
|
1066
|
-
after { FileUtils.rm_rf(log_path) }
|
1067
|
-
|
1068
|
-
include_examples "#log_file_path: tmp path"
|
1069
|
-
end
|
1070
|
-
|
1071
|
-
context "when path is a symlink" do
|
1072
|
-
context "when linked path does not exist" do
|
1073
|
-
let(:real_path) { File.join(tmp_dir, "real-path") }
|
1074
|
-
let(:log_path) { File.join(tmp_dir, "symlink-path") }
|
1075
|
-
before { File.symlink(real_path, log_path) }
|
1076
|
-
after { FileUtils.rm(log_path) }
|
1077
|
-
|
1078
|
-
include_examples "#log_file_path: tmp path"
|
1079
|
-
end
|
1080
|
-
|
1081
|
-
context "when linked path exists" do
|
1082
|
-
context "when linked path is not writable" do
|
1083
|
-
let(:real_path) { File.join(tmp_dir, "real-path") }
|
1084
|
-
let(:log_path) { File.join(tmp_dir, "symlink-path") }
|
1085
|
-
before do
|
1086
|
-
FileUtils.mkdir_p(real_path)
|
1087
|
-
FileUtils.chmod(0o444, real_path)
|
1088
|
-
File.symlink(real_path, log_path)
|
1089
|
-
end
|
1090
|
-
after do
|
1091
|
-
FileUtils.rm_rf(real_path)
|
1092
|
-
FileUtils.rm(log_path)
|
1093
|
-
end
|
1094
|
-
|
1095
|
-
include_examples "#log_file_path: tmp path"
|
1096
|
-
end
|
1097
|
-
|
1098
|
-
context "when linked path is writable" do
|
1099
|
-
let(:real_path) { File.join(tmp_dir, "real-path") }
|
1100
|
-
let(:log_path) { File.join(tmp_dir, "symlink-path") }
|
1101
|
-
before do
|
1102
|
-
FileUtils.mkdir_p(real_path)
|
1103
|
-
File.symlink(real_path, log_path)
|
1104
|
-
end
|
1105
|
-
after do
|
1106
|
-
FileUtils.rm_rf(real_path)
|
1107
|
-
FileUtils.rm(log_path)
|
1108
|
-
end
|
1109
|
-
|
1110
|
-
it "returns real path of log path" do
|
1111
|
-
expect(log_file_path).to eq(File.join(real_path, "appsignal.log"))
|
1112
|
-
end
|
1113
|
-
end
|
1114
|
-
end
|
1115
|
-
end
|
1116
|
-
end
|
1117
|
-
|
1118
|
-
describe ".system_tmp_dir" do
|
1119
|
-
before do
|
1120
|
-
# To counteract the stub in spec_helper
|
1121
|
-
expect(Appsignal::Config).to receive(:system_tmp_dir).and_call_original
|
1122
|
-
end
|
1123
|
-
|
1124
|
-
context "when on a *NIX OS" do
|
1125
|
-
before do
|
1126
|
-
expect(Gem).to receive(:win_platform?).and_return(false)
|
1127
|
-
end
|
1128
|
-
|
1129
|
-
it "returns the system's tmp dir" do
|
1130
|
-
expect(described_class.system_tmp_dir).to eq(File.realpath("/tmp"))
|
1131
|
-
end
|
1132
|
-
end
|
1133
|
-
|
1134
|
-
context "when on Microsoft Windows" do
|
1135
|
-
before do
|
1136
|
-
expect(Gem).to receive(:win_platform?).and_return(true)
|
1137
|
-
end
|
1138
|
-
|
1139
|
-
it "returns the system's tmp dir" do
|
1140
|
-
expect(described_class.system_tmp_dir).to eq(Dir.tmpdir)
|
1141
|
-
end
|
1142
|
-
end
|
1143
|
-
end
|
1144
|
-
|
1145
|
-
describe "#validate" do
|
1146
|
-
subject { config.valid? }
|
1147
|
-
let(:config) do
|
1148
|
-
build_config(:root_path => Dir.pwd, :env => "production", :options => config_options)
|
1149
|
-
end
|
1150
|
-
|
1151
|
-
if DependencyHelper.rails_present?
|
1152
|
-
require "active_job"
|
1153
|
-
|
1154
|
-
context "activejob_report_errors" do
|
1155
|
-
let(:config_options) { { :activejob_report_errors => "discard" } }
|
1156
|
-
|
1157
|
-
if DependencyHelper.rails_version >= Gem::Version.new("7.1.0")
|
1158
|
-
context "when Active Job >= 7.1 and 'discard'" do
|
1159
|
-
it "does not override the activejob_report_errors value" do
|
1160
|
-
expect(config[:activejob_report_errors]).to eq("discard")
|
1161
|
-
expect(config.override_config[:activejob_report_errors]).to be_nil
|
1162
|
-
end
|
1163
|
-
end
|
1164
|
-
else
|
1165
|
-
context "when Active Job < 7.1 and 'discard'" do
|
1166
|
-
it "sets activejob_report_errors to 'all'" do
|
1167
|
-
expect(config[:activejob_report_errors]).to eq("all")
|
1168
|
-
expect(config.override_config[:activejob_report_errors]).to eq("all")
|
1169
|
-
end
|
1170
|
-
end
|
1171
|
-
end
|
1172
|
-
end
|
1173
|
-
end
|
1174
|
-
|
1175
|
-
context "sidekiq_report_errors" do
|
1176
|
-
let(:config_options) { { :sidekiq_report_errors => "discard" } }
|
1177
|
-
before do
|
1178
|
-
if Appsignal::Hooks::SidekiqHook.instance_variable_defined?(:@version_5_1_or_higher)
|
1179
|
-
Appsignal::Hooks::SidekiqHook.remove_instance_variable(:@version_5_1_or_higher)
|
1180
|
-
end
|
1181
|
-
end
|
1182
|
-
|
1183
|
-
context "when Sidekiq >= 5.1 and 'discard'" do
|
1184
|
-
before { stub_const("Sidekiq::VERSION", "5.1.0") }
|
1185
|
-
|
1186
|
-
it "does not override the sidekiq_report_errors value" do
|
1187
|
-
expect(config[:sidekiq_report_errors]).to eq("discard")
|
1188
|
-
expect(config.override_config[:sidekiq_report_errors]).to be_nil
|
1189
|
-
end
|
1190
|
-
end
|
1191
|
-
|
1192
|
-
context "when Sidekiq < 5.1 and 'discard'" do
|
1193
|
-
before { stub_const("Sidekiq::VERSION", "5.0.0") }
|
1194
|
-
|
1195
|
-
it "sets sidekiq_report_errors to 'all'" do
|
1196
|
-
expect(config[:sidekiq_report_errors]).to eq("all")
|
1197
|
-
expect(config.override_config[:sidekiq_report_errors]).to eq("all")
|
1198
|
-
end
|
1199
|
-
end
|
1200
|
-
end
|
1201
|
-
|
1202
|
-
describe "push_api_key" do
|
1203
|
-
let(:config_options) { { :push_api_key => push_api_key, :request_headers => [] } }
|
1204
|
-
before { config.validate }
|
1205
|
-
|
1206
|
-
context "with missing push_api_key" do
|
1207
|
-
let(:push_api_key) { nil }
|
1208
|
-
|
1209
|
-
it "sets valid to false" do
|
1210
|
-
is_expected.to eq(false)
|
1211
|
-
end
|
1212
|
-
end
|
1213
|
-
|
1214
|
-
context "with empty push_api_key" do
|
1215
|
-
let(:push_api_key) { "" }
|
1216
|
-
|
1217
|
-
it "sets valid to false" do
|
1218
|
-
is_expected.to eq(false)
|
1219
|
-
end
|
1220
|
-
end
|
1221
|
-
|
1222
|
-
context "with blank push_api_key" do
|
1223
|
-
let(:push_api_key) { " " }
|
1224
|
-
|
1225
|
-
it "sets valid to false" do
|
1226
|
-
is_expected.to eq(false)
|
1227
|
-
end
|
1228
|
-
end
|
1229
|
-
|
1230
|
-
context "with push_api_key present" do
|
1231
|
-
let(:push_api_key) { "abc" }
|
1232
|
-
|
1233
|
-
it "sets valid to true" do
|
1234
|
-
is_expected.to eq(true)
|
1235
|
-
end
|
1236
|
-
end
|
1237
|
-
end
|
1238
|
-
end
|
1239
|
-
|
1240
|
-
describe "#log_level" do
|
1241
|
-
let(:options) { {} }
|
1242
|
-
let(:config) { build_config(:root_path => "", :env => nil, :options => options) }
|
1243
|
-
subject { config.log_level }
|
1244
|
-
|
1245
|
-
context "without any config" do
|
1246
|
-
it "returns info by default" do
|
1247
|
-
is_expected.to eq(Logger::INFO)
|
1248
|
-
end
|
1249
|
-
end
|
1250
|
-
|
1251
|
-
context "with log_level set to error" do
|
1252
|
-
let(:options) { { :log_level => "error" } }
|
1253
|
-
it { is_expected.to eq(Logger::ERROR) }
|
1254
|
-
end
|
1255
|
-
|
1256
|
-
context "with log_level set to warn" do
|
1257
|
-
let(:options) { { :log_level => "warn" } }
|
1258
|
-
it { is_expected.to eq(Logger::WARN) }
|
1259
|
-
end
|
1260
|
-
|
1261
|
-
context "with log_level set to info" do
|
1262
|
-
let(:options) { { :log_level => "info" } }
|
1263
|
-
it { is_expected.to eq(Logger::INFO) }
|
1264
|
-
end
|
1265
|
-
|
1266
|
-
context "with log_level set to debug" do
|
1267
|
-
let(:options) { { :log_level => "debug" } }
|
1268
|
-
it { is_expected.to eq(Logger::DEBUG) }
|
1269
|
-
end
|
1270
|
-
|
1271
|
-
context "with log_level set to trace" do
|
1272
|
-
let(:options) { { :log_level => "trace" } }
|
1273
|
-
it { is_expected.to eq(Logger::DEBUG) }
|
1274
|
-
end
|
1275
|
-
|
1276
|
-
context "with debug and log_level set" do
|
1277
|
-
let(:options) { { :log_level => "error", :debug => true } }
|
1278
|
-
|
1279
|
-
it "the log_level option is leading" do
|
1280
|
-
is_expected.to eq(Logger::ERROR)
|
1281
|
-
end
|
1282
|
-
end
|
1283
|
-
|
1284
|
-
context "with transaction_debug_mode and log_level set" do
|
1285
|
-
let(:options) { { :log_level => "error", :transaction_debug_mode => true } }
|
1286
|
-
|
1287
|
-
it "the log_level option is leading" do
|
1288
|
-
is_expected.to eq(Logger::ERROR)
|
1289
|
-
end
|
1290
|
-
end
|
1291
|
-
|
1292
|
-
context "with log level set to an unknown value" do
|
1293
|
-
let(:options) { { :log_level => "fatal" } }
|
1294
|
-
|
1295
|
-
it "prints a warning and doesn't use the log_level" do
|
1296
|
-
is_expected.to eql(Logger::INFO)
|
1297
|
-
end
|
1298
|
-
end
|
1299
|
-
end
|
1300
|
-
|
1301
|
-
describe Appsignal::Config::ConfigDSL do
|
1302
|
-
let(:env) { :production }
|
1303
|
-
let(:config) { build_config(:env => env) }
|
1304
|
-
let(:dsl) { described_class.new(config) }
|
1305
|
-
|
1306
|
-
describe "default options" do
|
1307
|
-
let(:env) { :unknown_env }
|
1308
|
-
|
1309
|
-
it "returns default values for config options" do
|
1310
|
-
Appsignal::Config::DEFAULT_CONFIG.each do |option, value|
|
1311
|
-
expect(dsl.send(option)).to eq(value)
|
1312
|
-
end
|
1313
|
-
end
|
1314
|
-
end
|
1315
|
-
|
1316
|
-
it "returns already set values for config options" do
|
1317
|
-
ENV["APPSIGNAL_IGNORE_ERRORS"] = "my_error1,my_error2"
|
1318
|
-
config[:push_api_key] = "my push key"
|
1319
|
-
config[:ignore_actions] = ["My ignored action"]
|
1320
|
-
|
1321
|
-
expect(dsl.push_api_key).to eq("my push key")
|
1322
|
-
expect(dsl.ignore_actions).to eq(["My ignored action"])
|
1323
|
-
expect(dsl.ignore_errors).to eq(["my_error1", "my_error2"])
|
1324
|
-
end
|
1325
|
-
|
1326
|
-
it "returns the env" do
|
1327
|
-
expect(dsl.env).to eq("production")
|
1328
|
-
end
|
1329
|
-
|
1330
|
-
it "sets config options" do
|
1331
|
-
dsl.push_api_key = "my push key"
|
1332
|
-
dsl.ignore_actions = ["My ignored action"]
|
1333
|
-
|
1334
|
-
expect(dsl.push_api_key).to eq("my push key")
|
1335
|
-
expect(dsl.ignore_actions).to eq(["My ignored action"])
|
1336
|
-
end
|
1337
|
-
|
1338
|
-
it "doesn't update the config object" do
|
1339
|
-
dsl.push_api_key = "my push key"
|
1340
|
-
|
1341
|
-
expect(dsl.push_api_key).to eq("my push key")
|
1342
|
-
expect(config[:push_api_key]).to eq("abc") # Loaded from file
|
1343
|
-
end
|
1344
|
-
|
1345
|
-
it "casts strings to strings" do
|
1346
|
-
dsl.activejob_report_errors = :all
|
1347
|
-
dsl.sidekiq_report_errors = :all
|
1348
|
-
|
1349
|
-
expect(dsl.activejob_report_errors).to eq("all")
|
1350
|
-
expect(dsl.sidekiq_report_errors).to eq("all")
|
1351
|
-
end
|
1352
|
-
|
1353
|
-
it "casts booleans to booleans" do
|
1354
|
-
dsl.active = :yes
|
1355
|
-
dsl.enable_host_metrics = "An object representing a truthy value"
|
1356
|
-
dsl.send_params = true
|
1357
|
-
dsl.send_session_data = false
|
1358
|
-
|
1359
|
-
expect(dsl.active).to be(true)
|
1360
|
-
expect(dsl.enable_host_metrics).to be(true)
|
1361
|
-
expect(dsl.send_params).to be(true)
|
1362
|
-
expect(dsl.send_session_data).to be(false)
|
1363
|
-
end
|
1364
|
-
|
1365
|
-
it "casts arrays to arrays" do
|
1366
|
-
ignore_actions = Set.new
|
1367
|
-
ignore_actions << "my ignored action 1"
|
1368
|
-
ignore_actions << "my ignored action 2"
|
1369
|
-
dsl.ignore_actions = ignore_actions
|
1370
|
-
|
1371
|
-
expect(dsl.ignore_actions).to eq(["my ignored action 1", "my ignored action 2"])
|
1372
|
-
end
|
1373
|
-
|
1374
|
-
it "casts floats to floats" do
|
1375
|
-
dsl.cpu_count = 1
|
1376
|
-
|
1377
|
-
expect(dsl.cpu_count).to eq(1.0)
|
1378
|
-
end
|
1379
|
-
end
|
1380
|
-
end
|