log_subscriber_test.rb 2.9 KB
Newer Older
1
require "cases/helper"
2
require "models/binary"
3
require "models/developer"
J
José Valim 已提交
4
require "models/post"
5
require "active_support/log_subscriber/test_helper"
6

7
class LogSubscriberTest < ActiveRecord::TestCase
8
  include ActiveSupport::LogSubscriber::TestHelper
9
  include ActiveSupport::Logger::Severity
10

J
José Valim 已提交
11 12
  fixtures :posts

13
  def setup
14
    @old_logger = ActiveRecord::Base.logger
15
    Developer.primary_key
16
    super
17
    ActiveRecord::LogSubscriber.attach_to(:active_record)
18 19 20 21
  end

  def teardown
    super
22
    ActiveRecord::LogSubscriber.log_subscribers.pop
23 24 25 26
    ActiveRecord::Base.logger = @old_logger
  end

  def set_logger(logger)
27
    ActiveRecord::Base.logger = logger
28 29
  end

30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
  def test_schema_statements_are_ignored
    event = Struct.new(:duration, :payload)

    logger = Class.new(ActiveRecord::LogSubscriber) {
      attr_accessor :debugs

      def initialize
        @debugs = []
        super
      end

      def debug message
        @debugs << message
      end
    }.new
    assert_equal 0, logger.debugs.length

    logger.sql(event.new(0, { :sql => 'hi mom!' }))
    assert_equal 1, logger.debugs.length

    logger.sql(event.new(0, { :sql => 'hi mom!', :name => 'foo' }))
    assert_equal 2, logger.debugs.length

    logger.sql(event.new(0, { :sql => 'hi mom!', :name => 'SCHEMA' }))
    assert_equal 2, logger.debugs.length
  end

57
  def test_basic_query_logging
J
Jon Leighton 已提交
58
    Developer.all.load
59 60
    wait
    assert_equal 1, @logger.logged(:debug).size
61
    assert_match(/Developer Load/, @logger.logged(:debug).last)
62
    assert_match(/SELECT .*?FROM .?developers.?/i, @logger.logged(:debug).last)
63 64 65 66 67 68 69 70
  end

  def test_exists_query_logging
    Developer.exists? 1
    wait
    assert_equal 1, @logger.logged(:debug).size
    assert_match(/Developer Exists/, @logger.logged(:debug).last)
    assert_match(/SELECT .*?FROM .?developers.?/i, @logger.logged(:debug).last)
71 72 73 74
  end

  def test_cached_queries
    ActiveRecord::Base.cache do
J
Jon Leighton 已提交
75 76
      Developer.all.load
      Developer.all.load
77 78 79
    end
    wait
    assert_equal 2, @logger.logged(:debug).size
80
    assert_match(/CACHE/, @logger.logged(:debug).last)
81
    assert_match(/SELECT .*?FROM .?developers.?/i, @logger.logged(:debug).last)
82
  end
83 84

  def test_basic_query_doesnt_log_when_level_is_not_debug
S
Santiago Pastorino 已提交
85
    @logger.level = INFO
J
Jon Leighton 已提交
86
    Developer.all.load
87 88 89 90 91
    wait
    assert_equal 0, @logger.logged(:debug).size
  end

  def test_cached_queries_doesnt_log_when_level_is_not_debug
S
Santiago Pastorino 已提交
92
    @logger.level = INFO
93
    ActiveRecord::Base.cache do
J
Jon Leighton 已提交
94 95
      Developer.all.load
      Developer.all.load
96 97 98 99
    end
    wait
    assert_equal 0, @logger.logged(:debug).size
  end
100 101 102 103

  def test_initializes_runtime
    Thread.new { assert_equal 0, ActiveRecord::LogSubscriber.runtime }.join
  end
104 105 106 107 108 109 110

  def test_binary_data_is_not_logged
    Binary.create(:data => 'some binary data')
    wait
    assert_equal 3, @logger.logged(:debug).size
    assert_match(/<16 bytes of binary data>/, @logger.logged(:debug)[-2])
  end
111
end