Sha256: e99f1438b2a900542aec5832f2c70d946781074786fd5ab9393cc043a8d7a68d

Contents?: true

Size: 1.04 KB

Versions: 2

Compression:

Stored size: 1.04 KB

Contents

require 'promise_pool/test'

describe PromisePool::ThreadPool do
  before do
    @pool = ThreadPool.new(1)
    @promise = Promise.new
  end

  after do
    @pool.shutdown
    @pool.size.should.eq 0
  end

  def defer &block
    @promise.defer(@pool, &block)
  end

  would 'use the pool if passed' do
    @pool.size.should.eq 0
    defer do
      @pool.size
    end.yield.should.eq 1
  end

  would 'call in thread pool if pool_size > 0' do
    flag = 0
    rd, wr = IO.pipe
    defer do
      rd.gets
      flag.should.eq 0
      flag += 1
      raise 'nnf'
    end
    p1 = Promise.new
    p1.defer(@pool) do # block until promise #0 is done because max_size == 1
      flag.should.eq 1
      flag += 1
      raise 'boom'
    end
    wr.puts # start promise #0

    # even if we're not yielding, the block should still be resolved,
    # so there should not have any deadlock here.
    expect.raise(RuntimeError){       p1.yield }.message.should.eq 'boom'
    expect.raise(RuntimeError){ @promise.yield }.message.should.eq 'nnf'

    flag.should.eq 2
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
promise_pool-0.9.1 test/test_thread_pool.rb
promise_pool-0.9.0 test/test_thread_pool.rb