Sha256: 621f45eec55cd31ec513f90cf92379b763d7d9e1cddf2f5d805ebbb9ef8106ba

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

require 'helper'

describe 'fiber connection pool' do
  before do
    skip 'swift/synchrony re-defines Adapter#execute' unless ENV['TEST_SWIFT_SYNCHRONY']

    require 'swift/fiber_connection_pool'
    EM.synchrony do
      Swift.setup(:default, Swift::Adapter::Postgres, db: 'swift_test')
      Swift.db.execute('drop table if exists users')
      Swift.db.execute('create table users(id serial primary key, name text)')

      @user = Class.new(Swift::Record) do
        store :users
        attribute :id,   Swift::Type::Integer, key: true, serial: true
        attribute :name, Swift::Type::String
      end

      10.times { @user.create(name: 'test') }
      EM.stop
    end
  end

  it 'can synchronize queries across fibers' do
    EM.run do
      Swift.setup(:default) { Swift::FiberConnectionPool.new(size: 2) {Swift::Adapter::Postgres.new(db: 'swift_test')}}

      @counts = []
      5.times do
        EM.synchrony do
          @counts << @user.execute('select * from users').selected_rows
        end
      end

      EM.add_timer(0.2) { EM.stop }
    end

    assert_equal 5,    @counts.size
    assert_equal [10], @counts.uniq
  end

  it 'sets appropriate backtrace for errors' do
    EM.synchrony do
      error = nil
      Swift.setup(:default) { Swift::FiberConnectionPool.new(size: 2) {Swift::Adapter::Postgres.new(db: 'swift_test')}}

      begin
        Swift.db.execute 'foo bar baz'
      rescue => e
        error = e
      end

      assert error
      assert_match %r{test/test_synchrony.rb:48}, error.backtrace.first
      EM.stop
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
swift-1.1.0 test/test_synchrony.rb