REGTESTS: add http scheme-based normalization test

This test ensure that http scheme-based normalization is properly
applied on target URL and host header. It uses h2 clients as it is not
possible to specify an absolute url for h1 vtc clients.
This commit is contained in:
Amaury Denoyelle 2021-07-07 10:49:29 +02:00 committed by Christopher Faulet
parent 4ca0f363a1
commit ff5adf82a5
1 changed files with 125 additions and 0 deletions

View File

@ -0,0 +1,125 @@
varnishtest "scheme based normalization (rfc3982 6.3.2)"
#REQUIRE_VERSION=2.5
feature ignore_unknown_macro
syslog S1 -level info {
recv
expect ~ "^.* uri: GET http://hostname/ HTTP/2.0; host: {hostname}$"
recv
expect ~ "^.* uri: GET http://hostname:8080/ HTTP/2.0; host: {hostname:8080}$"
recv
expect ~ "^.* uri: GET https://hostname/ HTTP/2.0; host: {hostname}$"
recv
expect ~ "^.* uri: GET https://hostname:80/ HTTP/2.0; host: {hostname:80}$"
} -start
haproxy h1 -conf {
defaults
mode http
timeout connect 5s
timeout client 5s
timeout server 5s
frontend fe
bind "fd@${fe}" proto h2
http-request capture req.hdr(host) len 512
log-format "uri: %r; host: %hr"
log ${S1_addr}:${S1_port} len 2048 local0 debug err
http-request return status 200
} -start
# default port 80 with http scheme => should be normalized
client c1 -connect ${h1_fe_sock} {
txpri
stream 0 {
txsettings
rxsettings
txsettings -ack
rxsettings
expect settings.ack == true
} -run
stream 1 {
txreq \
-req "GET" \
-scheme "http" \
-url "/" \
-hdr ":authority" "hostname:80"
rxhdrs
expect resp.status == 200
} -run
} -run
# port 8080 with http scheme => no normalization
client c2 -connect ${h1_fe_sock} {
txpri
stream 0 {
txsettings
rxsettings
txsettings -ack
rxsettings
expect settings.ack == true
} -run
stream 1 {
txreq \
-req "GET" \
-scheme "http" \
-url "/" \
-hdr ":authority" "hostname:8080"
rxhdrs
expect resp.status == 200
} -run
} -run
# default port 443 with https scheme => should be normalized
client c3 -connect ${h1_fe_sock} {
txpri
stream 0 {
txsettings
rxsettings
txsettings -ack
rxsettings
expect settings.ack == true
} -run
stream 1 {
txreq \
-req "GET" \
-scheme "https" \
-url "/" \
-hdr ":authority" "hostname:443"
rxhdrs
expect resp.status == 200
} -run
} -run
# port 80 with https scheme => no normalization
client c4 -connect ${h1_fe_sock} {
txpri
stream 0 {
txsettings
rxsettings
txsettings -ack
rxsettings
expect settings.ack == true
} -run
stream 1 {
txreq \
-req "GET" \
-scheme "https" \
-url "/" \
-hdr ":authority" "hostname:80"
rxhdrs
expect resp.status == 200
} -run
} -run
syslog S1 -wait