Sha256: e043844434949062eef7966ad3a44ac8e42608be659b9a0e78143b15d9417d1e

Contents?: true

Size: 895 Bytes

Versions: 2

Compression:

Stored size: 895 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) do
      start = Time.now.to_f
      res = []

      conn = EM::HttpRequest.new('http://localhost:9000')
      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
        c.response.should match('0.3')
      end

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

        res.should == ['0.3', '0.2']
        (Time.now.to_f - start).should 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-0.9.2 spec/integration/pipelining_spec.rb
goliath-0.9.1 spec/integration/pipelining_spec.rb