2018-12-19 10:49:39 +00:00
|
|
|
varnishtest "HTTP request tests: H2 to H1 (HTX and legacy mode)"
|
2018-12-13 18:35:29 +00:00
|
|
|
#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
|
2019-01-24 10:49:37 +00:00
|
|
|
# the next request is never received
|
2018-12-13 18:35:29 +00:00
|
|
|
} -repeat 2 -start
|
|
|
|
|
|
|
|
haproxy h1 -conf {
|
|
|
|
defaults
|
|
|
|
#log stdout format raw daemon
|
|
|
|
mode http
|
2018-12-14 08:51:48 +00:00
|
|
|
option http-buffer-request
|
2018-12-19 10:49:39 +00:00
|
|
|
${no-htx} option http-use-htx
|
2018-12-13 18:35:29 +00:00
|
|
|
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
|
|
|
|
|
2019-01-24 10:49:37 +00:00
|
|
|
# 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.
|
2018-12-13 18:35:29 +00:00
|
|
|
stream 7 {
|
|
|
|
barrier b4 sync
|
|
|
|
txreq \
|
|
|
|
-req "GET" \
|
|
|
|
-scheme "https" \
|
|
|
|
-url "/test4.html" \
|
2019-01-24 10:49:37 +00:00
|
|
|
-hdr "content-length" "2" \
|
2018-12-13 18:35:29 +00:00
|
|
|
-nostrend
|
|
|
|
txdata -data "this is sent and ignored"
|
2019-01-24 10:49:37 +00:00
|
|
|
rxrst
|
2018-12-13 18:35:29 +00:00
|
|
|
} -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
|
|
|
|
|
2019-01-24 10:49:37 +00:00
|
|
|
# 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.
|
2018-12-13 18:35:29 +00:00
|
|
|
stream 7 {
|
|
|
|
barrier b4 sync
|
|
|
|
txreq \
|
|
|
|
-req "POST" \
|
|
|
|
-scheme "https" \
|
|
|
|
-url "/test24.html" \
|
2019-01-24 10:49:37 +00:00
|
|
|
-hdr "content-length" "2" \
|
2018-12-13 18:35:29 +00:00
|
|
|
-nostrend
|
|
|
|
txdata -data "this is sent and ignored"
|
2019-01-24 10:49:37 +00:00
|
|
|
rxrst
|
2018-12-13 18:35:29 +00:00
|
|
|
} -run
|
|
|
|
} -run
|