newrelic_rpm 3.6.0.74.beta → 3.6.0.78
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +1 -2
- data/CHANGELOG +18 -0
- data/Gemfile +3 -3
- data/Rakefile +8 -0
- data/lib/new_relic/agent/agent.rb +4 -9
- data/lib/new_relic/agent/agent_logger.rb +1 -2
- data/lib/new_relic/agent/audit_logger.rb +7 -3
- data/lib/new_relic/agent/busy_calculator.rb +3 -3
- data/lib/new_relic/agent/configuration/server_source.rb +23 -10
- data/lib/new_relic/agent/cross_app_monitor.rb +1 -0
- data/lib/new_relic/agent/database.rb +2 -0
- data/lib/new_relic/agent/error_collector.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_record.rb +14 -13
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +72 -0
- data/lib/new_relic/agent/instrumentation/rails4/action_controller.rb +0 -76
- data/lib/new_relic/agent/instrumentation/rails4/action_view.rb +138 -0
- data/lib/new_relic/agent/instrumentation/rails4/active_record.rb +108 -0
- data/lib/new_relic/agent/null_logger.rb +15 -0
- data/lib/new_relic/agent/stats.rb +1 -0
- data/lib/new_relic/agent/stats_engine/transactions.rb +4 -4
- data/lib/new_relic/control/frameworks/rails.rb +0 -37
- data/lib/new_relic/control/frameworks/rails3.rb +0 -17
- data/lib/new_relic/control/instance_methods.rb +1 -2
- data/lib/new_relic/environment_report.rb +159 -0
- data/lib/new_relic/helper.rb +4 -0
- data/lib/new_relic/local_environment.rb +0 -161
- data/lib/newrelic_rpm.rb +1 -1
- data/test/multiverse/lib/multiverse/suite.rb +7 -0
- data/test/multiverse/suites/active_record/Envfile +0 -1
- data/test/multiverse/suites/agent_only/key_transactions_test.rb +22 -12
- data/test/multiverse/suites/rails/Envfile +8 -1
- data/test/multiverse/suites/rails/app.rb +7 -2
- data/test/multiverse/suites/rails/error_tracing_test.rb +28 -16
- data/test/multiverse/suites/rails/view_instrumentation_test.rb +8 -2
- data/test/new_relic/agent/agent/connect_test.rb +5 -8
- data/test/new_relic/agent/agent/start_test.rb +3 -1
- data/test/new_relic/agent/agent_logger_test.rb +8 -8
- data/test/new_relic/agent/agent_test.rb +0 -6
- data/test/new_relic/agent/agent_test_controller_test.rb +18 -14
- data/test/new_relic/agent/audit_logger_test.rb +12 -0
- data/test/new_relic/agent/configuration/server_source_test.rb +48 -0
- data/test/new_relic/agent/cross_app_monitor_test.rb +8 -0
- data/test/new_relic/agent/instrumentation/action_view_subscriber_test.rb +254 -0
- data/test/new_relic/agent/instrumentation/active_record_helper_test.rb +52 -0
- data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +32 -51
- data/test/new_relic/agent/instrumentation/active_record_subscriber_test.rb +132 -0
- data/test/new_relic/agent/instrumentation/net_instrumentation_test.rb +20 -0
- data/test/new_relic/agent_test.rb +0 -8
- data/test/new_relic/control_test.rb +1 -2
- data/test/new_relic/dispatcher_test.rb +1 -5
- data/test/new_relic/environment_report_test.rb +89 -0
- data/test/new_relic/license_test.rb +1 -3
- data/test/new_relic/load_test.rb +5 -1
- data/test/new_relic/local_environment_test.rb +0 -27
- data/test/new_relic/rack/browser_monitoring_test.rb +1 -0
- data/test/script/ci.sh +19 -18
- data/test/test_helper.rb +15 -3
- metadata +42 -3
- metadata.gz.sig +0 -0
data/lib/new_relic/helper.rb
CHANGED
@@ -43,32 +43,6 @@ module NewRelic
|
|
43
43
|
@config = Hash.new
|
44
44
|
end
|
45
45
|
|
46
|
-
# Add the given key/value pair to the app environment
|
47
|
-
# settings. Must pass either a value or a block. Block
|
48
|
-
# is called to get the value and any raised errors are
|
49
|
-
# silently ignored.
|
50
|
-
def append_environment_value(name, value = nil)
|
51
|
-
value = yield if block_given?
|
52
|
-
@config[name] = value if value
|
53
|
-
rescue => e
|
54
|
-
Agent.logger.error e
|
55
|
-
end
|
56
|
-
|
57
|
-
# yields to the block and appends the returned value to the list
|
58
|
-
# of gems - this catches errors that might be raised in the block
|
59
|
-
def append_gem_list
|
60
|
-
@gems += yield
|
61
|
-
rescue => e
|
62
|
-
Agent.logger.error e
|
63
|
-
end
|
64
|
-
|
65
|
-
# yields to the block and appends the returned value to the list
|
66
|
-
# of plugins - this catches errors that might be raised in the block
|
67
|
-
def append_plugin_list
|
68
|
-
@plugins += yield
|
69
|
-
rescue => e
|
70
|
-
Agent.logger.error e
|
71
|
-
end
|
72
46
|
|
73
47
|
# An instance id pulled from either @dispatcher_instance_id or by
|
74
48
|
# splitting out the first part of the running file
|
@@ -81,141 +55,6 @@ module NewRelic
|
|
81
55
|
@dispatcher_instance_id
|
82
56
|
end
|
83
57
|
|
84
|
-
# Interrogates some common ruby constants for useful information
|
85
|
-
# about what kind of ruby environment the agent is running in
|
86
|
-
def gather_ruby_info
|
87
|
-
append_environment_value('Ruby version'){ RUBY_VERSION }
|
88
|
-
append_environment_value('Ruby description'){ RUBY_DESCRIPTION } if defined? ::RUBY_DESCRIPTION
|
89
|
-
append_environment_value('Ruby platform') { RUBY_PLATFORM }
|
90
|
-
append_environment_value('Ruby patchlevel') { RUBY_PATCHLEVEL }
|
91
|
-
# room here for other ruby implementations, when.
|
92
|
-
if defined? ::JRUBY_VERSION
|
93
|
-
gather_jruby_info
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
# like gather_ruby_info but for the special case of JRuby
|
98
|
-
def gather_jruby_info
|
99
|
-
append_environment_value('JRuby version') { JRUBY_VERSION }
|
100
|
-
append_environment_value('Java VM version') { ENV_JAVA['java.vm.version']}
|
101
|
-
end
|
102
|
-
|
103
|
-
# See what the number of cpus is, works only on some linux variants
|
104
|
-
def gather_cpu_info(proc_file='/proc/cpuinfo')
|
105
|
-
return unless File.readable? proc_file
|
106
|
-
@processors = append_environment_value('Processors') do
|
107
|
-
cpuinfo = ''
|
108
|
-
File.open(proc_file) do |f|
|
109
|
-
loop do
|
110
|
-
begin
|
111
|
-
cpuinfo << f.read_nonblock(4096).strip
|
112
|
-
rescue EOFError
|
113
|
-
break
|
114
|
-
rescue Errno::EWOULDBLOCK, Errno::EAGAIN
|
115
|
-
cpuinfo = ''
|
116
|
-
break # don't select file handle, just give up
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
processors = cpuinfo.split("\n").select {|line| line =~ /^processor\s*:/ }.size
|
121
|
-
|
122
|
-
if processors == 0
|
123
|
-
processors = 1 # assume there is at least one processor
|
124
|
-
::NewRelic::Agent.logger.warn("Cannot determine the number of processors in #{proc_file}")
|
125
|
-
end
|
126
|
-
processors
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
# Grabs the architecture string from either `uname -p` or the env
|
131
|
-
# variable PROCESSOR_ARCHITECTURE
|
132
|
-
def gather_architecture_info
|
133
|
-
append_environment_value('Arch') { `uname -p` } ||
|
134
|
-
append_environment_value('Arch') { ENV['PROCESSOR_ARCHITECTURE'] }
|
135
|
-
end
|
136
|
-
|
137
|
-
# gathers OS info from either `uname -v`, `uname -s`, or the OS
|
138
|
-
# env variable
|
139
|
-
def gather_os_info
|
140
|
-
append_environment_value('OS version') { `uname -v` }
|
141
|
-
append_environment_value('OS') { `uname -s` } ||
|
142
|
-
append_environment_value('OS') { ENV['OS'] }
|
143
|
-
end
|
144
|
-
|
145
|
-
# Gathers the architecture and cpu info
|
146
|
-
def gather_system_info
|
147
|
-
gather_architecture_info
|
148
|
-
gather_cpu_info
|
149
|
-
end
|
150
|
-
|
151
|
-
# Looks for a capistrano file indicating the current revision
|
152
|
-
def gather_revision_info
|
153
|
-
rev_file = File.join(NewRelic::Control.instance.root, "REVISION")
|
154
|
-
if File.readable?(rev_file) && File.size(rev_file) < 64
|
155
|
-
append_environment_value('Revision') do
|
156
|
-
File.open(rev_file) { | file | file.readline.strip }
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
# The name of the AR database adapter for the current environment and
|
162
|
-
# the current schema version
|
163
|
-
def gather_ar_adapter_info
|
164
|
-
append_environment_value 'Database adapter' do
|
165
|
-
if defined?(ActiveRecord) && defined?(ActiveRecord::Base) &&
|
166
|
-
ActiveRecord::Base.respond_to?(:configurations)
|
167
|
-
config = ActiveRecord::Base.configurations[NewRelic::Control.instance.env]
|
168
|
-
if config
|
169
|
-
config['adapter']
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
# Datamapper version
|
176
|
-
def gather_dm_adapter_info
|
177
|
-
append_environment_value 'DataMapper version' do
|
178
|
-
require 'dm-core/version'
|
179
|
-
DataMapper::VERSION
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
# sensing for which adapter is defined, then appends the relevant
|
184
|
-
# config information
|
185
|
-
def gather_db_info
|
186
|
-
# room here for more database adapters, when.
|
187
|
-
if defined? ::ActiveRecord
|
188
|
-
gather_ar_adapter_info
|
189
|
-
end
|
190
|
-
if defined? ::DataMapper
|
191
|
-
gather_dm_adapter_info
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
# Collect base statistics about the environment and record them for
|
196
|
-
# comparison and change detection.
|
197
|
-
def gather_environment_info
|
198
|
-
append_environment_value 'Framework', Agent.config[:framework].to_s
|
199
|
-
append_environment_value 'Dispatcher', Agent.config[:dispatcher].to_s if Agent.config[:dispatcher]
|
200
|
-
append_environment_value 'Dispatcher instance id', @dispatcher_instance_id if @dispatcher_instance_id
|
201
|
-
append_environment_value('Environment') { NewRelic::Control.instance.env }
|
202
|
-
|
203
|
-
# miscellaneous other helpful debugging information
|
204
|
-
gather_ruby_info
|
205
|
-
gather_system_info
|
206
|
-
gather_revision_info
|
207
|
-
gather_db_info
|
208
|
-
end
|
209
|
-
|
210
|
-
# Take a snapshot of the environment information for this application
|
211
|
-
# Returns an associative array
|
212
|
-
def snapshot
|
213
|
-
i = @config.to_a
|
214
|
-
i << [ 'Plugin List', @plugins.to_a] if not @plugins.empty?
|
215
|
-
i << [ 'Gems', @gems.to_a] if not @gems.empty?
|
216
|
-
i
|
217
|
-
end
|
218
|
-
|
219
58
|
# it's a working jruby if it has the runtime method, and object
|
220
59
|
# space is enabled
|
221
60
|
def working_jruby?
|
data/lib/newrelic_rpm.rb
CHANGED
@@ -37,7 +37,7 @@ elsif defined? Rails
|
|
37
37
|
class Railtie < Rails::Railtie
|
38
38
|
|
39
39
|
initializer "newrelic_rpm.start_plugin" do |app|
|
40
|
-
|
40
|
+
NewRelic::Control.instance.init_plugin(:config => app.config)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -3,6 +3,13 @@
|
|
3
3
|
# This file is distributed under New Relic's license terms.
|
4
4
|
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
|
5
5
|
|
6
|
+
# this is to make sure that the Multiverse environment loads with the
|
7
|
+
# the gem version of Minitest (necessary for Rails 4) and not the one
|
8
|
+
# in standard library.
|
9
|
+
if defined?(gem)
|
10
|
+
gem 'minitest'
|
11
|
+
end
|
12
|
+
|
6
13
|
require File.expand_path(File.join(File.dirname(__FILE__), 'environment'))
|
7
14
|
module Multiverse
|
8
15
|
class Suite
|
@@ -6,13 +6,13 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
6
6
|
class TestWidget
|
7
7
|
include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
8
8
|
|
9
|
-
def key_txn
|
10
|
-
|
9
|
+
def key_txn(t0)
|
10
|
+
Time.stubs(:now).returns(t0 + 5)
|
11
11
|
end
|
12
12
|
add_transaction_tracer :key_txn
|
13
13
|
|
14
|
-
def other_txn
|
15
|
-
|
14
|
+
def other_txn(t0)
|
15
|
+
Time.stubs(:now).returns(t0 + 5)
|
16
16
|
end
|
17
17
|
add_transaction_tracer :other_txn
|
18
18
|
end
|
@@ -20,11 +20,11 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
20
20
|
def setup
|
21
21
|
$collector ||= NewRelic::FakeCollector.new
|
22
22
|
$collector.reset
|
23
|
-
key_apdex_config = { 'Controller/KeyTransactionsTest::TestWidget/key_txn' =>
|
23
|
+
key_apdex_config = { 'Controller/KeyTransactionsTest::TestWidget/key_txn' => 1 }
|
24
24
|
$collector.mock['connect'] = [200, {'return_value' => {
|
25
25
|
"agent_run_id" => 666,
|
26
26
|
'web_transactions_apdex' => key_apdex_config,
|
27
|
-
'apdex_t' =>
|
27
|
+
'apdex_t' => 10
|
28
28
|
}}]
|
29
29
|
$collector.run
|
30
30
|
|
@@ -34,6 +34,7 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
34
34
|
|
35
35
|
def teardown
|
36
36
|
NewRelic::Agent.shutdown
|
37
|
+
$collector.reset
|
37
38
|
end
|
38
39
|
|
39
40
|
SATISFYING = 0
|
@@ -41,24 +42,27 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
41
42
|
FAILING = 2
|
42
43
|
|
43
44
|
def test_applied_correct_apdex_t_to_key_txn
|
44
|
-
TestWidget.new.key_txn
|
45
|
+
TestWidget.new.key_txn(stub_time_now)
|
45
46
|
NewRelic::Agent.instance.send(:harvest_and_send_timeslice_data)
|
46
47
|
|
47
48
|
stats = $collector.reported_stats_for_metric('Apdex')[0]
|
48
|
-
assert_equal
|
49
|
+
assert_equal(1.0, stats[FAILING],
|
50
|
+
"Expected stats (#{stats}) to be apdex failing")
|
49
51
|
end
|
50
52
|
|
51
53
|
def test_applied_correct_apdex_t_to_regular_txn
|
52
|
-
TestWidget.new.other_txn
|
54
|
+
TestWidget.new.other_txn(stub_time_now)
|
53
55
|
NewRelic::Agent.instance.send(:harvest_and_send_timeslice_data)
|
54
56
|
|
55
57
|
stats = $collector.reported_stats_for_metric('Apdex')[0]
|
56
|
-
assert_equal
|
58
|
+
assert_equal(1.0, stats[SATISFYING],
|
59
|
+
"Expected stats (#{stats}) to be apdex satisfying")
|
57
60
|
end
|
58
61
|
|
59
62
|
def test_applied_correct_tt_theshold
|
60
|
-
|
61
|
-
TestWidget.new.
|
63
|
+
now = stub_time_now
|
64
|
+
TestWidget.new.key_txn(now)
|
65
|
+
TestWidget.new.other_txn(now)
|
62
66
|
|
63
67
|
NewRelic::Agent.instance.send(:harvest_and_send_slowest_sample)
|
64
68
|
|
@@ -67,4 +71,10 @@ class KeyTransactionsTest < Test::Unit::TestCase
|
|
67
71
|
assert_equal('Controller/KeyTransactionsTest::TestWidget/key_txn',
|
68
72
|
traces[0].metric_name)
|
69
73
|
end
|
74
|
+
|
75
|
+
def stub_time_now
|
76
|
+
now = Time.now
|
77
|
+
Time.stubs(:now).returns(now)
|
78
|
+
return now
|
79
|
+
end
|
70
80
|
end
|
@@ -1,7 +1,14 @@
|
|
1
|
-
suite_condition("Rails 3
|
1
|
+
suite_condition("Rails 3+ do not support 1.8.6") do
|
2
2
|
RUBY_VERSION != '1.8.6'
|
3
3
|
end
|
4
4
|
|
5
|
+
if RUBY_VERSION >= '1.9.3'
|
6
|
+
gemfile <<-RB
|
7
|
+
gem 'rails', '~>4.0.0.beta1'
|
8
|
+
gem 'haml'
|
9
|
+
RB
|
10
|
+
end
|
11
|
+
|
5
12
|
gemfile <<-RB
|
6
13
|
gem 'rails', '~>3.2.0'
|
7
14
|
gem 'haml'
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
|
4
4
|
|
5
5
|
require 'action_controller/railtie'
|
6
|
+
require 'active_model'
|
6
7
|
|
7
8
|
# We define our single Rails application here, one time, upon the first inclusion
|
8
9
|
# Tests should feel free to define their own Controllers locally, but if they
|
@@ -19,11 +20,11 @@ if !defined?(MyApp)
|
|
19
20
|
MyApp.initialize!
|
20
21
|
|
21
22
|
MyApp.routes.draw do
|
22
|
-
get('/bad_route' => '
|
23
|
+
get('/bad_route' => 'test#controller_error',
|
23
24
|
:constraints => lambda do |_|
|
24
25
|
raise ActionController::RoutingError.new('this is an uncaught routing error')
|
25
26
|
end)
|
26
|
-
|
27
|
+
get '/:controller(/:action(/:id))'
|
27
28
|
end
|
28
29
|
|
29
30
|
class ApplicationController < ActionController::Base; end
|
@@ -35,6 +36,10 @@ if !defined?(MyApp)
|
|
35
36
|
self
|
36
37
|
end
|
37
38
|
|
39
|
+
def to_partial_path
|
40
|
+
'foos/foo'
|
41
|
+
end
|
42
|
+
|
38
43
|
def valid?() true end
|
39
44
|
def new_record?() true end
|
40
45
|
def destroyed?() true end
|
@@ -3,7 +3,6 @@
|
|
3
3
|
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
|
4
4
|
|
5
5
|
# https://newrelic.atlassian.net/browse/RUBY-747
|
6
|
-
|
7
6
|
require 'rails/test_help'
|
8
7
|
require 'fake_collector'
|
9
8
|
|
@@ -45,6 +44,8 @@ class IgnoredError < StandardError; end
|
|
45
44
|
class ServerIgnoredError < StandardError; end
|
46
45
|
|
47
46
|
class ErrorsWithoutSSCTest < ActionDispatch::IntegrationTest
|
47
|
+
extend Multiverse::Color
|
48
|
+
|
48
49
|
def setup
|
49
50
|
$collector ||= NewRelic::FakeCollector.new
|
50
51
|
$collector.reset
|
@@ -79,12 +80,15 @@ class ErrorsWithoutSSCTest < ActionDispatch::IntegrationTest
|
|
79
80
|
'no ignore error filter should be set')
|
80
81
|
end
|
81
82
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
83
|
+
if Rails::VERSION::MAJOR != 4
|
84
|
+
def test_error_collector_should_be_enabled
|
85
|
+
assert NewRelic::Agent.config[:agent_enabled]
|
86
|
+
assert NewRelic::Agent.config[:'error_collector.enabled']
|
87
|
+
assert @error_collector.enabled?
|
88
|
+
assert Rails.application.config.middleware.include?(NewRelic::Rack::ErrorCollector)
|
89
|
+
end
|
90
|
+
else
|
91
|
+
puts yellow("SKIPPED test_error_collector_should_be_enabled : not working in Rails 4")
|
88
92
|
end
|
89
93
|
|
90
94
|
def test_should_capture_error_raised_in_view
|
@@ -126,17 +130,25 @@ class ErrorsWithoutSSCTest < ActionDispatch::IntegrationTest
|
|
126
130
|
assert_error_reported_once('this is a noticed error')
|
127
131
|
end
|
128
132
|
|
129
|
-
|
130
|
-
|
131
|
-
|
133
|
+
if Rails::VERSION::MAJOR.to_i != 4
|
134
|
+
def test_should_capture_routing_error
|
135
|
+
get '/bad_route'
|
136
|
+
assert_error_reported_once('this is an uncaught routing error')
|
137
|
+
end
|
138
|
+
else
|
139
|
+
puts yellow("SKIPPED test_should_capture_routing_error : not working in Rails 4")
|
132
140
|
end
|
133
141
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
142
|
+
if Rails::VERSION::MAJOR.to_i != 4
|
143
|
+
def test_should_capture_request_uri_and_params
|
144
|
+
get '/bad_route?eat=static'
|
145
|
+
assert_equal('/bad_route',
|
146
|
+
@error_collector.errors[0].params[:request_uri])
|
147
|
+
assert_equal({'eat' => 'static'},
|
148
|
+
@error_collector.errors[0].params[:request_params])
|
149
|
+
end
|
150
|
+
else
|
151
|
+
puts yellow("SKIPPED test_should_capture_request_uri_and_params : not working in Rails 4")
|
140
152
|
end
|
141
153
|
|
142
154
|
def test_should_not_notice_errors_from_ignored_action
|
@@ -78,7 +78,13 @@ end
|
|
78
78
|
class ViewControllerTest < ActionController::TestCase
|
79
79
|
tests ViewsController
|
80
80
|
def setup
|
81
|
+
super
|
81
82
|
@controller = ViewsController.new
|
83
|
+
# ActiveSupport testing keeps blowing away my subscriber on
|
84
|
+
# teardown for some reason. Have to keep putting it back.
|
85
|
+
if Rails::VERSION::MAJOR.to_i == 4
|
86
|
+
NewRelic::Agent::Instrumentation::ActionViewSubscriber.subscribe
|
87
|
+
end
|
82
88
|
end
|
83
89
|
end
|
84
90
|
|
@@ -126,7 +132,7 @@ end
|
|
126
132
|
|
127
133
|
class TextRenderTest < ViewControllerTest
|
128
134
|
# it doesn't seem worth it to get consistent behavior here.
|
129
|
-
if Rails::VERSION::MINOR.to_i == 0
|
135
|
+
if Rails::VERSION::MAJOR.to_i == 3 && Rails::VERSION::MINOR.to_i == 0
|
130
136
|
test "should not instrument rendering of text" do
|
131
137
|
get :text_render
|
132
138
|
sample = NewRelic::Agent.agent.transaction_sampler.samples.last
|
@@ -162,7 +168,7 @@ end
|
|
162
168
|
|
163
169
|
class MissingTemplateTest < ViewControllerTest
|
164
170
|
# Rails 3.0 has different behavior for rendering an empty array. We're okay with this.
|
165
|
-
if Rails::VERSION::MINOR.to_i == 0
|
171
|
+
if Rails::VERSION::MAJOR.to_i == 3 && Rails::VERSION::MINOR.to_i == 0
|
166
172
|
test "should create an proper metric when the template is unknown" do
|
167
173
|
get :no_template
|
168
174
|
sample = NewRelic::Agent.agent.transaction_sampler.samples.last
|