varnishtest "Test the errorfiles directive"
#REQUIRE_VERSION=2.2

# This config tests the errorfiles directive.

feature ignore_unknown_macro


haproxy h1 -conf {
    http-errors errors-1
        errorfile 400  ${testdir}/errors/400-1.http
        errorfile 403  ${testdir}/errors/403-1.http
        errorfile 404  ${testdir}/errors/404-1.http
        errorfile 500  ${testdir}/errors/500-1.http

    http-errors errors-2
        errorfile 400  ${testdir}/errors/400-2.http
        errorfile 403  ${testdir}/errors/403-2.http
        errorfile 404  ${testdir}/errors/404-2.http

    http-errors errors-3
        errorfile 400  ${testdir}/errors/400-3.http
        errorfile 404  ${testdir}/errors/404-3.http

    defaults
        mode http
        timeout connect 1s
        timeout client  1s
        timeout server  1s
	errorfiles errors-2
        errorfile 400  ${testdir}/errors/400.http
        errorfile 404  ${testdir}/errors/404.http

    frontend fe1
        bind "fd@${fe1}"
        http-request deny deny_status 400 if { path /400 }
        http-request deny if { path /403 }
        http-request deny deny_status 404 if { path /404 }
        http-request deny deny_status 500 if { path /500 }

    frontend fe2
        bind "fd@${fe2}"
        errorfiles errors-1
        errorfile 500  ${testdir}/errors/500.http
        http-request deny deny_status 400 if { path /400 }
        http-request deny if { path /403 }
        http-request deny deny_status 404 if { path /404 }
        http-request deny deny_status 500 if { path /500 }

    frontend fe3
        bind "fd@${fe3}"
        errorfile 500  ${testdir}/errors/500.http
        errorfiles errors-1 500
        errorfiles errors-3 400
        http-request deny deny_status 400 if { path /400 }
        http-request deny if { path /403 }
        http-request deny deny_status 404 if { path /404 }
        http-request deny deny_status 500 if { path /500 }
} -start

client c1r1  -connect ${h1_fe1_sock} {
        txreq -req GET -url /400
        rxresp
        expect resp.status == 400
	expect resp.http.x-err-type == "default"
} -run
client c1r2  -connect ${h1_fe1_sock} {
        txreq -req GET -url /403
        rxresp
        expect resp.status == 403
	expect resp.http.x-err-type == "errors-2"
} -run
client c1r3  -connect ${h1_fe1_sock} {
        txreq -req GET -url /404
        rxresp
        expect resp.status == 404
	expect resp.http.x-err-type == "default"
} -run
client c1r4  -connect ${h1_fe1_sock} {
        txreq -req GET -url /500
        rxresp
        expect resp.status == 500
	expect resp.http.x-err-type == <undef>
} -run

client c2r1  -connect ${h1_fe2_sock} {
        txreq -req GET -url /400
        rxresp
        expect resp.status == 400
	expect resp.http.x-err-type == "errors-1"
} -run
client c2r2  -connect ${h1_fe2_sock} {
        txreq -req GET -url /403
        rxresp
        expect resp.status == 403
	expect resp.http.x-err-type == "errors-1"
} -run
client c2r3  -connect ${h1_fe2_sock} {
        txreq -req GET -url /404
        rxresp
        expect resp.status == 404
	expect resp.http.x-err-type == "errors-1"
} -run
client c2r4  -connect ${h1_fe2_sock} {
        txreq -req GET -url /500
        rxresp
        expect resp.status == 500
	expect resp.http.x-err-type == "default"
} -run

client c3r1  -connect ${h1_fe3_sock} {
        txreq -req GET -url /400
        rxresp
        expect resp.status == 400
	expect resp.http.x-err-type == "errors-3"
} -run
client c3r2  -connect ${h1_fe3_sock} {
        txreq -req GET -url /403
        rxresp
        expect resp.status == 403
	expect resp.http.x-err-type == "errors-2"
} -run
client c3r3  -connect ${h1_fe3_sock} {
        txreq -req GET -url /404
        rxresp
        expect resp.status == 404
	expect resp.http.x-err-type == "default"
} -run
client c3r4  -connect ${h1_fe3_sock} {
        txreq -req GET -url /500
        rxresp
        expect resp.status == 500
	expect resp.http.x-err-type == "errors-1"
} -run
