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 include Goliath::TestHelper 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