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:
parent
4ca0f363a1
commit
ff5adf82a5
|
@ -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
|
Loading…
Reference in New Issue