ruby/test/net/http/test_http.rb

321 строка
8.7 KiB
Ruby

# $Id$
require 'test/unit'
require 'net/http'
require 'stringio'
require File.expand_path("utils", File.dirname(__FILE__))
module TestNetHTTP_version_1_1_methods
def test_s_get
assert_equal $test_net_http_data,
Net::HTTP.get(config('host'), '/', config('port'))
end
def test_head
start {|http|
res = http.head('/')
assert_kind_of Net::HTTPResponse, res
assert_equal $test_net_http_data_type, res['Content-Type']
assert_equal $test_net_http_data.size, res['Content-Length'].to_i
}
end
def test_get
start {|http|
_test_get__get http
_test_get__iter http
_test_get__chunked http
}
end
def _test_get__get(http)
res, body = http.get('/')
assert_kind_of Net::HTTPResponse, res
assert_kind_of String, res.body
assert_kind_of String, body
assert_not_nil res['content-length']
assert_equal $test_net_http_data.size, res['content-length'].to_i
assert_equal $test_net_http_data_type, res['Content-Type']
assert_equal $test_net_http_data.size, body.size
assert_equal $test_net_http_data, body
assert_equal $test_net_http_data.size, res.body.size
assert_equal $test_net_http_data, res.body
end
def _test_get__iter(http)
buf = ''
res, body = http.get('/') {|s| buf << s }
assert_kind_of Net::HTTPResponse, res
# assert_kind_of String, res.body
# assert_kind_of String, body
assert_not_nil res['content-length']
assert_equal $test_net_http_data.size, res['content-length'].to_i
assert_equal $test_net_http_data_type, res['Content-Type']
assert_equal $test_net_http_data.size, buf.size
assert_equal $test_net_http_data, buf
# assert_equal $test_net_http_data.size, res.body.size
# assert_equal $test_net_http_data, res.body
end
def _test_get__chunked(http)
buf = ''
res, body = http.get('/') {|s| buf << s }
assert_kind_of Net::HTTPResponse, res
# assert_kind_of String, res.body
# assert_kind_of String, body
assert_not_nil res['content-length']
assert_equal $test_net_http_data.size, res['content-length'].to_i
assert_equal $test_net_http_data_type, res['Content-Type']
assert_equal $test_net_http_data.size, buf.size
assert_equal $test_net_http_data, buf
# assert_equal $test_net_http_data.size, res.body.size
# assert_equal $test_net_http_data, res.body
end
def test_get__break
i = 0
start {|http|
http.get('/') do |str|
i += 1
break
end
}
assert_equal 1, i
end
def test_get__implicit_start
res, body = new().get('/')
assert_kind_of Net::HTTPResponse, res
assert_kind_of String, body
assert_kind_of String, res.body
assert_not_nil res['content-length']
assert_equal $test_net_http_data_type, res['Content-Type']
assert_equal $test_net_http_data.size, res.body.size
assert_equal $test_net_http_data, res.body
end
def test_get2
start {|http|
http.get2('/') {|res|
assert_kind_of Net::HTTPResponse, res
assert_kind_of Net::HTTPResponse, res.header
assert_not_nil res['content-length']
assert_equal $test_net_http_data_type, res['Content-Type']
assert_kind_of String, res.body
assert_kind_of String, res.entity
assert_equal $test_net_http_data.size, res.body.size
assert_equal $test_net_http_data, res.body
assert_equal $test_net_http_data, res.entity
}
}
end
def test_post
start {|http|
_test_post__base http
_test_post__file http
}
end
def _test_post__base(http)
uheader = {}
uheader['Accept'] = 'application/octet-stream'
data = 'post data'
res, body = http.post('/', data)
assert_kind_of Net::HTTPResponse, res
assert_kind_of String, body
assert_kind_of String, res.body
assert_equal data, body
assert_equal data, res.body
assert_equal data, res.entity
end
def _test_post__file(http)
data = 'post data'
f = StringIO.new
http.post('/', data, nil, f)
assert_equal data, f.string
end
def test_s_post_form
res = Net::HTTP.post_form(
URI.parse("http://#{config('host')}:#{config('port')}/"),
"a" => "x")
assert_equal ["a=x"], res.body.split(/[;&]/).sort
res = Net::HTTP.post_form(
URI.parse("http://#{config('host')}:#{config('port')}/"),
"a" => "x",
"b" => "y")
assert_equal ["a=x", "b=y"], res.body.split(/[;&]/).sort
res = Net::HTTP.post_form(
URI.parse("http://#{config('host')}:#{config('port')}/"),
"a" => ["x1", "x2"],
"b" => "y")
assert_equal ["a=x1", "a=x2", "b=y"], res.body.split(/[;&]/).sort
end
end
module TestNetHTTP_version_1_2_methods
def test_request
start {|http|
_test_request__GET http
_test_request__file http
# _test_request__range http # WEBrick does not support Range: header.
_test_request__HEAD http
_test_request__POST http
_test_request__stream_body http
}
end
def _test_request__GET(http)
req = Net::HTTP::Get.new('/')
http.request(req) {|res|
assert_kind_of Net::HTTPResponse, res
assert_kind_of String, res.body
assert_not_nil res['content-length']
assert_equal $test_net_http_data.size, res['content-length'].to_i
assert_equal $test_net_http_data.size, res.body.size
assert_equal $test_net_http_data, res.body
}
end
def _test_request__file(http)
req = Net::HTTP::Get.new('/')
http.request(req) {|res|
assert_kind_of Net::HTTPResponse, res
assert_not_nil res['content-length']
assert_equal $test_net_http_data.size, res['content-length'].to_i
f = StringIO.new("".force_encoding("ASCII-8BIT"))
res.read_body f
assert_equal $test_net_http_data.bytesize, f.string.bytesize
assert_equal $test_net_http_data.encoding, f.string.encoding
assert_equal $test_net_http_data, f.string
}
end
def _test_request__range(http)
req = Net::HTTP::Get.new('/')
req['range'] = 'bytes=0-5'
assert_equal $test_net_http_data[0,6], http.request(req).body
end
def _test_request__HEAD(http)
req = Net::HTTP::Head.new('/')
http.request(req) {|res|
assert_kind_of Net::HTTPResponse, res
assert_not_nil res['content-length']
assert_equal $test_net_http_data.size, res['content-length'].to_i
assert_nil res.body
}
end
def _test_request__POST(http)
data = 'post data'
req = Net::HTTP::Post.new('/')
req['Accept'] = $test_net_http_data_type
http.request(req, data) {|res|
assert_kind_of Net::HTTPResponse, res
assert_equal data.size, res['content-length'].to_i
assert_kind_of String, res.body
assert_equal data, res.body
}
end
def _test_request__stream_body(http)
req = Net::HTTP::Post.new('/')
data = $test_net_http_data
req.content_length = data.size
req.body_stream = StringIO.new(data)
res = http.request(req)
assert_kind_of Net::HTTPResponse, res
assert_kind_of String, res.body
assert_equal data.size, res.body.size
assert_equal data, res.body
end
def test_send_request
start {|http|
_test_send_request__GET http
_test_send_request__POST http
}
end
def _test_send_request__GET(http)
res = http.send_request('GET', '/')
assert_kind_of Net::HTTPResponse, res
assert_equal $test_net_http_data.size, res['content-length'].to_i
assert_kind_of String, res.body
assert_equal $test_net_http_data, res.body
end
def _test_send_request__POST(http)
data = 'aaabbb cc ddddddddddd lkjoiu4j3qlkuoa'
res = http.send_request('POST', '/', data)
assert_kind_of Net::HTTPResponse, res
assert_kind_of String, res.body
assert_equal data.size, res.body.size
assert_equal data, res.body
end
end
class TestNetHTTP_version_1_1 < Test::Unit::TestCase
CONFIG = {
'host' => '127.0.0.1',
'port' => 10081,
'proxy_host' => nil,
'proxy_port' => nil,
}
include TestNetHTTPUtils
include TestNetHTTP_version_1_1_methods
def new
Net::HTTP.version_1_1
super
end
end
class TestNetHTTP_v1_2 < Test::Unit::TestCase
CONFIG = {
'host' => '127.0.0.1',
'port' => 10081,
'proxy_host' => nil,
'proxy_port' => nil,
}
include TestNetHTTPUtils
include TestNetHTTP_version_1_1_methods
include TestNetHTTP_version_1_2_methods
def new
Net::HTTP.version_1_2
super
end
end
=begin
class TestNetHTTP_proxy < Test::Unit::TestCase
CONFIG = {
'host' => '127.0.0.1',
'port' => 10081,
'proxy_host' => '127.0.0.1',
'proxy_port' => 10082,
}
include TestNetHTTPUtils
include TestNetHTTP_version_1_1_methods
include TestNetHTTP_version_1_2_methods
def new
Net::HTTP.version_1_2
super
end
end
=end