varnishtest "scheme based normalization (rfc3982 6.3.2)" feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'" 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 "${HAPROXY_TEST_TIMEOUT-5s}" timeout client "${HAPROXY_TEST_TIMEOUT-5s}" timeout server "${HAPROXY_TEST_TIMEOUT-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