diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go index 465986319a3..54931785da1 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go @@ -244,6 +244,10 @@ func TestJSONPatch(t *testing.T) { expectedError: "the server rejected our request due to an error in our request", expectedErrorType: metav1.StatusReasonInvalid, }, + { + name: "valid-negative-index-patch", + patch: `[{"op": "test", "value": "foo", "path": "/metadata/finalizers/-1"}]`, + }, } { p := &patcher{ patchType: types.JSONPatchType, @@ -253,6 +257,7 @@ func TestJSONPatch(t *testing.T) { codec := codecs.LegacyCodec(examplev1.SchemeGroupVersion) pod := &examplev1.Pod{} pod.Name = "podA" + pod.ObjectMeta.Finalizers = []string{"foo"} versionedJS, err := runtime.Encode(codec, pod) if err != nil { t.Errorf("%s: unexpected error: %v", test.name, err) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go index 7cf0d70832b..955532ca9c8 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/util/helpers_test.go @@ -289,6 +289,26 @@ func TestJSONPatch(t *testing.T) { fragment: `[ {"op": "add", "path": "/metadata/labels/foo", "value": "bar"} ]`, expectErr: true, }, + { + obj: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Finalizers: []string{"foo", "bar", "test"}, + }, + }, + fragment: `[ {"op": "replace", "path": "/metadata/finalizers/-1", "value": "baz"} ]`, + expected: &corev1.Pod{ + TypeMeta: metav1.TypeMeta{ + Kind: "Pod", + APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Finalizers: []string{"foo", "bar", "baz"}, + }, + Spec: corev1.PodSpec{}, + }, + }, } codec := runtime.NewCodec(scheme.DefaultJSONEncoder(),