Sha256: 3be8a2084b77cfb8042ea5c967ef41e505c5516b3a74e38c5767e041e078b432

Contents?: true

Size: 921 Bytes

Versions: 2

Compression:

Stored size: 921 Bytes

Contents

require 'spec_helper'

class Interleaving < Goliath::API
  use Goliath::Rack::Params

  def response(env)
    delay = env.params['delay']
    EM::Synchrony.sleep(delay.to_f)

    [200, {}, delay]
  end
end

describe 'HTTP Pipelining support' do
  it 'serves multiple requests via single connection' do
    with_api(Interleaving, :port => 9901) do
      start = Time.now.to_f
      res = []

      conn = EM::HttpRequest.new('http://localhost:9901')
      r1 = conn.aget :query => {:delay => 0.3}, :keepalive => true
      r2 = conn.aget :query => {:delay => 0.2}

      r1.errback { fail }
      r1.callback do |c|
        res << c.response
        expect(c.response).to match('0.3')
      end

      r2.errback { fail }
      r2.callback do |c|
        res << c.response

        expect(res).to eq(['0.3', '0.2'])
        expect(Time.now.to_f - start).to be_within(0.1).of(0.3)

        stop
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
goliath-1.0.7 spec/integration/pipelining_spec.rb
goliath-1.0.6 spec/integration/pipelining_spec.rb