wd_newrelic_rpm 3.5.5 → 3.5.6

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 (146) hide show
  1. data/.gitignore +2 -0
  2. data/CHANGELOG +60 -0
  3. data/Rakefile +14 -18
  4. data/gem-public_cert.pem +20 -0
  5. data/lib/new_relic/agent.rb +3 -0
  6. data/lib/new_relic/agent/agent.rb +86 -97
  7. data/lib/new_relic/agent/agent_logger.rb +9 -1
  8. data/lib/new_relic/agent/busy_calculator.rb +5 -0
  9. data/lib/new_relic/agent/configuration/defaults.rb +3 -3
  10. data/lib/new_relic/agent/configuration/manager.rb +12 -0
  11. data/lib/new_relic/agent/configuration/mask_defaults.rb +1 -0
  12. data/lib/new_relic/agent/configuration/yaml_source.rb +5 -1
  13. data/lib/new_relic/agent/cross_process_monitoring.rb +164 -20
  14. data/lib/new_relic/agent/error_collector.rb +13 -2
  15. data/lib/new_relic/agent/event_listener.rb +39 -0
  16. data/lib/new_relic/agent/instrumentation/browser_monitoring_timings.rb +18 -8
  17. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +1 -1
  18. data/lib/new_relic/agent/instrumentation/sinatra.rb +8 -1
  19. data/lib/new_relic/agent/new_relic_service.rb +90 -10
  20. data/lib/new_relic/agent/pipe_service.rb +9 -0
  21. data/lib/new_relic/agent/sql_sampler.rb +10 -3
  22. data/lib/new_relic/agent/stats_engine/transactions.rb +1 -0
  23. data/lib/new_relic/agent/thread_profiler.rb +20 -7
  24. data/lib/new_relic/agent/worker_loop.rb +2 -1
  25. data/lib/new_relic/coerce.rb +37 -0
  26. data/lib/new_relic/commands/deployments.rb +1 -1
  27. data/lib/new_relic/control/frameworks/rails.rb +29 -5
  28. data/lib/new_relic/control/frameworks/rails3.rb +2 -11
  29. data/lib/new_relic/control/instance_methods.rb +11 -7
  30. data/lib/new_relic/control/server_methods.rb +5 -37
  31. data/lib/new_relic/latest_changes.rb +31 -0
  32. data/lib/new_relic/local_environment.rb +1 -1
  33. data/lib/new_relic/metric_data.rb +13 -2
  34. data/lib/new_relic/noticed_error.rb +8 -1
  35. data/lib/new_relic/rack/agent_hooks.rb +20 -0
  36. data/lib/new_relic/rack/error_collector.rb +11 -1
  37. data/lib/new_relic/recipes.rb +32 -10
  38. data/lib/new_relic/transaction_sample.rb +12 -3
  39. data/lib/new_relic/transaction_sample/segment.rb +6 -3
  40. data/lib/new_relic/version.rb +10 -15
  41. data/newrelic.yml +12 -19
  42. data/newrelic_rpm.gemspec +22 -464
  43. data/test/multiverse/.gitignore +1 -0
  44. data/test/multiverse/lib/multiverse/environment.rb +1 -1
  45. data/test/multiverse/lib/multiverse/suite.rb +2 -0
  46. data/test/multiverse/suites/active_record/Envfile +3 -3
  47. data/test/multiverse/suites/active_record/ar_method_aliasing.rb +1 -1
  48. data/test/multiverse/suites/active_record/config/newrelic.yml +2 -2
  49. data/test/multiverse/suites/agent_only/Envfile +2 -1
  50. data/test/multiverse/suites/agent_only/config/newrelic.yml +3 -1
  51. data/test/multiverse/suites/agent_only/cross_process_test.rb +56 -0
  52. data/test/multiverse/suites/{logging → agent_only}/logging_test.rb +42 -22
  53. data/test/multiverse/suites/agent_only/no_dns_resolv.rb +17 -0
  54. data/test/multiverse/suites/{rum_auto_instrumentation/sanity_test.rb → agent_only/rum_instrumentation_test.rb} +25 -46
  55. data/test/multiverse/suites/agent_only/service_timeout_test.rb +6 -3
  56. data/test/multiverse/suites/agent_only/ssl_test.rb +22 -0
  57. data/test/multiverse/suites/{no_load → agent_only}/start_up_test.rb +9 -2
  58. data/test/multiverse/suites/agent_only/testing_app.rb +17 -0
  59. data/test/multiverse/suites/agent_only/thread_profiling_test.rb +6 -5
  60. data/test/multiverse/suites/datamapper/config/newrelic.yml +1 -1
  61. data/test/multiverse/suites/{rails_3_queue_time → rails}/Envfile +3 -0
  62. data/test/multiverse/suites/rails/app.rb +49 -0
  63. data/test/multiverse/suites/{rails_3_views → rails}/app/views/foos/_foo.html.haml +0 -0
  64. data/test/multiverse/suites/{rails_3_views/app/views/test → rails/app/views/views}/_a_partial.html.erb +0 -0
  65. data/test/multiverse/suites/{rails_3_views/app/views/test → rails/app/views/views}/_mid_partial.html.erb +0 -0
  66. data/test/multiverse/suites/{rails_3_views/app/views/test → rails/app/views/views}/_top_partial.html.erb +0 -0
  67. data/test/multiverse/suites/{rails_3_views/app/views/test → rails/app/views/views}/deep_partial.html.erb +0 -0
  68. data/test/multiverse/suites/{rails_3_views/app/views/test → rails/app/views/views}/haml_view.html.haml +0 -0
  69. data/test/multiverse/suites/{rails_3_views/app/views/test → rails/app/views/views}/index.html.erb +0 -0
  70. data/test/multiverse/suites/rails/config/newrelic.yml +32 -0
  71. data/test/multiverse/suites/{rails_3_error_tracing → rails}/error_tracing_test.rb +51 -88
  72. data/test/multiverse/suites/rails/gc_instrumentation_test.rb +79 -0
  73. data/test/multiverse/suites/{rails_3_queue_time → rails}/queue_time_test.rb +3 -23
  74. data/test/multiverse/suites/{rails_3_views → rails}/view_instrumentation_test.rb +21 -61
  75. data/test/multiverse/suites/resque/Envfile +7 -4
  76. data/test/multiverse/suites/resque/Rakefile +8 -0
  77. data/test/multiverse/suites/resque/config/newrelic.yml +1 -1
  78. data/test/multiverse/suites/resque/instrumentation_test.rb +118 -41
  79. data/test/multiverse/suites/resque/resque_setup.rb +15 -0
  80. data/test/multiverse/suites/sinatra/config/newrelic.yml +1 -2
  81. data/test/multiverse/suites/sinatra/sinatra_error_tracing_test.rb +38 -0
  82. data/test/multiverse/suites/sinatra/sinatra_test.rb +17 -0
  83. data/test/multiverse/test/suite_examples/one/a/config/newrelic.yml +1 -1
  84. data/test/multiverse/test/suite_examples/one/b/config/newrelic.yml +1 -1
  85. data/test/new_relic/agent/agent/connect_test.rb +24 -100
  86. data/test/new_relic/agent/agent/start_worker_thread_test.rb +3 -3
  87. data/test/new_relic/agent/agent_test.rb +126 -31
  88. data/test/new_relic/agent/browser_monitoring_test.rb +1 -1
  89. data/test/new_relic/agent/busy_calculator_test.rb +8 -0
  90. data/test/new_relic/agent/configuration/manager_test.rb +28 -0
  91. data/test/new_relic/agent/configuration/yaml_source_test.rb +12 -2
  92. data/test/new_relic/agent/cross_process_monitoring_test.rb +144 -31
  93. data/test/new_relic/agent/error_collector_test.rb +16 -0
  94. data/test/new_relic/agent/event_listener_test.rb +46 -0
  95. data/test/new_relic/agent/instrumentation/browser_monitoring_timings_test.rb +57 -30
  96. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +1 -0
  97. data/test/new_relic/agent/new_relic_service_test.rb +95 -2
  98. data/test/new_relic/agent/pipe_channel_manager_test.rb +3 -3
  99. data/test/new_relic/agent/pipe_service_test.rb +21 -1
  100. data/test/new_relic/agent/rpm_agent_test.rb +1 -1
  101. data/test/new_relic/agent/sql_sampler_test.rb +20 -0
  102. data/test/new_relic/agent/thread_profiler_test.rb +53 -8
  103. data/test/new_relic/agent/worker_loop_test.rb +19 -16
  104. data/test/new_relic/agent_test.rb +1 -2
  105. data/test/new_relic/coerce_test.rb +65 -0
  106. data/test/new_relic/command/deployments_test.rb +1 -1
  107. data/test/new_relic/control_test.rb +23 -44
  108. data/test/new_relic/fake_collector.rb +34 -6
  109. data/test/new_relic/local_environment_test.rb +1 -1
  110. data/test/new_relic/metric_data_test.rb +29 -0
  111. data/test/new_relic/noticed_error_test.rb +8 -0
  112. data/test/new_relic/rack/agent_hooks_test.rb +30 -0
  113. data/test/new_relic/rack/error_collector_test.rb +16 -0
  114. data/test/new_relic/transaction_sample/segment_test.rb +7 -0
  115. data/test/new_relic/transaction_sample_test.rb +36 -8
  116. data/test/new_relic/version_number_test.rb +6 -30
  117. data/test/script/ci.sh +6 -5
  118. data/test/test_contexts.rb +2 -1
  119. data/test/test_helper.rb +23 -6
  120. data/ui/helpers/google_pie_chart.rb +1 -0
  121. metadata +68 -67
  122. data/newrelic_rpm.gemspec.erb +0 -54
  123. data/test/fixtures/gemspec_no_build.rb +0 -442
  124. data/test/fixtures/gemspec_with_build.rb +0 -442
  125. data/test/fixtures/gemspec_with_build_and_stage.rb +0 -442
  126. data/test/multiverse/suites/logging/Envfile +0 -4
  127. data/test/multiverse/suites/logging/config/newrelic.yml +0 -22
  128. data/test/multiverse/suites/monitor_mode_false/Envfile +0 -2
  129. data/test/multiverse/suites/monitor_mode_false/config/newrelic.yml +0 -25
  130. data/test/multiverse/suites/monitor_mode_false/no_dns_resolv.rb +0 -29
  131. data/test/multiverse/suites/no_load/Envfile +0 -2
  132. data/test/multiverse/suites/no_load/config/newrelic.yml +0 -22
  133. data/test/multiverse/suites/rails_3_error_tracing/Envfile +0 -15
  134. data/test/multiverse/suites/rails_3_error_tracing/config/newrelic.yml +0 -165
  135. data/test/multiverse/suites/rails_3_gc/Envfile +0 -8
  136. data/test/multiverse/suites/rails_3_gc/config/newrelic.yml +0 -167
  137. data/test/multiverse/suites/rails_3_gc/instrumentation_test.rb +0 -92
  138. data/test/multiverse/suites/rails_3_queue_time/config/newrelic.yml +0 -165
  139. data/test/multiverse/suites/rails_3_views/.gitignore +0 -3
  140. data/test/multiverse/suites/rails_3_views/Envfile +0 -16
  141. data/test/multiverse/suites/rails_3_views/config/newrelic.yml +0 -164
  142. data/test/multiverse/suites/resque/dump.rdb +0 -0
  143. data/test/multiverse/suites/rum_auto_instrumentation/Envfile +0 -4
  144. data/test/multiverse/suites/rum_auto_instrumentation/config/newrelic.yml +0 -24
  145. data/test/multiverse/suites/rum_auto_instrumentation/responses/worst_case_small.html +0 -5000
  146. data/test/new_relic/fake_service.rb +0 -53
@@ -8,3 +8,4 @@ Gemfile.lock
8
8
  .idea
9
9
  tags
10
10
  *.sqlite3
11
+ *.pid
@@ -4,7 +4,7 @@ module Multiverse
4
4
  ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
5
5
  $: << File.expand_path(File.join(ROOT, 'lib'))
6
6
 
7
- # Include from our unit testing path to share fake_collector and fake_service
7
+ # Include from our unit testing path to share fake_collector
8
8
  $: << File.expand_path(File.join(ROOT, '..', 'new_relic'))
9
9
 
10
10
  SUITES_DIRECTORY = ENV['SUITES_DIRECTORY'] || File.join(ROOT, '/suites')
@@ -56,6 +56,8 @@ module Multiverse
56
56
  if RUBY_VERSION > '1.8.7'
57
57
  f.puts " gem 'test-unit', :require => 'test/unit'"
58
58
  f.puts " gem 'debugger'" if include_debugger
59
+ else
60
+ f.puts " gem 'ruby-debug'" if include_debugger
59
61
  end
60
62
  end
61
63
  puts yellow("Gemfile set to:") if verbose?
@@ -2,12 +2,12 @@ gemfile <<-RB
2
2
  if RUBY_VERSION == '1.8.6'
3
3
  gem 'activerecord', '2.3.14'
4
4
  elsif RUBY_PLATFORM == 'java'
5
- gem 'jdbc-sqlite3'
6
- gem 'activerecord-jdbcsqlite3-adapter'
5
+ gem 'activerecord-jdbcsqlite3-adapter', '1.2.2.1'
6
+ gem 'jdbc-sqlite3', '3.7.2'
7
7
  gem 'activerecord'
8
8
  else
9
9
  gem 'activerecord'
10
- gem 'sqlite3'
10
+ gem 'sqlite3', '~> 1.3.5'
11
11
  end
12
12
 
13
13
  RB
@@ -13,7 +13,7 @@ class InstrumentActiveRecordMethods < Test::Unit::TestCase
13
13
  if RUBY_VERSION >= '1.8.7'
14
14
  if RUBY_PLATFORM == 'java'
15
15
  require 'jdbc/sqlite3'
16
- @@adapter = 'jdbcsqlite3'
16
+ @@adapter = 'sqlite3'
17
17
  else
18
18
  require 'sqlite3'
19
19
  @@adapter = 'sqlite3'
@@ -11,8 +11,8 @@ development:
11
11
  app_name: test
12
12
  host: 127.0.0.1
13
13
  api_host: 127.0.0.1
14
- port: 30303
15
- transaction_tracer:
14
+ port: <%= 30_000 + ($$ % 10_000) %>
15
+ transaction_trace:
16
16
  record_sql: obfuscated
17
17
  enabled: true
18
18
  stack_trace_threshold: 0.5
@@ -1,4 +1,5 @@
1
1
  gemfile <<-RB
2
2
  gem 'rack'
3
+ gem 'rack-test'
3
4
  gem 'mocha', '< 0.13'
4
- RB
5
+ RB
@@ -11,7 +11,7 @@ development:
11
11
  app_name: test
12
12
  host: 127.0.0.1
13
13
  api_host: 127.0.0.1
14
- port: 30303
14
+ port: <%= 30_000 + ($$ % 10_000) %>
15
15
  transaction_tracer:
16
16
  record_sql: obfuscated
17
17
  enabled: true
@@ -20,3 +20,5 @@ development:
20
20
  capture_params: false
21
21
  log_level: debug
22
22
  log_file_path: agent.log
23
+ browser_monitoring:
24
+ auto_instrument: true
@@ -0,0 +1,56 @@
1
+ require 'rack/test'
2
+ require 'fake_collector'
3
+ require './testing_app'
4
+
5
+ class CrossProcessTest < Test::Unit::TestCase
6
+
7
+ # Important because the hooks are global that we only wire one AgentHooks up
8
+ @@app = TestingApp.new
9
+ @@wrapper_app = NewRelic::Rack::AgentHooks.new(@@app)
10
+
11
+ def setup
12
+ $collector ||= NewRelic::FakeCollector.new
13
+ $collector.reset
14
+ $collector.mock['connect'] = [200, {'return_value' => {"agent_run_id" => 666 }}]
15
+ $collector.run
16
+
17
+ NewRelic::Agent.manual_start(
18
+ :cross_process_id => "boo",
19
+ :encoding_key => "\0",
20
+ :trusted_account_ids => [1])
21
+
22
+ NewRelic::Agent.instance.events.notify(:finished_configuring)
23
+
24
+ @@app.reset_headers
25
+ @@app.response = "<html><head><title>W00t!</title></head><body><p>Hello World</p></body></html>"
26
+ end
27
+
28
+ def teardown
29
+ NewRelic::Agent.shutdown
30
+ end
31
+
32
+ include Rack::Test::Methods
33
+
34
+ def app
35
+ @@wrapper_app
36
+ end
37
+
38
+ def test_cross_process_doesnt_modify_without_header
39
+ get '/'
40
+ assert_nil last_response.headers["X-NewRelic-App-Data"]
41
+ end
42
+
43
+ def test_cross_process_doesnt_modify_with_invalid_header
44
+ get '/', nil, {'X-NewRelic-ID' => Base64.encode64('otherjunk')}
45
+ assert_nil last_response.headers["X-NewRelic-App-Data"]
46
+ end
47
+
48
+ def test_cross_process_writes_out_information
49
+ get '/', nil, {'X-NewRelic-ID' => Base64.encode64('1#234')}
50
+ assert_not_nil last_response.headers["X-NewRelic-App-Data"]
51
+
52
+ metric = NewRelic::Agent.instance.stats_engine.lookup_stats('ClientApplication/1#234/all')
53
+ assert_equal 1, metric.call_count
54
+ end
55
+ end
56
+
@@ -36,27 +36,50 @@ class LoggingTest < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  def test_logs_raw_sql_warning
39
- NewRelic::Agent.config.apply_config(:'transaction_tracer.record_sql' => 'obfuscated')
40
-
41
39
  running_agent_writes_to_log(
42
- {:'transaction_tracer.record_sql' => 'raw'},
43
- "Agent is configured to send raw SQL to the service")
40
+ {:'transaction_tracer.record_sql' => 'obfuscated'},
41
+ "Agent is configured to send raw SQL to the service") do
42
+
43
+ NewRelic::Agent.config.apply_config(:'transaction_tracer.record_sql' => 'raw')
44
+ end
45
+
44
46
  end
45
47
 
46
- def test_logs_if_sending_errors_on_change
47
- NewRelic::Agent.config.apply_config(:'error_collector.enabled' => false)
48
+ def test_logs_ssl_warning
49
+ running_agent_writes_to_log(
50
+ {:ssl => false},
51
+ "Agent is configured not to use SSL when communicating with New Relic's servers") do
52
+
53
+ NewRelic::Agent.config.apply_config(:ssl => false)
54
+ end
55
+ end
48
56
 
57
+ def test_logs_ssl_verify_cert_warning
49
58
  running_agent_writes_to_log(
50
- {:'error_collector.enabled' => true},
51
- "Errors will be sent")
59
+ {:ssl => false, :verify_certificate => false},
60
+ "Agent is configured to use SSL but to skip certificate validation when communicating with New Relic's servers") do
61
+
62
+ NewRelic::Agent.config.apply_config(:ssl => true, :verify_certificate => false)
63
+ end
52
64
  end
53
65
 
54
- def test_logs_if_not_sending_errors_on_change
55
- NewRelic::Agent.config.apply_config(:'error_collector.enabled' => true)
56
66
 
67
+ def test_logs_if_sending_errors_on_change
57
68
  running_agent_writes_to_log(
58
69
  {:'error_collector.enabled' => false},
59
- "Errors will not be sent")
70
+ "Errors will be sent") do
71
+
72
+ NewRelic::Agent.config.apply_config(:'error_collector.enabled' => true)
73
+ end
74
+ end
75
+
76
+ def test_logs_if_not_sending_errors_on_change
77
+ running_agent_writes_to_log(
78
+ {:'error_collector.enabled' => true},
79
+ "Errors will not be sent") do
80
+
81
+ NewRelic::Agent.config.apply_config(:'error_collector.enabled' => false)
82
+ end
60
83
  end
61
84
 
62
85
  def test_logs_transaction_tracing_disabled
@@ -103,8 +126,7 @@ class LoggingTest < Test::Unit::TestCase
103
126
  $collector.run
104
127
 
105
128
  NewRelic::Agent.reset_config
106
- NewRelic::Agent.agent = NewRelic::Agent::Agent.new
107
- NewRelic::Control.instance(true)
129
+ NewRelic::Agent::Agent.instance_variable_set(:@instance, nil)
108
130
 
109
131
  @logger = NewRelic::Agent::MemoryLogger.new
110
132
  NewRelic::Agent.logger = @logger
@@ -113,25 +135,23 @@ class LoggingTest < Test::Unit::TestCase
113
135
 
114
136
  def teardown
115
137
  $collector.reset
138
+
139
+ # Really clear out our agent instance since we set bad license keys
140
+ NewRelic::Agent::Agent.instance_variable_set(:@instance, nil)
116
141
  end
117
142
 
118
143
  # Helpers
119
144
  def running_agent_writes_to_log(options, msg)
120
- run_agent_with(options) do
121
- saw?(msg)
122
- end
145
+ NewRelic::Agent.manual_start(options)
146
+ yield if block_given?
147
+ NewRelic::Agent.shutdown
148
+ saw?(msg)
123
149
  end
124
150
 
125
151
  def with_connect_response(status=200, response={})
126
152
  $collector.mock['connect'] = [status, response]
127
153
  end
128
154
 
129
- def run_agent_with(options = {})
130
- NewRelic::Agent.manual_start(options)
131
- NewRelic::Agent.shutdown
132
- yield
133
- end
134
-
135
155
  def saw?(*expected_messages)
136
156
  flattened = @logger.messages.flatten
137
157
  expected_messages.each do |expected|
@@ -0,0 +1,17 @@
1
+
2
+ class NoDnsResolv < Test::Unit::TestCase
3
+ def test_should_no_resolve_hostname_when_agent_is_disabled
4
+ Resolv.expects(:getaddress).never
5
+ NewRelic::Agent.manual_start(:monitor_mode => false)
6
+ end
7
+
8
+ def setup
9
+ NewRelic::Agent::Agent.instance_variable_set(:@instance, NewRelic::Agent::Agent.new)
10
+ end
11
+
12
+ def teardown
13
+ $collector.reset
14
+ NewRelic::Agent.shutdown
15
+ NewRelic::Agent::Agent.instance_variable_set(:@instance, nil)
16
+ end
17
+ end
@@ -1,68 +1,47 @@
1
- require 'test/unit'
2
- require "rack/test"
1
+ require 'rack/test'
3
2
  require 'new_relic/rack/browser_monitoring'
4
- require 'benchmark'
5
-
6
- class MyApp
7
- # allow tests to set up the response they want.
8
- class << self
9
- def reset_headers
10
- @headers = {'Content-Type' => 'text/html'}
11
- end
12
- attr_accessor :response
13
- attr_accessor :headers
14
- def add_header(key, value)
15
- @headers[key] = value
16
- @headers
17
- end
18
- end
19
-
20
-
21
-
22
- def call(env)
23
- [200, self.class.headers, [self.class.response]]
24
- end
25
- end
26
-
27
- NewRelic::Agent.manual_start(:browser_key => 'browserKey', :application_id => 'appId',
28
- :beacon => 'beacon', :episodes_file => 'this_is_my_file')
29
- NewRelic::Agent.instance.instance_eval do
30
- @beacon_configuration = NewRelic::Agent::BeaconConfiguration.new
31
- end
3
+ require './testing_app'
32
4
 
33
5
  class RumAutoTest < Test::Unit::TestCase
34
- def setup
35
- MyApp.reset_headers
36
- end
37
6
 
7
+ attr_reader :app
38
8
  include Rack::Test::Methods
39
9
 
40
- def app
41
- NewRelic::Rack::BrowserMonitoring.new(MyApp.new)
10
+ def setup
11
+ @inner_app = TestingApp.new
12
+ @app = NewRelic::Rack::BrowserMonitoring.new(@inner_app)
13
+
14
+ NewRelic::Agent.manual_start(:browser_key => 'browserKey', :application_id => 'appId',
15
+ :beacon => 'beacon', :episodes_file => 'this_is_my_file')
16
+ NewRelic::Agent.instance.instance_variable_set(
17
+ :@beacon_configuration, NewRelic::Agent::BeaconConfiguration.new)
42
18
  end
43
19
 
20
+ def teardown
21
+ NewRelic::Agent.shutdown
22
+ end
44
23
 
45
24
  def test_autoinstrumenation_is_active
46
- MyApp.response = "<html><head><title>W00t!</title></head><body><p>Hello World</p></body></html>"
25
+ @inner_app.response = "<html><head><title>W00t!</title></head><body><p>Hello World</p></body></html>"
47
26
  get '/'
48
27
  assert(last_response.body =~ %r|<script|, "response body should include RUM auto instrumentation js:\n #{last_response.body}")
49
28
  assert(last_response.body =~ %r|NREUMQ|, "response body should include RUM auto instrumentation js:\n #{last_response.body}")
50
29
  end
51
30
 
52
31
  def test_autoinstrumenation_with_basic_page_puts_header_at_beggining_of_head
53
- MyApp.response = "<html><head><title>foo</title></head><body><p>Hello World</p></body></html>"
32
+ @inner_app.response = "<html><head><title>foo</title></head><body><p>Hello World</p></body></html>"
54
33
  get '/'
55
34
  assert(last_response.body.include?('<html><head><script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script><title>foo</title></head><body>'))
56
35
  end
57
36
 
58
37
  def test_autoinstrumenation_with_body_only_puts_header_before_body
59
- MyApp.response = "<html><body><p>Hello World</p></body></html>"
38
+ @inner_app.response = "<html><body><p>Hello World</p></body></html>"
60
39
  get '/'
61
40
  assert(last_response.body.include?('<html><script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script><body>'))
62
41
  end
63
42
 
64
43
  def test_autoinstrumenation_with_X_UA_Compatible_puts_header_at_end_of_head
65
- MyApp.response = '<html><head><meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" /></head><body><p>Hello World</p></body></html>'
44
+ @inner_app.response = '<html><head><meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" /></head><body><p>Hello World</p></body></html>'
66
45
  get '/'
67
46
  assert(last_response.body.include?(
68
47
  '<html><head><meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" /><script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script></head><body>'
@@ -71,21 +50,21 @@ class RumAutoTest < Test::Unit::TestCase
71
50
 
72
51
  # regression
73
52
  def test_autoinstrumenation_fails_gracefully_with_X_UA_Compatible_and_no_close_head_tag_puts_header_before_body_tag
74
- MyApp.response = '<html><head><meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" /><body><p>Hello World</p></body></html>'
53
+ @inner_app.response = '<html><head><meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" /><body><p>Hello World</p></body></html>'
75
54
  get '/'
76
55
  assert(!last_response.body.include?(%'NREUMQ'))
77
56
  end
78
57
 
79
58
  def test_autoinstrumenation_doesnt_run_for_crazy_shit_like_this
80
- MyApp.response = '<html><head <body </body>'
59
+ @inner_app.response = '<html><head <body </body>'
81
60
  get '/'
82
61
  assert_equal('<html><head <body </body>', last_response.body)
83
62
  end
84
63
 
85
64
  def test_content_length_is_correctly_set_if_present
86
- MyApp.response = "<html><head><title>W00t!</title></head><body><p>Hello World</p></body></html>"
87
- content_length = MyApp.response.length
88
- MyApp.add_header("Content-Length", content_length)
65
+ @inner_app.response = "<html><head><title>W00t!</title></head><body><p>Hello World</p></body></html>"
66
+ content_length = @inner_app.response.length
67
+ @inner_app.headers["Content-Length"] = content_length
89
68
  get '/'
90
69
  assert(last_response.headers['Content-Length'].to_i > content_length)
91
70
  assert_equal(last_response.body.length.to_s, last_response.headers['Content-Length'])
@@ -93,8 +72,8 @@ class RumAutoTest < Test::Unit::TestCase
93
72
 
94
73
  def test_xml_responses_arent_instrumented
95
74
  body = "<html><head><title>W00t!</title></head><body><p>Hello World</p></body></html>"
96
- MyApp.response = body
97
- MyApp.add_header("Content-Type", "text/xml")
75
+ @inner_app.response = body
76
+ @inner_app.headers["Content-Type"] = "text/xml"
98
77
  get '/'
99
78
  assert_equal(last_response.body, body)
100
79
  end
@@ -1,8 +1,11 @@
1
1
  require 'socket'
2
2
 
3
3
  class ServiceTimeoutTest < Test::Unit::TestCase
4
+
5
+ PORT = 10_000 + ($$ % 10_000)
6
+
4
7
  def setup
5
- hk = TCPServer.new('127.0.0.1',8081)
8
+ hk = TCPServer.new('127.0.0.1',PORT)
6
9
 
7
10
  Thread.new {
8
11
  client = hk.accept
@@ -14,8 +17,8 @@ class ServiceTimeoutTest < Test::Unit::TestCase
14
17
  end
15
18
 
16
19
  def test_service_timeout
17
- server = NewRelic::Control::Server.new('localhost', 8081,'127.0.0.1')
18
- NewRelic::Agent.config.apply_config(:timeout => 2)
20
+ server = NewRelic::Control::Server.new('localhost',PORT,'127.0.0.1')
21
+ NewRelic::Agent.config.apply_config(:timeout => 0.1)
19
22
 
20
23
  service = NewRelic::Agent::NewRelicService.new('deadbeef', server)
21
24
 
@@ -0,0 +1,22 @@
1
+ class SSLTest < Test::Unit::TestCase
2
+
3
+ def setup
4
+ # This is similar to how jruby 1.6.8 behaves when jruby-openssl isn't
5
+ # installed
6
+ @original_ssl_config = NewRelic::Agent.config[:ssl]
7
+ NewRelic::Agent.config.apply_config(:ssl => true)
8
+ NewRelic::Agent.agent = NewRelic::Agent::Agent.new
9
+ Net::HTTPSession.any_instance.stubs('use_ssl=').raises(LoadError)
10
+ end
11
+
12
+ def teardown
13
+ NewRelic::Agent.config.apply_config(:ssl => @original_ssl_config)
14
+ end
15
+
16
+ def test_agent_shuts_down_when_ssl_is_on_but_unavailable
17
+ ::NewRelic::Agent.agent.expects(:shutdown)
18
+ ::NewRelic::Agent.expects(:finish_setup).never
19
+ ::NewRelic::Agent.agent.connect_in_foreground
20
+ ensure
21
+ end
22
+ end
@@ -7,8 +7,15 @@ class StartUpTest < Test::Unit::TestCase
7
7
  cmd = "bundle exec ruby -e '#{ruby}'"
8
8
 
9
9
  sin, sout, serr = Open3.popen3(cmd)
10
+ output = sout.read + serr.read
10
11
 
11
- jruby_noise = "JRuby limited openssl loaded. http://jruby.org/openssl\ngem install jruby-openssl for full support.\n"
12
- assert_equal '', (sout.read + serr.read).sub(jruby_noise, '')
12
+ jruby_noise = [
13
+ "JRuby limited openssl loaded. http://jruby.org/openssl\n",
14
+ "gem install jruby-openssl for full support.\n",
15
+ /Exception\: java\.lang.*\n/]
16
+
17
+ jruby_noise.each {|noise| output.gsub!(noise, "")}
18
+
19
+ assert_equal '', output
13
20
  end
14
21
  end