diff options
author | Arthur Neves <arthurnn@gmail.com> | 2016-05-04 00:46:38 -0500 |
---|---|---|
committer | Arthur Neves <arthurnn@gmail.com> | 2016-05-05 15:29:11 -0500 |
commit | b83fb847337b690ebbc96c55414157f71bbf8aa2 (patch) | |
tree | 63dbbbcdcad26fc4b69925578bd8a7e2d3a1f687 /activerecord/test/cases | |
parent | 3bed679670dd8348ffc348509a653677c6ecb7f3 (diff) | |
download | rails-b83fb847337b690ebbc96c55414157f71bbf8aa2.tar.gz rails-b83fb847337b690ebbc96c55414157f71bbf8aa2.tar.bz2 rails-b83fb847337b690ebbc96c55414157f71bbf8aa2.zip |
Refactor connection handler
ConnectionHandler will not have any knowlodge of AR models now, it will
only know about the specs.
Like that we can decouple the two, and allow the same model to use more
than one connection.
Historically, folks used to create abstract AR classes on the fly in
order to have multiple connections for the same model, and override the
connection methods.
With this, now we can override the `specificiation_id` method in the
model, to return a key, that will be used to find the connection_pool
from the handler.
Diffstat (limited to 'activerecord/test/cases')
5 files changed, 35 insertions, 33 deletions
diff --git a/activerecord/test/cases/connection_adapters/adapter_leasing_test.rb b/activerecord/test/cases/connection_adapters/adapter_leasing_test.rb index 580568c8ac..c7ca428ab7 100644 --- a/activerecord/test/cases/connection_adapters/adapter_leasing_test.rb +++ b/activerecord/test/cases/connection_adapters/adapter_leasing_test.rb @@ -37,7 +37,7 @@ module ActiveRecord end def test_close - pool = Pool.new(ConnectionSpecification.new({}, nil)) + pool = Pool.new(ConnectionSpecification.new("primary", {}, nil)) pool.insert_connection_for_test! @adapter @adapter.pool = pool diff --git a/activerecord/test/cases/connection_adapters/connection_handler_test.rb b/activerecord/test/cases/connection_adapters/connection_handler_test.rb index 9b1865e8bb..c3cdb29380 100644 --- a/activerecord/test/cases/connection_adapters/connection_handler_test.rb +++ b/activerecord/test/cases/connection_adapters/connection_handler_test.rb @@ -4,49 +4,51 @@ module ActiveRecord module ConnectionAdapters class ConnectionHandlerTest < ActiveRecord::TestCase def setup - @klass = Class.new(Base) { def self.name; 'klass'; end } - @subklass = Class.new(@klass) { def self.name; 'subklass'; end } - @handler = ConnectionHandler.new - @pool = @handler.establish_connection(@klass, Base.connection_pool.spec) + resolver = ConnectionAdapters::ConnectionSpecification::Resolver.new Base.configurations + spec = resolver.spec(:arunit) + + @spec_id = "primary" + @pool = @handler.establish_connection(spec) end def test_retrieve_connection - assert @handler.retrieve_connection(@klass) + assert @handler.retrieve_connection(@spec_id) end def test_active_connections? assert !@handler.active_connections? - assert @handler.retrieve_connection(@klass) + assert @handler.retrieve_connection(@spec_id) assert @handler.active_connections? @handler.clear_active_connections! assert !@handler.active_connections? end - def test_retrieve_connection_pool_with_ar_base - assert_nil @handler.retrieve_connection_pool(ActiveRecord::Base) - end +# def test_retrieve_connection_pool_with_ar_base +# assert_nil @handler.retrieve_connection_pool(ActiveRecord::Base) +# end def test_retrieve_connection_pool - assert_not_nil @handler.retrieve_connection_pool(@klass) + assert_not_nil @handler.retrieve_connection_pool(@spec_id) end - def test_retrieve_connection_pool_uses_superclass_when_no_subclass_connection - assert_not_nil @handler.retrieve_connection_pool(@subklass) - end - - def test_retrieve_connection_pool_uses_superclass_pool_after_subclass_establish_and_remove - sub_pool = @handler.establish_connection(@subklass, Base.connection_pool.spec) - assert_same sub_pool, @handler.retrieve_connection_pool(@subklass) +# def test_retrieve_connection_pool_uses_superclass_when_no_subclass_connection +# assert_not_nil @handler.retrieve_connection_pool(@subklass) +# end - @handler.remove_connection @subklass - assert_same @pool, @handler.retrieve_connection_pool(@subklass) - end +# def test_retrieve_connection_pool_uses_superclass_pool_after_subclass_establish_and_remove +# sub_pool = @handler.establish_connection(@subklass, Base.connection_pool.spec) +# assert_same sub_pool, @handler.retrieve_connection_pool(@subklass) +# +# @handler.remove_connection @subklass +# assert_same @pool, @handler.retrieve_connection_pool(@subklass) +# end def test_connection_pools assert_equal([@pool], @handler.connection_pools) end + # TODO if Process.respond_to?(:fork) def test_connection_pool_per_pid object_id = ActiveRecord::Base.connection.object_id @@ -79,7 +81,7 @@ module ActiveRecord pid = fork { rd.close - pool = @handler.retrieve_connection_pool(@klass) + pool = @handler.retrieve_connection_pool(@spec_id) wr.write Marshal.dump pool.schema_cache.size wr.close exit! diff --git a/activerecord/test/cases/connection_adapters/connection_specification_test.rb b/activerecord/test/cases/connection_adapters/connection_specification_test.rb index ea2196cda2..d204fce59f 100644 --- a/activerecord/test/cases/connection_adapters/connection_specification_test.rb +++ b/activerecord/test/cases/connection_adapters/connection_specification_test.rb @@ -4,7 +4,7 @@ module ActiveRecord module ConnectionAdapters class ConnectionSpecificationTest < ActiveRecord::TestCase def test_dup_deep_copy_config - spec = ConnectionSpecification.new({ :a => :b }, "bar") + spec = ConnectionSpecification.new("primary", { :a => :b }, "bar") assert_not_equal(spec.config.object_id, spec.dup.config.object_id) end end diff --git a/activerecord/test/cases/connection_pool_test.rb b/activerecord/test/cases/connection_pool_test.rb index efa3e0455e..55e90fd172 100644 --- a/activerecord/test/cases/connection_pool_test.rb +++ b/activerecord/test/cases/connection_pool_test.rb @@ -333,14 +333,14 @@ module ActiveRecord # make sure exceptions are thrown when establish_connection # is called with an anonymous class - def test_anonymous_class_exception - anonymous = Class.new(ActiveRecord::Base) - handler = ActiveRecord::Base.connection_handler - - assert_raises(RuntimeError) { - handler.establish_connection anonymous, nil - } - end +# def test_anonymous_class_exception +# anonymous = Class.new(ActiveRecord::Base) +# handler = ActiveRecord::Base.connection_handler +# +# assert_raises(RuntimeError) { +# handler.establish_connection anonymous, nil +# } +# end def test_pool_sets_connection_schema_cache connection = pool.checkout diff --git a/activerecord/test/cases/multiple_db_test.rb b/activerecord/test/cases/multiple_db_test.rb index af4183a601..e20ce20599 100644 --- a/activerecord/test/cases/multiple_db_test.rb +++ b/activerecord/test/cases/multiple_db_test.rb @@ -89,8 +89,8 @@ class MultipleDbTest < ActiveRecord::TestCase end def test_connection - assert_equal Entrant.arel_engine.connection, Bird.arel_engine.connection - assert_not_equal Entrant.arel_engine.connection, Course.arel_engine.connection + assert_equal Entrant.arel_engine.connection.object_id, Bird.arel_engine.connection.object_id + assert_not_equal Entrant.arel_engine.connection.object_id, Course.arel_engine.connection.object_id end unless in_memory_db? |