diff --git a/reg-tests/http-errorfiles/errors/400-1.http b/reg-tests/http-errorfiles/errors/400-1.http new file mode 100644 index 000000000..86a2e693d --- /dev/null +++ b/reg-tests/http-errorfiles/errors/400-1.http @@ -0,0 +1,9 @@ +HTTP/1.1 400 Bad request +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-1 + +

400 Bad request

+Your browser sent an invalid request. + diff --git a/reg-tests/http-errorfiles/errors/400-2.http b/reg-tests/http-errorfiles/errors/400-2.http new file mode 100644 index 000000000..c10851036 --- /dev/null +++ b/reg-tests/http-errorfiles/errors/400-2.http @@ -0,0 +1,9 @@ +HTTP/1.1 400 Bad request +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-2 + +

400 Bad request

+Your browser sent an invalid request. + diff --git a/reg-tests/http-errorfiles/errors/400-3.http b/reg-tests/http-errorfiles/errors/400-3.http new file mode 100644 index 000000000..1fe18410b --- /dev/null +++ b/reg-tests/http-errorfiles/errors/400-3.http @@ -0,0 +1,9 @@ +HTTP/1.1 400 Bad request +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-3 + +

400 Bad request

+Your browser sent an invalid request. + diff --git a/reg-tests/http-errorfiles/errors/400.http b/reg-tests/http-errorfiles/errors/400.http new file mode 100644 index 000000000..ce229aa9f --- /dev/null +++ b/reg-tests/http-errorfiles/errors/400.http @@ -0,0 +1,9 @@ +HTTP/1.1 400 Bad request +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: default + +

400 Bad request

+Your browser sent an invalid request. + diff --git a/reg-tests/http-errorfiles/errors/403-1.http b/reg-tests/http-errorfiles/errors/403-1.http new file mode 100644 index 000000000..08bdf02af --- /dev/null +++ b/reg-tests/http-errorfiles/errors/403-1.http @@ -0,0 +1,9 @@ +HTTP/1.0 403 Forbidden +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-1 + +

403 Forbidden

+Request forbidden by administrative rules. + diff --git a/reg-tests/http-errorfiles/errors/403-2.http b/reg-tests/http-errorfiles/errors/403-2.http new file mode 100644 index 000000000..9c07e5dd0 --- /dev/null +++ b/reg-tests/http-errorfiles/errors/403-2.http @@ -0,0 +1,9 @@ +HTTP/1.0 403 Forbidden +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-2 + +

403 Forbidden

+Request forbidden by administrative rules. + diff --git a/reg-tests/http-errorfiles/errors/403.http b/reg-tests/http-errorfiles/errors/403.http new file mode 100644 index 000000000..fd969b200 --- /dev/null +++ b/reg-tests/http-errorfiles/errors/403.http @@ -0,0 +1,9 @@ +HTTP/1.0 403 Forbidden +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: default + +

403 Forbidden

+Request forbidden by administrative rules. + diff --git a/reg-tests/http-errorfiles/errors/404-1.http b/reg-tests/http-errorfiles/errors/404-1.http new file mode 100644 index 000000000..154ed0be7 --- /dev/null +++ b/reg-tests/http-errorfiles/errors/404-1.http @@ -0,0 +1,9 @@ +HTTP/1.1 404 Not Found +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-1 + +

404 Not Found

+The resource could not be found. + diff --git a/reg-tests/http-errorfiles/errors/404-2.http b/reg-tests/http-errorfiles/errors/404-2.http new file mode 100644 index 000000000..e26f91dc0 --- /dev/null +++ b/reg-tests/http-errorfiles/errors/404-2.http @@ -0,0 +1,9 @@ +HTTP/1.1 404 Not Found +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-2 + +

404 Not Found

+The resource could not be found. + diff --git a/reg-tests/http-errorfiles/errors/404-3.http b/reg-tests/http-errorfiles/errors/404-3.http new file mode 100644 index 000000000..4bc166106 --- /dev/null +++ b/reg-tests/http-errorfiles/errors/404-3.http @@ -0,0 +1,9 @@ +HTTP/1.1 404 Not Found +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-3 + +

404 Not Found

+The resource could not be found. + diff --git a/reg-tests/http-errorfiles/errors/404.http b/reg-tests/http-errorfiles/errors/404.http new file mode 100644 index 000000000..8dacd953d --- /dev/null +++ b/reg-tests/http-errorfiles/errors/404.http @@ -0,0 +1,9 @@ +HTTP/1.1 404 Not Found +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: default + +

404 Not Found

+The resource could not be found. + diff --git a/reg-tests/http-errorfiles/errors/500-1.http b/reg-tests/http-errorfiles/errors/500-1.http new file mode 100644 index 000000000..c5717ad05 --- /dev/null +++ b/reg-tests/http-errorfiles/errors/500-1.http @@ -0,0 +1,9 @@ +HTTP/1.0 500 Internal Server Error +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: errors-1 + +

500 Internal Server Error

+An internal server error occured. + diff --git a/reg-tests/http-errorfiles/errors/500.http b/reg-tests/http-errorfiles/errors/500.http new file mode 100644 index 000000000..acd2714ab --- /dev/null +++ b/reg-tests/http-errorfiles/errors/500.http @@ -0,0 +1,9 @@ +HTTP/1.0 500 Internal Server Error +Cache-Control: no-cache +Connection: close +Content-Type: text/html +x-err-type: default + +

500 Internal Server Error

+An internal server error occured. + diff --git a/reg-tests/http-errorfiles/http_deny_errors.vtc b/reg-tests/http-errorfiles/http_deny_errors.vtc new file mode 100644 index 000000000..53c4c42aa --- /dev/null +++ b/reg-tests/http-errorfiles/http_deny_errors.vtc @@ -0,0 +1,57 @@ +varnishtest "Test the custom erorrs for HTTP deny rules" +#REQUIRE_VERSION=2.2 + +# This config tests the custom errors for HTTP deny rules. + +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 /dev/null + + defaults + mode http + timeout connect 1s + timeout client 1s + timeout server 1s + + frontend fe1 + bind "fd@${fe1}" + http-request deny deny_status 400 if { path /400 } + http-request deny deny_status 403 errorfile ${testdir}/errors/403.http if { path /403 } + http-request deny deny_status 404 errorfiles errors-1 if { path /404 } + http-request deny deny_status 500 errorfile /dev/null if { path /500-1 } + http-request deny deny_status 500 errorfiles errors-1 if { path /500-2 } + +} -start + +client c1r1 -connect ${h1_fe1_sock} { + txreq -req GET -url /400 + rxresp + expect resp.status == 400 + expect resp.http.x-err-type == +} -run +client c1r2 -connect ${h1_fe1_sock} { + txreq -req GET -url /403 + rxresp + expect resp.status == 403 + expect resp.http.x-err-type == "default" +} -run +client c1r3 -connect ${h1_fe1_sock} { + txreq -req GET -url /404 + rxresp + expect resp.status == 404 + expect resp.http.x-err-type == "errors-1" +} -run +client c1r4 -connect ${h1_fe1_sock} { + txreq -req GET -url /500-1 + expect_close +} -run +client c1r5 -connect ${h1_fe1_sock} { + txreq -req GET -url /500-2 + expect_close +} -run diff --git a/reg-tests/http-errorfiles/http_errors.vtc b/reg-tests/http-errorfiles/http_errors.vtc new file mode 100644 index 000000000..7d9f18c3d --- /dev/null +++ b/reg-tests/http-errorfiles/http_errors.vtc @@ -0,0 +1,134 @@ +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 deny_status 403 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 deny_status 403 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 deny_status 403 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 == +} -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