REGTEST: add a few HTTP messaging tests

These tests send GET/HEAD/POST requests in H1 and H2, with and without
HTX, with and without a body, and verify that the behaviour is the expected
one. For now HEAD requests have been commented out because in H1 they are
not really testable as varnishtest expects to read a body, and in H2 the
behaviour depends on HTX/legacy, indicating a bug in haproxy (it looks
like we can deliver some data in response to HEAD in legacy mode).
diff --git a/reg-tests/http-messaging/h00000.vtc b/reg-tests/http-messaging/h00000.vtc
new file mode 100644
index 0000000..3954f36
--- /dev/null
+++ b/reg-tests/http-messaging/h00000.vtc
@@ -0,0 +1,172 @@
+varnishtest "HTTP request tests: H1 to H1, legacy mode"
+#REQUIRE_VERSION=1.6
+
+# Run it with HAPROXY_PROGRAM=$PWD/haproxy varnishtest -l -k -t 1 "$1"
+
+feature ignore_unknown_macro
+
+server s1 {
+	rxreq
+	txresp \
+	  -status 200 \
+	  -body "response 1"
+
+	rxreq
+	txresp \
+	  -status 200 \
+	  -body "response 2"
+
+	rxreq
+	txresp \
+	  -status 200 \
+	  -body "response 3"
+
+	rxreq
+	txresp \
+	  -status 200 \
+	  -body "response 4"
+} -repeat 2 -start
+
+haproxy h1 -conf {
+    defaults
+	mode http
+	#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
+
+	# second request is valid and advertises C-L:0
+	txreq \
+	  -req "GET" \
+	  -url "/test2.html" \
+          -hdr "content-length: 0"
+	rxresp
+	expect resp.status == 200
+
+	# 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
+
+	# 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
+
+	# 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
+#
+#	# second request is valid and advertises C-L:0
+#	txreq \
+#	  -req "HEAD" \
+#	  -url "/test12.html" \
+#          -hdr "content-length: 0"
+#	rxresp
+#	expect resp.status == 200
+#
+#	# third request sends a body with a GET
+#	txreq \
+#	  -req "GET" \
+#	  -url "/test13.html" \
+#          -body "this must be delivered, like it or not"
+#	rxresp
+#	expect resp.status == 200
+#
+#	# 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
+#
+#	# the connection is expected to be closed and no more response must
+#	# arrive here.
+#	expect_close
+#} -run
+
+client c1h1 -connect ${h1_feh1_sock} {
+	# first request is valid
+	txreq \
+	  -req "POST" \
+	  -url "/test21.html"
+	rxresp
+	expect resp.status == 200
+
+	# second request is valid and advertises C-L:0
+	txreq \
+	  -req "POST" \
+	  -url "/test22.html" \
+          -hdr "content-length: 0"
+	rxresp
+	expect resp.status == 200
+
+	# 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
+
+	# 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
+
+	# the connection is expected to be closed and no more response must
+	# arrive here.
+	expect_close
+} -run