dolores_rpm 3.2.0.2

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 (257) hide show
  1. data/CHANGELOG +559 -0
  2. data/LICENSE +64 -0
  3. data/README.rdoc +179 -0
  4. data/bin/mongrel_rpm +33 -0
  5. data/bin/newrelic +13 -0
  6. data/bin/newrelic_cmd +5 -0
  7. data/cert/cacert.pem +118 -0
  8. data/cert/oldsite.pem +28 -0
  9. data/cert/site.pem +27 -0
  10. data/dolores_rpm-3.3.4.fork.gem +0 -0
  11. data/install.rb +9 -0
  12. data/lib/conditional_vendored_dependency_detection.rb +3 -0
  13. data/lib/conditional_vendored_metric_parser.rb +5 -0
  14. data/lib/new_relic/agent/agent.rb +1311 -0
  15. data/lib/new_relic/agent/beacon_configuration.rb +110 -0
  16. data/lib/new_relic/agent/browser_monitoring.rb +102 -0
  17. data/lib/new_relic/agent/busy_calculator.rb +99 -0
  18. data/lib/new_relic/agent/chained_call.rb +13 -0
  19. data/lib/new_relic/agent/database.rb +203 -0
  20. data/lib/new_relic/agent/error_collector.rb +251 -0
  21. data/lib/new_relic/agent/instrumentation/active_merchant.rb +27 -0
  22. data/lib/new_relic/agent/instrumentation/acts_as_solr.rb +68 -0
  23. data/lib/new_relic/agent/instrumentation/authlogic.rb +19 -0
  24. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +424 -0
  25. data/lib/new_relic/agent/instrumentation/data_mapper.rb +57 -0
  26. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +52 -0
  27. data/lib/new_relic/agent/instrumentation/memcache.rb +80 -0
  28. data/lib/new_relic/agent/instrumentation/merb/controller.rb +41 -0
  29. data/lib/new_relic/agent/instrumentation/merb/errors.rb +29 -0
  30. data/lib/new_relic/agent/instrumentation/metric_frame/pop.rb +80 -0
  31. data/lib/new_relic/agent/instrumentation/metric_frame.rb +332 -0
  32. data/lib/new_relic/agent/instrumentation/net.rb +29 -0
  33. data/lib/new_relic/agent/instrumentation/passenger_instrumentation.rb +36 -0
  34. data/lib/new_relic/agent/instrumentation/queue_time.rb +210 -0
  35. data/lib/new_relic/agent/instrumentation/rack.rb +98 -0
  36. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +114 -0
  37. data/lib/new_relic/agent/instrumentation/rails/action_web_service.rb +42 -0
  38. data/lib/new_relic/agent/instrumentation/rails/active_record_instrumentation.rb +115 -0
  39. data/lib/new_relic/agent/instrumentation/rails/errors.rb +42 -0
  40. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +118 -0
  41. data/lib/new_relic/agent/instrumentation/rails3/active_record_instrumentation.rb +122 -0
  42. data/lib/new_relic/agent/instrumentation/rails3/errors.rb +37 -0
  43. data/lib/new_relic/agent/instrumentation/sinatra.rb +58 -0
  44. data/lib/new_relic/agent/instrumentation/sunspot.rb +29 -0
  45. data/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb +21 -0
  46. data/lib/new_relic/agent/instrumentation.rb +9 -0
  47. data/lib/new_relic/agent/method_tracer.rb +528 -0
  48. data/lib/new_relic/agent/sampler.rb +50 -0
  49. data/lib/new_relic/agent/samplers/cpu_sampler.rb +58 -0
  50. data/lib/new_relic/agent/samplers/delayed_job_lock_sampler.rb +40 -0
  51. data/lib/new_relic/agent/samplers/memory_sampler.rb +144 -0
  52. data/lib/new_relic/agent/samplers/object_sampler.rb +26 -0
  53. data/lib/new_relic/agent/shim_agent.rb +29 -0
  54. data/lib/new_relic/agent/sql_sampler.rb +267 -0
  55. data/lib/new_relic/agent/stats_engine/metric_stats.rb +187 -0
  56. data/lib/new_relic/agent/stats_engine/samplers.rb +95 -0
  57. data/lib/new_relic/agent/stats_engine/transactions.rb +208 -0
  58. data/lib/new_relic/agent/stats_engine.rb +25 -0
  59. data/lib/new_relic/agent/transaction_sample_builder.rb +101 -0
  60. data/lib/new_relic/agent/transaction_sampler.rb +397 -0
  61. data/lib/new_relic/agent/worker_loop.rb +89 -0
  62. data/lib/new_relic/agent.rb +454 -0
  63. data/lib/new_relic/collection_helper.rb +75 -0
  64. data/lib/new_relic/command.rb +85 -0
  65. data/lib/new_relic/commands/deployments.rb +105 -0
  66. data/lib/new_relic/commands/install.rb +80 -0
  67. data/lib/new_relic/control/class_methods.rb +53 -0
  68. data/lib/new_relic/control/configuration.rb +202 -0
  69. data/lib/new_relic/control/frameworks/external.rb +16 -0
  70. data/lib/new_relic/control/frameworks/merb.rb +31 -0
  71. data/lib/new_relic/control/frameworks/rails.rb +164 -0
  72. data/lib/new_relic/control/frameworks/rails3.rb +75 -0
  73. data/lib/new_relic/control/frameworks/ruby.rb +42 -0
  74. data/lib/new_relic/control/frameworks/sinatra.rb +20 -0
  75. data/lib/new_relic/control/frameworks.rb +10 -0
  76. data/lib/new_relic/control/instance_methods.rb +179 -0
  77. data/lib/new_relic/control/instrumentation.rb +100 -0
  78. data/lib/new_relic/control/logging_methods.rb +143 -0
  79. data/lib/new_relic/control/profiling.rb +25 -0
  80. data/lib/new_relic/control/server_methods.rb +114 -0
  81. data/lib/new_relic/control.rb +46 -0
  82. data/lib/new_relic/data_serialization.rb +157 -0
  83. data/lib/new_relic/delayed_job_injection.rb +46 -0
  84. data/lib/new_relic/language_support.rb +69 -0
  85. data/lib/new_relic/local_environment.rb +414 -0
  86. data/lib/new_relic/merbtasks.rb +6 -0
  87. data/lib/new_relic/metric_data.rb +51 -0
  88. data/lib/new_relic/metric_spec.rb +75 -0
  89. data/lib/new_relic/metrics.rb +9 -0
  90. data/lib/new_relic/noticed_error.rb +24 -0
  91. data/lib/new_relic/rack/browser_monitoring.rb +68 -0
  92. data/lib/new_relic/rack/developer_mode.rb +268 -0
  93. data/lib/new_relic/recipes.rb +73 -0
  94. data/lib/new_relic/stats.rb +388 -0
  95. data/lib/new_relic/timer_lib.rb +27 -0
  96. data/lib/new_relic/transaction_analysis/segment_summary.rb +49 -0
  97. data/lib/new_relic/transaction_analysis.rb +77 -0
  98. data/lib/new_relic/transaction_sample/composite_segment.rb +27 -0
  99. data/lib/new_relic/transaction_sample/fake_segment.rb +9 -0
  100. data/lib/new_relic/transaction_sample/segment.rb +201 -0
  101. data/lib/new_relic/transaction_sample/summary_segment.rb +21 -0
  102. data/lib/new_relic/transaction_sample.rb +245 -0
  103. data/lib/new_relic/url_rule.rb +14 -0
  104. data/lib/new_relic/version.rb +55 -0
  105. data/lib/newrelic_rpm.rb +49 -0
  106. data/lib/tasks/all.rb +4 -0
  107. data/lib/tasks/install.rake +7 -0
  108. data/lib/tasks/tests.rake +19 -0
  109. data/newrelic.yml +265 -0
  110. data/recipes/newrelic.rb +6 -0
  111. data/test/active_record_fixtures.rb +77 -0
  112. data/test/config/newrelic.yml +48 -0
  113. data/test/config/test_control.rb +48 -0
  114. data/test/new_relic/agent/agent/connect_test.rb +410 -0
  115. data/test/new_relic/agent/agent/start_test.rb +255 -0
  116. data/test/new_relic/agent/agent/start_worker_thread_test.rb +153 -0
  117. data/test/new_relic/agent/agent_test.rb +139 -0
  118. data/test/new_relic/agent/agent_test_controller.rb +77 -0
  119. data/test/new_relic/agent/agent_test_controller_test.rb +363 -0
  120. data/test/new_relic/agent/apdex_from_server_test.rb +9 -0
  121. data/test/new_relic/agent/beacon_configuration_test.rb +108 -0
  122. data/test/new_relic/agent/browser_monitoring_test.rb +278 -0
  123. data/test/new_relic/agent/busy_calculator_test.rb +81 -0
  124. data/test/new_relic/agent/database_test.rb +162 -0
  125. data/test/new_relic/agent/error_collector/notice_error_test.rb +257 -0
  126. data/test/new_relic/agent/error_collector_test.rb +175 -0
  127. data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +538 -0
  128. data/test/new_relic/agent/instrumentation/controller_instrumentation_test.rb +36 -0
  129. data/test/new_relic/agent/instrumentation/instrumentation_test.rb +11 -0
  130. data/test/new_relic/agent/instrumentation/metric_frame/pop_test.rb +172 -0
  131. data/test/new_relic/agent/instrumentation/metric_frame_test.rb +50 -0
  132. data/test/new_relic/agent/instrumentation/net_instrumentation_test.rb +84 -0
  133. data/test/new_relic/agent/instrumentation/queue_time_test.rb +387 -0
  134. data/test/new_relic/agent/instrumentation/rack_test.rb +35 -0
  135. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +184 -0
  136. data/test/new_relic/agent/memcache_instrumentation_test.rb +143 -0
  137. data/test/new_relic/agent/method_tracer/class_methods/add_method_tracer_test.rb +164 -0
  138. data/test/new_relic/agent/method_tracer/instance_methods/trace_execution_scoped_test.rb +234 -0
  139. data/test/new_relic/agent/method_tracer_test.rb +386 -0
  140. data/test/new_relic/agent/mock_scope_listener.rb +23 -0
  141. data/test/new_relic/agent/rpm_agent_test.rb +149 -0
  142. data/test/new_relic/agent/sampler_test.rb +19 -0
  143. data/test/new_relic/agent/shim_agent_test.rb +20 -0
  144. data/test/new_relic/agent/sql_sampler_test.rb +160 -0
  145. data/test/new_relic/agent/stats_engine/metric_stats/harvest_test.rb +150 -0
  146. data/test/new_relic/agent/stats_engine/metric_stats_test.rb +82 -0
  147. data/test/new_relic/agent/stats_engine/samplers_test.rb +99 -0
  148. data/test/new_relic/agent/stats_engine_test.rb +185 -0
  149. data/test/new_relic/agent/transaction_sample_builder_test.rb +195 -0
  150. data/test/new_relic/agent/transaction_sampler_test.rb +955 -0
  151. data/test/new_relic/agent/worker_loop_test.rb +66 -0
  152. data/test/new_relic/agent_test.rb +175 -0
  153. data/test/new_relic/collection_helper_test.rb +149 -0
  154. data/test/new_relic/command/deployments_test.rb +68 -0
  155. data/test/new_relic/control/class_methods_test.rb +62 -0
  156. data/test/new_relic/control/configuration_test.rb +72 -0
  157. data/test/new_relic/control/logging_methods_test.rb +185 -0
  158. data/test/new_relic/control_test.rb +254 -0
  159. data/test/new_relic/data_serialization_test.rb +208 -0
  160. data/test/new_relic/delayed_job_injection_test.rb +16 -0
  161. data/test/new_relic/local_environment_test.rb +72 -0
  162. data/test/new_relic/metric_data_test.rb +125 -0
  163. data/test/new_relic/metric_spec_test.rb +95 -0
  164. data/test/new_relic/rack/all_test.rb +11 -0
  165. data/test/new_relic/rack/browser_monitoring_test.rb +84 -0
  166. data/test/new_relic/rack/developer_mode_helper_test.rb +141 -0
  167. data/test/new_relic/rack/developer_mode_test.rb +43 -0
  168. data/test/new_relic/stats_test.rb +426 -0
  169. data/test/new_relic/transaction_analysis/segment_summary_test.rb +91 -0
  170. data/test/new_relic/transaction_analysis_test.rb +121 -0
  171. data/test/new_relic/transaction_sample/composite_segment_test.rb +35 -0
  172. data/test/new_relic/transaction_sample/fake_segment_test.rb +17 -0
  173. data/test/new_relic/transaction_sample/segment_test.rb +389 -0
  174. data/test/new_relic/transaction_sample/summary_segment_test.rb +31 -0
  175. data/test/new_relic/transaction_sample_subtest_test.rb +56 -0
  176. data/test/new_relic/transaction_sample_test.rb +164 -0
  177. data/test/new_relic/version_number_test.rb +89 -0
  178. data/test/test_contexts.rb +29 -0
  179. data/test/test_helper.rb +154 -0
  180. data/ui/helpers/developer_mode_helper.rb +357 -0
  181. data/ui/helpers/google_pie_chart.rb +48 -0
  182. data/ui/views/layouts/newrelic_default.rhtml +47 -0
  183. data/ui/views/newrelic/_explain_plans.rhtml +27 -0
  184. data/ui/views/newrelic/_sample.rhtml +20 -0
  185. data/ui/views/newrelic/_segment.rhtml +28 -0
  186. data/ui/views/newrelic/_segment_limit_message.rhtml +1 -0
  187. data/ui/views/newrelic/_segment_row.rhtml +12 -0
  188. data/ui/views/newrelic/_show_sample_detail.rhtml +24 -0
  189. data/ui/views/newrelic/_show_sample_sql.rhtml +24 -0
  190. data/ui/views/newrelic/_show_sample_summary.rhtml +3 -0
  191. data/ui/views/newrelic/_sql_row.rhtml +16 -0
  192. data/ui/views/newrelic/_stack_trace.rhtml +15 -0
  193. data/ui/views/newrelic/_table.rhtml +12 -0
  194. data/ui/views/newrelic/explain_sql.rhtml +43 -0
  195. data/ui/views/newrelic/file/images/arrow-close.png +0 -0
  196. data/ui/views/newrelic/file/images/arrow-open.png +0 -0
  197. data/ui/views/newrelic/file/images/blue_bar.gif +0 -0
  198. data/ui/views/newrelic/file/images/file_icon.png +0 -0
  199. data/ui/views/newrelic/file/images/gray_bar.gif +0 -0
  200. data/ui/views/newrelic/file/images/new-relic-rpm-desktop.gif +0 -0
  201. data/ui/views/newrelic/file/images/new_relic_rpm_desktop.gif +0 -0
  202. data/ui/views/newrelic/file/images/textmate.png +0 -0
  203. data/ui/views/newrelic/file/javascript/jquery-1.4.2.js +6240 -0
  204. data/ui/views/newrelic/file/javascript/transaction_sample.js +120 -0
  205. data/ui/views/newrelic/file/stylesheets/style.css +490 -0
  206. data/ui/views/newrelic/index.rhtml +71 -0
  207. data/ui/views/newrelic/sample_not_found.rhtml +2 -0
  208. data/ui/views/newrelic/show_sample.rhtml +80 -0
  209. data/ui/views/newrelic/show_source.rhtml +3 -0
  210. data/ui/views/newrelic/threads.rhtml +53 -0
  211. data/vendor/gems/dependency_detection-0.0.1.build/LICENSE +5 -0
  212. data/vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection/version.rb +3 -0
  213. data/vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb +62 -0
  214. data/vendor/gems/metric_parser-0.1.0.pre1/lib/metric_parser.rb +1 -0
  215. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/action_mailer.rb +14 -0
  216. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_merchant.rb +31 -0
  217. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/active_record.rb +33 -0
  218. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/apdex.rb +89 -0
  219. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/background_transaction.rb +7 -0
  220. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/client.rb +46 -0
  221. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller.rb +67 -0
  222. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_cpu.rb +43 -0
  223. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/controller_ext.rb +17 -0
  224. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database.rb +48 -0
  225. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/database_pool.rb +24 -0
  226. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net.rb +28 -0
  227. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/dot_net_parser.rb +17 -0
  228. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/errors.rb +11 -0
  229. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/external.rb +55 -0
  230. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/frontend.rb +40 -0
  231. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/gc.rb +20 -0
  232. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/hibernate_session.rb +7 -0
  233. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java.rb +31 -0
  234. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/java_parser.rb +17 -0
  235. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp.rb +34 -0
  236. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/jsp_tag.rb +7 -0
  237. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/mem_cache.rb +55 -0
  238. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/metric_parser.rb +122 -0
  239. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/orm.rb +27 -0
  240. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/other_transaction.rb +40 -0
  241. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet.rb +7 -0
  242. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_context_listener.rb +7 -0
  243. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/servlet_filter.rb +7 -0
  244. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr.rb +27 -0
  245. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/solr_request_handler.rb +15 -0
  246. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring.rb +54 -0
  247. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring_controller.rb +6 -0
  248. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/spring_view.rb +6 -0
  249. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_action.rb +20 -0
  250. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/struts_result.rb +20 -0
  251. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/version.rb +5 -0
  252. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/view.rb +70 -0
  253. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_frontend.rb +18 -0
  254. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_service.rb +14 -0
  255. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_transaction.rb +133 -0
  256. data/vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser.rb +64 -0
  257. metadata +398 -0
@@ -0,0 +1,72 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..', 'test_helper'))
2
+ class NewRelic::LocalEnvironmentTest < Test::Unit::TestCase
3
+
4
+ def self.teardown
5
+ # To remove mock server instances from ObjectSpace
6
+ ObjectSpace.garbage_collect
7
+ super
8
+ end
9
+ class MockOptions
10
+ def fetch (*args)
11
+ 1000
12
+ end
13
+ end
14
+ MOCK_OPTIONS = MockOptions.new
15
+
16
+ # def test_environment
17
+ # e = NewRelic::LocalEnvironment.new
18
+ # assert(nil == e.environment) # working around a bug in 1.9.1
19
+ # assert_match /test/i, e.dispatcher_instance_id
20
+ # end
21
+ # def test_no_webrick
22
+ # Object.const_set :OPTIONS, 'foo'
23
+ # e = NewRelic::LocalEnvironment.new
24
+ # assert(nil == e.environment) # working around a bug in 1.9.1
25
+ # assert_match /test/i, e.dispatcher_instance_id
26
+ # Object.class_eval { remove_const :OPTIONS }
27
+ # end
28
+
29
+ def test_passenger
30
+ class << self
31
+ module ::Passenger
32
+ const_set "AbstractServer", 0
33
+ end
34
+ end
35
+ e = NewRelic::LocalEnvironment.new
36
+ assert_equal :passenger, e.environment
37
+ assert_nil e.dispatcher_instance_id, "dispatcher instance id should be nil: #{e.dispatcher_instance_id}"
38
+
39
+ NewRelic::Control.instance.instance_eval do
40
+ @settings['app_name'] = 'myapp'
41
+ end
42
+
43
+ e = NewRelic::LocalEnvironment.new
44
+ assert_equal :passenger, e.environment
45
+ assert_nil e.dispatcher_instance_id
46
+
47
+ ::Passenger.class_eval { remove_const :AbstractServer }
48
+ end
49
+ def test_snapshot
50
+ e = NewRelic::LocalEnvironment.new
51
+ s = e.snapshot
52
+ assert_equal 0, s.size
53
+ e.gather_environment_info
54
+ s = e.snapshot
55
+ assert_match /1\.(8\.[67]|9\.\d)/, s.assoc('Ruby version').last, s.inspect
56
+ assert_equal 'test', s.assoc('Framework').last, s.inspect
57
+ # Make sure the processor count is determined on linux systems
58
+ if File.exists? '/proc/cpuinfo'
59
+ assert s.assoc('Processors').last.to_i > 0
60
+ end
61
+ end
62
+
63
+
64
+ def test_default_port
65
+ e = NewRelic::LocalEnvironment.new
66
+ assert_equal 3000, e.send(:default_port)
67
+ ARGV.push '--port=3121'
68
+ assert_equal '3121', e.send(:default_port)
69
+ ARGV.pop
70
+ end
71
+
72
+ end
@@ -0,0 +1,125 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..', 'test_helper'))
2
+ require 'new_relic/metric_data'
3
+ class NewRelic::MetricDataTest < Test::Unit::TestCase
4
+ def test_initialize_basic
5
+ spec = mock('metric_spec')
6
+ stats = mock('stats')
7
+ metric_id = mock('metric_id')
8
+ md = NewRelic::MetricData.new(spec, stats, metric_id)
9
+ assert_equal spec, md.metric_spec
10
+ assert_equal stats, md.stats
11
+ assert_equal metric_id, md.metric_id
12
+ end
13
+
14
+ def test_eql_basic
15
+ spec = mock('metric_spec')
16
+ stats = mock('stats')
17
+ metric_id = mock('metric_id')
18
+ md1 = NewRelic::MetricData.new(spec, stats, metric_id)
19
+ md2 = NewRelic::MetricData.new(spec, stats, metric_id)
20
+ assert(md1.eql?(md2), "The example metric data objects should be eql?: #{md1.inspect} #{md2.inspect}")
21
+ assert(md2.eql?(md1), "The example metric data objects should be eql?: #{md1.inspect} #{md2.inspect}")
22
+ end
23
+
24
+ def test_eql_unequal_specs
25
+
26
+ spec = mock('metric_spec')
27
+ other_spec = mock('other_spec')
28
+ stats = mock('stats')
29
+ metric_id = mock('metric_id')
30
+ md1 = NewRelic::MetricData.new(spec, stats, metric_id)
31
+ md2 = NewRelic::MetricData.new(other_spec, stats, metric_id)
32
+ assert(!md1.eql?(md2), "The example metric data objects should not be eql?: #{md1.inspect} #{md2.inspect}")
33
+ assert(!md2.eql?(md1), "The example metric data objects should not be eql?: #{md1.inspect} #{md2.inspect}")
34
+ end
35
+ def test_eql_unequal_stats
36
+ spec = mock('metric_spec')
37
+ stats = mock('stats')
38
+ other_stats = mock('other_stats')
39
+ metric_id = mock('metric_id')
40
+ md1 = NewRelic::MetricData.new(spec, stats, metric_id)
41
+ md2 = NewRelic::MetricData.new(spec, other_stats, metric_id)
42
+ assert(!md1.eql?(md2), "The example metric data objects should not be eql?: #{md1.inspect} #{md2.inspect}")
43
+ assert(!md2.eql?(md1), "The example metric data objects should not be eql?: #{md1.inspect} #{md2.inspect}")
44
+ end
45
+
46
+ def test_eql_unequal_metric_ids_dont_matter
47
+ spec = mock('metric_spec')
48
+ stats = mock('stats')
49
+ metric_id = mock('metric_id')
50
+ other_metric_id = mock('other_metric_id')
51
+ md1 = NewRelic::MetricData.new(spec, stats, metric_id)
52
+ md2 = NewRelic::MetricData.new(spec, stats, other_metric_id)
53
+ assert(md1.eql?(md2), "The example metric data objects should be eql? with different metric_ids: #{md1.inspect} #{md2.inspect}")
54
+ assert(md2.eql?(md1), "The example metric data objects should be eql? with different metric_ids: #{md1.inspect} #{md2.inspect}")
55
+ end
56
+
57
+ def test_original_spec_basic
58
+ spec = mock('metric_spec')
59
+ stats = mock('stats')
60
+ metric_id = mock('metric_id')
61
+ md1 = NewRelic::MetricData.new(spec, stats, metric_id)
62
+ original_spec = md1.instance_variable_get('@original_spec')
63
+ assert_equal(nil, original_spec, "should start with a nil original spec, but was #{original_spec.inspect}")
64
+ assert_equal(spec, md1.metric_spec, "should return the metric spec for original spec when original spec is nil, but was #{md1.original_spec}")
65
+ end
66
+
67
+ def test_metric_spec_equal_should_not_set_original_spec_with_no_metric_spec
68
+ stats = mock('stats')
69
+ metric_id = mock('metric_id')
70
+ md1 = NewRelic::MetricData.new(nil, stats, metric_id)
71
+ original_spec = md1.instance_variable_get('@original_spec')
72
+ assert_equal(nil, original_spec, "should start with a nil original spec, but was #{original_spec.inspect}")
73
+
74
+ new_spec = mock('new metric_spec')
75
+ assert_equal(new_spec, md1.metric_spec=(new_spec), "should return the new spec")
76
+
77
+ new_original_spec = md1.instance_variable_get('@original_spec')
78
+ assert_equal(nil, new_original_spec, "should not set @original_spec but was #{new_original_spec.inspect}")
79
+ end
80
+
81
+ def test_metric_spec_equal_should_set_original_spec_with_existing_metric_spec
82
+ spec = mock('metric_spec')
83
+ stats = mock('stats')
84
+ metric_id = mock('metric_id')
85
+ md1 = NewRelic::MetricData.new(spec, stats, metric_id)
86
+ original_spec = md1.instance_variable_get('@original_spec')
87
+ assert_equal(nil, original_spec, "should start with a nil original spec, but was #{original_spec.inspect}")
88
+
89
+ new_spec = mock('new metric_spec')
90
+ assert_equal(new_spec, md1.metric_spec=(new_spec), "should return the new spec")
91
+
92
+ new_original_spec = md1.instance_variable_get('@original_spec')
93
+ assert_equal(spec, new_original_spec, "should set @original_spec to the existing metric_spec but was #{new_original_spec.inspect}")
94
+ end
95
+
96
+ def test_hash
97
+ spec = mock('metric_spec')
98
+ stats = mock('stats')
99
+ metric_id = mock('metric_id')
100
+ md1 = NewRelic::MetricData.new(spec, stats, metric_id)
101
+ assert((spec.hash ^ stats.hash) == md1.hash, "expected #{spec.hash ^ stats.hash} to equal #{md1.hash}")
102
+ end
103
+
104
+ def test_to_json_no_metric_id
105
+ md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::MethodTraceStats.new, nil)
106
+ json = md.to_json
107
+ assert(json.include?('"Custom/test/method"'), "should include the metric spec in the json")
108
+ assert(json.include?('"metric_id":null}'), "should have a null metric_id")
109
+ end
110
+
111
+ def test_to_json_with_metric_id
112
+ md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::MethodTraceStats.new, 12345)
113
+ assert_equal('{"metric_spec":null,"stats":{"total_exclusive_time":0.0,"min_call_time":0.0,"call_count":0,"sum_of_squares":0.0,"total_call_time":0.0,"max_call_time":0.0},"metric_id":12345}', md.to_json, "should not include the metric spec and should have a metric_id")
114
+ end
115
+
116
+ def test_to_s_with_metric_spec
117
+ md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::MethodTraceStats.new, 12345)
118
+ assert_equal('Custom/test/method(): [01/01/70 12:00AM UTC, 0.000s; 0 calls 0s]', md.to_s, "should not include the metric id and should include the metric spec")
119
+ end
120
+
121
+ def test_to_s_without_metric_spec
122
+ md = NewRelic::MetricData.new(nil, NewRelic::MethodTraceStats.new, 12345)
123
+ assert_equal('12345: [01/01/70 12:00AM UTC, 0.000s; 0 calls 0s]', md.to_s, "should include the metric id and not have a metric spec")
124
+ end
125
+ end
@@ -0,0 +1,95 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..', 'test_helper'))
2
+ class NewRelic::MetricSpecTest < Test::Unit::TestCase
3
+
4
+ def test_equal
5
+ spec1 = NewRelic::MetricSpec.new('Controller')
6
+ spec2 = NewRelic::MetricSpec.new('Controller', nil)
7
+
8
+ assert spec1.eql?(NewRelic::MetricSpec.new('Controller'))
9
+ assert spec2.eql?(NewRelic::MetricSpec.new('Controller', nil))
10
+ assert spec1.eql?(spec2)
11
+ assert !spec2.eql?(NewRelic::MetricSpec.new('Controller', '/dude'))
12
+ end
13
+
14
+ define_method(:'test_<=>') do
15
+ s1 = NewRelic::MetricSpec.new('ActiveRecord')
16
+ s2 = NewRelic::MetricSpec.new('Controller')
17
+ assert_equal [s1, s2].sort, [s1,s2]
18
+ assert_equal [s2, s1].sort, [s1,s2]
19
+
20
+ s1 = NewRelic::MetricSpec.new('Controller', nil)
21
+ s2 = NewRelic::MetricSpec.new('Controller', 'hap')
22
+ assert_equal [s2, s1].sort, [s1, s2]
23
+ assert_equal [s1, s2].sort, [s1, s2]
24
+
25
+ s1 = NewRelic::MetricSpec.new('Controller', 'hap')
26
+ s2 = NewRelic::MetricSpec.new('Controller', nil)
27
+ assert_equal [s2, s1].sort, [s2, s1]
28
+ assert_equal [s1, s2].sort, [s2, s1]
29
+
30
+ s1 = NewRelic::MetricSpec.new('Controller')
31
+ s2 = NewRelic::MetricSpec.new('Controller')
32
+ assert_equal [s2, s1].sort, [s2, s1] # unchanged due to no sort criteria
33
+ assert_equal [s1, s2].sort, [s1, s2] # unchanged due to no sort criteria
34
+
35
+ s1 = NewRelic::MetricSpec.new('Controller', nil)
36
+ s2 = NewRelic::MetricSpec.new('Controller', nil)
37
+ assert_equal [s2, s1].sort, [s2, s1] # unchanged due to no sort criteria
38
+ assert_equal [s1, s2].sort, [s1, s2] # unchanged due to no sort criteria
39
+ end
40
+
41
+ # test to make sure the MetricSpec class can serialize to json
42
+ def test_json
43
+ spec = NewRelic::MetricSpec.new("controller", "metric#find")
44
+
45
+ import = ::ActiveSupport::JSON.decode(spec.to_json)
46
+
47
+ compare_spec(spec, import)
48
+
49
+ stats = NewRelic::MethodTraceStats.new
50
+
51
+ import = ::ActiveSupport::JSON.decode(stats.to_json)
52
+
53
+ compare_stat(stats, import)
54
+
55
+ metric_data = NewRelic::MetricData.new(spec, stats, 10)
56
+
57
+ import = ::ActiveSupport::JSON.decode(metric_data.to_json)
58
+
59
+ compare_metric_data(metric_data, import)
60
+ end
61
+
62
+ def test_truncate!
63
+ spec = NewRelic::MetricSpec.new('a', 'b')
64
+ spec.name = "a" * 300
65
+ spec.scope = "b" * 300
66
+ spec.truncate!
67
+ assert_equal("a" * 255, spec.name, "should have shortened the name")
68
+ assert_equal("b" * 255, spec.scope, "should have shortened the scope")
69
+ end
70
+
71
+ private
72
+
73
+ def compare_spec(spec, import)
74
+ assert_equal 2, import.length
75
+ assert_equal spec.name, import['name']
76
+ assert_equal spec.scope, import['scope']
77
+ end
78
+
79
+ def compare_stat(stats, import)
80
+ assert_equal 6, import.length
81
+ assert_equal stats.total_call_time, import['total_call_time']
82
+ assert_equal stats.max_call_time, import['max_call_time']
83
+ assert_equal stats.min_call_time, import['min_call_time']
84
+ assert_equal stats.sum_of_squares, import['sum_of_squares']
85
+ assert_equal stats.call_count, import['call_count']
86
+ assert_equal stats.total_exclusive_time, import['total_exclusive_time']
87
+ end
88
+
89
+ def compare_metric_data(metric_data, import)
90
+ assert_equal 3, import.length
91
+ assert_equal metric_data.metric_id, import['metric_id']
92
+ compare_spec(metric_data.metric_spec, import['metric_spec']) unless metric_data.metric_id
93
+ compare_stat(metric_data.stats, import['stats'])
94
+ end
95
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..','..','test_helper'))
2
+ require 'new_relic/rack/browser_monitoring'
3
+ require 'new_relic/rack/developer_mode'
4
+ class NewRelic::Rack::AllTest < Test::Unit::TestCase
5
+ # just here to load the files above
6
+
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
11
+
@@ -0,0 +1,84 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..', '..',
2
+ 'test_helper'))
3
+ require 'rack/test'
4
+ require 'new_relic/rack/browser_monitoring'
5
+
6
+ ENV['RACK_ENV'] = 'test'
7
+
8
+ class BrowserMonitoringTest < Test::Unit::TestCase
9
+ include Rack::Test::Methods
10
+
11
+ def app
12
+ @doc ||= <<-EOL
13
+ <html>
14
+ <head>
15
+ <title>im a title</title>
16
+ <meta some-crap="1"/>
17
+ <script>
18
+ junk
19
+ </script>
20
+ </head>
21
+ <body>im some body text</body>
22
+ </html>
23
+ EOL
24
+ mock_app = lambda do |env|
25
+ [200, {'Content-Type' => 'text/html'}, Rack::Response.new(@doc)]
26
+ end
27
+ NewRelic::Rack::BrowserMonitoring.new(mock_app)
28
+ end
29
+
30
+ def setup
31
+ NewRelic::Agent.stubs(:browser_timing_header) \
32
+ .returns("<script>header</script>")
33
+ NewRelic::Agent.stubs(:browser_timing_footer) \
34
+ .returns("<script>footer</script>")
35
+ end
36
+
37
+ def teardown
38
+ mocha_teardown
39
+ end
40
+
41
+ def test_should_only_instrument_successfull_html_requests
42
+ assert app.should_instrument?(200, {'Content-Type' => 'text/html'})
43
+ assert !app.should_instrument?(500, {'Content-Type' => 'text/html'})
44
+ assert !app.should_instrument?(200, {'Content-Type' => 'text/xhtml'})
45
+ end
46
+
47
+ def test_insert_timing_header_right_after_open_head_if_no_meta_tags
48
+ get '/'
49
+
50
+ assert(last_response.body.include?("head>#{NewRelic::Agent.browser_timing_header}"), last_response.body)
51
+ @doc = nil
52
+ end
53
+
54
+ def test_insert_timing_header_right_before_head_close_if_ua_compatible_found
55
+ @doc = <<-EOL
56
+ <html>
57
+ <head>
58
+ <title>im a title</title>
59
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
60
+ <script>
61
+ junk
62
+ </script>
63
+ </head>
64
+ <body>im some body text</body>
65
+ </html>
66
+ EOL
67
+ get '/'
68
+
69
+ assert(last_response.body.include?("#{NewRelic::Agent.browser_timing_header}</head>"), last_response.body)
70
+ end
71
+
72
+ def test_insert_timing_footer_right_before_html_body_close
73
+ get '/'
74
+
75
+ assert(last_response.body.include?("#{NewRelic::Agent.browser_timing_footer}</body>"), last_response.body)
76
+ end
77
+
78
+ def test_should_not_throw_exception_on_empty_reponse
79
+ @doc = ''
80
+ get '/'
81
+
82
+ assert last_response.ok?
83
+ end
84
+ end
@@ -0,0 +1,141 @@
1
+ # ENV['SKIP_RAILS'] = 'true'
2
+ require File.expand_path(File.join(File.dirname(__FILE__),'..', '..',
3
+ 'test_helper'))
4
+ require File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','ui',
5
+ 'helpers','developer_mode_helper.rb'))
6
+
7
+ ENV['RACK_ENV'] = 'test'
8
+ class DeveloperModeTest < Test::Unit::TestCase
9
+ include NewRelic::DeveloperModeHelper
10
+
11
+
12
+ def test_application_caller
13
+ assert_equal "/opt/ruby/lib/ruby/1.8/net/protocol.rb:135:in `rbuf_fill'", application_caller(Fixtures::NORMAL_TRACE)
14
+ assert_equal "c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `eval'", application_caller(Fixtures::WINDOWS_TRACE)
15
+ end
16
+
17
+ def test_application_stack_trace
18
+ trace = application_stack_trace(Fixtures::NORMAL_TRACE)
19
+ assert_equal 29, trace.size
20
+ trace = application_stack_trace(Fixtures::WINDOWS_TRACE)
21
+ assert_equal 14, trace.size
22
+
23
+ end
24
+
25
+ def test_url_for_source
26
+ for line in Fixtures::NORMAL_TRACE + Fixtures::WINDOWS_TRACE do
27
+ line = url_for_source(line)
28
+ assert line =~ /^show_source\?file=.*&amp;line=\d+&amp;/, line
29
+ end
30
+ end
31
+
32
+ private
33
+ def params; {} end
34
+ module Fixtures
35
+ WINDOWS_TRACE = <<-EOF.split("\n")
36
+ newrelic_rpm (3.1.1) ui/helpers/developer_mode_helper.rb:234:in `file_and_line'
37
+ newrelic_rpm (3.1.1) ui/helpers/developer_mode_helper.rb:30:in `block in application_caller'
38
+ newrelic_rpm (3.1.1) ui/helpers/developer_mode_helper.rb:29:in `each'
39
+ newrelic_rpm (3.1.1) ui/helpers/developer_mode_helper.rb:29:in `application_caller'
40
+ newrelic_rpm (3.1.1) ui/helpers/developer_mode_helper.rb:111:in `link_to_source'
41
+ (erb):5:in `render'
42
+ c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `eval'
43
+ c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `result'
44
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:155:in `render_without_layout'
45
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:136:in `render'
46
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:121:in `block in render'
47
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:120:in `map'
48
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:120:in `render'
49
+ (erb):22:in `render'
50
+ c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `eval'
51
+ c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `result'
52
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:155:in `render_without_layout'
53
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:136:in `render'
54
+ (erb):77:in `block in render'
55
+ (erb):74:in `collect'
56
+ (erb):74:in `render'
57
+ c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `eval'
58
+ c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `result'
59
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:155:in `render_without_layout'
60
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:133:in `block in render'
61
+ (erb):38:in `render_with_layout'
62
+ c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `eval'
63
+ c:/Ruby192/lib/ruby/1.9.1/erb.rb:753:in `result'
64
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:149:in `render_with_layout'
65
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:132:in `render'
66
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:232:in `show_sample_data'
67
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:47:in `_call'
68
+ newrelic_rpm (3.1.1) lib/new_relic/rack/developer_mode.rb:25:in `call'
69
+ warden (1.0.5) lib/warden/manager.rb:35:in `block in call'
70
+ warden (1.0.5) lib/warden/manager.rb:34:in `catch'
71
+ warden (1.0.5) lib/warden/manager.rb:34:in `call'
72
+ actionpack (3.0.9) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
73
+ actionpack (3.0.9) lib/action_dispatch/middleware/head.rb:14:in `call'
74
+ rack (1.2.3) lib/rack/methodoverride.rb:24:in `call'
75
+ actionpack (3.0.9) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
76
+ actionpack (3.0.9) lib/action_dispatch/middleware/flash.rb:182:in `call'
77
+ actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:149:in `call'
78
+ actionpack (3.0.9) lib/action_dispatch/middleware/cookies.rb:302:in `call'
79
+ activerecord (3.0.9) lib/active_record/query_cache.rb:32:in `block in call'
80
+ activerecord (3.0.9) lib/active_record/connection_adapters/abstract/query_cache.rb:28:in `cache'
81
+ activerecord (3.0.9) lib/active_record/query_cache.rb:12:in `cache'
82
+ activerecord (3.0.9) lib/active_record/query_cache.rb:31:in `call'
83
+ activerecord (3.0.9) lib/active_record/connection_adapters/abstract/connection_pool.rb:354:in `call'
84
+ actionpack (3.0.9) lib/action_dispatch/middleware/callbacks.rb:46:in `block in call'
85
+ activesupport (3.0.9) lib/active_support/callbacks.rb:416:in `_run_call_callbacks'
86
+ actionpack (3.0.9) lib/action_dispatch/middleware/callbacks.rb:44:in `call'
87
+ rack (1.2.3) lib/rack/sendfile.rb:107:in `call'
88
+ actionpack (3.0.9) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
89
+ actionpack (3.0.9) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
90
+ railties (3.0.9) lib/rails/rack/logger.rb:13:in `call'
91
+ rack (1.2.3) lib/rack/runtime.rb:17:in `call'
92
+ activesupport (3.0.9) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
93
+ rack (1.2.3) lib/rack/lock.rb:11:in `block in call'
94
+ <internal:prelude>:10:in `synchronize'
95
+ rack (1.2.3) lib/rack/lock.rb:11:in `call'
96
+ actionpack (3.0.9) lib/action_dispatch/middleware/static.rb:30:in `call'
97
+ railties (3.0.9) lib/rails/application.rb:168:in `call'
98
+ railties (3.0.9) lib/rails/application.rb:77:in `method_missing'
99
+ railties (3.0.9) lib/rails/rack/log_tailer.rb:14:in `call'
100
+ rack (1.2.3) lib/rack/content_length.rb:13:in `call'
101
+ rack (1.2.3) lib/rack/handler/webrick.rb:52:in `service'
102
+ c:/Ruby192/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
103
+ c:/Ruby192/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
104
+ c:/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
105
+ EOF
106
+
107
+ NORMAL_TRACE = <<-EOF.split("\n")
108
+ /opt/ruby/lib/ruby/1.8/net/protocol.rb:135:in `rbuf_fill'
109
+ /opt/ruby/lib/ruby/1.8/timeout.rb:101:in `timeout'
110
+ /opt/ruby/lib/ruby/1.8/net/protocol.rb:126:in `readline'
111
+ /opt/ruby/lib/ruby/1.8/net/http.rb:2028:in `read_status_line'
112
+ /opt/ruby/lib/ruby/1.8/net/http.rb:1051:in `request_without_newrelic_trace'
113
+ /opt/bundler/gems/ruby_agent-705a7cf29207/lib/new_relic/agent/instrumentation/net.rb:20:in `request_without_fakeweb'
114
+ /opt/bundler/gems/ruby_agent-705a7cf29207/lib/new_relic/agent/method_tracer.rb:242:in `trace_execution_scoped'
115
+ /opt/bundler/gems/ruby_agent-705a7cf29207/lib/new_relic/agent/instrumentation/net.rb:19:in `request_without_fakeweb'
116
+ /opt/ruby/gems/fakeweb-1.3.0/lib/fake_web/ext/net_http.rb:50:in `request'
117
+ /opt/ruby/lib/ruby/1.8/net/http.rb:1037:in `request_without_newrelic_trace'
118
+ /opt/ruby/lib/ruby/1.8/net/http.rb:543:in `start'
119
+ /opt/ruby/lib/ruby/1.8/net/http.rb:1035:in `request_without_newrelic_trace'
120
+ /opt/bundler/gems/ruby_agent-705a7cf29207/lib/new_relic/agent/instrumentation/net.rb:20:in `request_without_fakeweb'
121
+ /opt/bundler/gems/ruby_agent-705a7cf29207/lib/new_relic/agent/method_tracer.rb:242:in `trace_execution_scoped'
122
+ /opt/bundler/gems/ruby_agent-705a7cf29207/lib/new_relic/agent/instrumentation/net.rb:19:in `request_without_fakeweb'
123
+ /opt/ruby/gems/fakeweb-1.3.0/lib/fake_web/ext/net_http.rb:50:in `request'
124
+ /opt/ruby/lib/ruby/1.8/net/http.rb:992:in `post2'
125
+ /opt/ruby/gems/rforce-0.4.1/lib/rforce/binding.rb:141:in `call_remote'
126
+ /opt/ruby/gems/rforce-0.4.1/lib/rforce/binding.rb:208:in `method_missing'
127
+ /Users/joe/dev/workspace/lib/lead_lover/base.rb:135:in `update'
128
+ /Users/joe/dev/workspace/lib/lead_lover/base.rb:123:in `update_filtered_attributes'
129
+ /Users/joe/dev/workspace/lib/lead_lover/lead.rb:62:in `assign_to_owner'
130
+ /Users/joe/dev/workspace/app/models/account.rb:1968:in `link_to_leadlover_lead'
131
+ /Users/joe/dev/workspace/app/models/account.rb:1956:in `link_to_leadlover'
132
+ /opt/ruby/gems/activerecord-2.3.14/lib/active_record/associations/association_proxy.rb:215:in `send'
133
+ /opt/ruby/gems/activerecord-2.3.14/lib/active_record/associations/association_proxy.rb:215:in `method_missing'
134
+ /Users/joe/dev/workspace/app/models/subscription.rb:883:in `link_to_leadlover'
135
+ /opt/ruby/gems/delayed_job-2.0.6/lib/delayed/performable_method.rb:35:in `send'
136
+ /opt/ruby/gems/delayed_job-2.0.6/lib/delayed/performable_method.rb:35:in `perform'
137
+ /Users/joe/dev/workspace/config/initializers/delayed_job_with_shards.rb:17:in `perform'
138
+ /opt/ruby/gems/delayed_job-2.0.6/lib/delayed/backend/base.rb:74:in `invoke_job'
139
+ EOF
140
+ end
141
+ end
@@ -0,0 +1,43 @@
1
+ # ENV['SKIP_RAILS'] = 'true'
2
+ require File.expand_path(File.join(File.dirname(__FILE__),'..', '..',
3
+ 'test_helper'))
4
+ require 'rack/test'
5
+ require 'new_relic/rack/developer_mode'
6
+
7
+ ENV['RACK_ENV'] = 'test'
8
+
9
+ class DeveloperModeTest < Test::Unit::TestCase
10
+ include Rack::Test::Methods
11
+ include TransactionSampleTestHelper
12
+
13
+ def app
14
+ mock_app = lambda { |env| [500, {}, "Don't touch me!"] }
15
+ NewRelic::Rack::DeveloperMode.new(mock_app)
16
+ end
17
+
18
+ def setup
19
+ @sampler = NewRelic::Agent::TransactionSampler.new
20
+ run_sample_trace_on(@sampler, '/here')
21
+ run_sample_trace_on(@sampler, '/there')
22
+ run_sample_trace_on(@sampler, '/somewhere')
23
+ NewRelic::Agent.instance.stubs(:transaction_sampler).returns(@sampler)
24
+ end
25
+
26
+ def test_index_displays_all_samples
27
+ get '/newrelic'
28
+
29
+ assert last_response.ok?
30
+ assert last_response.body.include?('/here')
31
+ assert last_response.body.include?('/there')
32
+ assert last_response.body.include?('/somewhere')
33
+ end
34
+
35
+ def test_show_sample_summary_displays_sample_details
36
+ get "/newrelic/show_sample_summary?id=#{@sampler.samples[0].sample_id}"
37
+
38
+ assert last_response.ok?
39
+ assert last_response.body.include?('/here')
40
+ assert last_response.body.include?('SandwichesController')
41
+ assert last_response.body.include?('index')
42
+ end
43
+ end