appmap 0.48.0 → 0.51.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/config_spec.rb CHANGED
@@ -55,4 +55,25 @@ describe AppMap::Config, docker: false do
55
55
 
56
56
  expect(config.to_h.deep_stringify_keys!).to eq(config_expectation)
57
57
  end
58
+
59
+ context do
60
+ let(:warnings) { @warnings ||= [] }
61
+ let(:warning) { warnings.join }
62
+ before do
63
+ expect(AppMap::Config).to receive(:warn).at_least(1) { |msg| warnings << msg }
64
+ end
65
+ it 'prints a warning and uses a default config' do
66
+ config = AppMap::Config.load_from_file 'no/such/file'
67
+ expect(config.to_h).to eq(YAML.load(<<~CONFIG))
68
+ :name: appmap-ruby
69
+ :packages:
70
+ - :path: lib
71
+ :handler_class: AppMap::Handler::Function
72
+ :shallow: false
73
+ :functions: []
74
+ :exclude: []
75
+ CONFIG
76
+ expect(warning).to include('NOTICE: The AppMap config file no/such/file was not found!')
77
+ end
78
+ end
58
79
  end
@@ -53,3 +53,9 @@ class ToSRaises
53
53
  "hello"
54
54
  end
55
55
  end
56
+
57
+ class ExceptionMethod
58
+ def raise_illegal_utf8_message
59
+ raise "809: unexpected token at 'x\x9C\xED=\x8Bv\xD3ƶ\xBF2\xB8]\xC5\xE9qdI\x96eǫ4\xA4h΅\x84\xE5z\x96\xAA\xD8\xE3\xE3D\xB2\xE4J2\x90E\xF8\xF7\xBB\xF7\xCC\xE81\x92\xE2\x88ā'"
60
+ end
61
+ end
@@ -21,14 +21,6 @@ when 'activerecord'
21
21
  require 'database_cleaner-active_record' if Rails.env.test?
22
22
  end
23
23
 
24
- require 'appmap/railtie' if defined?(AppMap)
25
-
26
- # require "active_storage/engine"
27
- # require "action_mailer/railtie"
28
- # require "action_cable/engine"
29
- # require "sprockets/railtie"
30
- # require "rails/test_unit/railtie"
31
-
32
24
  # Require the gems listed in Gemfile, including any gems
33
25
  # you've limited to :test, :development, or :production.
34
26
  Bundler.require(*Rails.groups)
@@ -7,8 +7,6 @@ abort("The Rails environment is running in production mode!") if Rails.env.produ
7
7
  require 'rspec/rails'
8
8
  # Add additional requires below this line. Rails is not loaded until this point!
9
9
 
10
- require 'appmap/rspec'
11
-
12
10
  # Requires supporting ruby files with custom matchers and macros, etc, in
13
11
  # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
14
12
  # run as spec files by default. This means that files in spec/support that end
@@ -21,14 +21,6 @@ when 'activerecord'
21
21
  require 'database_cleaner-active_record' if Rails.env.test?
22
22
  end
23
23
 
24
- require 'appmap/railtie' if defined?(AppMap)
25
-
26
- # require "active_storage/engine"
27
- # require "action_mailer/railtie"
28
- # require "action_cable/engine"
29
- # require "sprockets/railtie"
30
- # require "rails/test_unit/railtie"
31
-
32
24
  # Require the gems listed in Gemfile, including any gems
33
25
  # you've limited to :test, :development, or :production.
34
26
  Bundler.require(*Rails.groups)
@@ -7,8 +7,6 @@ abort("The Rails environment is running in production mode!") if Rails.env.produ
7
7
  require 'rspec/rails'
8
8
  # Add additional requires below this line. Rails is not loaded until this point!
9
9
 
10
- require 'appmap/rspec'
11
-
12
10
  # Requires supporting ruby files with custom matchers and macros, etc, in
13
11
  # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
14
12
  # run as spec files by default. This means that files in spec/support that end
data/spec/hook_spec.rb CHANGED
@@ -21,7 +21,7 @@ describe 'AppMap class Hooking', docker: false do
21
21
  def invoke_test_file(file, setup: nil, &block)
22
22
  AppMap.configuration = nil
23
23
  package = AppMap::Config::Package.build_from_path(file)
24
- config = AppMap::Config.new('hook_spec', [ package ])
24
+ config = AppMap::Config.new('hook_spec', packages: [ package ])
25
25
  AppMap.configuration = config
26
26
  tracer = nil
27
27
  AppMap::Hook.new(config).enable do
@@ -57,7 +57,7 @@ describe 'AppMap class Hooking', docker: false do
57
57
  it 'excludes named classes and methods' do
58
58
  load 'spec/fixtures/hook/exclude.rb'
59
59
  package = AppMap::Config::Package.build_from_path('spec/fixtures/hook/exclude.rb')
60
- config = AppMap::Config.new('hook_spec', [ package ], exclude: %w[ExcludeTest])
60
+ config = AppMap::Config.new('hook_spec', packages: [ package ], exclude: %w[ExcludeTest])
61
61
  AppMap.configuration = config
62
62
 
63
63
  expect(config.never_hook?(ExcludeTest, ExcludeTest.new.method(:instance_method))).to be_truthy
@@ -583,7 +583,7 @@ describe 'AppMap class Hooking', docker: false do
583
583
  end
584
584
  end
585
585
 
586
- it 'Reports exceptions' do
586
+ it 'reports exceptions' do
587
587
  events_yaml = <<~YAML
588
588
  ---
589
589
  - :id: 1
@@ -615,6 +615,38 @@ describe 'AppMap class Hooking', docker: false do
615
615
  end
616
616
  end
617
617
 
618
+ it 'sanitizes exception messages' do
619
+ events_yaml = <<~YAML
620
+ ---
621
+ - :id: 1
622
+ :event: :call
623
+ :defined_class: ExceptionMethod
624
+ :method_id: raise_illegal_utf8_message
625
+ :path: spec/fixtures/hook/exception_method.rb
626
+ :lineno: 58
627
+ :static: false
628
+ :parameters: []
629
+ :receiver:
630
+ :class: ExceptionMethod
631
+ :value: Exception Method fixture
632
+ - :id: 2
633
+ :event: :return
634
+ :parent_id: 1
635
+ :exceptions:
636
+ - :class: RuntimeError
637
+ :message: '809: unexpected token at ''x__=_v_ƶ_2_]__qdI_eǫ4_h΅__z_____D__J2_E______1__ā'''
638
+ :path: spec/fixtures/hook/exception_method.rb
639
+ :lineno: 59
640
+ YAML
641
+ test_hook_behavior 'spec/fixtures/hook/exception_method.rb', events_yaml do
642
+ begin
643
+ ExceptionMethod.new.raise_illegal_utf8_message
644
+ rescue
645
+ # don't let the exception fail the test
646
+ end
647
+ end
648
+ end
649
+
618
650
  context 'string conversions works for the receiver when' do
619
651
 
620
652
  it 'is missing #to_s' do
@@ -62,7 +62,7 @@ describe 'Net::HTTP handler' do
62
62
  end
63
63
 
64
64
  context 'with trace enabled' do
65
- let(:configuration) { AppMap::Config.new('record_net_http_spec', []) }
65
+ let(:configuration) { AppMap::Config.new('record_net_http_spec') }
66
66
 
67
67
  after do
68
68
  AppMap.configuration = nil
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'test_helper'
5
+ require 'English'
6
+
7
+ class BundleVendorTest < Minitest::Test
8
+ def perform_bundle_vendor_app(test_name)
9
+ Bundler.with_clean_env do
10
+ Dir.chdir 'test/fixtures/bundle_vendor_app' do
11
+ FileUtils.rm_rf 'tmp'
12
+ FileUtils.mkdir_p 'tmp'
13
+ system 'bundle config --local local.appmap ../../..'
14
+ system 'bundle'
15
+ system(%(bundle exec ruby -Ilib -Itest cli.rb add foobar))
16
+ system({ 'APPMAP' => 'true' }, %(bundle exec ruby -Ilib -Itest cli.rb list))
17
+
18
+ yield
19
+ end
20
+ end
21
+ end
22
+
23
+ def test_record_gem
24
+ perform_bundle_vendor_app 'parser' do
25
+ appmap_file = 'tmp/bundle_vendor_app.appmap.json'
26
+ appmap = JSON.parse(File.read(appmap_file))
27
+ assert appmap['classMap'].find { |co| co['name'] == 'gli' }
28
+ assert appmap['events'].find do |e|
29
+ e['event'] == 'call' &&
30
+ e['defined_class'] = 'Hacer::Todolist' &&
31
+ e['method_id'] == 'list'
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'gli'
4
+ gem 'hacer'
5
+
6
+ appmap_gem_opts = {}
7
+ appmap_gem_opts[:path] = '../../..' if File.exist?('../../../appmap.gemspec')
8
+ gem 'appmap', appmap_gem_opts
@@ -0,0 +1,4 @@
1
+ name: bundle_vendor_app
2
+ packages:
3
+ - gem: gli
4
+ - gem: hacer
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+ require 'appmap'
3
+ require 'gli'
4
+ require 'hacer'
5
+
6
+ class App
7
+ extend GLI::App
8
+
9
+ program_desc 'A simple todo list'
10
+
11
+ flag [:t,:tasklist], :default_value => File.join(ENV['HOME'],'.todolist')
12
+
13
+ pre do |global_options,command,options,args|
14
+ $todo_list = Hacer::Todolist.new(global_options[:tasklist])
15
+ end
16
+
17
+ command :add do |c|
18
+ c.action do |global_options,options,args|
19
+ $todo_list.create(args)
20
+ end
21
+ end
22
+
23
+ command :list do |c|
24
+ c.action do
25
+ $todo_list.list.each do |todo|
26
+ printf("%5d - %s\n",todo.todo_id,todo.text)
27
+ end
28
+ end
29
+ end
30
+
31
+ command :done do |c|
32
+ c.action do |global_options,options,args|
33
+ id = args.shift.to_i
34
+ $todo_list.list.each do |todo|
35
+ $todo_list.complete(todo) if todo.todo_id == id
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ exit_status = nil
42
+ invoke = -> { exit_status = App.run(ARGV) }
43
+ do_appmap = -> { ENV['APPMAP'] == 'true' }
44
+
45
+ if do_appmap.()
46
+ appmap = AppMap.record do
47
+ invoke.()
48
+ end
49
+ File.write('tmp/bundle_vendor_app.appmap.json', JSON.pretty_generate(appmap))
50
+ else
51
+ invoke.()
52
+ end
53
+ exit exit_status
54
+
data/test/gem_test.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  require 'test_helper'
5
5
  require 'English'
6
6
 
7
- class MinitestTest < Minitest::Test
7
+ class GemTest < Minitest::Test
8
8
  def perform_gem_test(test_name)
9
9
  Bundler.with_clean_env do
10
10
  Dir.chdir 'test/fixtures/gem_test' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.48.0
4
+ version: 0.51.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Gilpin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-19 00:00:00.000000000 Z
11
+ date: 2021-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -455,7 +455,6 @@ files:
455
455
  - spec/fixtures/rails5_users_app/config/initializers/filter_parameter_logging.rb
456
456
  - spec/fixtures/rails5_users_app/config/initializers/inflections.rb
457
457
  - spec/fixtures/rails5_users_app/config/initializers/mime_types.rb
458
- - spec/fixtures/rails5_users_app/config/initializers/record_button.rb
459
458
  - spec/fixtures/rails5_users_app/config/initializers/wrap_parameters.rb
460
459
  - spec/fixtures/rails5_users_app/config/locales/en.yml
461
460
  - spec/fixtures/rails5_users_app/config/routes.rb
@@ -527,7 +526,6 @@ files:
527
526
  - spec/fixtures/rails6_users_app/config/initializers/filter_parameter_logging.rb
528
527
  - spec/fixtures/rails6_users_app/config/initializers/inflections.rb
529
528
  - spec/fixtures/rails6_users_app/config/initializers/mime_types.rb
530
- - spec/fixtures/rails6_users_app/config/initializers/record_button.rb
531
529
  - spec/fixtures/rails6_users_app/config/initializers/wrap_parameters.rb
532
530
  - spec/fixtures/rails6_users_app/config/locales/en.yml
533
531
  - spec/fixtures/rails6_users_app/config/routes.rb
@@ -557,9 +555,13 @@ files:
557
555
  - spec/remote_recording_spec.rb
558
556
  - spec/spec_helper.rb
559
557
  - spec/util_spec.rb
558
+ - test/bundle_vendor_test.rb
560
559
  - test/cucumber_test.rb
561
560
  - test/expectations/openssl_test_key_sign1.json
562
561
  - test/expectations/openssl_test_key_sign2.json
562
+ - test/fixtures/bundle_vendor_app/Gemfile
563
+ - test/fixtures/bundle_vendor_app/appmap.yml
564
+ - test/fixtures/bundle_vendor_app/cli.rb
563
565
  - test/fixtures/cli_record_test/appmap.yml
564
566
  - test/fixtures/cli_record_test/lib/cli_record_test/main.rb
565
567
  - test/fixtures/cucumber4_recorder/Gemfile
@@ -1,3 +0,0 @@
1
- require 'appmap/middleware/remote_recording'
2
- Rails.application.config.middleware.insert_after Rails::Rack::Logger, AppMap::Middleware::RemoteRecording \
3
- unless Rails.env.test?
@@ -1,3 +0,0 @@
1
- require 'appmap/middleware/remote_recording'
2
- Rails.application.config.middleware.insert_after Rails::Rack::Logger, AppMap::Middleware::RemoteRecording \
3
- unless Rails.env.test?