1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
require 'async'
class TestFiberSimple < Test::Unit::TestCase
include TestServerMethods
def setup
server_setup
end
def test_simple_concurrent
puts "\n=== Testing simple concurrent requests ==="
results = []
if Async.respond_to?(:run)
Async.run do |task|
puts "Fiber scheduler available: #{Curl::Multi.fiber_scheduler_available?}"
multi = Curl::Multi.new
# Add 3 requests
3.times do |i|
easy = Curl::Easy.new(TestServlet.url_to("/slow?seconds=0.2&id=#{i}"))
easy.on_complete { |curl|
results << { id: i, code: curl.response_code }
puts "Request #{i} completed"
}
multi.add(easy)
end
puts "Starting perform..."
start_time = Time.now
multi.perform # No block
elapsed = Time.now - start_time
puts "Perform completed in #{elapsed.round(2)}s"
end
else
Async do |task|
puts "Fiber scheduler available: #{Curl::Multi.fiber_scheduler_available?}"
multi = Curl::Multi.new
# Add 3 requests
3.times do |i|
easy = Curl::Easy.new(TestServlet.url_to("/slow?seconds=0.2&id=#{i}"))
easy.on_complete { |curl|
results << { id: i, code: curl.response_code }
puts "Request #{i} completed"
}
multi.add(easy)
end
puts "Starting perform..."
start_time = Time.now
multi.perform # No block
elapsed = Time.now - start_time
puts "Perform completed in #{elapsed.round(2)}s"
end
end
assert_equal 3, results.size
results.each { |r| assert_equal 200, r[:code] }
end
end
|