1
0
Fork 0
mirror of https://github.com/mperham/connection_pool synced 2023-03-27 23:22:21 -04:00
connection_pool/test/test_connection_pool_timed_stack.rb
Andrew Marshall 3eaba661b8
Allow restarting pool (#140)
* Allow restarting pool

The implementation of shutdown from
https://github.com/mperham/connection_pool/issues/27 does not actually
provide for a way for the pool to re-create connections, only render the
pool unusable. This implements such a behavior. A new method is added so
as to not change the existing behavior of `shutdown`.
2021-01-28 10:29:18 -08:00

150 lines
2.6 KiB
Ruby

require_relative "helper"
class TestConnectionPoolTimedStack < Minitest::Test
def setup
@stack = ConnectionPool::TimedStack.new { Object.new }
end
def test_empty_eh
stack = ConnectionPool::TimedStack.new(1) { Object.new }
refute_empty stack
popped = stack.pop
assert_empty stack
stack.push popped
refute_empty stack
end
def test_length
stack = ConnectionPool::TimedStack.new(1) { Object.new }
assert_equal 1, stack.length
popped = stack.pop
assert_equal 0, stack.length
stack.push popped
assert_equal 1, stack.length
end
def test_object_creation_fails
stack = ConnectionPool::TimedStack.new(2) { raise "failure" }
begin
stack.pop
rescue => error
assert_equal "failure", error.message
end
begin
stack.pop
rescue => error
assert_equal "failure", error.message
end
refute_empty stack
assert_equal 2, stack.length
end
def test_pop
object = Object.new
@stack.push object
popped = @stack.pop
assert_same object, popped
end
def test_pop_empty
e = assert_raises(ConnectionPool::TimeoutError) { @stack.pop timeout: 0 }
assert_equal "Waited 0 sec", e.message
end
def test_pop_empty_2_0_compatibility
e = assert_raises(Timeout::Error) { @stack.pop 0 }
assert_equal "Waited 0 sec", e.message
end
def test_pop_full
stack = ConnectionPool::TimedStack.new(1) { Object.new }
popped = stack.pop
refute_nil popped
assert_empty stack
end
def test_pop_wait
thread = Thread.start {
@stack.pop
}
Thread.pass while thread.status == "run"
object = Object.new
@stack.push object
assert_same object, thread.value
end
def test_pop_shutdown
@stack.shutdown {}
assert_raises ConnectionPool::PoolShuttingDownError do
@stack.pop
end
end
def test_pop_shutdown_reload
stack = ConnectionPool::TimedStack.new(1) { Object.new }
object = stack.pop
stack.push(object)
stack.shutdown(reload: true) {}
refute_equal object, stack.pop
end
def test_push
stack = ConnectionPool::TimedStack.new(1) { Object.new }
conn = stack.pop
stack.push conn
refute_empty stack
end
def test_push_shutdown
called = []
@stack.shutdown do |object|
called << object
end
@stack.push Object.new
refute_empty called
assert_empty @stack
end
def test_shutdown
@stack.push Object.new
called = []
@stack.shutdown do |object|
called << object
end
refute_empty called
assert_empty @stack
end
end