connection_pool_test.rb 2.0 KB
Newer Older
1
require "cases/helper"
2 3 4 5

module ActiveRecord
  module ConnectionAdapters
    class ConnectionPoolTest < ActiveRecord::TestCase
6 7 8
      def setup
        # Keep a duplicate pool so we do not bother others
        @pool = ConnectionPool.new ActiveRecord::Base.connection_pool.spec
9 10 11 12 13 14 15 16 17 18

        if in_memory_db?
          # Separate connections to an in-memory database create an entirely new database,
          # with an empty schema etc, so we just stub out this schema on the fly.
          @pool.with_connection do |connection|
            connection.create_table :posts do |t|
              t.integer :cololumn
            end
          end
        end
19 20
      end

21 22 23 24 25 26 27 28
      def test_active_connection?
        assert !@pool.active_connection?
        assert @pool.connection
        assert @pool.active_connection?
        @pool.release_connection
        assert !@pool.active_connection?
      end

29 30 31 32 33 34 35 36 37
      def test_checkout_behaviour
        pool = ConnectionPool.new ActiveRecord::Base.connection_pool.spec
        connection = pool.connection
        assert_not_nil connection
        threads = []
        4.times do |i|
          threads << Thread.new(i) do |pool_count|
            connection = pool.connection
            assert_not_nil connection
38
            connection.close
39 40
          end
        end
A
Aaron Patterson 已提交
41

42
        threads.each(&:join)
A
Aaron Patterson 已提交
43

44
        Thread.new do
45
          assert pool.connection
46 47
          pool.connection.close
        end.join
48
      end
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

      def test_automatic_reconnect=
        pool = ConnectionPool.new ActiveRecord::Base.connection_pool.spec
        assert pool.automatic_reconnect
        assert pool.connection

        pool.disconnect!
        assert pool.connection

        pool.disconnect!
        pool.automatic_reconnect = false

        assert_raises(ConnectionNotEstablished) do
          pool.connection
        end

        assert_raises(ConnectionNotEstablished) do
          pool.with_connection
        end
      end
69 70 71 72

      def test_pool_sets_connection_visitor
        assert @pool.connection.visitor.is_a?(Arel::Visitors::ToSql)
      end
73 74 75
    end
  end
end