Folders: Fix error handling for zanzana (#115056)
This commit is contained in:
@@ -57,7 +57,11 @@ func ToFolderErrorResponse(err error) response.Response {
|
||||
// --- Kubernetes status errors ---
|
||||
var statusErr *k8sErrors.StatusError
|
||||
if errors.As(err, &statusErr) {
|
||||
return response.Error(int(statusErr.ErrStatus.Code), statusErr.ErrStatus.Message, err)
|
||||
message := statusErr.ErrStatus.Message
|
||||
if message == "" {
|
||||
message = getDefaultMessageForStatus(int(statusErr.ErrStatus.Code))
|
||||
}
|
||||
return response.Error(int(statusErr.ErrStatus.Code), message, err)
|
||||
}
|
||||
|
||||
return response.ErrOrFallback(http.StatusInternalServerError, fmt.Sprintf("Folder API error: %s", err.Error()), err)
|
||||
@@ -100,6 +104,19 @@ func ToFolderStatusError(err error) k8sErrors.StatusError {
|
||||
}
|
||||
}
|
||||
|
||||
func getDefaultMessageForStatus(statusCode int) string {
|
||||
switch statusCode {
|
||||
case http.StatusForbidden:
|
||||
return "Access denied"
|
||||
case http.StatusNotFound:
|
||||
return "Folder not found"
|
||||
case http.StatusBadRequest:
|
||||
return "Invalid request"
|
||||
default:
|
||||
return "Folder API error"
|
||||
}
|
||||
}
|
||||
|
||||
func IsForbidden(err error) bool {
|
||||
return k8sErrors.IsForbidden(err) || errors.Is(err, dashboards.ErrFolderAccessDenied)
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ func TestToFolderErrorResponse(t *testing.T) {
|
||||
},
|
||||
// --- Kubernetes status errors ---
|
||||
{
|
||||
name: "kubernetes status error",
|
||||
name: "kubernetes status error with message",
|
||||
input: &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: 412,
|
||||
@@ -139,6 +139,66 @@ func TestToFolderErrorResponse(t *testing.T) {
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "kubernetes status error with empty message - 403 forbidden",
|
||||
input: &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: http.StatusForbidden,
|
||||
Message: "",
|
||||
},
|
||||
},
|
||||
want: response.Error(http.StatusForbidden, "Access denied", &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: http.StatusForbidden,
|
||||
Message: "",
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "kubernetes status error with empty message - 404 not found",
|
||||
input: &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: http.StatusNotFound,
|
||||
Message: "",
|
||||
},
|
||||
},
|
||||
want: response.Error(http.StatusNotFound, "Folder not found", &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: http.StatusNotFound,
|
||||
Message: "",
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "kubernetes status error with empty message - 400 bad request",
|
||||
input: &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: http.StatusBadRequest,
|
||||
Message: "",
|
||||
},
|
||||
},
|
||||
want: response.Error(http.StatusBadRequest, "Invalid request", &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: http.StatusBadRequest,
|
||||
Message: "",
|
||||
},
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "kubernetes status error with empty message - default fallback",
|
||||
input: &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: http.StatusInternalServerError,
|
||||
Message: "",
|
||||
},
|
||||
},
|
||||
want: response.Error(http.StatusInternalServerError, "Folder API error", &k8sErrors.StatusError{
|
||||
ErrStatus: metav1.Status{
|
||||
Code: http.StatusInternalServerError,
|
||||
Message: "",
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user