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 ---
|
// --- Kubernetes status errors ---
|
||||||
var statusErr *k8sErrors.StatusError
|
var statusErr *k8sErrors.StatusError
|
||||||
if errors.As(err, &statusErr) {
|
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)
|
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 {
|
func IsForbidden(err error) bool {
|
||||||
return k8sErrors.IsForbidden(err) || errors.Is(err, dashboards.ErrFolderAccessDenied)
|
return k8sErrors.IsForbidden(err) || errors.Is(err, dashboards.ErrFolderAccessDenied)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ func TestToFolderErrorResponse(t *testing.T) {
|
|||||||
},
|
},
|
||||||
// --- Kubernetes status errors ---
|
// --- Kubernetes status errors ---
|
||||||
{
|
{
|
||||||
name: "kubernetes status error",
|
name: "kubernetes status error with message",
|
||||||
input: &k8sErrors.StatusError{
|
input: &k8sErrors.StatusError{
|
||||||
ErrStatus: metav1.Status{
|
ErrStatus: metav1.Status{
|
||||||
Code: 412,
|
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 {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user