blob: d9cc6aec80b7e6d061ca12ecfc1cf5c6c1dd2f4e [file] [log] [blame]
varnishtest "A test for http-request-buffer option"
feature ignore_unknown_macro
# This test checks HTTP request buffering feature.
# We run one server s1 which can serve only one client (no -repeat argument here).
# c1 client uses a malformed request which is not transferred to s1 server
# thanks to "http-buffer-request". If this was the case, c2 client
# could not connect to s1 server and this would lead to make this test fail.
server s1 {
rxreq
expect req.bodylen == 257
txresp
} -start
syslog S -level info {
recv
expect ~ "[^:\\[ ]*\\[[0-9]*\\]: .* .* fe1 fe1/<NOSRV> .* 408 .* - - cD-- .* .* \"GET /this-is-a-long-url-this-is-a-long-url-this-is-a-long-url-this-is-a-long-url-this-is-a-long-url-this-is-a-long-url-this-is-a-long-url HTTP/1\\.1\""
recv
expect ~ "[^:\\[ ]*\\[[0-9]*\\]: .* .* fe1 be1/srv1 [0-9]*/[0-9]*/[0-9]*/[0-9]*/[0-9]* 200 .* - - ---- .* .* \"GET / HTTP/1\\.1\""
} -start
haproxy h1 -conf {
defaults
mode http
timeout client 100ms
timeout server 1s
timeout connect 1s
backend be1
server srv1 ${s1_addr}:${s1_port}
frontend fe1
option httplog
option http-buffer-request
log ${S_addr}:${S_port} local0 debug err
bind "fd@${fe1}"
use_backend be1
} -start
client c1 -connect ${h1_fe1_sock} {
send "GET"
send " "
send "/this-is-a-long-url"
send "-this-is-a-long-url"
send "-this-is-a-long-url"
send "-this-is-a-long-url"
send "-this-is-a-long-url"
send "-this-is-a-long-url"
send "-this-is-a-long-url"
send " HTT"
send "P/1.1"
send "\r"
send "\n"
send "Content-Length: 209\r\n\r\n"
send "abcdefghijklmnopqrstuvwxyz"
send "abcdefghijklmnopqrstuvwxyz"
send "abcdefghijklmnopqrstuvwxyz"
send "abcdefghijklmnopqrstuvwxyz"
send "abcdefghijklmnopqrstuvwxyz"
send "abcdefghijklmnopqrstuvwxyz"
send "abcdefghijklmnopqrstuvwxyz"
send "abcdefghijklmnopqrstuvwxyz"
rxresp
expect resp.status == 408
} -run
client c2 -connect ${h1_fe1_sock} {
txreq -bodylen 257
rxresp
expect resp.status == 200
} -run
syslog S -wait