varnishtest "normalize-uri tests" #REQUIRE_VERSION=2.4 # This reg-test tests the http-request normalize-uri action. feature ignore_unknown_macro server s1 { rxreq txresp } -repeat 21 -start haproxy h1 -conf { defaults mode http timeout connect 1s timeout client 1s timeout server 1s frontend fe_merge_slashes bind "fd@${fe_merge_slashes}" http-request set-var(txn.before) url http-request normalize-uri merge-slashes http-request set-var(txn.after) url http-response add-header before %[var(txn.before)] http-response add-header after %[var(txn.after)] default_backend be frontend fe_dotdot bind "fd@${fe_dotdot}" http-request set-var(txn.before) url http-request normalize-uri dotdot http-request set-var(txn.after) url http-request set-uri %[var(txn.before)] http-request normalize-uri dotdot full http-request set-var(txn.after_full) url http-response add-header before %[var(txn.before)] http-response add-header after %[var(txn.after)] http-response add-header after-full %[var(txn.after_full)] default_backend be backend be server s1 ${s1_addr}:${s1_port} } -start client c1 -connect ${h1_fe_merge_slashes_sock} { txreq -url "/foo/bar" rxresp expect resp.http.before == "/foo/bar" expect resp.http.after == "/foo/bar" txreq -url "/foo//bar" rxresp expect resp.http.before == "/foo//bar" expect resp.http.after == "/foo/bar" txreq -url "/foo///bar" rxresp expect resp.http.before == "/foo///bar" expect resp.http.after == "/foo/bar" txreq -url "///foo///bar" rxresp expect resp.http.before == "///foo///bar" expect resp.http.after == "/foo/bar" txreq -url "///foo/bar" rxresp expect resp.http.before == "///foo/bar" expect resp.http.after == "/foo/bar" txreq -url "///foo///bar///" rxresp expect resp.http.before == "///foo///bar///" expect resp.http.after == "/foo/bar/" txreq -url "///" rxresp expect resp.http.before == "///" expect resp.http.after == "/" txreq -url "/foo?bar=///" rxresp expect resp.http.before == "/foo?bar=///" expect resp.http.after == "/foo?bar=///" txreq -url "//foo?bar=///" rxresp expect resp.http.before == "//foo?bar=///" expect resp.http.after == "/foo?bar=///" txreq -req OPTIONS -url "*" rxresp expect resp.http.before == "*" expect resp.http.after == "*" } -run client c2 -connect ${h1_fe_dotdot_sock} { txreq -url "/foo/bar" rxresp expect resp.http.before == "/foo/bar" expect resp.http.after == "/foo/bar" expect resp.http.after-full == "/foo/bar" txreq -url "/foo/.." rxresp expect resp.http.before == "/foo/.." expect resp.http.after == "/" expect resp.http.after-full == "/" txreq -url "/foo/../" rxresp expect resp.http.before == "/foo/../" expect resp.http.after == "/" expect resp.http.after-full == "/" txreq -url "/foo/bar/../" rxresp expect resp.http.before == "/foo/bar/../" expect resp.http.after == "/foo/" expect resp.http.after-full == "/foo/" txreq -url "/foo/../bar" rxresp expect resp.http.before == "/foo/../bar" expect resp.http.after == "/bar" expect resp.http.after-full == "/bar" txreq -url "/foo/../bar/" rxresp expect resp.http.before == "/foo/../bar/" expect resp.http.after == "/bar/" expect resp.http.after-full == "/bar/" txreq -url "/foo/../../bar/" rxresp expect resp.http.before == "/foo/../../bar/" expect resp.http.after == "/../bar/" expect resp.http.after-full == "/bar/" txreq -url "/foo//../../bar/" rxresp expect resp.http.before == "/foo//../../bar/" expect resp.http.after == "/bar/" expect resp.http.after-full == "/bar/" txreq -url "/foo/?bar=/foo/../" rxresp expect resp.http.before == "/foo/?bar=/foo/../" expect resp.http.after == "/foo/?bar=/foo/../" expect resp.http.after-full == "/foo/?bar=/foo/../" txreq -url "/foo/../?bar=/foo/../" rxresp expect resp.http.before == "/foo/../?bar=/foo/../" expect resp.http.after == "/?bar=/foo/../" expect resp.http.after-full == "/?bar=/foo/../" txreq -req OPTIONS -url "*" rxresp expect resp.http.before == "*" expect resp.http.after == "*" expect resp.http.after-full == "*" } -run