Skip to content

Commit

Permalink
Added tests to the handle_error directive
Browse files Browse the repository at this point in the history
  • Loading branch information
armadi1809 committed Jan 16, 2024
1 parent d8f2270 commit 4f0b4ea
Show file tree
Hide file tree
Showing 7 changed files with 634 additions and 5 deletions.
8 changes: 3 additions & 5 deletions caddyconfig/httpcaddyfile/builtins.go
Original file line number Diff line number Diff line change
Expand Up @@ -844,7 +844,6 @@ func parseHandle(h Helper) (caddyhttp.MiddlewareHandler, error) {
}

func parseHandleErrors(h Helper) ([]ConfigValue, error) {

h.Next()
args := h.RemainingArgs()
expression := ""
Expand All @@ -865,17 +864,16 @@ func parseHandleErrors(h Helper) ([]ConfigValue, error) {
if len(codes) > 0 {
if expression != "" {
expression += " || "
} else {
expression += "{http.error.status_code} in [" + strings.Join(codes, ", ") + "]"
}
expression += "{http.error.status_code} in [" + strings.Join(codes, ", ") + "]"
}
//Reset cursor position to get ready for ParseSegmentAsSubroute
// Reset cursor position to get ready for ParseSegmentAsSubroute
h.Reset()
h.Next()
h.RemainingArgs()
h.Prev()
} else {
//If no arguments present reset the cursor position to get ready for ParseSegmentAsSubroute
// If no arguments present reset the cursor position to get ready for ParseSegmentAsSubroute
h.Prev()
}

Expand Down
3 changes: 3 additions & 0 deletions caddyconfig/httpcaddyfile/httptype.go
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,9 @@ func (st *ServerType) serversFromPairings(
sr := val.Value.(*caddyhttp.Subroute)
routeMatcherSet := sr.Routes[0].MatcherSetsRaw
sr.Routes[0].MatcherSetsRaw = []caddy.ModuleMap{}
if routeMatcherSet == nil {
routeMatcherSet = matcherSetsEnc
}
srv.Errors.Routes = appendSubrouteToRouteList(srv.Errors.Routes, sr, routeMatcherSet, p, warnings)
}
}
Expand Down
113 changes: 113 additions & 0 deletions caddytest/integration/caddyfile_adapt/error_range_codes.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
{
http_port 3010
}
localhost:3010 {
root * /srv
error /private* "Unauthorized" 410
error /hidden* "Not found" 404

handle_errors 4xx {
respond "Error in the [400 .. 499] range"
}
}
----------
{
"apps": {
"http": {
"http_port": 3010,
"servers": {
"srv0": {
"listen": [
":3010"
],
"routes": [
{
"match": [
{
"host": [
"localhost"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"handler": "vars",
"root": "/srv"
}
]
},
{
"handle": [
{
"error": "Unauthorized",
"handler": "error",
"status_code": 410
}
],
"match": [
{
"path": [
"/private*"
]
}
]
},
{
"handle": [
{
"error": "Not found",
"handler": "error",
"status_code": 404
}
],
"match": [
{
"path": [
"/hidden*"
]
}
]
}
]
}
],
"terminal": true
}
],
"errors": {
"routes": [
{
"match": [
{
"expression": "{http.error.status_code} \u003e= 400 \u0026\u0026 {http.error.status_code} \u003c= 499"
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "Error in the [400 .. 499] range",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
}
]
}
}
}
}
}
}
156 changes: 156 additions & 0 deletions caddytest/integration/caddyfile_adapt/error_range_simple_codes.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
{
http_port 2099
}
localhost:2099 {
root * /srv
error /private* "Unauthorized" 410
error /threehundred* "Moved Permanently" 301
error /internalerr* "Internal Server Error" 500

handle_errors 500 3xx {
respond "Error code is equal to 500 or in the [300..399] range"
}
handle_errors 4xx {
respond "Error in the [400 .. 499] range"
}
}
----------
{
"apps": {
"http": {
"http_port": 2099,
"servers": {
"srv0": {
"listen": [
":2099"
],
"routes": [
{
"match": [
{
"host": [
"localhost"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"handler": "vars",
"root": "/srv"
}
]
},
{
"handle": [
{
"error": "Moved Permanently",
"handler": "error",
"status_code": 301
}
],
"match": [
{
"path": [
"/threehundred*"
]
}
]
},
{
"handle": [
{
"error": "Internal Server Error",
"handler": "error",
"status_code": 500
}
],
"match": [
{
"path": [
"/internalerr*"
]
}
]
},
{
"handle": [
{
"error": "Unauthorized",
"handler": "error",
"status_code": 410
}
],
"match": [
{
"path": [
"/private*"
]
}
]
}
]
}
],
"terminal": true
}
],
"errors": {
"routes": [
{
"match": [
{
"expression": "{http.error.status_code} \u003e= 400 \u0026\u0026 {http.error.status_code} \u003c= 499"
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "Error in the [400 .. 499] range",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
},
{
"match": [
{
"expression": "{http.error.status_code} \u003e= 300 \u0026\u0026 {http.error.status_code} \u003c= 399 || {http.error.status_code} in [500]"
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "Error code is equal to 500 or in the [300..399] range",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
}
]
}
}
}
}
}
}
Loading

0 comments on commit 4f0b4ea

Please sign in to comment.