newrelic_rpm 3.4.1 → 3.4.2.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of newrelic_rpm might be problematic. Click here for more details.

Files changed (81) hide show
  1. data/CHANGELOG +7 -0
  2. data/ReleaseNotes.md +638 -0
  3. data/lib/new_relic/agent/agent.rb +44 -56
  4. data/lib/new_relic/agent/beacon_configuration.rb +1 -1
  5. data/lib/new_relic/agent/browser_monitoring.rb +80 -42
  6. data/lib/new_relic/agent/configuration/defaults.rb +75 -0
  7. data/lib/new_relic/agent/configuration/environment_source.rb +42 -0
  8. data/lib/new_relic/agent/configuration/manager.rb +100 -0
  9. data/lib/new_relic/agent/configuration/server_source.rb +24 -0
  10. data/lib/new_relic/agent/configuration/yaml_source.rb +61 -0
  11. data/lib/new_relic/agent/configuration.rb +48 -0
  12. data/lib/new_relic/agent/error_collector.rb +10 -14
  13. data/lib/new_relic/agent/instrumentation/active_record.rb +1 -5
  14. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +20 -4
  15. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +1 -1
  16. data/lib/new_relic/agent/instrumentation/memcache.rb +2 -2
  17. data/lib/new_relic/agent/instrumentation/metric_frame.rb +1 -1
  18. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +3 -3
  19. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +2 -2
  20. data/lib/new_relic/agent/instrumentation/resque.rb +1 -1
  21. data/lib/new_relic/agent/method_tracer.rb +1 -1
  22. data/lib/new_relic/agent/new_relic_service.rb +18 -9
  23. data/lib/new_relic/agent/pipe_channel_manager.rb +5 -6
  24. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +2 -5
  25. data/lib/new_relic/agent/sql_sampler.rb +11 -35
  26. data/lib/new_relic/agent/stats_engine/transactions.rb +2 -2
  27. data/lib/new_relic/agent/transaction_info.rb +24 -4
  28. data/lib/new_relic/agent/transaction_sample_builder.rb +2 -3
  29. data/lib/new_relic/agent/transaction_sampler.rb +9 -16
  30. data/lib/new_relic/agent.rb +4 -1
  31. data/lib/new_relic/collection_helper.rb +1 -1
  32. data/lib/new_relic/commands/deployments.rb +5 -3
  33. data/lib/new_relic/control/class_methods.rb +2 -3
  34. data/lib/new_relic/control/frameworks/rails.rb +8 -8
  35. data/lib/new_relic/control/frameworks/ruby.rb +2 -2
  36. data/lib/new_relic/control/instance_methods.rb +26 -32
  37. data/lib/new_relic/control/logging_methods.rb +5 -23
  38. data/lib/new_relic/control/server_methods.rb +11 -18
  39. data/lib/new_relic/control.rb +0 -1
  40. data/lib/new_relic/delayed_job_injection.rb +1 -1
  41. data/lib/new_relic/language_support.rb +8 -0
  42. data/lib/new_relic/noticed_error.rb +1 -1
  43. data/lib/new_relic/rack/browser_monitoring.rb +18 -6
  44. data/lib/new_relic/version.rb +2 -2
  45. data/newrelic.yml +0 -4
  46. data/newrelic_rpm.gemspec +16 -6
  47. data/test/config/newrelic.yml +3 -2
  48. data/test/new_relic/agent/agent/connect_test.rb +88 -83
  49. data/test/new_relic/agent/agent/start_test.rb +75 -80
  50. data/test/new_relic/agent/agent/start_worker_thread_test.rb +18 -18
  51. data/test/new_relic/agent/beacon_configuration_test.rb +13 -11
  52. data/test/new_relic/agent/browser_monitoring_test.rb +69 -14
  53. data/test/new_relic/agent/configuration/environment_source_test.rb +58 -0
  54. data/test/new_relic/agent/configuration/manager_test.rb +120 -0
  55. data/test/new_relic/agent/configuration/server_source_test.rb +28 -0
  56. data/test/new_relic/agent/configuration/yaml_source_test.rb +56 -0
  57. data/test/new_relic/agent/error_collector/notice_error_test.rb +63 -50
  58. data/test/new_relic/agent/error_collector_test.rb +10 -12
  59. data/test/new_relic/agent/new_relic_service_test.rb +11 -3
  60. data/test/new_relic/agent/pipe_channel_manager_test.rb +19 -16
  61. data/test/new_relic/agent/rpm_agent_test.rb +21 -19
  62. data/test/new_relic/agent/sql_sampler_test.rb +55 -56
  63. data/test/new_relic/agent/transaction_info_test.rb +45 -4
  64. data/test/new_relic/agent/transaction_sampler_test.rb +48 -44
  65. data/test/new_relic/agent_test.rb +68 -41
  66. data/test/new_relic/collection_helper_test.rb +7 -8
  67. data/test/new_relic/command/deployments_test.rb +12 -1
  68. data/test/new_relic/control/frameworks/rails_test.rb +26 -0
  69. data/test/new_relic/control/logging_methods_test.rb +77 -52
  70. data/test/new_relic/control_test.rb +103 -126
  71. data/test/new_relic/local_environment_test.rb +4 -6
  72. data/test/new_relic/rack/browser_monitoring_test.rb +4 -4
  73. data/test/new_relic/rack/developer_mode_test.rb +13 -7
  74. data/test/new_relic/transaction_sample_test.rb +8 -2
  75. data/test/script/build_test_gem.sh +9 -3
  76. data/test/script/ci.sh +13 -3
  77. data/test/test_helper.rb +9 -2
  78. data/ui/helpers/developer_mode_helper.rb +2 -7
  79. metadata +26 -11
  80. data/lib/new_relic/control/configuration.rb +0 -206
  81. data/test/new_relic/control/configuration_test.rb +0 -77
@@ -57,47 +57,51 @@ class NewRelic::Agent::ErrorCollector::NoticeErrorTest < Test::Unit::TestCase
57
57
  end
58
58
 
59
59
  def test_request_params_from_opts_positive
60
- fake_control = mock('control')
61
- self.expects(:control).returns(fake_control)
62
- fake_control.expects(:capture_params).returns(true)
63
- val = {:request_params => 'foo'}
64
- assert_equal('foo', request_params_from_opts(val))
65
- assert_equal({}, val, "should delete request_params key from hash")
60
+ with_config(:capture_params => true) do
61
+ val = {:request_params => 'foo'}
62
+ assert_equal('foo', request_params_from_opts(val))
63
+ assert_equal({}, val, "should delete request_params key from hash")
64
+ end
66
65
  end
67
66
 
68
67
  def test_request_params_from_opts_negative
69
- fake_control = mock('control')
70
- self.expects(:control).returns(fake_control)
71
- fake_control.expects(:capture_params).returns(false)
72
- val = {:request_params => 'foo'}
73
- assert_equal(nil, request_params_from_opts(val))
74
- assert_equal({}, val, "should delete request_params key from hash")
68
+ with_config(:capture_params => false) do
69
+ val = {:request_params => 'foo'}
70
+ assert_equal(nil, request_params_from_opts(val))
71
+ assert_equal({}, val, "should delete request_params key from hash")
72
+ end
75
73
  end
76
74
 
77
75
  def test_normalized_request_and_custom_params_base
78
76
  self.expects(:normalize_params).with(nil).returns(nil)
79
77
  self.expects(:normalize_params).with({}).returns({})
80
- fake_control = mock('control')
81
- self.expects(:control).returns(fake_control)
82
- fake_control.expects(:capture_params).returns(true)
83
- assert_equal({:request_params => nil, :custom_params => {}}, normalized_request_and_custom_params({}))
78
+ with_config(:capture_params => true) do
79
+ assert_equal({:request_params => nil, :custom_params => {}},
80
+ normalized_request_and_custom_params({}))
81
+ end
84
82
  end
85
83
 
86
84
  def test_extract_source_base
87
- @capture_source = true
88
- self.expects(:sense_method).with(nil, 'source_extract')
89
- assert_equal(nil, extract_source(nil))
85
+ with_config(:'error_collector.capture_source' => true) do
86
+ error_collector = NewRelic::Agent::ErrorCollector.new
87
+ error_collector.expects(:sense_method).with(nil, 'source_extract')
88
+ assert_equal(nil, error_collector.extract_source(nil))
89
+ end
90
90
  end
91
91
 
92
92
  def test_extract_source_disabled
93
- @capture_source = false
94
- assert_equal(nil, extract_source(mock('exception')))
93
+ with_config(:'error_collector.capture_source' => false) do
94
+ error_collector = NewRelic::Agent::ErrorCollector.new
95
+ assert_equal(nil, error_collector.extract_source(mock('exception')))
96
+ end
95
97
  end
96
98
 
97
99
  def test_extract_source_with_source
98
- self.expects(:sense_method).with('happy', 'source_extract').returns('THE SOURCE')
99
- @capture_source = true
100
- assert_equal('THE SOURCE', extract_source('happy'))
100
+ with_config(:'error_collector.capture_source' => true) do
101
+ error_collector = NewRelic::Agent::ErrorCollector.new
102
+ error_collector.expects(:sense_method).with('happy', 'source_extract').returns('THE SOURCE')
103
+ assert_equal('THE SOURCE', error_collector.extract_source('happy'))
104
+ end
101
105
  end
102
106
 
103
107
  def test_extract_stack_trace
@@ -160,53 +164,56 @@ class NewRelic::Agent::ErrorCollector::NoticeErrorTest < Test::Unit::TestCase
160
164
 
161
165
  def test_should_exit_notice_error_disabled
162
166
  error = mocked_error
163
- @enabled = false
164
- assert should_exit_notice_error?(error)
167
+ with_error_collector_config(:'error_collector.enabled' => false) do |error_collector|
168
+ assert error_collector.should_exit_notice_error?(error)
169
+ end
165
170
  end
166
171
 
167
172
  def test_should_exit_notice_error_nil
168
173
  error = nil
169
- @enabled = true
170
- self.expects(:error_is_ignored?).with(error).returns(false)
171
- # we increment it for the case that someone calls
172
- # NewRelic::Agent.notice_error(foo) # foo is nil
173
- # (which is probably not a good idea but is the existing api)
174
- self.expects(:increment_error_count!)
175
- assert should_exit_notice_error?(error)
174
+ with_error_collector_config(:'error_collector.enabled' => true) do |error_collector|
175
+ error_collector.expects(:error_is_ignored?).with(error).returns(false)
176
+ # we increment it for the case that someone calls
177
+ # NewRelic::Agent.notice_error(foo) # foo is nil
178
+ # (which is probably not a good idea but is the existing api)
179
+ error_collector.expects(:increment_error_count!)
180
+ assert error_collector.should_exit_notice_error?(error)
181
+ end
176
182
  end
177
183
 
178
184
  def test_should_exit_notice_error_positive
179
185
  error = mocked_error
180
- @enabled = true
181
- self.expects(:error_is_ignored?).with(error).returns(true)
182
- assert should_exit_notice_error?(error)
186
+ with_error_collector_config(:'error_collector.enabled' => true) do |error_collector|
187
+ error_collector.expects(:error_is_ignored?).with(error).returns(true)
188
+ assert error_collector.should_exit_notice_error?(error)
189
+ end
183
190
  end
184
191
 
185
192
  def test_should_exit_notice_error_negative
186
193
  error = mocked_error
187
- @enabled = true
188
- self.expects(:error_is_ignored?).with(error).returns(false)
189
- self.expects(:increment_error_count!)
190
- assert !should_exit_notice_error?(error)
194
+ with_error_collector_config(:'error_collector.enabled' => true) do |error_collector|
195
+ error_collector.expects(:error_is_ignored?).with(error).returns(false)
196
+ error_collector.expects(:increment_error_count!)
197
+ assert !error_collector.should_exit_notice_error?(error)
198
+ end
191
199
  end
192
200
 
193
201
  def test_filtered_error_positive
194
- @ignore = {'an_error' => true}
195
- error = mocked_error
196
- error_class = mock('error class')
197
- error.expects(:class).returns(error_class)
198
- error_class.expects(:name).returns('an_error')
199
- assert filtered_error?(error)
202
+ with_error_collector_config(:'error_collector.ignore_errors' => 'an_error') do |error_collector|
203
+ error = mocked_error
204
+ error_class = mock('error class')
205
+ error.expects(:class).returns(error_class)
206
+ error_class.expects(:name).returns('an_error')
207
+ assert error_collector.filtered_error?(error)
208
+ end
200
209
  end
201
210
 
202
211
  def test_filtered_error_negative
203
- @ignore = {}
204
212
  error = mocked_error
205
213
  error_class = mock('error class')
206
214
  error.expects(:class).returns(error_class)
207
215
  error_class.expects(:name).returns('an_error')
208
- self.expects(:filtered_by_error_filter?).with(error).returns(false)
209
- assert !filtered_error?(error)
216
+ assert !NewRelic::Agent::ErrorCollector.new.filtered_error?(error)
210
217
  end
211
218
 
212
219
  def test_filtered_by_error_filter_empty
@@ -251,7 +258,13 @@ class NewRelic::Agent::ErrorCollector::NoticeErrorTest < Test::Unit::TestCase
251
258
 
252
259
  def mocked_control
253
260
  fake_control = mock('control')
254
- self.stubs(:control).returns(fake_control)
261
+ NewRelic::Control.stubs(:instance).returns(fake_control)
255
262
  fake_control
256
263
  end
264
+
265
+ def with_error_collector_config(config)
266
+ with_config(config) do
267
+ yield NewRelic::Agent::ErrorCollector.new
268
+ end
269
+ end
257
270
  end
@@ -156,20 +156,18 @@ class NewRelic::Agent::ErrorCollectorTest < Test::Unit::TestCase
156
156
  end
157
157
 
158
158
  def test_obfuscates_error_messages_when_high_security_is_set
159
- NewRelic::Control.instance['high_security'] = true
160
-
161
- @error_collector.notice_error(StandardError.new("YO SQL BAD: serect * flom test where foo = 'bar'"))
162
- @error_collector.notice_error(StandardError.new("YO SQL BAD: serect * flom test where foo in (1,2,3,4,5)"))
159
+ with_config(:high_security => true) do
160
+ @error_collector.notice_error(StandardError.new("YO SQL BAD: serect * flom test where foo = 'bar'"))
161
+ @error_collector.notice_error(StandardError.new("YO SQL BAD: serect * flom test where foo in (1,2,3,4,5)"))
163
162
 
164
- old_errors = []
165
- errors = @error_collector.harvest_errors([])
163
+ old_errors = []
164
+ errors = @error_collector.harvest_errors([])
166
165
 
167
- assert_equal('YO SQL BAD: serect * flom test where foo = ?',
168
- errors[0].message)
169
- assert_equal('YO SQL BAD: serect * flom test where foo in (?,?,?,?,?)',
170
- errors[1].message)
171
-
172
- NewRelic::Control.instance['high_security'] = nil
166
+ assert_equal('YO SQL BAD: serect * flom test where foo = ?',
167
+ errors[0].message)
168
+ assert_equal('YO SQL BAD: serect * flom test where foo in (?,?,?,?,?)',
169
+ errors[1].message)
170
+ end
173
171
  end
174
172
 
175
173
  private
@@ -15,6 +15,13 @@ class NewRelicServiceTest < Test::Unit::TestCase
15
15
  @http_handle.respond_to(:connect, connect_response)
16
16
  end
17
17
 
18
+ def test_initialize_uses_correct_license_key_settings
19
+ with_config(:license_key => 'abcde') do
20
+ service = NewRelic::Agent::NewRelicService.new
21
+ assert_equal 'abcde', service.instance_variable_get(:@license_key)
22
+ end
23
+ end
24
+
18
25
  def test_connect_sets_agent_id_and_config_data
19
26
  response = @service.connect
20
27
  assert_equal 1, response['agent_run_id']
@@ -94,9 +101,10 @@ class NewRelicServiceTest < Test::Unit::TestCase
94
101
  end
95
102
 
96
103
  def test_request_timeout
97
- NewRelic::Control.instance['timeout'] = 600
98
- service = NewRelic::Agent::NewRelicService.new('abcdef', @server)
99
- assert_equal 600, service.request_timeout
104
+ with_config(:timeout => 600) do
105
+ service = NewRelic::Agent::NewRelicService.new('abcdef', @server)
106
+ assert_equal 600, service.request_timeout
107
+ end
100
108
  end
101
109
 
102
110
  def test_should_throw_received_errors
@@ -4,6 +4,8 @@ require 'new_relic/agent/pipe_channel_manager'
4
4
 
5
5
  class NewRelic::Agent::PipeChannelManagerTest < Test::Unit::TestCase
6
6
  def setup
7
+ @test_config = { 'developer_mode' => true }
8
+ NewRelic::Agent.config.apply_config(@test_config)
7
9
  NewRelic::Agent::PipeChannelManager.listener.close_all_pipes
8
10
  NewRelic::Agent.manual_start
9
11
  end
@@ -11,26 +13,27 @@ class NewRelic::Agent::PipeChannelManagerTest < Test::Unit::TestCase
11
13
  def teardown
12
14
  NewRelic::Agent::PipeChannelManager.listener.stop
13
15
  NewRelic::Agent.shutdown
16
+ NewRelic::Agent.config.remove_config(@test_config)
14
17
  end
15
-
18
+
16
19
  def test_registering_a_pipe
17
- NewRelic::Agent::PipeChannelManager.listener.wake.in.expects(:<<).with('.')
20
+ NewRelic::Agent::PipeChannelManager.listener.wake.in.expects(:<<).with('.')
18
21
  NewRelic::Agent::PipeChannelManager.register_report_channel(1)
19
22
  pipe = NewRelic::Agent::PipeChannelManager.channels[1]
20
-
23
+
21
24
  assert pipe.out.kind_of?(IO)
22
25
  assert pipe.in.kind_of?(IO)
23
26
 
24
27
  NewRelic::Agent::PipeChannelManager.listener.close_all_pipes
25
28
  end
26
-
29
+
27
30
  if NewRelic::LanguageSupport.can_fork? && !NewRelic::LanguageSupport.using_version?('1.9.1')
28
31
  def test_listener_merges_timeslice_metrics
29
32
  metric = 'Custom/test/method'
30
33
  engine = NewRelic::Agent.agent.stats_engine
31
34
  engine.get_stats_no_scope(metric).record_data_point(1.0)
32
-
33
- listener = start_listener_with_pipe(666)
35
+
36
+ listener = start_listener_with_pipe(666)
34
37
 
35
38
  pid = Process.fork do
36
39
  NewRelic::Agent.after_fork
@@ -40,19 +43,19 @@ class NewRelic::Agent::PipeChannelManagerTest < Test::Unit::TestCase
40
43
  end
41
44
  Process.wait(pid)
42
45
  listener.stop
43
-
44
- assert_equal(3.0, engine.lookup_stats(metric).total_call_time)
46
+
47
+ assert_equal(3.0, engine.lookup_stats(metric).total_call_time)
45
48
  end
46
49
 
47
50
  def test_listener_merges_transaction_traces
48
- sampler = NewRelic::Agent.agent.transaction_sampler
51
+ sampler = NewRelic::Agent.agent.transaction_sampler
49
52
  TransactionSampleTestHelper.run_sample_trace_on(sampler)
50
53
  NewRelic::Agent.agent.merge_data_from([nil, [sampler.samples], nil])
51
54
 
52
55
  assert_equal(1, NewRelic::Agent.agent.unsent_traces_size)
53
-
56
+
54
57
  listener = start_listener_with_pipe(667)
55
-
58
+
56
59
  pid = Process.fork do
57
60
  NewRelic::Agent.after_fork
58
61
  new_sampler = NewRelic::Agent::TransactionSampler.new
@@ -62,10 +65,10 @@ class NewRelic::Agent::PipeChannelManagerTest < Test::Unit::TestCase
62
65
  end
63
66
  Process.wait(pid)
64
67
  listener.stop
65
-
68
+
66
69
  assert_equal(2, NewRelic::Agent.agent.unsent_traces_size)
67
70
  end
68
-
71
+
69
72
  def test_listener_merges_error_traces
70
73
  sampler = NewRelic::Agent.agent.error_collector
71
74
  sampler.notice_error(Exception.new("message"), :uri => '/myurl/',
@@ -74,9 +77,9 @@ class NewRelic::Agent::PipeChannelManagerTest < Test::Unit::TestCase
74
77
  NewRelic::Agent.agent.merge_data_from([nil, nil, [sampler.errors]])
75
78
 
76
79
  assert_equal(1, NewRelic::Agent.agent.unsent_errors_size)
77
-
80
+
78
81
  listener = start_listener_with_pipe(668)
79
-
82
+
80
83
  pid = Process.fork do
81
84
  NewRelic::Agent.after_fork
82
85
  new_sampler = NewRelic::Agent::ErrorCollector.new
@@ -115,7 +118,7 @@ class NewRelic::Agent::PipeChannelManagerTest < Test::Unit::TestCase
115
118
  end
116
119
  end
117
120
  end
118
-
121
+
119
122
  def start_listener_with_pipe(pipe_id)
120
123
  listener = NewRelic::Agent::PipeChannelManager.listener
121
124
  listener.start
@@ -34,21 +34,23 @@ class NewRelic::Agent::RpmAgentTest < Test::Unit::TestCase # ActiveSupport::Test
34
34
  end
35
35
 
36
36
  should "startup_shutdown" do
37
- @agent = NewRelic::Agent::ShimAgent.instance
38
- @agent.shutdown
39
- assert (not @agent.started?)
40
- @agent.start
41
- assert !@agent.started?
42
- # this installs the real agent:
43
- NewRelic::Agent.manual_start
44
- @agent = NewRelic::Agent.instance
45
- assert @agent != NewRelic::Agent::ShimAgent.instance
46
- assert @agent.started?
47
- @agent.shutdown
48
- assert !@agent.started?
49
- @agent.start
50
- assert @agent.started?
51
- NewRelic::Agent.shutdown
37
+ with_config(:agent_enabled => true) do
38
+ @agent = NewRelic::Agent::ShimAgent.instance
39
+ @agent.shutdown
40
+ assert (not @agent.started?)
41
+ @agent.start
42
+ assert !@agent.started?
43
+ # this installs the real agent:
44
+ NewRelic::Agent.manual_start
45
+ @agent = NewRelic::Agent.instance
46
+ assert @agent != NewRelic::Agent::ShimAgent.instance
47
+ assert @agent.started?
48
+ @agent.shutdown
49
+ assert !@agent.started?
50
+ @agent.start
51
+ assert @agent.started?
52
+ NewRelic::Agent.shutdown
53
+ end
52
54
  end
53
55
 
54
56
  should "manual_start" do
@@ -67,16 +69,16 @@ class NewRelic::Agent::RpmAgentTest < Test::Unit::TestCase # ActiveSupport::Test
67
69
  end
68
70
  should "manual_overrides" do
69
71
  NewRelic::Agent.manual_start :app_name => "testjobs", :dispatcher_instance_id => "mailer"
70
- assert_equal "testjobs", NewRelic::Control.instance.app_names[0]
71
- assert_equal "mailer", NewRelic::Control.instance.dispatcher_instance_id
72
+ assert_equal "testjobs", NewRelic::Agent.config.app_names[0]
73
+ assert_equal "mailer", NewRelic::Control.instance.local_env.dispatcher_instance_id
72
74
  NewRelic::Agent.shutdown
73
75
  end
74
76
 
75
77
  should "restart" do
76
78
  NewRelic::Agent.manual_start :app_name => "noapp", :dispatcher_instance_id => ""
77
79
  NewRelic::Agent.manual_start :app_name => "testjobs", :dispatcher_instance_id => "mailer"
78
- assert_equal "testjobs", NewRelic::Control.instance.app_names[0]
79
- assert_equal "mailer", NewRelic::Control.instance.dispatcher_instance_id
80
+ assert_equal "testjobs", NewRelic::Agent.config.app_names[0]
81
+ assert_equal "mailer", NewRelic::Control.instance.local_env.dispatcher_instance_id
80
82
  NewRelic::Agent.shutdown
81
83
  end
82
84
 
@@ -1,7 +1,6 @@
1
1
  require File.expand_path(File.join(File.dirname(__FILE__),'..','..','test_helper'))
2
2
 
3
3
  class NewRelic::Agent::SqlSamplerTest < Test::Unit::TestCase
4
-
5
4
  def setup
6
5
  agent = NewRelic::Agent.instance
7
6
  stats_engine = NewRelic::Agent::StatsEngine.new
@@ -10,17 +9,17 @@ class NewRelic::Agent::SqlSamplerTest < Test::Unit::TestCase
10
9
  @connection = stub('ActiveRecord connection', :execute => 'result')
11
10
  NewRelic::Agent::Database.stubs(:get_connection).returns(@connection)
12
11
  end
13
-
12
+
14
13
  def test_notice_first_scope_push
15
- assert_nil @sampler.transaction_data
14
+ assert_nil @sampler.transaction_data
16
15
  @sampler.notice_first_scope_push nil
17
16
  assert_not_nil @sampler.transaction_data
18
17
  @sampler.notice_scope_empty
19
18
  assert_nil @sampler.transaction_data
20
19
  end
21
-
20
+
22
21
  def test_notice_sql_no_transaction
23
- assert_nil @sampler.transaction_data
22
+ assert_nil @sampler.transaction_data
24
23
  @sampler.notice_sql "select * from test", "Database/test/select", nil, 10
25
24
  end
26
25
 
@@ -33,45 +32,45 @@ class NewRelic::Agent::SqlSamplerTest < Test::Unit::TestCase
33
32
  assert_not_nil @sampler.transaction_data
34
33
  assert_equal 2, @sampler.transaction_data.sql_data.size
35
34
  end
36
-
35
+
37
36
  def test_harvest_slow_sql
38
37
  data = NewRelic::Agent::TransactionSqlData.new
39
38
  data.set_transaction_info("WebTransaction/Controller/c/a", "/c/a", {},
40
39
  'guid')
41
40
  data.sql_data.concat [
42
- NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.5),
43
- NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.2),
41
+ NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.5),
42
+ NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.2),
44
43
  NewRelic::Agent::SlowSql.new("select * from test2", "Database/test2/select", {}, 1.1)
45
44
  ]
46
45
  @sampler.harvest_slow_sql data
47
-
46
+
48
47
  assert_equal 2, @sampler.sql_traces.size
49
48
  end
50
-
49
+
51
50
  def test_sql_aggregation
52
- sql_trace = NewRelic::Agent::SqlTrace.new("select * from test",
51
+ sql_trace = NewRelic::Agent::SqlTrace.new("select * from test",
53
52
  NewRelic::Agent::SlowSql.new("select * from test",
54
53
  "Database/test/select", {}, 1.2),
55
54
  "tx_name", "uri")
56
-
55
+
57
56
  sql_trace.aggregate NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.5), "slowest_tx_name", "slow_uri"
58
57
  sql_trace.aggregate NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.1), "other_tx_name", "uri2"
59
-
58
+
60
59
  assert_equal 3, sql_trace.call_count
61
60
  assert_equal "slowest_tx_name", sql_trace.path
62
61
  assert_equal "slow_uri", sql_trace.url
63
62
  assert_equal 1.5, sql_trace.max_call_time
64
63
  end
65
-
64
+
66
65
  def test_harvest
67
66
  data = NewRelic::Agent::TransactionSqlData.new
68
67
  data.set_transaction_info("WebTransaction/Controller/c/a", "/c/a", {},
69
68
  'guid')
70
- data.sql_data.concat [NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.5),
71
- NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.2),
69
+ data.sql_data.concat [NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.5),
70
+ NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.2),
72
71
  NewRelic::Agent::SlowSql.new("select * from test2", "Database/test2/select", {}, 1.1)]
73
72
  @sampler.harvest_slow_sql data
74
-
73
+
75
74
  sql_traces = @sampler.harvest
76
75
  assert_equal 2, sql_traces.size
77
76
  end
@@ -83,10 +82,10 @@ class NewRelic::Agent::SqlSamplerTest < Test::Unit::TestCase
83
82
  data.sql_data << NewRelic::Agent::SlowSql.new("select * from test#{(i+97).chr}",
84
83
  "Database/test#{(i+97).chr}/select", {}, i)
85
84
  end
86
-
85
+
87
86
  @sampler.harvest_slow_sql data
88
87
  result = @sampler.harvest
89
-
88
+
90
89
  assert_equal(10, result.size)
91
90
  assert_equal(14, result.sort{|a,b| b.max_call_time <=> a.max_call_time}.first.total_call_time)
92
91
  end
@@ -96,13 +95,13 @@ class NewRelic::Agent::SqlSamplerTest < Test::Unit::TestCase
96
95
  data.set_transaction_info("WebTransaction/Controller/c/a", "/c/a", {},
97
96
  'guid')
98
97
  queries = [
99
- NewRelic::Agent::SlowSql.new("select * from test where foo in (1, 2) ", "Database/test/select", {}, 1.5),
100
- NewRelic::Agent::SlowSql.new("select * from test where foo in (1,2, 3 ,4, 5,6, 'snausage')", "Database/test/select", {}, 1.2),
98
+ NewRelic::Agent::SlowSql.new("select * from test where foo in (1, 2) ", "Database/test/select", {}, 1.5),
99
+ NewRelic::Agent::SlowSql.new("select * from test where foo in (1,2, 3 ,4, 5,6, 'snausage')", "Database/test/select", {}, 1.2),
101
100
  NewRelic::Agent::SlowSql.new("select * from test2 where foo in (1,2)", "Database/test2/select", {}, 1.1)
102
101
  ]
103
102
  data.sql_data.concat(queries)
104
103
  @sampler.harvest_slow_sql data
105
-
104
+
106
105
  sql_traces = @sampler.harvest
107
106
  assert_equal 2, sql_traces.size
108
107
  end
@@ -117,19 +116,19 @@ class NewRelic::Agent::SqlSamplerTest < Test::Unit::TestCase
117
116
  data.set_transaction_info("WebTransaction/Controller/c/a", "/c/a", {},
118
117
  'guid')
119
118
  queries = [
120
- NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.5),
121
- NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.2),
119
+ NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.5),
120
+ NewRelic::Agent::SlowSql.new("select * from test", "Database/test/select", {}, 1.2),
122
121
  NewRelic::Agent::SlowSql.new("select * from test2", "Database/test2/select", {}, 1.1)
123
122
  ]
124
123
  data.sql_data.concat(queries)
125
- @sampler.harvest_slow_sql data
124
+ @sampler.harvest_slow_sql data
126
125
  sql_traces = @sampler.harvest
127
126
  assert_equal(["header0", "header1", "header2"],
128
127
  sql_traces[0].params[:explain_plan][0].sort)
129
128
  assert_equal(["header0", "header1", "header2"],
130
129
  sql_traces[1].params[:explain_plan][0].sort)
131
130
  assert_equal(["foo0", "foo1", "foo2"],
132
- sql_traces[0].params[:explain_plan][1][0].sort)
131
+ sql_traces[0].params[:explain_plan][1][0].sort)
133
132
  assert_equal(["bar0", "bar1", "bar2"],
134
133
  sql_traces[1].params[:explain_plan][1][0].sort)
135
134
  end
@@ -145,48 +144,48 @@ class NewRelic::Agent::SqlSamplerTest < Test::Unit::TestCase
145
144
  assert_equal(NewRelic::Agent.instance.transaction_sampler.builder.sample.guid,
146
145
  NewRelic::Agent.instance.sql_sampler.transaction_data.guid)
147
146
  end
148
-
147
+
149
148
  def test_should_not_collect_explain_plans_when_disabled
150
- NewRelic::Control.instance['transaction_tracer'] = { 'explain_enabled' => false }
151
- data = NewRelic::Agent::TransactionSqlData.new
152
- data.set_transaction_info("WebTransaction/Controller/c/a", "/c/a", {},
153
- 'guid')
154
-
155
- queries = [
156
- NewRelic::Agent::SlowSql.new("select * from test",
157
- "Database/test/select", {}, 1.5)
158
- ]
159
- data.sql_data.concat(queries)
160
- @sampler.harvest_slow_sql data
161
- sql_traces = @sampler.harvest
162
- assert_equal(nil, sql_traces[0].params[:explain_plan])
163
- NewRelic::Control.instance['transaction_tracer'] = { 'explain_enabled' => true }
149
+ with_config(:'transaction_tracer.explain_enabled' => false) do
150
+ data = NewRelic::Agent::TransactionSqlData.new
151
+ data.set_transaction_info("WebTransaction/Controller/c/a", "/c/a", {},
152
+ 'guid')
153
+
154
+ queries = [
155
+ NewRelic::Agent::SlowSql.new("select * from test",
156
+ "Database/test/select", {}, 1.5)
157
+ ]
158
+ data.sql_data.concat(queries)
159
+ @sampler.harvest_slow_sql data
160
+ sql_traces = @sampler.harvest
161
+ assert_equal(nil, sql_traces[0].params[:explain_plan])
162
+ end
164
163
  end
165
164
 
166
165
  def test_sql_id_fits_in_a_mysql_int_11
167
- sql_trace = NewRelic::Agent::SqlTrace.new("select * from test",
166
+ sql_trace = NewRelic::Agent::SqlTrace.new("select * from test",
168
167
  NewRelic::Agent::SlowSql.new("select * from test",
169
168
  "Database/test/select", {}, 1.2),
170
169
  "tx_name", "uri")
171
-
170
+
172
171
  assert -2147483648 <= sql_trace.sql_id, "sql_id too small"
173
172
  assert 2147483647 >= sql_trace.sql_id, "sql_id too large"
174
173
  end
175
174
 
176
175
  def test_sends_obfuscated_queries_when_configured
177
- NewRelic::Control.instance['transaction_tracer'] = { 'record_sql' => 'obfuscated' }
178
-
179
- data = NewRelic::Agent::TransactionSqlData.new
180
- data.set_transaction_info("WebTransaction/Controller/c/a", "/c/a", {},
181
- 'guid')
182
- data.sql_data.concat([NewRelic::Agent::SlowSql.new("select * from test where foo = 'bar'",
183
- "Database/test/select", {}, 1.5),
184
- NewRelic::Agent::SlowSql.new("select * from test where foo in (1,2,3,4,5)",
185
- "Database/test/select", {}, 1.2)])
186
- @sampler.harvest_slow_sql(data)
187
- sql_traces = @sampler.harvest
176
+ with_config(:'transaction_tracer.record_sql' => 'obfuscated') do
177
+ data = NewRelic::Agent::TransactionSqlData.new
178
+ data.set_transaction_info("WebTransaction/Controller/c/a", "/c/a", {},
179
+ 'guid')
180
+ data.sql_data.concat([NewRelic::Agent::SlowSql.new("select * from test where foo = 'bar'",
181
+ "Database/test/select", {}, 1.5),
182
+ NewRelic::Agent::SlowSql.new("select * from test where foo in (1,2,3,4,5)",
183
+ "Database/test/select", {}, 1.2)])
184
+ @sampler.harvest_slow_sql(data)
185
+ sql_traces = @sampler.harvest
188
186
 
189
- assert_equal('select * from test where foo = ?', sql_traces[0].sql)
190
- assert_equal('select * from test where foo in (?,?,?,?,?)', sql_traces[1].sql)
187
+ assert_equal('select * from test where foo = ?', sql_traces[0].sql)
188
+ assert_equal('select * from test where foo in (?,?,?,?,?)', sql_traces[1].sql)
189
+ end
191
190
  end
192
191
  end