Merge pull request #72577 from dims/strengthen-error-to-api-status-against-bad-input

Strengthen ErrorToAPIStatus against bad input
This commit is contained in:
Kubernetes Prow Robot 2019-01-07 09:51:05 -08:00 committed by GitHub
commit d82cf37322
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 4 deletions

View File

@ -38,11 +38,18 @@ func ErrorToAPIStatus(err error) *metav1.Status {
if len(status.Status) == 0 {
status.Status = metav1.StatusFailure
}
if status.Code == 0 {
switch status.Status {
case metav1.StatusSuccess:
switch status.Status {
case metav1.StatusSuccess:
if status.Code == 0 {
status.Code = http.StatusOK
case metav1.StatusFailure:
}
case metav1.StatusFailure:
if status.Code == 0 {
status.Code = http.StatusInternalServerError
}
default:
runtime.HandleError(fmt.Errorf("apiserver received an error with wrong status field : %#+v", err))
if status.Code == 0 {
status.Code = http.StatusInternalServerError
}
}

View File

@ -27,6 +27,19 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
)
func TestBadStatusErrorToAPIStatus(t *testing.T) {
err := errors.StatusError{}
actual := ErrorToAPIStatus(&err)
expected := &metav1.Status{
TypeMeta: metav1.TypeMeta{Kind: "Status", APIVersion: "v1"},
Status: metav1.StatusFailure,
Code: 500,
}
if !reflect.DeepEqual(actual, expected) {
t.Errorf("%s: Expected %#v, Got %#v", actual, expected, actual)
}
}
func TestAPIStatus(t *testing.T) {
cases := map[error]metav1.Status{
errors.NewNotFound(schema.GroupResource{Group: "legacy.kubernetes.io", Resource: "foos"}, "bar"): {