appsignal 3.13.0 → 4.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +499 -487
- data/CHANGELOG.md +113 -0
- data/Rakefile +31 -7
- data/benchmark.rake +4 -6
- data/build_matrix.yml +45 -39
- data/ext/agent.rb +27 -27
- data/ext/appsignal_extension.c +25 -0
- data/gemfiles/rails-7.2.gemfile +11 -0
- data/lib/appsignal/check_in/cron.rb +2 -15
- data/lib/appsignal/cli/diagnose.rb +37 -28
- data/lib/appsignal/cli/install.rb +5 -1
- data/lib/appsignal/config.rb +57 -119
- data/lib/appsignal/demo.rb +2 -2
- data/lib/appsignal/extension/jruby.rb +14 -0
- data/lib/appsignal/helpers/instrumentation.rb +139 -417
- data/lib/appsignal/helpers/metrics.rb +0 -16
- data/lib/appsignal/hooks/action_cable.rb +8 -8
- data/lib/appsignal/hooks/active_job.rb +2 -2
- data/lib/appsignal/hooks/at_exit.rb +37 -0
- data/lib/appsignal/hooks.rb +1 -16
- data/lib/appsignal/integrations/action_cable.rb +2 -2
- data/lib/appsignal/integrations/capistrano/appsignal.cap +2 -4
- data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +1 -4
- data/lib/appsignal/integrations/delayed_job_plugin.rb +3 -3
- data/lib/appsignal/integrations/que.rb +2 -2
- data/lib/appsignal/integrations/railtie.rb +26 -59
- data/lib/appsignal/integrations/rake.rb +2 -2
- data/lib/appsignal/integrations/resque.rb +2 -2
- data/lib/appsignal/integrations/shoryuken.rb +4 -4
- data/lib/appsignal/integrations/sidekiq.rb +3 -3
- data/lib/appsignal/integrations/webmachine.rb +2 -2
- data/lib/appsignal/loaders.rb +1 -1
- data/lib/appsignal/probes.rb +0 -9
- data/lib/appsignal/rack/abstract_middleware.rb +4 -26
- data/lib/appsignal/rack/event_handler.rb +4 -4
- data/lib/appsignal/rack/rails_instrumentation.rb +1 -1
- data/lib/appsignal/rack.rb +0 -25
- data/lib/appsignal/sample_data.rb +95 -0
- data/lib/appsignal/transaction.rb +235 -361
- data/lib/appsignal/utils/rails_helper.rb +4 -0
- data/lib/appsignal/version.rb +1 -1
- data/lib/appsignal.rb +19 -71
- data/spec/lib/appsignal/auth_check_spec.rb +1 -1
- data/spec/lib/appsignal/capistrano2_spec.rb +1 -1
- data/spec/lib/appsignal/capistrano3_spec.rb +53 -13
- data/spec/lib/appsignal/check_in_spec.rb +1 -207
- data/spec/lib/appsignal/cli/demo_spec.rb +7 -27
- data/spec/lib/appsignal/cli/diagnose_spec.rb +145 -110
- data/spec/lib/appsignal/config_spec.rb +304 -379
- data/spec/lib/appsignal/extension_install_failure_spec.rb +5 -1
- data/spec/lib/appsignal/extension_spec.rb +5 -1
- data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +1 -1
- data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +1 -2
- data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +1 -0
- data/spec/lib/appsignal/hooks/activejob_spec.rb +7 -12
- data/spec/lib/appsignal/hooks/at_exit_spec.rb +72 -0
- data/spec/lib/appsignal/hooks/gvl_spec.rb +10 -5
- data/spec/lib/appsignal/hooks/http_spec.rb +3 -3
- data/spec/lib/appsignal/hooks/net_http_spec.rb +3 -3
- data/spec/lib/appsignal/hooks/rake_spec.rb +6 -9
- data/spec/lib/appsignal/hooks/redis_client_spec.rb +5 -10
- data/spec/lib/appsignal/hooks/redis_spec.rb +4 -7
- data/spec/lib/appsignal/hooks/resque_spec.rb +3 -5
- data/spec/lib/appsignal/hooks_spec.rb +0 -41
- data/spec/lib/appsignal/integrations/data_mapper_spec.rb +29 -20
- data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +4 -9
- data/spec/lib/appsignal/integrations/railtie_spec.rb +179 -157
- data/spec/lib/appsignal/integrations/shoryuken_spec.rb +3 -5
- data/spec/lib/appsignal/integrations/sidekiq_spec.rb +48 -62
- data/spec/lib/appsignal/loaders/hanami_spec.rb +6 -9
- data/spec/lib/appsignal/loaders/padrino_spec.rb +6 -10
- data/spec/lib/appsignal/loaders/sinatra_spec.rb +6 -9
- data/spec/lib/appsignal/loaders_spec.rb +8 -1
- data/spec/lib/appsignal/marker_spec.rb +1 -1
- data/spec/lib/appsignal/probes_spec.rb +4 -83
- data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +4 -63
- data/spec/lib/appsignal/rack/event_handler_spec.rb +18 -15
- data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +3 -11
- data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +4 -5
- data/spec/lib/appsignal/sample_data_spec.rb +174 -0
- data/spec/lib/appsignal/transaction_spec.rb +791 -1031
- data/spec/lib/appsignal/transmitter_spec.rb +6 -8
- data/spec/lib/appsignal_spec.rb +294 -643
- data/spec/spec_helper.rb +1 -3
- data/spec/support/fixtures/projects/valid/config/appsignal.yml +4 -7
- data/spec/support/fixtures/projects/valid_with_rails_app/config/application.rb +16 -0
- data/spec/support/fixtures/projects/valid_with_rails_app/config/appsignal.yml +56 -0
- data/spec/support/fixtures/projects/valid_with_rails_app/config/environment.rb +5 -0
- data/spec/support/helpers/api_request_helper.rb +3 -2
- data/spec/support/helpers/config_helpers.rb +41 -11
- data/spec/support/helpers/dependency_helper.rb +8 -0
- data/spec/support/helpers/log_helpers.rb +1 -0
- data/spec/support/helpers/rails_helper.rb +6 -6
- data/spec/support/helpers/transaction_helpers.rb +2 -24
- data/spec/support/matchers/transaction.rb +3 -3
- data/spec/support/mocks/appsignal_mock.rb +3 -3
- data/spec/support/mocks/mock_probe.rb +2 -0
- data/spec/support/testing.rb +2 -2
- metadata +12 -22
- data/gemfiles/que_beta.gemfile +0 -5
- data/lib/appsignal/helpers/heartbeat.rb +0 -20
- data/lib/appsignal/integrations/grape.rb +0 -35
- data/lib/appsignal/integrations/hanami.rb +0 -13
- data/lib/appsignal/integrations/padrino.rb +0 -13
- data/lib/appsignal/integrations/sinatra.rb +0 -13
- data/lib/appsignal/rack/generic_instrumentation.rb +0 -22
- data/lib/appsignal/rack/streaming_listener.rb +0 -28
- data/spec/lib/appsignal/integrations/grape_spec.rb +0 -36
- data/spec/lib/appsignal/integrations/hanami_spec.rb +0 -17
- data/spec/lib/appsignal/integrations/padrino_spec.rb +0 -15
- data/spec/lib/appsignal/integrations/sinatra_spec.rb +0 -15
- data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +0 -81
- data/spec/lib/appsignal/rack/streaming_listener_spec.rb +0 -69
- data/spec/support/fixtures/projects/valid/config/environments/development.rb +0 -0
- data/spec/support/fixtures/projects/valid/config/environments/production.rb +0 -0
- data/spec/support/fixtures/projects/valid/config/environments/test.rb +0 -0
- data/spec/support/rails/my_app.rb +0 -6
- /data/spec/support/fixtures/projects/{valid/config/application.rb → valid_with_rails_app/log/.gitkeep} +0 -0
@@ -24,9 +24,22 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
24
24
|
describe ".run" do
|
25
25
|
let(:out_stream) { std_stream }
|
26
26
|
let(:output) { out_stream.read }
|
27
|
-
let(:
|
27
|
+
let(:root_path) { project_fixture_path }
|
28
|
+
let(:app_name) { "TestApp" }
|
29
|
+
let(:push_api_key) { "abc" }
|
30
|
+
let(:environment) { "production" }
|
31
|
+
let(:config) do
|
32
|
+
{
|
33
|
+
:root_path => root_path,
|
34
|
+
:environment => environment.to_s,
|
35
|
+
:name => app_name,
|
36
|
+
:endpoint => Appsignal::Config::DEFAULT_CONFIG[:endpoint],
|
37
|
+
:push_api_key => push_api_key,
|
38
|
+
:hostname => nil
|
39
|
+
}
|
40
|
+
end
|
28
41
|
let(:cli_class) { described_class }
|
29
|
-
let(:options) { { :environment =>
|
42
|
+
let(:options) { { :environment => environment } }
|
30
43
|
let(:gem_path) { Bundler::CLI::Common.select_spec("appsignal").full_gem_path.strip }
|
31
44
|
let(:received_report) { DiagnosticsReportEndpoint.received_report }
|
32
45
|
let(:process_user) { Etc.getpwuid(Process.uid).name }
|
@@ -43,7 +56,7 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
43
56
|
end
|
44
57
|
|
45
58
|
if DependencyHelper.rails_present?
|
46
|
-
allow(Rails).to receive(:root).and_return(Pathname.new(config
|
59
|
+
allow(Rails).to receive(:root).and_return(Pathname.new(config[:root_path]))
|
47
60
|
end
|
48
61
|
end
|
49
62
|
around do |example|
|
@@ -52,6 +65,7 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
52
65
|
example.run
|
53
66
|
$stdin = original_stdin
|
54
67
|
end
|
68
|
+
before { clear_integration_env_vars! }
|
55
69
|
before :api_stub => true do
|
56
70
|
stub_api_request config, "auth"
|
57
71
|
end
|
@@ -87,7 +101,7 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
87
101
|
stub_request(:post, "https://appsignal.com/diag").with(
|
88
102
|
:query => {
|
89
103
|
:api_key => config[:push_api_key],
|
90
|
-
:environment => config
|
104
|
+
:environment => config[:environment],
|
91
105
|
:gem_version => Appsignal::VERSION,
|
92
106
|
:hostname => config[:hostname],
|
93
107
|
:name => config[:name]
|
@@ -114,7 +128,7 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
114
128
|
|
115
129
|
it "logs to the log file" do
|
116
130
|
run
|
117
|
-
log_contents = File.read(config.log_file_path)
|
131
|
+
log_contents = File.read(Appsignal.config.log_file_path)
|
118
132
|
expect(log_contents).to contains_log :info, "Starting AppSignal diagnose"
|
119
133
|
end
|
120
134
|
|
@@ -741,7 +755,9 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
741
755
|
|
742
756
|
describe "configuration" do
|
743
757
|
context "without environment" do
|
744
|
-
let(:
|
758
|
+
let(:app_name) { nil }
|
759
|
+
let(:environment) { nil }
|
760
|
+
let(:push_api_key) { nil }
|
745
761
|
let(:options) { {} }
|
746
762
|
let(:warning_message) do
|
747
763
|
" Warning: No environment set, no config loaded!\n" \
|
@@ -779,13 +795,12 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
779
795
|
"sources" => {
|
780
796
|
"default" => default_config,
|
781
797
|
"system" => {},
|
798
|
+
"loaders" => {},
|
782
799
|
"initial" => { "env" => "" },
|
783
800
|
"file" => {},
|
784
801
|
"env" => {},
|
785
|
-
"override" => {
|
786
|
-
|
787
|
-
"modifiers" => {
|
788
|
-
"APPSIGNAL_INACTIVE_ON_CONFIG_FILE_ERROR" => ""
|
802
|
+
"override" => {},
|
803
|
+
"dsl" => {}
|
789
804
|
}
|
790
805
|
)
|
791
806
|
end
|
@@ -803,13 +818,13 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
803
818
|
|
804
819
|
it "outputs the label source after the value" do
|
805
820
|
expect(output).to include(
|
806
|
-
%(environment: "#{
|
821
|
+
%(environment: "#{environment}" (Loaded from: initial)\n)
|
807
822
|
)
|
808
823
|
end
|
809
824
|
end
|
810
825
|
|
811
826
|
context "when the source is the RACK_ENV env variable", :send_report => :no_cli_option do
|
812
|
-
let(:
|
827
|
+
let(:environment) { "rack_env" }
|
813
828
|
let(:options) { {} }
|
814
829
|
before do
|
815
830
|
ENV["RACK_ENV"] = "rack_env"
|
@@ -825,10 +840,9 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
825
840
|
end
|
826
841
|
|
827
842
|
context "when the source is the RAILS_ENV env variable", :send_report => :no_cli_option do
|
828
|
-
let(:
|
843
|
+
let(:environment) { "rails_env" }
|
829
844
|
let(:options) { {} }
|
830
845
|
before do
|
831
|
-
ENV.delete("RACK_ENV")
|
832
846
|
ENV["RAILS_ENV"] = "rails_env"
|
833
847
|
run
|
834
848
|
end
|
@@ -842,10 +856,9 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
842
856
|
end
|
843
857
|
|
844
858
|
context "when the source is multiple sources" do
|
845
|
-
let(:options) { { :environment => "
|
859
|
+
let(:options) { { :environment => "production" } }
|
846
860
|
before do
|
847
|
-
ENV["APPSIGNAL_APP_ENV"] = "
|
848
|
-
config.instance_variable_set(:@env, ENV.fetch("APPSIGNAL_APP_ENV", nil))
|
861
|
+
ENV["APPSIGNAL_APP_ENV"] = "development"
|
849
862
|
stub_api_request(config, "auth").to_return(:status => 200)
|
850
863
|
capture_diagnatics_report_request
|
851
864
|
run
|
@@ -855,8 +868,8 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
855
868
|
expect(output).to include(
|
856
869
|
" environment: \"production\"\n" \
|
857
870
|
" Sources:\n" \
|
858
|
-
" initial: \"
|
859
|
-
" env: \"
|
871
|
+
" initial: \"production\"\n" \
|
872
|
+
" env: \"development\"\n"
|
860
873
|
)
|
861
874
|
end
|
862
875
|
end
|
@@ -880,98 +893,109 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
880
893
|
|
881
894
|
context "when the source is only default" do
|
882
895
|
it "does not print a source" do
|
883
|
-
expect(output)
|
896
|
+
expect(output)
|
897
|
+
.to include("enable_host_metrics: #{Appsignal.config[:enable_host_metrics]}\n")
|
884
898
|
end
|
885
899
|
end
|
886
900
|
end
|
887
901
|
|
888
902
|
context "when the source is multiple sources" do
|
903
|
+
let(:app_name) { "MyApp" }
|
889
904
|
before do
|
890
|
-
ENV["APPSIGNAL_APP_NAME"] =
|
891
|
-
config[:name] = ENV.fetch("APPSIGNAL_APP_NAME", nil)
|
892
|
-
stub_api_request(config, "auth").to_return(:status => 200)
|
893
|
-
capture_diagnatics_report_request
|
905
|
+
ENV["APPSIGNAL_APP_NAME"] = app_name
|
894
906
|
run
|
895
907
|
end
|
896
908
|
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
"
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
909
|
+
it "outputs a list of sources with their values" do
|
910
|
+
expect(output).to include(
|
911
|
+
" name: \"MyApp\"\n" \
|
912
|
+
" Sources:\n" \
|
913
|
+
" file: \"TestApp\"\n" \
|
914
|
+
" env: \"MyApp\"\n"
|
915
|
+
)
|
916
|
+
end
|
917
|
+
end
|
918
|
+
|
919
|
+
if DependencyHelper.rails_present?
|
920
|
+
context "when is a Rails app" do
|
921
|
+
let(:root_path) { rails_project_fixture_path }
|
922
|
+
let(:app_name) { "TestApp" }
|
923
|
+
let(:environment) { "test" }
|
924
|
+
let(:options) { {} }
|
925
|
+
before do
|
926
|
+
# Workaround to not being able to require the railtie file
|
927
|
+
# multiple times and triggering the Rails initialization process.
|
928
|
+
# This will be used whtn the MyApp app has already been loaded.
|
929
|
+
Appsignal::Integrations::Railtie.load_default_config if defined?(MyApp)
|
930
|
+
run_within_dir(root_path)
|
906
931
|
end
|
907
|
-
|
908
|
-
it "
|
932
|
+
|
933
|
+
it "includes the Rails default config in the output and transmitted report" do
|
909
934
|
expect(output).to include(
|
910
|
-
" name: \"
|
935
|
+
" name: \"TestApp\"\n" \
|
911
936
|
" Sources:\n" \
|
912
|
-
"
|
913
|
-
"
|
937
|
+
" loaders: \"MyApp\"\n" \
|
938
|
+
" file: \"TestApp\"\n"
|
914
939
|
)
|
915
|
-
end
|
916
|
-
end
|
917
|
-
end
|
918
|
-
end
|
919
|
-
|
920
|
-
describe "modifiers" do
|
921
|
-
before do
|
922
|
-
ENV["APPSIGNAL_INACTIVE_ON_CONFIG_FILE_ERROR"] = "1"
|
923
|
-
run
|
924
|
-
end
|
925
940
|
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
941
|
+
expect(received_report["app"]["rails"]).to be(true)
|
942
|
+
expect(received_report["config"]["sources"]).to include(
|
943
|
+
"loaders" => {
|
944
|
+
"root_path" => root_path,
|
945
|
+
"env" => "test",
|
946
|
+
"log_path" => File.join(rails_project_fixture_path, "log"),
|
947
|
+
"name" => "MyApp"
|
948
|
+
}
|
949
|
+
)
|
950
|
+
end
|
932
951
|
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
952
|
+
context "when there's a problem loading the app" do
|
953
|
+
before do
|
954
|
+
# A spot where we can mock an error raise
|
955
|
+
expect(Appsignal::Utils::RailsHelper).to receive(:environment_config_path)
|
956
|
+
.and_raise(ExampleStandardError, "error message", ["line 1", "line 2"])
|
957
|
+
run_within_dir(root_path)
|
958
|
+
end
|
959
|
+
|
960
|
+
it "includes a load error" do
|
961
|
+
expect(output).to include(
|
962
|
+
"ERROR: Error encountered while loading the Rails app\n" \
|
963
|
+
"ExampleStandardError: error message"
|
964
|
+
)
|
965
|
+
|
966
|
+
pp received_report["app"]
|
967
|
+
expect(received_report["app"]["load_error"])
|
968
|
+
.to eq("ExampleStandardError: error message\nline 1\nline 2")
|
969
|
+
end
|
970
|
+
end
|
971
|
+
end
|
939
972
|
end
|
940
973
|
end
|
941
974
|
|
942
975
|
it "transmits config in report" do
|
943
976
|
run
|
944
|
-
|
945
|
-
|
946
|
-
additional_initial_config = {
|
947
|
-
:name => "MyApp",
|
948
|
-
:log_path => File.join(Rails.root, "log")
|
949
|
-
}
|
950
|
-
end
|
951
|
-
final_config = { "env" => "production" }
|
952
|
-
.merge(additional_initial_config)
|
953
|
-
.merge(config.config_hash)
|
977
|
+
final_config = Appsignal.config.config_hash
|
978
|
+
.merge(:env => "production")
|
954
979
|
expect(received_report["config"]).to match(
|
955
980
|
"options" => hash_with_string_keys(final_config),
|
956
981
|
"sources" => {
|
957
982
|
"default" => hash_with_string_keys(Appsignal::Config::DEFAULT_CONFIG),
|
958
983
|
"system" => {},
|
959
|
-
"
|
960
|
-
|
961
|
-
),
|
962
|
-
"file" => hash_with_string_keys(config.file_config),
|
984
|
+
"loaders" => {},
|
985
|
+
"initial" => hash_with_string_keys(Appsignal.config.initial_config),
|
986
|
+
"file" => hash_with_string_keys(Appsignal.config.file_config),
|
963
987
|
"env" => {},
|
964
|
-
"override" => {
|
965
|
-
|
966
|
-
"modifiers" => {
|
967
|
-
"APPSIGNAL_INACTIVE_ON_CONFIG_FILE_ERROR" => ""
|
988
|
+
"override" => {},
|
989
|
+
"dsl" => {}
|
968
990
|
}
|
969
991
|
)
|
970
992
|
end
|
971
993
|
end
|
972
994
|
|
973
995
|
context "with unconfigured environment" do
|
974
|
-
let(:
|
996
|
+
let(:app_name) { nil }
|
997
|
+
let(:push_api_key) { nil }
|
998
|
+
let(:environment) { "foobar" }
|
975
999
|
before { run_within_dir tmp_dir }
|
976
1000
|
|
977
1001
|
it "outputs environment" do
|
@@ -985,17 +1009,18 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
985
1009
|
|
986
1010
|
it "transmits config in report" do
|
987
1011
|
expect(received_report["config"]).to match(
|
988
|
-
"options" => hash_with_string_keys(
|
1012
|
+
"options" => hash_with_string_keys(
|
1013
|
+
Appsignal.config.config_hash.merge("env" => "foobar")
|
1014
|
+
),
|
989
1015
|
"sources" => {
|
990
1016
|
"default" => hash_with_string_keys(Appsignal::Config::DEFAULT_CONFIG),
|
991
1017
|
"system" => {},
|
992
|
-
"
|
993
|
-
"
|
1018
|
+
"loaders" => {},
|
1019
|
+
"initial" => hash_with_string_keys(Appsignal.config.initial_config),
|
1020
|
+
"file" => hash_with_string_keys(Appsignal.config.file_config),
|
994
1021
|
"env" => {},
|
995
|
-
"override" => {
|
996
|
-
|
997
|
-
"modifiers" => {
|
998
|
-
"APPSIGNAL_INACTIVE_ON_CONFIG_FILE_ERROR" => ""
|
1022
|
+
"override" => {},
|
1023
|
+
"dsl" => {}
|
999
1024
|
}
|
1000
1025
|
)
|
1001
1026
|
end
|
@@ -1108,18 +1133,9 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1108
1133
|
end
|
1109
1134
|
|
1110
1135
|
describe "paths" do
|
1111
|
-
let(:config) { Appsignal::Config.new(root_path, "production") }
|
1112
|
-
let(:root_path) { tmp_dir }
|
1113
|
-
let(:system_tmp_dir) { Appsignal::Config.system_tmp_dir }
|
1114
|
-
before do
|
1115
|
-
FileUtils.mkdir_p(root_path)
|
1116
|
-
FileUtils.mkdir_p(system_tmp_dir)
|
1117
|
-
end
|
1118
|
-
after { FileUtils.rm_rf([root_path, system_tmp_dir]) }
|
1119
|
-
|
1120
1136
|
describe "report" do
|
1121
1137
|
it "adds paths to the report" do
|
1122
|
-
|
1138
|
+
run
|
1123
1139
|
expect(received_report["paths"].keys).to match_array(
|
1124
1140
|
%w[
|
1125
1141
|
package_install_path root_path working_dir log_dir_path
|
@@ -1129,15 +1145,15 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1129
1145
|
end
|
1130
1146
|
|
1131
1147
|
describe "working_dir" do
|
1132
|
-
before {
|
1148
|
+
before { run }
|
1133
1149
|
|
1134
1150
|
it "outputs current path" do
|
1135
|
-
expect(output).to include %(Current working directory\n Path: "#{
|
1151
|
+
expect(output).to include %(Current working directory\n Path: "#{root_path}")
|
1136
1152
|
end
|
1137
1153
|
|
1138
1154
|
it "transmits path data in report" do
|
1139
1155
|
expect(received_report["paths"]["working_dir"]).to match(
|
1140
|
-
"path" =>
|
1156
|
+
"path" => root_path,
|
1141
1157
|
"exists" => true,
|
1142
1158
|
"type" => "directory",
|
1143
1159
|
"mode" => kind_of(String),
|
@@ -1153,7 +1169,7 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1153
1169
|
end
|
1154
1170
|
|
1155
1171
|
describe "root_path" do
|
1156
|
-
before {
|
1172
|
+
before { run }
|
1157
1173
|
|
1158
1174
|
it "outputs root path" do
|
1159
1175
|
expect(output).to include %(Root path\n Path: "#{root_path}")
|
@@ -1177,7 +1193,7 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1177
1193
|
end
|
1178
1194
|
|
1179
1195
|
describe "package_install_path" do
|
1180
|
-
before {
|
1196
|
+
before { run }
|
1181
1197
|
|
1182
1198
|
it "outputs gem install path" do
|
1183
1199
|
expect(output).to match %(AppSignal gem path\n Path: "#{gem_path}")
|
@@ -1201,15 +1217,16 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1201
1217
|
end
|
1202
1218
|
|
1203
1219
|
describe "log_dir_path" do
|
1204
|
-
|
1220
|
+
let(:log_path) { File.dirname(Appsignal.config.log_file_path) }
|
1221
|
+
before { run }
|
1205
1222
|
|
1206
1223
|
it "outputs log directory path" do
|
1207
|
-
expect(output).to match %(Log directory\n Path: "#{
|
1224
|
+
expect(output).to match %(Log directory\n Path: "#{log_path}")
|
1208
1225
|
end
|
1209
1226
|
|
1210
1227
|
it "transmits path data in report" do
|
1211
1228
|
expect(received_report["paths"]["log_dir_path"]).to match(
|
1212
|
-
"path" =>
|
1229
|
+
"path" => log_path,
|
1213
1230
|
"exists" => true,
|
1214
1231
|
"type" => "directory",
|
1215
1232
|
"mode" => kind_of(String),
|
@@ -1227,15 +1244,15 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1227
1244
|
|
1228
1245
|
context "when a directory does not exist" do
|
1229
1246
|
let(:root_path) { tmp_dir }
|
1247
|
+
let(:environment) { nil }
|
1248
|
+
let(:push_api_key) { nil }
|
1249
|
+
let(:app_name) { nil }
|
1250
|
+
let(:options) { {} }
|
1230
1251
|
let(:execution_path) { File.join(tmp_dir, "not_existing_dir") }
|
1231
|
-
let(:config) do
|
1232
|
-
silence(:allowed => ["Push api key not set after loading config"]) do
|
1233
|
-
Appsignal::Config.new(execution_path, "production")
|
1234
|
-
end
|
1235
|
-
end
|
1236
1252
|
before do
|
1237
1253
|
allow(Dir).to receive(:pwd).and_return(execution_path)
|
1238
|
-
|
1254
|
+
FileUtils.rm_rf(execution_path)
|
1255
|
+
run_within_dir root_path
|
1239
1256
|
end
|
1240
1257
|
|
1241
1258
|
it "outputs not existing path" do
|
@@ -1252,7 +1269,12 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1252
1269
|
|
1253
1270
|
context "when not writable" do
|
1254
1271
|
let(:root_path) { File.join(tmp_dir, "not_writable_path") }
|
1272
|
+
let(:environment) { nil }
|
1273
|
+
let(:push_api_key) { nil }
|
1274
|
+
let(:app_name) { nil }
|
1275
|
+
let(:options) { {} }
|
1255
1276
|
before do
|
1277
|
+
FileUtils.mkdir_p(root_path)
|
1256
1278
|
FileUtils.chmod(0o555, root_path)
|
1257
1279
|
run_within_dir root_path
|
1258
1280
|
end
|
@@ -1280,7 +1302,12 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1280
1302
|
|
1281
1303
|
context "when writable" do
|
1282
1304
|
let(:root_path) { File.join(tmp_dir, "writable_path") }
|
1305
|
+
let(:environment) { nil }
|
1306
|
+
let(:push_api_key) { nil }
|
1307
|
+
let(:app_name) { nil }
|
1308
|
+
let(:options) { {} }
|
1283
1309
|
before do
|
1310
|
+
FileUtils.mkdir_p(root_path)
|
1284
1311
|
FileUtils.chmod(0o755, root_path)
|
1285
1312
|
run_within_dir root_path
|
1286
1313
|
end
|
@@ -1307,6 +1334,14 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
1307
1334
|
end
|
1308
1335
|
|
1309
1336
|
describe "ownership" do
|
1337
|
+
let(:environment) { nil }
|
1338
|
+
let(:push_api_key) { nil }
|
1339
|
+
let(:app_name) { nil }
|
1340
|
+
let(:options) { {} }
|
1341
|
+
before do
|
1342
|
+
FileUtils.mkdir_p(root_path)
|
1343
|
+
end
|
1344
|
+
|
1310
1345
|
context "when a directory is owned by the current user" do
|
1311
1346
|
let(:root_path) { File.join(tmp_dir, "owned_path") }
|
1312
1347
|
before { run_within_dir root_path }
|