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 {
    global
        # WT: limit false-positives causing "HTTP header incomplete" due to
        # idle server connections being randomly used and randomly expiring
        # under us.
        tune.idle-pool.shared off

    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
