instana 1.10.1-java

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.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +23 -0
  3. data/.gitignore +16 -0
  4. data/.rubocop.yml +1156 -0
  5. data/.travis.yml +43 -0
  6. data/Configuration.md +149 -0
  7. data/Dockerfile +13 -0
  8. data/Gemfile +41 -0
  9. data/LICENSE +21 -0
  10. data/README.md +102 -0
  11. data/Rakefile +56 -0
  12. data/Tracing.md +145 -0
  13. data/Troubleshooting.md +32 -0
  14. data/benchmarks/Gemfile +7 -0
  15. data/benchmarks/id_generation.rb +12 -0
  16. data/benchmarks/opentracing.rb +26 -0
  17. data/benchmarks/rack_vanilla_vs_traced.rb +80 -0
  18. data/benchmarks/stackprof_rack_tracing.rb +77 -0
  19. data/benchmarks/time_processing.rb +12 -0
  20. data/bin/console +7 -0
  21. data/bin/setup +8 -0
  22. data/examples/opentracing.rb +31 -0
  23. data/examples/tracing.rb +80 -0
  24. data/gemfiles/libraries.gemfile +71 -0
  25. data/gemfiles/rails32.gemfile +51 -0
  26. data/gemfiles/rails42.gemfile +50 -0
  27. data/gemfiles/rails50.gemfile +52 -0
  28. data/instana.gemspec +46 -0
  29. data/lib/instana.rb +12 -0
  30. data/lib/instana/agent.rb +441 -0
  31. data/lib/instana/agent/helpers.rb +61 -0
  32. data/lib/instana/agent/hooks.rb +37 -0
  33. data/lib/instana/agent/tasks.rb +48 -0
  34. data/lib/instana/base.rb +54 -0
  35. data/lib/instana/collector.rb +116 -0
  36. data/lib/instana/collectors/gc.rb +57 -0
  37. data/lib/instana/collectors/memory.rb +34 -0
  38. data/lib/instana/collectors/thread.rb +30 -0
  39. data/lib/instana/config.rb +79 -0
  40. data/lib/instana/eum/eum-test.js.erb +16 -0
  41. data/lib/instana/eum/eum.js.erb +14 -0
  42. data/lib/instana/frameworks/cuba.rb +6 -0
  43. data/lib/instana/frameworks/instrumentation/abstract_mysql_adapter.rb +58 -0
  44. data/lib/instana/frameworks/instrumentation/action_controller.rb +183 -0
  45. data/lib/instana/frameworks/instrumentation/action_view.rb +43 -0
  46. data/lib/instana/frameworks/instrumentation/active_record.rb +27 -0
  47. data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +81 -0
  48. data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +56 -0
  49. data/lib/instana/frameworks/instrumentation/postgresql_adapter.rb +71 -0
  50. data/lib/instana/frameworks/rails.rb +42 -0
  51. data/lib/instana/frameworks/roda.rb +6 -0
  52. data/lib/instana/frameworks/sinatra.rb +9 -0
  53. data/lib/instana/helpers.rb +40 -0
  54. data/lib/instana/instrumentation.rb +21 -0
  55. data/lib/instana/instrumentation/dalli.rb +78 -0
  56. data/lib/instana/instrumentation/excon.rb +74 -0
  57. data/lib/instana/instrumentation/grpc.rb +84 -0
  58. data/lib/instana/instrumentation/net-http.rb +66 -0
  59. data/lib/instana/instrumentation/rack.rb +77 -0
  60. data/lib/instana/instrumentation/redis.rb +82 -0
  61. data/lib/instana/instrumentation/resque.rb +131 -0
  62. data/lib/instana/instrumentation/rest-client.rb +34 -0
  63. data/lib/instana/instrumentation/sidekiq-client.rb +45 -0
  64. data/lib/instana/instrumentation/sidekiq-worker.rb +54 -0
  65. data/lib/instana/opentracing/carrier.rb +4 -0
  66. data/lib/instana/opentracing/tracer.rb +18 -0
  67. data/lib/instana/rack.rb +10 -0
  68. data/lib/instana/setup.rb +36 -0
  69. data/lib/instana/test.rb +40 -0
  70. data/lib/instana/thread_local.rb +15 -0
  71. data/lib/instana/tracer.rb +392 -0
  72. data/lib/instana/tracing/processor.rb +92 -0
  73. data/lib/instana/tracing/span.rb +401 -0
  74. data/lib/instana/tracing/span_context.rb +33 -0
  75. data/lib/instana/util.rb +261 -0
  76. data/lib/instana/version.rb +4 -0
  77. data/lib/oj_check.rb +16 -0
  78. data/lib/opentracing.rb +6 -0
  79. data/test/agent/agent_test.rb +143 -0
  80. data/test/apps/cuba.rb +15 -0
  81. data/test/apps/grpc_server.rb +81 -0
  82. data/test/apps/roda.rb +10 -0
  83. data/test/apps/sinatra.rb +5 -0
  84. data/test/benchmarks/bench_id_generation.rb +12 -0
  85. data/test/benchmarks/bench_opentracing.rb +13 -0
  86. data/test/config_test.rb +37 -0
  87. data/test/frameworks/cuba_test.rb +44 -0
  88. data/test/frameworks/rack_test.rb +167 -0
  89. data/test/frameworks/rails/actioncontroller_test.rb +93 -0
  90. data/test/frameworks/rails/actionview3_test.rb +255 -0
  91. data/test/frameworks/rails/actionview4_test.rb +254 -0
  92. data/test/frameworks/rails/actionview5_test.rb +221 -0
  93. data/test/frameworks/rails/activerecord3_test.rb +134 -0
  94. data/test/frameworks/rails/activerecord4_test.rb +134 -0
  95. data/test/frameworks/rails/activerecord5_test.rb +87 -0
  96. data/test/frameworks/roda_test.rb +44 -0
  97. data/test/frameworks/sinatra_test.rb +44 -0
  98. data/test/instana_test.rb +27 -0
  99. data/test/instrumentation/dalli_test.rb +253 -0
  100. data/test/instrumentation/excon_test.rb +147 -0
  101. data/test/instrumentation/grpc_test.rb +377 -0
  102. data/test/instrumentation/net-http_test.rb +160 -0
  103. data/test/instrumentation/redis_test.rb +119 -0
  104. data/test/instrumentation/resque_test.rb +128 -0
  105. data/test/instrumentation/rest-client_test.rb +55 -0
  106. data/test/instrumentation/sidekiq-client_test.rb +125 -0
  107. data/test/instrumentation/sidekiq-worker_test.rb +173 -0
  108. data/test/jobs/resque_error_job.rb +22 -0
  109. data/test/jobs/resque_fast_job.rb +20 -0
  110. data/test/jobs/sidekiq_job_1.rb +6 -0
  111. data/test/jobs/sidekiq_job_2.rb +7 -0
  112. data/test/models/block.rb +18 -0
  113. data/test/servers/grpc_50051.rb +20 -0
  114. data/test/servers/helpers/sidekiq_worker_initializer.rb +27 -0
  115. data/test/servers/rackapp_6511.rb +25 -0
  116. data/test/servers/rails_3205.rb +167 -0
  117. data/test/servers/sidekiq/worker.rb +27 -0
  118. data/test/test_helper.rb +145 -0
  119. data/test/tracing/custom_test.rb +158 -0
  120. data/test/tracing/id_management_test.rb +130 -0
  121. data/test/tracing/opentracing_test.rb +335 -0
  122. data/test/tracing/trace_test.rb +67 -0
  123. data/test/tracing/tracer_async_test.rb +198 -0
  124. data/test/tracing/tracer_test.rb +223 -0
  125. metadata +327 -0
@@ -0,0 +1,255 @@
1
+ require 'test_helper'
2
+
3
+ class ActionViewTest < Minitest::Test
4
+ def test_config_defaults
5
+ assert ::Instana.config[:action_view].is_a?(Hash)
6
+ assert ::Instana.config[:action_view].key?(:enabled)
7
+ assert_equal true, ::Instana.config[:action_view][:enabled]
8
+ end
9
+
10
+ def test_render_view
11
+ clear_all!
12
+
13
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_view'))
14
+
15
+ traces = Instana.processor.queued_traces
16
+ assert_equal 1, traces.length
17
+ trace = traces.first
18
+
19
+ assert_equal 3, trace.spans.length
20
+ spans = trace.spans.to_a
21
+ first_span = spans[0]
22
+ second_span = spans[1]
23
+ third_span = spans[2]
24
+
25
+ assert_equal :rack, first_span.name
26
+ assert_equal :actioncontroller, second_span.name
27
+ assert_equal :actionview, third_span.name
28
+ end
29
+
30
+ def test_render_nothing
31
+ clear_all!
32
+
33
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_nothing'))
34
+
35
+ traces = Instana.processor.queued_traces
36
+ assert_equal 1, traces.length
37
+ trace = traces.first
38
+
39
+ assert_equal 3, trace.spans.length
40
+ spans = trace.spans.to_a
41
+ first_span = spans[0]
42
+ second_span = spans[1]
43
+ third_span = spans[2]
44
+
45
+ assert_equal :rack, first_span.name
46
+ assert_equal :actioncontroller, second_span.name
47
+ assert_equal "Nothing", third_span[:data][:actionview][:name]
48
+ assert_equal :actionview, third_span.name
49
+ end
50
+
51
+ def test_render_file
52
+ clear_all!
53
+
54
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_file'))
55
+
56
+ traces = Instana.processor.queued_traces
57
+ assert_equal 1, traces.length
58
+ trace = traces.first
59
+
60
+ assert_equal 3, trace.spans.length
61
+ spans = trace.spans.to_a
62
+ first_span = spans[0]
63
+ second_span = spans[1]
64
+ third_span = spans[2]
65
+
66
+ assert_equal :rack, first_span.name
67
+ assert_equal :actioncontroller, second_span.name
68
+ assert_equal "/etc/issue", third_span[:data][:actionview][:name]
69
+ assert_equal :actionview, third_span.name
70
+ end
71
+
72
+ def test_render_json
73
+ clear_all!
74
+
75
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_json'))
76
+
77
+ traces = Instana.processor.queued_traces
78
+ assert_equal 1, traces.length
79
+ trace = traces.first
80
+
81
+ assert_equal 3, trace.spans.length
82
+ spans = trace.spans.to_a
83
+ first_span = spans[0]
84
+ second_span = spans[1]
85
+ third_span = spans[2]
86
+
87
+ assert_equal :rack, first_span.name
88
+ assert_equal :actioncontroller, second_span.name
89
+ assert_equal "JSON", third_span[:data][:actionview][:name]
90
+ assert_equal :actionview, third_span.name
91
+ end
92
+
93
+ def test_render_xml
94
+ clear_all!
95
+
96
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_xml'))
97
+
98
+ traces = Instana.processor.queued_traces
99
+ assert_equal 1, traces.length
100
+ trace = traces.first
101
+
102
+ assert_equal 3, trace.spans.length
103
+ spans = trace.spans.to_a
104
+ first_span = spans[0]
105
+ second_span = spans[1]
106
+ third_span = spans[2]
107
+
108
+ assert_equal :rack, first_span.name
109
+ assert_equal :actioncontroller, second_span.name
110
+ assert_equal "XML", third_span[:data][:actionview][:name]
111
+ assert_equal :actionview, third_span.name
112
+ end
113
+
114
+ def test_render_body
115
+ clear_all!
116
+
117
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_rawbody'))
118
+
119
+ traces = Instana.processor.queued_traces
120
+ assert_equal 1, traces.length
121
+ trace = traces.first
122
+
123
+ assert_equal 3, trace.spans.length
124
+ spans = trace.spans.to_a
125
+ first_span = spans[0]
126
+ second_span = spans[1]
127
+ third_span = spans[2]
128
+
129
+ assert_equal :rack, first_span.name
130
+ assert_equal :actioncontroller, second_span.name
131
+ assert_equal "Raw", third_span[:data][:actionview][:name]
132
+ assert_equal :actionview, third_span.name
133
+ end
134
+
135
+ def test_render_js
136
+ clear_all!
137
+
138
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_js'))
139
+
140
+ traces = Instana.processor.queued_traces
141
+ assert_equal 1, traces.length
142
+ trace = traces.first
143
+
144
+ assert_equal 3, trace.spans.length
145
+ spans = trace.spans.to_a
146
+ first_span = spans[0]
147
+ second_span = spans[1]
148
+ third_span = spans[2]
149
+
150
+ assert_equal :rack, first_span.name
151
+ assert_equal :actioncontroller, second_span.name
152
+ assert_equal "Javascript", third_span[:data][:actionview][:name]
153
+ assert_equal :actionview, third_span.name
154
+ end
155
+
156
+ def test_render_alternate_layout
157
+ clear_all!
158
+
159
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_alternate_layout'))
160
+
161
+ traces = Instana.processor.queued_traces
162
+ assert_equal 1, traces.length
163
+ trace = traces.first
164
+
165
+ assert_equal 3, trace.spans.length
166
+ spans = trace.spans.to_a
167
+ first_span = spans[0]
168
+ second_span = spans[1]
169
+ third_span = spans[2]
170
+
171
+ assert_equal :rack, first_span.name
172
+ assert_equal :actioncontroller, second_span.name
173
+ assert_equal "layouts/mobile", third_span[:data][:actionview][:name]
174
+ assert_equal :actionview, third_span.name
175
+ end
176
+
177
+ def test_render_partial
178
+ clear_all!
179
+
180
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_partial'))
181
+
182
+ traces = Instana.processor.queued_traces
183
+ assert_equal 1, traces.length
184
+ trace = traces.first
185
+
186
+ assert_equal 4, trace.spans.length
187
+ spans = trace.spans.to_a
188
+ first_span = spans[0]
189
+ second_span = spans[1]
190
+ third_span = spans[2]
191
+ fourth_span = spans[3]
192
+
193
+ assert_equal :rack, first_span.name
194
+ assert_equal :actioncontroller, second_span.name
195
+ assert_equal :actionview, third_span.name
196
+ assert_equal :render, fourth_span.name
197
+ assert_equal :partial, fourth_span[:data][:render][:type]
198
+ assert_equal 'message', fourth_span[:data][:render][:name]
199
+ end
200
+
201
+ def test_render_partial_that_errors
202
+ clear_all!
203
+
204
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_partial_that_errors'))
205
+
206
+ traces = Instana.processor.queued_traces
207
+ assert_equal 1, traces.length
208
+ trace = traces.first
209
+
210
+ assert_equal 4, trace.spans.length
211
+ spans = trace.spans.to_a
212
+ first_span = spans[0]
213
+ second_span = spans[1]
214
+ third_span = spans[2]
215
+ fourth_span = spans[3]
216
+
217
+ assert_equal :rack, first_span.name
218
+ assert_equal :actioncontroller, second_span.name
219
+ assert_equal :actionview, third_span.name
220
+ assert_equal :render, fourth_span.name
221
+ assert_equal :partial, fourth_span[:data][:render][:type]
222
+ assert_equal 'syntax_error', fourth_span[:data][:render][:name]
223
+ assert fourth_span[:data][:log].key?(:message)
224
+ assert_equal "ActionView::Template::Error", fourth_span[:data][:log][:parameters]
225
+ assert fourth_span[:error]
226
+ assert fourth_span[:stack]
227
+ end
228
+
229
+ def test_render_collection
230
+ clear_all!
231
+
232
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_collection'))
233
+
234
+ traces = Instana.processor.queued_traces
235
+ assert_equal 1, traces.length
236
+ trace = traces.first
237
+
238
+ assert_equal 5, trace.spans.length
239
+ spans = trace.spans.to_a
240
+ first_span = spans[0]
241
+ second_span = spans[1]
242
+ third_span = spans[2]
243
+ fourth_span = spans[3]
244
+ fifth_span = spans[4]
245
+
246
+ assert_equal :rack, first_span.name
247
+ assert_equal :actioncontroller, second_span.name
248
+ assert_equal :activerecord, third_span.name
249
+ assert_equal :actionview, fourth_span.name
250
+
251
+ assert_equal :render, fifth_span.name
252
+ assert_equal :collection, fifth_span[:data][:render][:type]
253
+ assert_equal 'blocks/block', fifth_span[:data][:render][:name]
254
+ end
255
+ end
@@ -0,0 +1,254 @@
1
+ require 'test_helper'
2
+
3
+ class ActionViewTest < Minitest::Test
4
+ def test_config_defaults
5
+ assert ::Instana.config[:action_view].is_a?(Hash)
6
+ assert ::Instana.config[:action_view].key?(:enabled)
7
+ assert_equal true, ::Instana.config[:action_view][:enabled]
8
+ end
9
+
10
+ def test_render_view
11
+ clear_all!
12
+
13
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_view'))
14
+
15
+ traces = Instana.processor.queued_traces
16
+ assert_equal 1, traces.length
17
+ trace = traces.first
18
+
19
+ assert_equal 3, trace.spans.length
20
+ spans = trace.spans.to_a
21
+ first_span = spans[0]
22
+ second_span = spans[1]
23
+ third_span = spans[2]
24
+
25
+ assert_equal :rack, first_span.name
26
+ assert_equal :actioncontroller, second_span.name
27
+ assert_equal :actionview, third_span.name
28
+ end
29
+
30
+ def test_render_nothing
31
+ clear_all!
32
+
33
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_nothing'))
34
+
35
+ traces = Instana.processor.queued_traces
36
+ assert_equal 1, traces.length
37
+ trace = traces.first
38
+
39
+ assert_equal 3, trace.spans.length
40
+ spans = trace.spans.to_a
41
+ first_span = spans[0]
42
+ second_span = spans[1]
43
+ third_span = spans[2]
44
+
45
+ assert_equal :rack, first_span.name
46
+ assert_equal :actioncontroller, second_span.name
47
+ assert_equal "Nothing", third_span[:data][:actionview][:name]
48
+ assert_equal :actionview, third_span.name
49
+ end
50
+
51
+ def test_render_file
52
+ clear_all!
53
+
54
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_file'))
55
+
56
+ traces = Instana.processor.queued_traces
57
+ assert_equal 1, traces.length
58
+ trace = traces.first
59
+
60
+ assert_equal 3, trace.spans.length
61
+ spans = trace.spans.to_a
62
+ first_span = spans[0]
63
+ second_span = spans[1]
64
+ third_span = spans[2]
65
+
66
+ assert_equal :rack, first_span.name
67
+ assert_equal :actioncontroller, second_span.name
68
+ assert_equal "/etc/issue", third_span[:data][:actionview][:name]
69
+ assert_equal :actionview, third_span.name
70
+ end
71
+
72
+ def test_render_json
73
+ clear_all!
74
+
75
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_json'))
76
+
77
+ traces = Instana.processor.queued_traces
78
+ assert_equal 1, traces.length
79
+ trace = traces.first
80
+
81
+ assert_equal 3, trace.spans.length
82
+ spans = trace.spans.to_a
83
+ first_span = spans[0]
84
+ second_span = spans[1]
85
+ third_span = spans[2]
86
+
87
+ assert_equal :rack, first_span.name
88
+ assert_equal :actioncontroller, second_span.name
89
+ assert_equal "JSON", third_span[:data][:actionview][:name]
90
+ assert_equal :actionview, third_span.name
91
+ end
92
+
93
+ def test_render_xml
94
+ clear_all!
95
+
96
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_xml'))
97
+
98
+ traces = Instana.processor.queued_traces
99
+ assert_equal 1, traces.length
100
+ trace = traces.first
101
+
102
+ assert_equal 3, trace.spans.length
103
+ spans = trace.spans.to_a
104
+ first_span = spans[0]
105
+ second_span = spans[1]
106
+ third_span = spans[2]
107
+
108
+ assert_equal :rack, first_span.name
109
+ assert_equal :actioncontroller, second_span.name
110
+ assert_equal "XML", third_span[:data][:actionview][:name]
111
+ assert_equal :actionview, third_span.name
112
+ end
113
+
114
+ def test_render_body
115
+ clear_all!
116
+
117
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_rawbody'))
118
+
119
+ traces = Instana.processor.queued_traces
120
+ assert_equal 1, traces.length
121
+ trace = traces.first
122
+
123
+ assert_equal 3, trace.spans.length
124
+ spans = trace.spans.to_a
125
+ first_span = spans[0]
126
+ second_span = spans[1]
127
+ third_span = spans[2]
128
+
129
+ assert_equal :rack, first_span.name
130
+ assert_equal :actioncontroller, second_span.name
131
+ assert_equal "Raw", third_span[:data][:actionview][:name]
132
+ assert_equal :actionview, third_span.name
133
+ end
134
+
135
+ def test_render_js
136
+ clear_all!
137
+
138
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_js'))
139
+
140
+ traces = Instana.processor.queued_traces
141
+ assert_equal 1, traces.length
142
+ trace = traces.first
143
+
144
+ assert_equal 3, trace.spans.length
145
+ spans = trace.spans.to_a
146
+ first_span = spans[0]
147
+ second_span = spans[1]
148
+ third_span = spans[2]
149
+
150
+ assert_equal :rack, first_span.name
151
+ assert_equal :actioncontroller, second_span.name
152
+ assert_equal "Javascript", third_span[:data][:actionview][:name]
153
+ assert_equal :actionview, third_span.name
154
+ end
155
+
156
+ def test_render_alternate_layout
157
+ clear_all!
158
+
159
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_alternate_layout'))
160
+
161
+ traces = Instana.processor.queued_traces
162
+ assert_equal 1, traces.length
163
+ trace = traces.first
164
+
165
+ assert_equal 3, trace.spans.length
166
+ spans = trace.spans.to_a
167
+ first_span = spans[0]
168
+ second_span = spans[1]
169
+ third_span = spans[2]
170
+
171
+ assert_equal :rack, first_span.name
172
+ assert_equal :actioncontroller, second_span.name
173
+ assert_equal "layouts/mobile", third_span[:data][:actionview][:name]
174
+ assert_equal :actionview, third_span.name
175
+ end
176
+
177
+ def test_render_partial
178
+ clear_all!
179
+
180
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_partial'))
181
+
182
+ traces = Instana.processor.queued_traces
183
+ assert_equal 1, traces.length
184
+ trace = traces.first
185
+
186
+ assert_equal 4, trace.spans.length
187
+ spans = trace.spans.to_a
188
+ first_span = spans[0]
189
+ second_span = spans[1]
190
+ third_span = spans[2]
191
+ fourth_span = spans[3]
192
+
193
+ assert_equal :rack, first_span.name
194
+ assert_equal :actioncontroller, second_span.name
195
+ assert_equal :actionview, third_span.name
196
+ assert_equal :render, fourth_span.name
197
+ assert_equal :partial, fourth_span[:data][:render][:type]
198
+ assert_equal 'message', fourth_span[:data][:render][:name]
199
+ end
200
+
201
+ def test_render_partial_that_errors
202
+ clear_all!
203
+
204
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_partial_that_errors'))
205
+
206
+ traces = Instana.processor.queued_traces
207
+ assert_equal 1, traces.length
208
+ trace = traces.first
209
+
210
+ assert_equal 4, trace.spans.length
211
+ spans = trace.spans.to_a
212
+ first_span = spans[0]
213
+ second_span = spans[1]
214
+ third_span = spans[2]
215
+ fourth_span = spans[3]
216
+
217
+ assert_equal :rack, first_span.name
218
+ assert_equal :actioncontroller, second_span.name
219
+ assert_equal :actionview, third_span.name
220
+ assert_equal :render, fourth_span.name
221
+ assert_equal :partial, fourth_span[:data][:render][:type]
222
+ assert_equal 'syntax_error', fourth_span[:data][:render][:name]
223
+ assert fourth_span[:data][:log].key?(:message)
224
+ assert_equal "SyntaxError", fourth_span[:data][:log][:parameters]
225
+ assert fourth_span[:error]
226
+ assert fourth_span[:stack]
227
+ end
228
+
229
+ def test_render_collection
230
+ clear_all!
231
+
232
+ Net::HTTP.get(URI.parse('http://localhost:3205/test/render_collection'))
233
+
234
+ traces = Instana.processor.queued_traces
235
+ assert_equal 1, traces.length
236
+ trace = traces.first
237
+
238
+ assert_equal 5, trace.spans.length
239
+ spans = trace.spans.to_a
240
+ first_span = spans[0]
241
+ second_span = spans[1]
242
+ third_span = spans[2]
243
+ fourth_span = spans[3]
244
+ fifth_span = spans[4]
245
+
246
+ assert_equal :rack, first_span.name
247
+ assert_equal :actioncontroller, second_span.name
248
+ assert_equal :actionview, third_span.name
249
+ assert_equal :activerecord, fourth_span.name
250
+ assert_equal :render, fifth_span.name
251
+ assert_equal :collection, fifth_span[:data][:render][:type]
252
+ assert_equal 'blocks/block', fifth_span[:data][:render][:name]
253
+ end
254
+ end