Merge pull request #70886 from bouk/patch-missing-object

client-go/testing: properly handle Patch actions for missing Objects
pull/564/head
Kubernetes Prow Robot 2019-01-08 06:08:27 -08:00 committed by GitHub
commit df77b72926
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 2 deletions

View File

@ -42,6 +42,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library",
], ],

View File

@ -131,8 +131,7 @@ func ObjectReaction(tracker ObjectTracker) ReactionFunc {
case PatchActionImpl: case PatchActionImpl:
obj, err := tracker.Get(gvr, ns, action.GetName()) obj, err := tracker.Get(gvr, ns, action.GetName())
if err != nil { if err != nil {
// object is not registered return true, nil, err
return false, nil, err
} }
old, err := json.Marshal(obj) old, err := json.Marshal(obj)

View File

@ -30,6 +30,7 @@ import (
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
serializer "k8s.io/apimachinery/pkg/runtime/serializer" serializer "k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
) )
@ -258,3 +259,17 @@ func TestWatchAddAfterStop(t *testing.T) {
t.Errorf("test resource creation failed: %v", err) t.Errorf("test resource creation failed: %v", err)
} }
} }
func TestPatchWithMissingObject(t *testing.T) {
nodesResource := schema.GroupVersionResource{Group: "", Version: "v1", Resource: "nodes"}
scheme := runtime.NewScheme()
codecs := serializer.NewCodecFactory(scheme)
o := NewObjectTracker(scheme, codecs.UniversalDecoder())
reaction := ObjectReaction(o)
action := NewRootPatchSubresourceAction(nodesResource, "node-1", types.StrategicMergePatchType, []byte(`{}`))
handled, node, err := reaction(action)
assert.True(t, handled)
assert.Nil(t, node)
assert.EqualError(t, err, `nodes "node-1" not found`)
}