varnishtest "HTTP request tests: H1 to H1 (HTX mode supported only for HAProxy >= 1.9)"
#REQUIRE_VERSION=1.6

# Run it with HAPROXY_PROGRAM=$PWD/haproxy varnishtest -l -k -t 1 "$1"

feature ignore_unknown_macro

server s1 {
	##
	## Handle GET requests
	##
	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 1"

	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 2"

	rxreq
	expect req.bodylen == 38
	expect req.body == "this must be delivered, like it or not"
	txresp \
	  -status 200 \
	  -body "response 3"

	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 4"

	accept

	##
	## Handle HEAD requests
	##
	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 1"

	accept

	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 2"

	accept

	rxreq
	expect req.bodylen == 38
	expect req.body == "this must be delivered, like it or not"
	txresp \
	  -status 200 \
	  -body "response 3"

	accept

	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 4"

	accept

	##
	## Handle POST requests
	##
	# POST request without body
	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 1"

	# POST request without body
	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 2"

	# POST request with a body
	rxreq
	expect req.bodylen == 12
	expect req.body == "this is sent"
	txresp \
	  -status 200 \
	  -body "response 3"

	# POST request without body
	rxreq
	expect req.bodylen == 0
	expect req.body == ""
	txresp \
	  -status 200 \
	  -body "response 4"
} -repeat 3 -start

haproxy h1 -conf {
    defaults
	mode http
	${no-htx} option http-use-htx
	timeout connect 1s
	timeout client  1s
	timeout server  1s

    listen feh1
	bind "fd@${feh1}"
	#bind "fd@${feh2}" proto h2
	server s1 ${s1_addr}:${s1_port}
} -start

# GET requests
client c1h1 -connect ${h1_feh1_sock} {
	# first request is valid
	txreq \
	  -req "GET" \
	  -url "/test1.html"
	rxresp
	expect resp.status == 200
	expect resp.body == "response 1"

	# second request is valid and advertises C-L:0
	txreq \
	  -req "GET" \
	  -url "/test2.html" \
          -hdr "content-length: 0"
	rxresp
	expect resp.status == 200
	expect resp.body == "response 2"

	# third request sends a body with a GET
	txreq \
	  -req "GET" \
	  -url "/test3.html" \
          -body "this must be delivered, like it or not"
	rxresp
	expect resp.status == 200
	expect resp.body == "response 3"

	# fourth request is valid and advertises C-L:0, and close, and is
	# followed by a string "this is not sent\r\n\r\n" which must be
	# dropped.
	txreq \
	  -req "GET" \
	  -url "/test4.html" \
          -hdr "content-length: 0" \
          -hdr "connection: close"
	# "this is not sent"
	sendhex "74787973207973206E6F742073656E740D0A0D0A"
	rxresp
	expect resp.status == 200
	expect resp.body == "response 4"

	# the connection is expected to be closed and no more response must
	# arrive here.
	expect_close
} -run

# HEAD requests
# Note: for now they fail with varnishtest, which expects the amount of
# data advertised in the content-length response.
client c2h1 -connect ${h1_feh1_sock} {
	# first request is valid
	txreq \
	  -req "HEAD" \
	  -url "/test11.html"
	rxresp
	expect resp.status == 200
	expect resp.body == ""

	# second request is valid and advertises C-L:0
	txreq \
	  -req "HEAD" \
	  -url "/test12.html" \
          -hdr "content-length: 0"
	rxresp
	expect resp.status == 200
	expect resp.body == ""

	# third request sends a body with a HEAD
	txreq \
	  -req "HEAD" \
	  -url "/test13.html" \
          -body "this must be delivered, like it or not"
	rxresp
	expect resp.status == 200
	expect resp.body == ""

	# fourth request is valid and advertises C-L:0, and close, and is
	# followed by a string "this is not sent\r\n\r\n" which must be
	# dropped.
	txreq \
	  -req "HEAD" \
	  -url "/test14.html" \
          -hdr "content-length: 0" \
          -hdr "connection: close"
	# "this is not sent"
	sendhex "74787973207973206E6F742073656E740D0A0D0A"
	rxresp
	expect resp.status == 200
	expect resp.body == ""

	# the connection is expected to be closed and no more response must
	# arrive here.
	expect_close
} -run

client c3h1 -connect ${h1_feh1_sock} {
	# first request is valid
	txreq \
	  -req "POST" \
	  -url "/test21.html"
	rxresp
	expect resp.status == 200
	expect resp.body == "response 1"

	# second request is valid and advertises C-L:0
	txreq \
	  -req "POST" \
	  -url "/test22.html" \
          -hdr "content-length: 0"
	rxresp
	expect resp.status == 200
	expect resp.body == "response 2"

	# third request is valid and advertises (and sends) somme contents
	txreq \
	  -req "POST" \
	  -url "/test23.html" \
	  -body "this is sent"
	rxresp
	expect resp.status == 200
	expect resp.body == "response 3"

	# fourth request is valid and advertises C-L:0, and close, and is
	# followed by a string "this is not sent\r\n\r\n" which must be
	# dropped.
	txreq \
	  -req "POST" \
	  -url "/test24.html" \
          -hdr "content-length: 0" \
          -hdr "connection: close"
	# "this is not sent"
	sendhex "74787973207973206E6F742073656E740D0A0D0A"
	rxresp
	expect resp.status == 200
	expect resp.body == "response 4"

	# the connection is expected to be closed and no more response must
	# arrive here.
	expect_close
} -run
