appmap 0.34.5 → 0.37.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -56,12 +56,10 @@ class CLITest < Minitest::Test
56
56
  Class frequency:
57
57
  ----------------
58
58
  1 Main
59
- 1 IO
60
59
 
61
60
  Method frequency:
62
61
  ----------------
63
62
  1 Main.say_hello
64
- 1 IO#write
65
63
  OUTPUT
66
64
  end
67
65
 
@@ -82,20 +80,12 @@ class CLITest < Minitest::Test
82
80
  {
83
81
  "name": "Main",
84
82
  "count": 1
85
- },
86
- {
87
- "name": "IO",
88
- "count": 1
89
83
  }
90
84
  ],
91
85
  "method_frequency": [
92
86
  {
93
87
  "name": "Main.say_hello",
94
88
  "count": 1
95
- },
96
- {
97
- "name": "IO#write",
98
- "count": 1
99
89
  }
100
90
  ]
101
91
  }
@@ -0,0 +1,55 @@
1
+ [
2
+ {
3
+ "name": "lib",
4
+ "type": "package",
5
+ "children": [
6
+ {
7
+ "name": "Example",
8
+ "type": "class",
9
+ "children": [
10
+ {
11
+ "name": "sign",
12
+ "type": "function",
13
+ "location": "lib/openssl_key_sign.rb:10",
14
+ "static": true,
15
+ "source": " def Example.sign\n key = OpenSSL::PKey::RSA.new 2048\n\n document = 'the document'\n\n digest = OpenSSL::Digest::SHA256.new\n key.sign digest, document\n end\n"
16
+ }
17
+ ]
18
+ }
19
+ ]
20
+ },
21
+ {
22
+ "name": "openssl",
23
+ "type": "package",
24
+ "children": [
25
+ {
26
+ "name": "OpenSSL",
27
+ "type": "class",
28
+ "children": [
29
+ {
30
+ "name": "PKey",
31
+ "type": "class",
32
+ "children": [
33
+ {
34
+ "name": "PKey",
35
+ "type": "class",
36
+ "children": [
37
+ {
38
+ "name": "sign",
39
+ "type": "function",
40
+ "location": "OpenSSL::PKey::PKey#sign",
41
+ "static": false,
42
+ "labels": [
43
+ "security",
44
+ "crypto"
45
+ ]
46
+ }
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ ]
52
+ }
53
+ ]
54
+ }
55
+ ]
@@ -0,0 +1,58 @@
1
+ [
2
+ {
3
+ "id": 1,
4
+ "event": "call",
5
+ "defined_class": "Example",
6
+ "method_id": "sign",
7
+ "path": "lib/openssl_key_sign.rb",
8
+ "lineno": 10,
9
+ "static": true,
10
+ "parameters": [
11
+
12
+ ],
13
+ "receiver": {
14
+ "class": "Module"
15
+ }
16
+ },
17
+ {
18
+ "id": 2,
19
+ "event": "call",
20
+ "defined_class": "OpenSSL::PKey::PKey",
21
+ "method_id": "sign",
22
+ "path": "OpenSSL::PKey::PKey#sign",
23
+ "static": false,
24
+ "parameters": [
25
+ {
26
+ "name": "arg",
27
+ "class": "OpenSSL::Digest::SHA256",
28
+ "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
29
+ "kind": "req"
30
+ },
31
+ {
32
+ "name": "arg",
33
+ "class": "String",
34
+ "value": "the document",
35
+ "kind": "req"
36
+ }
37
+ ],
38
+ "receiver": {
39
+ "class": "OpenSSL::PKey::RSA"
40
+ }
41
+ },
42
+ {
43
+ "id": 3,
44
+ "event": "return",
45
+ "parent_id": 2,
46
+ "return_value": {
47
+ "class": "String"
48
+ }
49
+ },
50
+ {
51
+ "id": 4,
52
+ "event": "return",
53
+ "parent_id": 1,
54
+ "return_value": {
55
+ "class": "String"
56
+ }
57
+ }
58
+ ]
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'appmap', git: 'applandinc/appmap-ruby', branch: `git rev-parse --abbrev-ref HEAD`.strip
4
+ gem 'activesupport'
5
+ gem 'byebug'
6
+ gem 'minitest'
@@ -0,0 +1,3 @@
1
+ name: gem_test
2
+ packages:
3
+ - gem: activesupport
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'appmap/minitest'
5
+ require 'minitest/autorun'
6
+ require 'active_support'
7
+ require 'active_support/core_ext'
8
+
9
+ class ToParamTest < ::Minitest::Test
10
+ def test_to_param
11
+ # record use of a core extension
12
+ assert_equal 'my+id', 'my+id'.to_param
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'test_helper'
5
+ require 'English'
6
+
7
+ class MinitestTest < Minitest::Test
8
+ def perform_gem_test(test_name)
9
+ Bundler.with_clean_env do
10
+ Dir.chdir 'test/fixtures/gem_test' do
11
+ FileUtils.rm_rf 'tmp'
12
+ system 'bundle config --local local.appmap ../../..'
13
+ system 'bundle'
14
+ system({ 'APPMAP' => 'true' }, %(bundle exec ruby -Ilib -Itest test/#{test_name}_test.rb))
15
+
16
+ yield
17
+ end
18
+ end
19
+ end
20
+
21
+ def test_record_gem
22
+ perform_gem_test 'to_param' do
23
+ appmap_file = 'tmp/appmap/minitest/To_param_to_param.appmap.json'
24
+ appmap = JSON.parse(File.read(appmap_file))
25
+ events = appmap['events']
26
+ assert_equal 2, events.size
27
+ assert_equal 'call', events.first['event']
28
+ assert_equal 'to_param', events.first['method_id']
29
+ assert_equal "#{Gem.loaded_specs['activesupport'].gem_dir}/lib/active_support/core_ext/object/to_query.rb", events.first['path']
30
+ assert_equal 'return', events.second['event']
31
+ assert_equal 1, events.second['parent_id']
32
+ end
33
+ end
34
+ end
@@ -5,7 +5,7 @@ require 'test_helper'
5
5
  require 'English'
6
6
 
7
7
  class MinitestTest < Minitest::Test
8
- def perform_test(test_name)
8
+ def perform_minitest_test(test_name)
9
9
  Bundler.with_clean_env do
10
10
  Dir.chdir 'test/fixtures/minitest_recorder' do
11
11
  FileUtils.rm_rf 'tmp'
@@ -19,7 +19,7 @@ class MinitestTest < Minitest::Test
19
19
  end
20
20
 
21
21
  def test_hello
22
- perform_test 'hello' do
22
+ perform_minitest_test 'hello' do
23
23
  appmap_file = 'tmp/appmap/minitest/Hello_hello.appmap.json'
24
24
 
25
25
  assert File.file?(appmap_file), 'appmap output file does not exist'
@@ -11,13 +11,17 @@ class OpenSSLTest < Minitest::Test
11
11
  FileUtils.rm_rf 'tmp'
12
12
  system 'bundle config --local local.appmap ../../..'
13
13
  system 'bundle'
14
- system({ 'APPMAP' => 'true', 'DEBUG' => 'true' }, %(bundle exec ruby lib/openssl_#{test_name}.rb))
14
+ system({ 'APPMAP' => 'true' }, %(bundle exec ruby lib/openssl_#{test_name}.rb))
15
15
 
16
16
  yield
17
17
  end
18
18
  end
19
19
  end
20
20
 
21
+ def expectation(name)
22
+ File.read File.join __dir__, 'expectations', name
23
+ end
24
+
21
25
  def test_key_sign
22
26
  perform_test 'key_sign' do
23
27
  appmap_file = 'appmap.json'
@@ -26,83 +30,7 @@ class OpenSSLTest < Minitest::Test
26
30
  appmap = JSON.parse(File.read(appmap_file))
27
31
  assert_equal AppMap::APPMAP_FORMAT_VERSION, appmap['version']
28
32
  assert_equal [ { 'recorder' => 'lib/openssl_key_sign.rb' } ], appmap['metadata']
29
- assert_equal JSON.parse(<<~JSON), appmap['classMap']
30
- [
31
- {
32
- "name": "lib",
33
- "type": "package",
34
- "children": [
35
- {
36
- "name": "Example",
37
- "type": "class",
38
- "children": [
39
- {
40
- "name": "sign",
41
- "type": "function",
42
- "location": "lib/openssl_key_sign.rb:10",
43
- "static": true
44
- }
45
- ]
46
- }
47
- ]
48
- },
49
- {
50
- "name": "openssl",
51
- "type": "package",
52
- "children": [
53
- {
54
- "name": "OpenSSL",
55
- "type": "class",
56
- "children": [
57
- {
58
- "name": "PKey",
59
- "type": "class",
60
- "children": [
61
- {
62
- "name": "PKey",
63
- "type": "class",
64
- "children": [
65
- {
66
- "name": "sign",
67
- "type": "function",
68
- "location": "OpenSSL::PKey::PKey#sign",
69
- "static": false,
70
- "labels": [
71
- "security",
72
- "crypto"
73
- ]
74
- }
75
- ]
76
- }
77
- ]
78
- }
79
- ]
80
- }
81
- ]
82
- },
83
- {
84
- "name": "io",
85
- "type": "package",
86
- "children": [
87
- {
88
- "name": "IO",
89
- "type": "class",
90
- "children": [
91
- {
92
- "name": "write",
93
- "type": "function",
94
- "location": "IO#write",
95
- "static": false,
96
- "labels": [
97
- "io"
98
- ]
99
- }
100
- ]
101
- }
102
- ]
103
- }
104
- ]
105
- JSON
33
+ assert_equal JSON.parse(expectation('openssl_test_key_sign1.json')), appmap['classMap']
106
34
  sanitized_events = appmap['events'].map(&:deep_symbolize_keys).map(&AppMap::Util.method(:sanitize_event)).map do |event|
107
35
  delete_value = ->(obj) { (obj || {}).delete(:value) }
108
36
  delete_value.call(event[:receiver])
@@ -110,93 +38,10 @@ class OpenSSLTest < Minitest::Test
110
38
  event
111
39
  end
112
40
 
113
- diff = Diffy::Diff.new(<<~JSON.strip, JSON.pretty_generate(sanitized_events).strip)
114
- [
115
- {
116
- "id": 1,
117
- "event": "call",
118
- "defined_class": "Example",
119
- "method_id": "sign",
120
- "path": "lib/openssl_key_sign.rb",
121
- "lineno": 10,
122
- "static": true,
123
- "parameters": [
124
-
125
- ],
126
- "receiver": {
127
- "class": "Module"
128
- }
129
- },
130
- {
131
- "id": 2,
132
- "event": "call",
133
- "defined_class": "OpenSSL::PKey::PKey",
134
- "method_id": "sign",
135
- "path": "OpenSSL::PKey::PKey#sign",
136
- "static": false,
137
- "parameters": [
138
- {
139
- "name": "arg",
140
- "class": "OpenSSL::Digest::SHA256",
141
- "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
142
- "kind": "req"
143
- },
144
- {
145
- "name": "arg",
146
- "class": "String",
147
- "value": "the document",
148
- "kind": "req"
149
- }
150
- ],
151
- "receiver": {
152
- "class": "OpenSSL::PKey::RSA"
153
- }
154
- },
155
- {
156
- "id": 3,
157
- "event": "return",
158
- "parent_id": 2,
159
- "return_value": {
160
- "class": "String"
161
- }
162
- },
163
- {
164
- "id": 4,
165
- "event": "return",
166
- "parent_id": 1,
167
- "return_value": {
168
- "class": "String"
169
- }
170
- },
171
- {
172
- "id": 5,
173
- "event": "call",
174
- "defined_class": "IO",
175
- "method_id": "write",
176
- "path": "IO#write",
177
- "static": false,
178
- "parameters": [
179
- {
180
- "name": "arg",
181
- "class": "String",
182
- "value": "Computed signature",
183
- "kind": "rest"
184
- }
185
- ],
186
- "receiver": {
187
- "class": "IO"
188
- }
189
- },
190
- {
191
- "id": 6,
192
- "event": "return",
193
- "parent_id": 5,
194
- "return_value": {
195
- "class": "Integer"
196
- }
197
- }
198
- ]
199
- JSON
41
+ diff = Diffy::Diff.new(
42
+ expectation('openssl_test_key_sign2.json').strip,
43
+ JSON.pretty_generate(sanitized_events).strip
44
+ )
200
45
  assert_equal '', diff.to_s
201
46
  end
202
47
  end
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.34.5
4
+ version: 0.37.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Gilpin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-23 00:00:00.000000000 Z
11
+ date: 2020-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: method_source
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: parser
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -84,14 +98,14 @@ dependencies:
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - "~>"
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
103
  version: '1.16'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - "~>"
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '1.16'
97
111
  - !ruby/object:Gem::Dependency
@@ -290,7 +304,7 @@ dependencies:
290
304
  - - ">="
291
305
  - !ruby/object:Gem::Version
292
306
  version: '0'
293
- description:
307
+ description:
294
308
  email:
295
309
  - kgilpin@gmail.com
296
310
  executables:
@@ -303,7 +317,6 @@ files:
303
317
  - ".gitignore"
304
318
  - ".rbenv-gemsets"
305
319
  - ".rubocop.yml"
306
- - ".ruby-version"
307
320
  - ".travis.yml"
308
321
  - CHANGELOG.md
309
322
  - Dockerfile.appmap
@@ -338,7 +351,7 @@ files:
338
351
  - lib/appmap/middleware/remote_recording.rb
339
352
  - lib/appmap/minitest.rb
340
353
  - lib/appmap/open.rb
341
- - lib/appmap/rails/action_handler.rb
354
+ - lib/appmap/rails/request_handler.rb
342
355
  - lib/appmap/rails/sql_handler.rb
343
356
  - lib/appmap/railtie.rb
344
357
  - lib/appmap/record.rb
@@ -367,6 +380,7 @@ files:
367
380
  - package.json
368
381
  - spec/abstract_controller4_base_spec.rb
369
382
  - spec/abstract_controller_base_spec.rb
383
+ - spec/class_map_spec.rb
370
384
  - spec/config_spec.rb
371
385
  - spec/fixtures/hook/attr_accessor.rb
372
386
  - spec/fixtures/hook/compare.rb
@@ -529,6 +543,8 @@ files:
529
543
  - spec/util_spec.rb
530
544
  - test/cli_test.rb
531
545
  - test/cucumber_test.rb
546
+ - test/expectations/openssl_test_key_sign1.json
547
+ - test/expectations/openssl_test_key_sign2.json
532
548
  - test/fixtures/cli_record_test/appmap.yml
533
549
  - test/fixtures/cli_record_test/lib/cli_record_test/main.rb
534
550
  - test/fixtures/cucumber4_recorder/Gemfile
@@ -545,6 +561,9 @@ files:
545
561
  - test/fixtures/cucumber_recorder/features/support/hooks.rb
546
562
  - test/fixtures/cucumber_recorder/features/support/steps.rb
547
563
  - test/fixtures/cucumber_recorder/lib/hello.rb
564
+ - test/fixtures/gem_test/Gemfile
565
+ - test/fixtures/gem_test/appmap.yml
566
+ - test/fixtures/gem_test/test/to_param_test.rb
548
567
  - test/fixtures/minitest_recorder/Gemfile
549
568
  - test/fixtures/minitest_recorder/appmap.yml
550
569
  - test/fixtures/minitest_recorder/lib/hello.rb
@@ -562,6 +581,7 @@ files:
562
581
  - test/fixtures/rspec_recorder/spec/decorated_hello_spec.rb
563
582
  - test/fixtures/rspec_recorder/spec/labeled_hello_spec.rb
564
583
  - test/fixtures/rspec_recorder/spec/plain_hello_spec.rb
584
+ - test/gem_test.rb
565
585
  - test/minitest_test.rb
566
586
  - test/openssl_test.rb
567
587
  - test/record_process_test.rb
@@ -571,7 +591,7 @@ homepage: https://github.com/applandinc/appmap-ruby
571
591
  licenses:
572
592
  - MIT
573
593
  metadata: {}
574
- post_install_message:
594
+ post_install_message:
575
595
  rdoc_options: []
576
596
  require_paths:
577
597
  - lib
@@ -587,7 +607,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
587
607
  version: '0'
588
608
  requirements: []
589
609
  rubygems_version: 3.0.3
590
- signing_key:
610
+ signing_key:
591
611
  specification_version: 4
592
612
  summary: Record the operation of a Ruby program, using the AppLand 'AppMap' format.
593
613
  test_files: []