newrelic_rpm 3.7.0.174.beta → 3.7.0.177

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data.tar.gz.sig +0 -0
  2. data/CHANGELOG +27 -4
  3. data/bin/nrdebug +10 -4
  4. data/lib/new_relic/agent.rb +33 -11
  5. data/lib/new_relic/agent/agent.rb +83 -120
  6. data/lib/new_relic/agent/agent_logger.rb +28 -16
  7. data/lib/new_relic/agent/audit_logger.rb +3 -4
  8. data/lib/new_relic/agent/autostart.rb +20 -8
  9. data/lib/new_relic/agent/commands/agent_command_router.rb +26 -17
  10. data/lib/new_relic/agent/commands/thread_profiler_session.rb +2 -2
  11. data/lib/new_relic/agent/configuration/default_source.rb +146 -59
  12. data/lib/new_relic/agent/configuration/manager.rb +3 -3
  13. data/lib/new_relic/agent/cross_app_monitor.rb +15 -40
  14. data/lib/new_relic/agent/cross_app_tracing.rb +20 -12
  15. data/lib/new_relic/agent/database.rb +24 -0
  16. data/lib/new_relic/agent/error_collector.rb +6 -2
  17. data/lib/new_relic/agent/instrumentation/merb/controller.rb +3 -1
  18. data/lib/new_relic/agent/javascript_instrumentor.rb +187 -0
  19. data/lib/new_relic/agent/new_relic_service.rb +30 -22
  20. data/lib/new_relic/agent/obfuscator.rb +48 -0
  21. data/lib/new_relic/agent/request_sampler.rb +5 -13
  22. data/lib/new_relic/agent/shim_agent.rb +1 -0
  23. data/lib/new_relic/agent/sql_sampler.rb +15 -5
  24. data/lib/new_relic/agent/stats_engine/metric_stats.rb +9 -4
  25. data/lib/new_relic/agent/transaction.rb +0 -1
  26. data/lib/new_relic/agent/transaction_sampler.rb +28 -16
  27. data/lib/new_relic/agent/transaction_state.rb +9 -0
  28. data/lib/new_relic/agent/transaction_timings.rb +5 -1
  29. data/lib/new_relic/agent/worker_loop.rb +0 -10
  30. data/lib/new_relic/cli/deployments.rb +1 -1
  31. data/lib/new_relic/control/instance_methods.rb +1 -1
  32. data/lib/new_relic/helper.rb +3 -1
  33. data/lib/new_relic/rack/browser_monitoring.rb +1 -2
  34. data/lib/new_relic/transaction_sample.rb +11 -13
  35. data/lib/newrelic_rpm.rb +1 -0
  36. data/test/agent_helper.rb +20 -5
  37. data/test/environments/lib/environments/runner.rb +1 -0
  38. data/test/helpers/file_searching.rb +28 -0
  39. data/test/multiverse/lib/multiverse/suite.rb +36 -19
  40. data/test/multiverse/suites/agent_only/collector_exception_handling_test.rb +49 -0
  41. data/test/multiverse/suites/agent_only/http_response_code_test.rb +2 -2
  42. data/test/multiverse/suites/agent_only/rum_instrumentation_test.rb +4 -2
  43. data/test/multiverse/suites/agent_only/service_timeout_test.rb +1 -1
  44. data/test/multiverse/suites/agent_only/set_transaction_name_test.rb +7 -4
  45. data/test/multiverse/suites/agent_only/thread_profiling_test.rb +2 -1
  46. data/test/multiverse/suites/rails/error_tracing_test.rb +34 -4
  47. data/test/multiverse/suites/rails/ignore_test.rb +1 -1
  48. data/test/multiverse/suites/rails/request_statistics_test.rb +1 -3
  49. data/test/multiverse/suites/sequel/sequel_instrumentation_test.rb +10 -7
  50. data/test/multiverse/suites/sinatra/ignoring_test.rb +1 -1
  51. data/test/new_relic/agent/agent/start_worker_thread_test.rb +1 -1
  52. data/test/new_relic/agent/agent_logger_test.rb +108 -114
  53. data/test/new_relic/agent/agent_test.rb +139 -21
  54. data/test/new_relic/agent/audit_logger_test.rb +22 -20
  55. data/test/new_relic/agent/autostart_test.rb +3 -2
  56. data/test/new_relic/agent/commands/agent_command_router_test.rb +51 -32
  57. data/test/new_relic/agent/configuration/default_source_test.rb +8 -2
  58. data/test/new_relic/agent/configuration/manager_test.rb +5 -1
  59. data/test/new_relic/agent/configuration/orphan_configuration_test.rb +57 -0
  60. data/test/new_relic/agent/cross_app_monitor_test.rb +10 -26
  61. data/test/new_relic/agent/database_test.rb +32 -0
  62. data/test/new_relic/agent/error_collector_test.rb +33 -16
  63. data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +88 -71
  64. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +2 -2
  65. data/test/new_relic/agent/javascript_instrumentor_test.rb +341 -0
  66. data/test/new_relic/agent/memcache_instrumentation_test.rb +91 -89
  67. data/test/new_relic/agent/method_tracer_test.rb +1 -1
  68. data/test/new_relic/agent/obfuscator_test.rb +77 -0
  69. data/test/new_relic/agent/pipe_channel_manager_test.rb +5 -5
  70. data/test/new_relic/agent/pipe_service_test.rb +1 -1
  71. data/test/new_relic/agent/request_sampler_test.rb +21 -11
  72. data/test/new_relic/agent/sql_sampler_test.rb +52 -8
  73. data/test/new_relic/agent/stats_engine/metric_stats_test.rb +6 -6
  74. data/test/new_relic/agent/stats_engine_test.rb +18 -2
  75. data/test/new_relic/agent/transaction_sampler_test.rb +98 -53
  76. data/test/new_relic/agent/transaction_state_test.rb +44 -0
  77. data/test/new_relic/agent/transaction_test.rb +1 -1
  78. data/test/new_relic/agent/transaction_timings_test.rb +15 -5
  79. data/test/new_relic/agent/worker_loop_test.rb +0 -9
  80. data/test/new_relic/agent_test.rb +9 -21
  81. data/test/new_relic/data_container_tests.rb +72 -0
  82. data/test/new_relic/fake_collector.rb +69 -20
  83. data/test/new_relic/http_client_test_cases.rb +17 -2
  84. data/test/new_relic/license_test.rb +6 -15
  85. data/test/new_relic/multiverse_helpers.rb +2 -3
  86. data/test/new_relic/rack/browser_monitoring_test.rb +15 -37
  87. data/test/new_relic/transaction_sample_test.rb +92 -62
  88. data/test/performance/suites/rum_autoinsertion.rb +0 -3
  89. data/test/rum/x_ua_meta_tag_spaces_around_equals.result.html +10 -0
  90. data/test/rum/x_ua_meta_tag_spaces_around_equals.source.html +10 -0
  91. data/test/test_helper.rb +9 -5
  92. metadata +29 -11
  93. metadata.gz.sig +0 -0
  94. data/lib/new_relic/agent/beacon_configuration.rb +0 -37
  95. data/lib/new_relic/agent/browser_monitoring.rb +0 -257
  96. data/test/new_relic/agent/beacon_configuration_test.rb +0 -44
  97. data/test/new_relic/agent/browser_monitoring_test.rb +0 -474
@@ -11,7 +11,7 @@ class NewRelic::Agent::TransactionTest < Test::Unit::TestCase
11
11
  def setup
12
12
  @txn = NewRelic::Agent::Transaction.new
13
13
  @stats_engine = NewRelic::Agent.instance.stats_engine
14
- @stats_engine.reset_stats
14
+ @stats_engine.reset!
15
15
  end
16
16
 
17
17
  def teardown
@@ -13,6 +13,21 @@ module NewRelic::Agent
13
13
  @name = "Name"
14
14
  end
15
15
 
16
+ def test_transaction_name
17
+ t = TransactionTimings.new(nil, nil, @name)
18
+ assert_equal "Name", t.transaction_name
19
+ end
20
+
21
+ def test_transaction_name_or_unknown
22
+ t = TransactionTimings.new(nil, nil, @name)
23
+ assert_equal "Name", t.transaction_name_or_unknown
24
+ end
25
+
26
+ def test_transaction_name_or_unknown_when_nil
27
+ t = TransactionTimings.new(nil, nil, nil)
28
+ assert_equal "(unknown)", t.transaction_name_or_unknown
29
+ end
30
+
16
31
  def test_queue_time_nil
17
32
  t = TransactionTimings.new(nil, @start_time, @name)
18
33
  assert_equal 0.0, t.queue_time_in_millis
@@ -65,11 +80,6 @@ module NewRelic::Agent
65
80
  assert_equal original, later
66
81
  end
67
82
 
68
- def test_transaction_name
69
- t = TransactionTimings.new(nil, nil, @name)
70
- assert_equal "Name", t.transaction_name
71
- end
72
-
73
83
  def test_clamp_to_positive
74
84
  t = TransactionTimings.new(nil, nil, nil)
75
85
  assert_equal(0.0, t.clamp_to_positive(-1), "should clamp a negative value to zero")
@@ -71,15 +71,6 @@ class NewRelic::Agent::WorkerLoopTest < Test::Unit::TestCase
71
71
  end
72
72
  end
73
73
 
74
- def test_task_error__server
75
- expects_no_logging(:error)
76
- expects_logging(:debug, any_parameters)
77
- @worker_loop.run(0) do
78
- @worker_loop.stop
79
- raise NewRelic::Agent::ServerError, "Runtime Error Test"
80
- end
81
- end
82
-
83
74
  def test_worker_loop_propagates_errors_given_the_option
84
75
  @worker_loop = NewRelic::Agent::WorkerLoop.new(
85
76
  :limit => 2,
@@ -66,7 +66,7 @@ module NewRelic
66
66
 
67
67
  def test_reset_stats
68
68
  mock_agent = mocked_agent
69
- mock_agent.expects(:reset_stats)
69
+ mock_agent.expects(:drop_buffered_data)
70
70
  NewRelic::Agent.reset_stats
71
71
  end
72
72
 
@@ -88,18 +88,6 @@ module NewRelic
88
88
  NewRelic::Agent.shutdown
89
89
  end
90
90
 
91
- def test_browser_timing_header
92
- agent = mocked_agent
93
- agent.expects(:browser_timing_header)
94
- NewRelic::Agent.browser_timing_header
95
- end
96
-
97
- def test_browser_timing_footer
98
- agent = mocked_agent
99
- agent.expects(:browser_timing_footer)
100
- NewRelic::Agent.browser_timing_footer
101
- end
102
-
103
91
  def test_get_stats
104
92
  agent = mocked_agent
105
93
  mock_stats_engine = mock('stats_engine')
@@ -268,7 +256,7 @@ module NewRelic
268
256
 
269
257
  def test_set_transaction_name
270
258
  engine = NewRelic::Agent.instance.stats_engine
271
- engine.reset_stats
259
+ engine.reset!
272
260
  Transactor.new.txn do
273
261
  NewRelic::Agent.set_transaction_name('new_name')
274
262
  end
@@ -281,7 +269,7 @@ module NewRelic
281
269
 
282
270
  def test_get_transaction_name_returns_the_default_txn_name
283
271
  engine = NewRelic::Agent.instance.stats_engine
284
- engine.reset_stats
272
+ engine.reset!
285
273
  Transactor.new.txn do
286
274
  assert_equal 'NewRelic::MainAgentTest::Transactor/txn', NewRelic::Agent.get_transaction_name
287
275
  end
@@ -289,7 +277,7 @@ module NewRelic
289
277
 
290
278
  def test_get_transaction_name_returns_what_I_set
291
279
  engine = NewRelic::Agent.instance.stats_engine
292
- engine.reset_stats
280
+ engine.reset!
293
281
  Transactor.new.txn do
294
282
  NewRelic::Agent.set_transaction_name('a_new_name')
295
283
  assert_equal 'a_new_name', NewRelic::Agent.get_transaction_name
@@ -298,7 +286,7 @@ module NewRelic
298
286
 
299
287
  def test_get_txn_name_and_set_txn_name_preserves_category
300
288
  engine = NewRelic::Agent.instance.stats_engine
301
- engine.reset_stats
289
+ engine.reset!
302
290
  Transactor.new.txn do
303
291
  NewRelic::Agent.set_transaction_name('a_new_name', :category => :task)
304
292
  new_name = NewRelic::Agent.get_transaction_name + "2"
@@ -309,7 +297,7 @@ module NewRelic
309
297
 
310
298
  def test_set_transaction_name_applies_proper_scopes
311
299
  engine = NewRelic::Agent.instance.stats_engine
312
- engine.reset_stats
300
+ engine.reset!
313
301
  Transactor.new.txn do
314
302
  trace_execution_scoped('Custom/something') {}
315
303
  NewRelic::Agent.set_transaction_name('new_name')
@@ -327,7 +315,7 @@ module NewRelic
327
315
 
328
316
  def test_set_transaction_name_gracefully_fails_when_frozen
329
317
  engine = NewRelic::Agent.instance.stats_engine
330
- engine.reset_stats
318
+ engine.reset!
331
319
  Transactor.new.txn do
332
320
  NewRelic::Agent::Transaction.current.freeze_name
333
321
  NewRelic::Agent.set_transaction_name('new_name')
@@ -337,7 +325,7 @@ module NewRelic
337
325
 
338
326
  def test_set_transaction_name_applies_category
339
327
  engine = NewRelic::Agent.instance.stats_engine
340
- engine.reset_stats
328
+ engine.reset!
341
329
  Transactor.new.txn do
342
330
  NewRelic::Agent.set_transaction_name('new_name', :category => :task)
343
331
  end
@@ -354,7 +342,7 @@ module NewRelic
354
342
 
355
343
  def test_set_transaction_name_uses_current_txn_category_default
356
344
  engine = NewRelic::Agent.instance.stats_engine
357
- engine.reset_stats
345
+ engine.reset!
358
346
  Transactor.new.task_txn do
359
347
  NewRelic::Agent.set_transaction_name('new_name')
360
348
  end
@@ -0,0 +1,72 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+
5
+ # To use this module to test your new data container, implement the following
6
+ # methods before including it:
7
+ #
8
+ # create_container -> create an instance of your data container class
9
+ # populate_container(container, n) -> populate the container with n items
10
+ #
11
+ # If your container can only hold a fixed number of data items, you can also
12
+ # implement #max_data_items to return the number of data items that it should be
13
+ # populated with for the purposes of testing.
14
+
15
+ module NewRelic
16
+ module BasicDataContainerTests
17
+ def num_data_items
18
+ self.respond_to?(:max_data_items) ? max_data_items : 5
19
+ end
20
+
21
+ def test_harvest_should_return_all_data_items
22
+ c = create_container
23
+ populate_container(c, num_data_items)
24
+ results = c.harvest!
25
+ assert_equal(num_data_items, results.size)
26
+ end
27
+
28
+ def test_calling_harvest_again_should_not_return_items_again
29
+ c = create_container
30
+ populate_container(c, num_data_items)
31
+
32
+ c.harvest! # clears container
33
+ results = c.harvest!
34
+ assert_equal(0, results.size)
35
+ end
36
+
37
+ def test_calling_harvest_after_re_populating_works
38
+ c = create_container
39
+ populate_container(c, num_data_items)
40
+ assert_equal(num_data_items, c.harvest!.size)
41
+
42
+ populate_container(c, num_data_items)
43
+ assert_equal(num_data_items, c.harvest!.size)
44
+ end
45
+
46
+ def test_should_respond_to_required_methods
47
+ c = create_container
48
+ assert c.respond_to?(:harvest!)
49
+ assert c.respond_to?(:reset!)
50
+ assert c.respond_to?(:merge!)
51
+ end
52
+ end
53
+
54
+ module DataContainerTests
55
+ include BasicDataContainerTests
56
+
57
+ def test_reset_should_clear_stored_items
58
+ c = create_container
59
+ populate_container(c, 5)
60
+ c.reset!
61
+ assert_equal(0, c.harvest!.size)
62
+ end
63
+
64
+ def test_merge_should_re_integrate_items
65
+ c = create_container
66
+ populate_container(c, 5)
67
+ c.merge!(c.harvest!)
68
+ results = c.harvest!
69
+ assert_equal(5, results.size)
70
+ end
71
+ end
72
+ end
@@ -14,23 +14,61 @@ require 'json' if RUBY_VERSION >= '1.9'
14
14
 
15
15
  module NewRelic
16
16
  class FakeCollector < FakeServer
17
+ class Response
18
+ attr_reader :status, :body
19
+
20
+ def initialize(status, body)
21
+ @default_status = status
22
+ @default_body = body
23
+ @remaining = nil
24
+ revert
25
+ end
26
+
27
+ def override(status, body)
28
+ @status = status
29
+ @body = body
30
+ self
31
+ end
32
+
33
+ def revert
34
+ @status = @default_status
35
+ @body = @default_body
36
+ @remaining = nil
37
+ end
38
+
39
+ def once
40
+ @remaining = 1
41
+ self
42
+ end
43
+
44
+ def evaluate
45
+ if @remaining == 0
46
+ revert
47
+ elsif @remaining
48
+ @remaining -= 1
49
+ end
50
+ resolved_body = @body.respond_to?(:call) ? @body.call : @body
51
+ [@status, resolved_body]
52
+ end
53
+ end
54
+
17
55
  attr_accessor :agent_data, :mock
18
56
 
19
57
  def initialize
20
58
  super
21
59
  @id_counter = 0
22
- @base_expectations = {
23
- 'get_redirect_host' => [200, {'return_value' => 'localhost'}],
24
- 'connect' => [200, {'return_value' => {"agent_run_id" => agent_run_id}}],
25
- 'get_agent_commands' => [200, {'return_value' => []}],
26
- 'agent_command_results' => [200, {'return_value' => []}],
27
- 'metric_data' => [200, {'return_value' => [[{'name' => 'Some/Metric/Spec'}, 1]]}],
28
- 'sql_trace_data' => [200, {'return_value' => nil}],
29
- 'transaction_sample_data' => [200, {'return_value' => nil}],
30
- 'error_data' => [200, {'return_value' => nil}],
31
- 'profile_data' => [200, {'return_value' => nil}],
32
- 'shutdown' => [200, {'return_value' => nil}],
33
- 'analytic_event_data' => [200, {'return_value' => nil}]
60
+ @mock = {
61
+ 'get_redirect_host' => Response.new(200, {'return_value' => 'localhost'}),
62
+ 'connect' => Response.new(200, Proc.new { {'return_value' => {"agent_run_id" => agent_run_id}} }),
63
+ 'get_agent_commands' => Response.new(200, {'return_value' => []}),
64
+ 'agent_command_results' => Response.new(200, {'return_value' => []}),
65
+ 'metric_data' => Response.new(200, {'return_value' => [[{'name' => 'Some/Metric/Spec'}, 1]]}),
66
+ 'sql_trace_data' => Response.new(200, {'return_value' => nil}),
67
+ 'transaction_sample_data' => Response.new(200, {'return_value' => nil}),
68
+ 'error_data' => Response.new(200, {'return_value' => nil}),
69
+ 'profile_data' => Response.new(200, {'return_value' => nil}),
70
+ 'shutdown' => Response.new(200, {'return_value' => nil}),
71
+ 'analytic_event_data' => Response.new(200, {'return_value' => nil}),
34
72
  }
35
73
  reset
36
74
  end
@@ -40,13 +78,23 @@ module NewRelic
40
78
  end
41
79
 
42
80
  def reset
43
- @mock = @base_expectations.dup
81
+ @mock.each_value(&:revert)
44
82
  @id_counter = 0
45
83
  @agent_data = []
46
84
  end
47
85
 
86
+ def default_response
87
+ Response.new(200, {'return_value' => nil})
88
+ end
89
+
48
90
  def stub(method, return_value, status=200)
49
- self.mock[method] = [status, {'return_value' => return_value}]
91
+ self.mock[method] ||= default_response
92
+ self.mock[method].override(status, {'return_value' => return_value})
93
+ end
94
+
95
+ def stub_exception(method, exception, status=200)
96
+ self.mock[method] ||= default_response
97
+ self.mock[method].override(status, {'exception' => exception})
50
98
  end
51
99
 
52
100
  def call(env)
@@ -58,11 +106,12 @@ module NewRelic
58
106
  method = $1
59
107
  format = json_format?(uri) && RUBY_VERSION >= '1.9' ? :json : :pruby
60
108
  if @mock.keys.include? method
61
- res.status = @mock[method][0]
109
+ status, body = @mock[method].evaluate
110
+ res.status = status
62
111
  if format == :json
63
- res.write JSON.dump(@mock[method][1])
112
+ res.write JSON.dump(body)
64
113
  else
65
- res.write Marshal.dump(@mock[method][1])
114
+ res.write Marshal.dump(body)
66
115
  end
67
116
  else
68
117
  res.status = 500
@@ -285,7 +334,7 @@ if $0 == __FILE__
285
334
  end
286
335
 
287
336
  def test_get_redirect
288
- @collector.mock['get_redirect_host'] = [200, 'test.example.com']
337
+ @collector.mock['get_redirect_host'].evaluate = [200, 'test.example.com']
289
338
  response = invoke('get_redirect_host')
290
339
 
291
340
  assert_equal 'test.example.com', response
@@ -401,9 +450,9 @@ if $0 == __FILE__
401
450
  end
402
451
 
403
452
  def test_reset
404
- @collector.mock['get_redirect_host'] = [200, 'never!']
453
+ @collector.mock['get_redirect_host'].evaluate = [200, 'never!']
405
454
  @collector.reset
406
- assert_equal [200, 'localhost'], @collector.mock['get_redirect_host']
455
+ assert_equal [200, 'localhost'], @collector.mock['get_redirect_host'].evaluate
407
456
  end
408
457
 
409
458
  def invoke(method, post={}, code=200)
@@ -10,7 +10,6 @@ require 'multiverse_helpers'
10
10
 
11
11
  module HttpClientTestCases
12
12
  include NewRelic::Agent::Instrumentation::ControllerInstrumentation,
13
- NewRelic::Agent::CrossAppMonitor::EncodingFunctions,
14
13
  NewRelic::Agent::CrossAppTracing,
15
14
  MultiverseHelpers
16
15
 
@@ -305,6 +304,21 @@ module HttpClientTestCases
305
304
  assert_equal false, server.requests.last.keys.any? {|k| k =~ /NEWRELIC_ID/}
306
305
  end
307
306
 
307
+ def test_agent_doesnt_add_a_request_header_if_empty_cross_process_id
308
+ with_config(:'cross_application_tracer.enabled' => true,
309
+ :cross_process_id => "") do
310
+ get_response
311
+ assert_equal false, server.requests.last.keys.any? {|k| k =~ /NEWRELIC_ID/}
312
+ end
313
+ end
314
+
315
+ def test_agent_doesnt_add_a_request_header_if_empty_encoding_key
316
+ with_config(:'cross_application_tracer.enabled' => true,
317
+ :encoding_key => "") do
318
+ get_response
319
+ assert_equal false, server.requests.last.keys.any? {|k| k =~ /NEWRELIC_ID/}
320
+ end
321
+ end
308
322
 
309
323
  def test_instrumentation_with_crossapp_enabled_records_normal_metrics_if_no_header_present
310
324
  @nr_header = ""
@@ -491,7 +505,8 @@ module HttpClientTestCases
491
505
  end
492
506
 
493
507
  def make_app_data_payload( *args )
494
- return obfuscate_with_key( 'gringletoes', args.to_json ).gsub( /\n/, '' ) + "\n"
508
+ obfuscator = NewRelic::Agent::Obfuscator.new('gringletoes')
509
+ return obfuscator.obfuscate( args.to_json ) + "\n"
495
510
  end
496
511
 
497
512
  end
@@ -7,6 +7,7 @@ require File.expand_path(File.join(File.dirname(__FILE__),'..','test_helper'))
7
7
  # look through the source code to enforce some simple rules that help us keep
8
8
  # our license data up to date.
9
9
  class LicenseTest < Test::Unit::TestCase
10
+ include NewRelic::TestHelpers::FileSearching
10
11
 
11
12
  # A list of regexs that will likely match license info
12
13
  LICENSE_TERMS = {
@@ -45,20 +46,6 @@ class LicenseTest < Test::Unit::TestCase
45
46
  ['/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr_request_handler.rb', 'Apache'] => 1, # parse apache solr metrics
46
47
  }
47
48
 
48
- def all_rb_and_js_files
49
- pattern = File.expand_path(gem_root + "/**/*.{rb,js}")
50
- Dir[pattern]
51
- end
52
-
53
- def all_files
54
- pattern = File.expand_path(gem_root + "/**/*")
55
- Dir[pattern]
56
- end
57
-
58
- def gem_root
59
- File.expand_path(File.dirname(__FILE__) + "/../../")
60
- end
61
-
62
49
  def shebang
63
50
  /^#!/
64
51
  end
@@ -92,7 +79,11 @@ class LicenseTest < Test::Unit::TestCase
92
79
  all_rb_and_js_files.each do |filename|
93
80
  next if should_skip?(filename)
94
81
 
95
- first_four_lines = File.read(filename, 1000).split("\n")[0...4]
82
+ first_thousand_bytes = File.read(filename, 1000)
83
+ assert_not_nil first_thousand_bytes, "#{filename} is shorter than 1000 bytes."
84
+
85
+ first_four_lines = first_thousand_bytes.split("\n")[0...4]
86
+
96
87
  if first_four_lines.first =~ shebang
97
88
  first_four_lines.shift # discard it
98
89
  end
@@ -56,10 +56,9 @@ module MultiverseHelpers
56
56
  NewRelic::Agent.instance.stats_engine.metric_rules.rules.clear
57
57
 
58
58
  # Clear out lingering stats we didn't transmit
59
- NewRelic::Agent.instance.reset_stats
59
+ NewRelic::Agent.drop_buffered_data
60
60
 
61
- # Clear out lingering errors in the collector
62
- NewRelic::Agent.instance.error_collector.harvest_errors
61
+ # Clear the error collector's ignore_filter
63
62
  NewRelic::Agent.instance.error_collector.instance_variable_set(:@ignore_filter, nil)
64
63
 
65
64
  # Clean up any thread-local variables starting with 'newrelic'