def test_multi_access
conns = 16
reqs = 32
th_grp = ThreadGroup.new
conns.times do
th_grp.add Thread.new{
cli_sock, svr_sock = socketpair
begin
@queue.push(svr_sock)
(reqs - 1).times do
cli_sock.print "GET / HTTP/1.1\r\n"
cli_sock.print "Host: localhost\r\n"
cli_sock.print "\r\n"
response = Rucy::Response.new
response.parse(cli_sock)
assert_equal('HTTP/1.1 200 OK', response.line)
assert(! response.headers('Connection').find{ |v| v =~ /close/i })
assert_equal('26', response.header('Content-Length'))
assert_equal('text/html', response.header('Content-Type'))
assert_match(response.header('Date'), /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4} \d{2}:\d{2}:\d{2} GMT$/)
assert_equal(Rucy::SERVER_TOKEN_LIST, response.header('Server'))
assert_equal("<html>Hello world.</html>\n", cli_sock.read(26))
end
cli_sock.print "GET / HTTP/1.1\r\n"
cli_sock.print "Host: localhost\r\n"
cli_sock.print "Connection: close\r\n"
cli_sock.print "\r\n"
response = Rucy::Response.new
response.parse(cli_sock)
assert_equal('HTTP/1.1 200 OK', response.line)
assert_equal('close', response.header('Connection'))
assert_equal('26', response.header('Content-Length'))
assert_equal('text/html', response.header('Content-Type'))
assert_match(response.header('Date'), /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4} \d{2}:\d{2}:\d{2} GMT$/)
assert_equal(Rucy::SERVER_TOKEN_LIST, response.header('Server'))
assert_equal("<html>Hello world.</html>\n", cli_sock.read(26))
ensure
cli_sock.close
end
}
end
for th in th_grp.list
th.join
end
end