varnishtest "HTTP request tests: H2 to H1 (HTX and legacy mode)"
#REQUIRE_VERSION=1.9

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

feature ignore_unknown_macro

# synchronize requests between streams
barrier b1 cond 2 -cyclic
barrier b2 cond 2 -cyclic
barrier b3 cond 2 -cyclic
barrier b4 cond 2 -cyclic

server s1 {
	rxreq
	txresp \
	  -status 200 \
	  -body "response 1"

	barrier b2 sync
	rxreq
	txresp \
	  -status 200 \
	  -body "response 2"

	barrier b3 sync
	rxreq
	txresp \
	  -status 200 \
	  -body "response 3"

	barrier b4 sync
	# the next request is never received
} -repeat 2 -start

haproxy h1 -conf {
    defaults
	#log stdout format raw daemon
	mode http
	option http-buffer-request
	${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

client c1h2 -connect ${h1_feh2_sock} {
	txpri
	stream 0 {
		txsettings
		rxsettings
		txsettings -ack
		rxsettings
		expect settings.ack == true
	} -run

	# first request is valid
	stream 1 {
		txreq \
		  -req "GET" \
		  -scheme "https" \
		  -url "/test1.html"
		rxhdrs
		expect resp.status == 200
		rxdata -all
		expect resp.body == "response 1"
	} -run

	# second request is valid and advertises C-L:0
	stream 3 {
		barrier b2 sync
		txreq \
		  -req "GET" \
		  -scheme "https" \
		  -url "/test2.html" \
		  -hdr "content-length" "0"
		rxhdrs
		expect resp.status == 200
		rxdata -all
		expect resp.body == "response 2"
	} -run

	# third request sends a body with a GET
	stream 5 {
		barrier b3 sync
		txreq \
		  -req "GET" \
		  -scheme "https" \
		  -url "/test3.html" \
		  -nostrend \
		  -body "this must be delivered, like it or not"
		rxwinup
		rxhdrs
		expect resp.status == 200
		rxdata -all
		expect resp.body == "response 3"
	} -run

	# fourth request is valid and advertises C-L:2, and close, and is
	# followed by a string "this is not sent\r\n\r\n" which causes a
	# stream error of type PROTOCOL_ERROR.
	stream 7 {
		barrier b4 sync
		txreq \
		  -req "GET" \
		  -scheme "https" \
		  -url "/test4.html" \
		  -hdr "content-length" "2" \
		  -nostrend
		txdata -data "this is sent and ignored"
		rxrst
	} -run
} -run

# HEAD requests : don't work well yet
#client c2h2 -connect ${h1_feh2_sock} {
#	txpri
#	stream 0 {
#		txsettings
#		rxsettings
#		txsettings -ack
#		rxsettings
#		expect settings.ack == true
#	} -run
#
#	# first request is valid
#	stream 1 {
#		txreq \
#		  -req "HEAD" \
#		  -scheme "https" \
#		  -url "/test11.html"
#		rxhdrs
#		expect resp.status == 200
#		rxdata -all
#		expect resp.bodylen == 0
#	} -run
#
#	# second request is valid and advertises C-L:0
#	stream 3 {
#		barrier b2 sync
#		txreq \
#		  -req "HEAD" \
#		  -scheme "https" \
#		  -url "/test12.html" \
#		  -hdr "content-length" "0"
#		rxhdrs
#		expect resp.status == 200
#		rxdata -all
#		expect resp.bodylen == 0
#	} -run
#
#	# third request sends a body with a GET
#	stream 5 {
#		barrier b3 sync
#		txreq \
#		  -req "HEAD" \
#		  -scheme "https" \
#		  -url "/test13.html" \
#		  -nostrend \
#		  -body "this must be delivered, like it or not"
#		rxwinup
#		rxhdrs
#		expect resp.status == 200
#		rxdata -all
#		expect resp.bodylen == 0
#	} -run
#
#	# 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.
#	stream 7 {
#		barrier b4 sync
#		txreq \
#		  -req "HEAD" \
#		  -scheme "https" \
#		  -url "/test14.html" \
#		  -hdr "content-length" "0" \
#		  -nostrend
#		txdata -data "this is sent and ignored"
#		rxwinup
#		rxhdrs
#		expect resp.status == 200
#		rxdata -all
#		expect resp.bodylen == 0
#	} -run
#} -run

# POST requests
client c3h2 -connect ${h1_feh2_sock} {
	txpri
	stream 0 {
		txsettings
		rxsettings
		txsettings -ack
		rxsettings
		expect settings.ack == true
	} -run

	# first request is valid
	stream 1 {
		txreq \
		  -req "POST" \
		  -scheme "https" \
		  -url "/test21.html"
		rxhdrs
		expect resp.status == 200
		rxdata -all
		expect resp.body == "response 1"
	} -run

	# second request is valid and advertises C-L:0
	stream 3 {
		barrier b2 sync
		txreq \
		  -req "POST" \
		  -scheme "https" \
		  -url "/test22.html" \
		  -hdr "content-length" "0"
		rxhdrs
		expect resp.status == 200
		rxdata -all
		expect resp.body == "response 2"
	} -run

	# third request sends a body with a GET
	stream 5 {
		barrier b3 sync
		txreq \
		  -req "POST" \
		  -scheme "https" \
		  -url "/test23.html" \
		  -nostrend \
		  -body "this must be delivered, like it or not"
		rxwinup
		rxhdrs
		expect resp.status == 200
		rxdata -all
		expect resp.body == "response 3"
	} -run

	# fourth request is valid and advertises C-L:2, and close, and is
	# followed by a string "this is not sent\r\n\r\n" which results
	# in a stream error.
	stream 7 {
		barrier b4 sync
		txreq \
		  -req "POST" \
		  -scheme "https" \
		  -url "/test24.html" \
		  -hdr "content-length" "2" \
		  -nostrend
		txdata -data "this is sent and ignored"
		rxrst
	} -run
} -run
