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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
# Run server with: ruby -rubygems timeout_server.rb -p 9128
# Note that curl requires all timeouts to be integers -
# curl_easy_setopt does not have a provision for floating-point values
class TestCurbTimeouts < Test::Unit::TestCase
def test_no_timeout_by_default
curl = Curl::Easy.new(wait_url(2))
start = Time.now
assert_equal true, curl.http_get
elapsed = Time.now - start
assert elapsed > 2
end
def test_overall_timeout_on_dead_transfer
curl = Curl::Easy.new(wait_url(2))
curl.timeout = 1
assert_raise(Curl::Err::TimeoutError) do
curl.http_get
end
end
def test_clearing_timeout
curl = Curl::Easy.new(wait_url(2))
curl.timeout = 1
curl.timeout = nil
start = Time.now
assert_equal true, curl.http_get
elapsed = Time.now - start
assert elapsed > 2
end
def test_overall_timeout_on_slow_transfer
curl = Curl::Easy.new(serve_url(100, 2, 3))
curl.timeout = 1
# transfer is aborted despite data being exchanged
assert_raise(Curl::Err::TimeoutError) do
curl.http_get
end
end
def test_low_speed_time_on_slow_transfer
curl = Curl::Easy.new(serve_url(100, 1, 3))
curl.low_speed_time = 2
# use default low_speed_limit of 1
assert true, curl.http_get
end
def test_low_speed_time_on_very_slow_transfer
# send data slower than required
curl = Curl::Easy.new(serve_url(10, 2, 3))
curl.low_speed_time = 1
# XXX for some reason this test fails if low speed limit is not specified
curl.low_speed_limit = 1
# use default low_speed_limit of 1
assert_raise(Curl::Err::TimeoutError) do
curl.http_get
end
end
def test_low_speed_limit_on_slow_transfer
curl = Curl::Easy.new(serve_url(10, 1, 3))
curl.low_speed_time = 2
curl.low_speed_limit = 1000
assert_raise(Curl::Err::TimeoutError) do
curl.http_get
end
end
def test_clearing_low_speed_time
curl = Curl::Easy.new(serve_url(100, 2, 3))
curl.low_speed_time = 1
curl.low_speed_time = nil
assert_equal true, curl.http_get
end
def test_clearing_low_speed_limit
curl = Curl::Easy.new(serve_url(10, 1, 3))
curl.low_speed_time = 2
curl.low_speed_limit = 1000
curl.low_speed_limit = nil
assert_equal true, curl.http_get
end
private
def wait_url(time)
"#{server_base}/wait/#{time}"
end
def serve_url(chunk_size, time, count)
"#{server_base}/serve/#{chunk_size}/every/#{time}/for/#{count}"
end
def server_base
'http://127.0.0.1:9128'
end
end
|