test/test_pool.rb in random-port-0.5.1 vs test/test_pool.rb in random-port-0.6.0

- old
+ new

@@ -21,90 +21,111 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. require 'minitest/autorun' +require 'threads' require_relative '../lib/random-port/pool' # Pool test. # Author:: Yegor Bugayenko (yegor256@gmail.com) # Copyright:: Copyright (c) 2018 Yegor Bugayenko # License:: MIT -module RandomPort - class TestAmount < Minitest::Test - def test_acquires_and_releases - pool = Pool.new - port = pool.acquire - assert(!port.nil?) - assert(port.positive?) - pool.release(port) - end +class RandomPort::TestPool < Minitest::Test + def test_acquires_and_releases + pool = RandomPort::Pool.new + port = pool.acquire + server = TCPServer.new(port) + server.close + assert(!port.nil?) + assert(port.positive?) + pool.release(port) + end - def test_acquires_and_releases_three_ports - pool = Pool.new(limit: 3) - assert_equal(0, pool.size) - ports = pool.acquire(3, timeout: 16) - assert_equal(3, pool.size) - assert_equal(3, ports.count) - pool.release(ports) - assert_equal(0, pool.size) + def test_acquires_and_releases_three_ports + pool = RandomPort::Pool.new(limit: 3) + assert_equal(0, pool.size) + ports = pool.acquire(3, timeout: 16) + ports.each do |p| + server = TCPServer.new(p) + server.close end + assert_equal(3, pool.size) + assert_equal(3, ports.count) + pool.release(ports) + assert_equal(0, pool.size) + end - def test_acquires_and_releases_three_ports_in_block - pool = Pool.new(limit: 3) - assert_equal(0, pool.size) - pool.acquire(3, timeout: 16) do |ports| - assert(ports.is_a?(Array)) - assert_equal(3, ports.count) - assert_equal(3, pool.size) + def test_acquires_and_releases_three_ports_in_block + pool = RandomPort::Pool.new(limit: 3) + assert_equal(0, pool.size) + pool.acquire(3, timeout: 16) do |ports| + assert(ports.is_a?(Array)) + assert_equal(3, ports.count) + assert_equal(3, pool.size) + ports.each do |p| + server = TCPServer.new(p) + server.close end - assert_equal(0, pool.size) end + assert_equal(0, pool.size) + end - def test_acquires_and_releases_in_block - result = Pool.new.acquire do |port| - assert(!port.nil?) - assert(port.positive?) - 123 - end - assert_equal(123, result) + def test_acquires_and_releases_in_block + result = RandomPort::Pool.new.acquire do |port| + assert(!port.nil?) + assert(port.positive?) + 123 end + assert_equal(123, result) + end - def test_acquires_and_releases_safely - pool = Pool.new - assert_raises do - pool.acquire do - raise 'Itended' + def test_acquires_and_releases_in_threads + pool = RandomPort::Pool.new + Threads.new(100).assert do + pool.acquire(5) do |ports| + ports.each do |p| + server = TCPServer.new(p) + server.close end end - assert(pool.count.zero?) end + end - def test_acquires_and_releases_from_singleton - Pool::SINGLETON.acquire do |port| - assert(!port.nil?) - assert(port.positive?) + def test_acquires_and_releases_safely + pool = RandomPort::Pool.new + assert_raises do + pool.acquire do + raise 'Itended' end end + assert(pool.count.zero?) + end - def test_acquires_unique_numbers - total = 25 - numbers = (0..total - 1).map { Pool::SINGLETON.acquire } - assert_equal(total, numbers.uniq.count) + def test_acquires_and_releases_from_singleton + RandomPort::Pool::SINGLETON.acquire do |port| + assert(!port.nil?) + assert(port.positive?) end + end - def test_raises_when_too_many - pool = Pool.new(limit: 1) - pool.acquire - assert_raises Pool::Timeout do - pool.acquire(timeout: 0.1) - end - end + def test_acquires_unique_numbers + total = 25 + numbers = (0..total - 1).map { RandomPort::Pool::SINGLETON.acquire } + assert_equal(total, numbers.uniq.count) + end - def test_acquires_unique_numbers_in_no_sync_mode - total = 25 - pool = Pool.new(sync: false) - numbers = (0..total - 1).map { pool.acquire } - assert_equal(total, numbers.uniq.count) + def test_raises_when_too_many + pool = RandomPort::Pool.new(limit: 1) + pool.acquire + assert_raises RandomPort::Pool::Timeout do + pool.acquire(timeout: 0.1) end + end + + def test_acquires_unique_numbers_in_no_sync_mode + total = 25 + pool = RandomPort::Pool.new(sync: false) + numbers = (0..total - 1).map { pool.acquire } + assert_equal(total, numbers.uniq.count) end end