mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
This commit was manufactured by cvs2svn to create branch 'ruby_1_8'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7783 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ee61635f5a
commit
9f1945ac53
11 changed files with 927 additions and 0 deletions
260
test/webrick/test_httpserver.rb
Normal file
260
test/webrick/test_httpserver.rb
Normal file
|
@ -0,0 +1,260 @@
|
|||
require "test/unit"
|
||||
require "net/http"
|
||||
require "webrick"
|
||||
require File.join(File.dirname(__FILE__), "utils.rb")
|
||||
|
||||
class TestWEBrickHTTPServer < Test::Unit::TestCase
|
||||
def test_mount
|
||||
httpd = WEBrick::HTTPServer.new(
|
||||
:Logger => WEBrick::Log.new(TestWEBrick::NullWriter),
|
||||
:DoNotListen=>true
|
||||
)
|
||||
httpd.mount("/", :Root)
|
||||
httpd.mount("/foo", :Foo)
|
||||
httpd.mount("/foo/bar", :Bar, :bar1)
|
||||
httpd.mount("/foo/bar/baz", :Baz, :baz1, :baz2)
|
||||
|
||||
serv, opts, script_name, path_info = httpd.search_servlet("/")
|
||||
assert_equal(:Root, serv)
|
||||
assert_equal([], opts)
|
||||
assert_equal(script_name, "")
|
||||
assert_equal(path_info, "/")
|
||||
|
||||
serv, opts, script_name, path_info = httpd.search_servlet("/sub")
|
||||
assert_equal(:Root, serv)
|
||||
assert_equal([], opts)
|
||||
assert_equal(script_name, "")
|
||||
assert_equal(path_info, "/sub")
|
||||
|
||||
serv, opts, script_name, path_info = httpd.search_servlet("/sub/")
|
||||
assert_equal(:Root, serv)
|
||||
assert_equal([], opts)
|
||||
assert_equal(script_name, "")
|
||||
assert_equal(path_info, "/sub/")
|
||||
|
||||
serv, opts, script_name, path_info = httpd.search_servlet("/foo")
|
||||
assert_equal(:Foo, serv)
|
||||
assert_equal([], opts)
|
||||
assert_equal(script_name, "/foo")
|
||||
assert_equal(path_info, "")
|
||||
|
||||
serv, opts, script_name, path_info = httpd.search_servlet("/foo/")
|
||||
assert_equal(:Foo, serv)
|
||||
assert_equal([], opts)
|
||||
assert_equal(script_name, "/foo")
|
||||
assert_equal(path_info, "/")
|
||||
|
||||
serv, opts, script_name, path_info = httpd.search_servlet("/foo/sub")
|
||||
assert_equal(:Foo, serv)
|
||||
assert_equal([], opts)
|
||||
assert_equal(script_name, "/foo")
|
||||
assert_equal(path_info, "/sub")
|
||||
|
||||
serv, opts, script_name, path_info = httpd.search_servlet("/foo/bar")
|
||||
assert_equal(:Bar, serv)
|
||||
assert_equal([:bar1], opts)
|
||||
assert_equal(script_name, "/foo/bar")
|
||||
assert_equal(path_info, "")
|
||||
|
||||
serv, opts, script_name, path_info = httpd.search_servlet("/foo/bar/baz")
|
||||
assert_equal(:Baz, serv)
|
||||
assert_equal([:baz1, :baz2], opts)
|
||||
assert_equal(script_name, "/foo/bar/baz")
|
||||
assert_equal(path_info, "")
|
||||
end
|
||||
|
||||
class Req
|
||||
attr_reader :port, :host
|
||||
def initialize(addr, port, host)
|
||||
@addr, @port, @host = addr, port, host
|
||||
end
|
||||
def addr
|
||||
[0,0,0,@addr]
|
||||
end
|
||||
end
|
||||
|
||||
def httpd(addr, port, host, ali)
|
||||
config ={
|
||||
:Logger => WEBrick::Log.new(TestWEBrick::NullWriter),
|
||||
:DoNotListen => true,
|
||||
:BindAddress => addr,
|
||||
:Port => port,
|
||||
:ServerName => host,
|
||||
:ServerAlias => ali,
|
||||
}
|
||||
return WEBrick::HTTPServer.new(config)
|
||||
end
|
||||
|
||||
def assert_eql?(v1, v2)
|
||||
assert_equal(v1.object_id, v2.object_id)
|
||||
end
|
||||
|
||||
def test_lookup_server
|
||||
addr1 = "192.168.100.1"
|
||||
addr2 = "192.168.100.2"
|
||||
addrz = "192.168.100.254"
|
||||
local = "127.0.0.1"
|
||||
port1 = 80
|
||||
port2 = 8080
|
||||
port3 = 10080
|
||||
portz = 32767
|
||||
name1 = "www.example.com"
|
||||
name2 = "www2.example.com"
|
||||
name3 = "www3.example.com"
|
||||
namea = "www.example.co.jp"
|
||||
nameb = "www.example.jp"
|
||||
namec = "www2.example.co.jp"
|
||||
named = "www2.example.jp"
|
||||
namez = "foobar.example.com"
|
||||
alias1 = [namea, nameb]
|
||||
alias2 = [namec, named]
|
||||
|
||||
host1 = httpd(nil, port1, name1, nil)
|
||||
hosts = [
|
||||
host2 = httpd(addr1, port1, name1, nil),
|
||||
host3 = httpd(addr1, port1, name2, alias1),
|
||||
host4 = httpd(addr1, port2, name1, nil),
|
||||
host5 = httpd(addr1, port2, name2, alias1),
|
||||
host6 = httpd(addr1, port2, name3, alias2),
|
||||
host7 = httpd(addr2, nil, name1, nil),
|
||||
host8 = httpd(addr2, nil, name2, alias1),
|
||||
host9 = httpd(addr2, nil, name3, alias2),
|
||||
host10 = httpd(local, nil, nil, nil),
|
||||
host11 = httpd(nil, port3, nil, nil),
|
||||
].sort_by{ rand }
|
||||
hosts.each{|h| host1.virtual_host(h) }
|
||||
|
||||
# connect to addr1
|
||||
assert_eql?(host2, host1.lookup_server(Req.new(addr1, port1, name1)))
|
||||
assert_eql?(host3, host1.lookup_server(Req.new(addr1, port1, name2)))
|
||||
assert_eql?(host3, host1.lookup_server(Req.new(addr1, port1, namea)))
|
||||
assert_eql?(host3, host1.lookup_server(Req.new(addr1, port1, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr1, port1, namez)))
|
||||
assert_eql?(host4, host1.lookup_server(Req.new(addr1, port2, name1)))
|
||||
assert_eql?(host5, host1.lookup_server(Req.new(addr1, port2, name2)))
|
||||
assert_eql?(host5, host1.lookup_server(Req.new(addr1, port2, namea)))
|
||||
assert_eql?(host5, host1.lookup_server(Req.new(addr1, port2, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr1, port2, namez)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addr1, port3, name1)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addr1, port3, name2)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addr1, port3, namea)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addr1, port3, nameb)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addr1, port3, namez)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr1, portz, name1)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr1, portz, name2)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr1, portz, namea)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr1, portz, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr1, portz, namez)))
|
||||
|
||||
# connect to addr2
|
||||
assert_eql?(host7, host1.lookup_server(Req.new(addr2, port1, name1)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port1, name2)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port1, namea)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port1, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr2, port1, namez)))
|
||||
assert_eql?(host7, host1.lookup_server(Req.new(addr2, port2, name1)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port2, name2)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port2, namea)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port2, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr2, port2, namez)))
|
||||
assert_eql?(host7, host1.lookup_server(Req.new(addr2, port3, name1)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port3, name2)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port3, namea)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, port3, nameb)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addr2, port3, namez)))
|
||||
assert_eql?(host7, host1.lookup_server(Req.new(addr2, portz, name1)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, portz, name2)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, portz, namea)))
|
||||
assert_eql?(host8, host1.lookup_server(Req.new(addr2, portz, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addr2, portz, namez)))
|
||||
|
||||
# connect to addrz
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port1, name1)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port1, name2)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port1, namea)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port1, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port1, namez)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port2, name1)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port2, name2)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port2, namea)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port2, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, port2, namez)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addrz, port3, name1)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addrz, port3, name2)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addrz, port3, namea)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addrz, port3, nameb)))
|
||||
assert_eql?(host11, host1.lookup_server(Req.new(addrz, port3, namez)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, portz, name1)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, portz, name2)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, portz, namea)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, portz, nameb)))
|
||||
assert_eql?(nil, host1.lookup_server(Req.new(addrz, portz, namez)))
|
||||
|
||||
# connect to localhost
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port1, name1)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port1, name2)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port1, namea)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port1, nameb)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port1, namez)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port2, name1)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port2, name2)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port2, namea)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port2, nameb)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port2, namez)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port3, name1)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port3, name2)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port3, namea)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port3, nameb)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, port3, namez)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, portz, name1)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, portz, name2)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, portz, namea)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, portz, nameb)))
|
||||
assert_eql?(host10, host1.lookup_server(Req.new(local, portz, namez)))
|
||||
end
|
||||
|
||||
def test_callbacks
|
||||
accepted = started = stopped = 0
|
||||
requested0 = requested1 = 0
|
||||
config = {
|
||||
:ServerName => "localhost",
|
||||
:AcceptCallback => Proc.new{ accepted += 1 },
|
||||
:StartCallback => Proc.new{ started += 1 },
|
||||
:StopCallback => Proc.new{ stopped += 1 },
|
||||
:RequestCallback => Proc.new{|req, res| requested0 += 1 },
|
||||
}
|
||||
TestWEBrick.start_httpserver(config){|server, addr, port|
|
||||
vhost_config = {
|
||||
:ServerName => "myhostname",
|
||||
:BindAddress => addr,
|
||||
:Port => port,
|
||||
:DoNotListen => true,
|
||||
:Logger => WEBrick::Log.new(TestWEBrick::NullWriter),
|
||||
:AccessLog => [],
|
||||
:RequestCallback => Proc.new{|req, res| requested1 += 1 },
|
||||
}
|
||||
server.virtual_host(WEBrick::HTTPServer.new(vhost_config))
|
||||
|
||||
true while server.status != :Running
|
||||
assert_equal(started, 1)
|
||||
assert_equal(stopped, 0)
|
||||
assert_equal(accepted, 0)
|
||||
|
||||
http = Net::HTTP.new(addr, port)
|
||||
req = Net::HTTP::Get.new("/")
|
||||
req["Host"] = "myhostname:#{port}"
|
||||
http.request(req){|res| assert_equal("404", res.code)}
|
||||
http.request(req){|res| assert_equal("404", res.code)}
|
||||
http.request(req){|res| assert_equal("404", res.code)}
|
||||
req["Host"] = "localhost:#{port}"
|
||||
http.request(req){|res| assert_equal("404", res.code)}
|
||||
http.request(req){|res| assert_equal("404", res.code)}
|
||||
http.request(req){|res| assert_equal("404", res.code)}
|
||||
assert_equal(6, accepted)
|
||||
assert_equal(3, requested0)
|
||||
assert_equal(3, requested1)
|
||||
}
|
||||
assert_equal(started, 1)
|
||||
assert_equal(stopped, 1)
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue