Strengthen ErrorToAPIStatus against bad input

Change-Id: Id44a59f56c074901257760ff4e40ce29820c6c50
This commit is contained in:
Davanum Srinivas 2019-01-04 11:22:46 -05:00
parent 86691cad55
commit 6858a24835
No known key found for this signature in database
GPG Key ID: 80D83A796103BF59
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"): {