From b674f04756e2e23fc18308319e4de8ff562575f4 Mon Sep 17 00:00:00 2001 From: eileencodes Date: Sat, 16 Nov 2019 08:50:38 -0500 Subject: [PATCH] Only test if we can use processes and it's not an in memory db JRuby can't support processes, and in memory db can't support changing the handlers/connections during the test. --- activerecord/test/cases/query_cache_test.rb | 99 +++++++++++---------- 1 file changed, 51 insertions(+), 48 deletions(-) diff --git a/activerecord/test/cases/query_cache_test.rb b/activerecord/test/cases/query_cache_test.rb index a5d4d84d30..8424f1fb5c 100644 --- a/activerecord/test/cases/query_cache_test.rb +++ b/activerecord/test/cases/query_cache_test.rb @@ -95,66 +95,69 @@ class QueryCacheTest < ActiveRecord::TestCase ActiveRecord::Base.connection_handlers = { writing: ActiveRecord::Base.default_connection_handler } end - def test_query_cache_with_multiple_handlers_and_forked_processes - ActiveRecord::Base.connection_handlers = { - writing: ActiveRecord::Base.default_connection_handler, - reading: ActiveRecord::ConnectionAdapters::ConnectionHandler.new - } - ActiveRecord::Base.connected_to(role: :reading) do - ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations["arunit"]) - end + if Process.respond_to?(:fork) && !in_memory_db? + def test_query_cache_with_multiple_handlers_and_forked_processes + ActiveRecord::Base.connection_handlers = { + writing: ActiveRecord::Base.default_connection_handler, + reading: ActiveRecord::ConnectionAdapters::ConnectionHandler.new + } - rd, wr = IO.pipe - rd.binmode - wr.binmode + ActiveRecord::Base.connected_to(role: :reading) do + ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations["arunit"]) + end - pid = fork { - rd.close - status = 0 + rd, wr = IO.pipe + rd.binmode + wr.binmode - middleware { |env| - begin - assert_cache :clean + pid = fork { + rd.close + status = 0 - # first request dirties cache - ActiveRecord::Base.connected_to(role: :reading) do - Post.first - assert_cache :dirty - end - - # should clear the cache - Post.create!(title: "a new post", body: "and a body") - - # fails because cache is still dirty - ActiveRecord::Base.connected_to(role: :reading) do + middleware { |env| + begin assert_cache :clean - Post.first - end - rescue Minitest::Assertion => e - wr.write Marshal.dump e - status = 1 - end - }.call({}) + # first request dirties cache + ActiveRecord::Base.connected_to(role: :reading) do + Post.first + assert_cache :dirty + end + + # should clear the cache + Post.create!(title: "a new post", body: "and a body") + + # fails because cache is still dirty + ActiveRecord::Base.connected_to(role: :reading) do + assert_cache :clean + Post.first + end + + rescue Minitest::Assertion => e + wr.write Marshal.dump e + status = 1 + end + }.call({}) + + wr.close + exit!(status) + } wr.close - exit!(status) - } - wr.close + Process.waitpid pid + if !$?.success? + raise Marshal.load(rd.read) + else + assert_predicate $?, :success? + end - Process.waitpid pid - if !$?.success? - raise Marshal.load(rd.read) - else - assert_predicate $?, :success? + rd.close + ensure + ActiveRecord::Base.connection_handlers = { writing: ActiveRecord::Base.default_connection_handler } end - - rd.close - ensure - ActiveRecord::Base.connection_handlers = { writing: ActiveRecord::Base.default_connection_handler } - end unless in_memory_db? + end def test_query_cache_across_threads with_temporary_connection_pool do