mirror of
https://github.com/mperham/connection_pool
synced 2023-03-27 23:22:21 -04:00
3eaba661b8
* 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`.
150 lines
2.6 KiB
Ruby
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
|