class DefaultScopingWithThreadTest

Public Instance Methods

test_default_scope_is_threadsafe() click to toggle source
# File activerecord/test/cases/scoping/default_scoping_test.rb, line 523
def test_default_scope_is_threadsafe
  2.times { ThreadsafeDeveloper.unscoped.create! }

  threads = []
  assert_not_equal 1, ThreadsafeDeveloper.unscoped.count

  barrier_1 = Concurrent::CyclicBarrier.new(2)
  barrier_2 = Concurrent::CyclicBarrier.new(2)

  threads << Thread.new do
    Thread.current[:default_scope_delay] = -> { barrier_1.wait; barrier_2.wait }
    assert_equal 1, ThreadsafeDeveloper.all.to_a.count
    ThreadsafeDeveloper.connection.close
  end
  threads << Thread.new do
    Thread.current[:default_scope_delay] = -> { barrier_2.wait }
    barrier_1.wait
    assert_equal 1, ThreadsafeDeveloper.all.to_a.count
    ThreadsafeDeveloper.connection.close
  end
  threads.each(&:join)
ensure
  ThreadsafeDeveloper.unscoped.destroy_all
end
test_default_scoping_with_threads() click to toggle source
# File activerecord/test/cases/scoping/default_scoping_test.rb, line 514
def test_default_scoping_with_threads
  2.times do
    Thread.new {
      assert_includes DeveloperOrderedBySalary.all.to_sql, "salary DESC"
      DeveloperOrderedBySalary.connection.close
    }.join
  end
end