Merge pull request #82794 from ingvagabund/fake-clientset-enforce-exact-much-for-get

Require exact match when calling Get method within fake clientset
This commit is contained in:
Kubernetes Prow Robot 2019-10-25 09:53:39 -07:00 committed by GitHub
commit cbf1e2d360
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 74 additions and 15 deletions

View File

@ -252,7 +252,8 @@ func TestGetExtraSupplementalGroupsForPod(t *testing.T) {
}, },
}, },
ClaimRef: &v1.ObjectReference{ ClaimRef: &v1.ObjectReference{
Name: claim.ObjectMeta.Name, Name: claim.ObjectMeta.Name,
Namespace: claim.ObjectMeta.Namespace,
}, },
VolumeMode: &fs, VolumeMode: &fs,
}, },
@ -381,7 +382,8 @@ func createObjects(pvMode, podMode v1.PersistentVolumeMode) (*v1.Node, *v1.Pod,
}, },
}, },
ClaimRef: &v1.ObjectReference{ ClaimRef: &v1.ObjectReference{
Name: "claimA", Namespace: "nsA",
Name: "claimA",
}, },
VolumeMode: &pvMode, VolumeMode: &pvMode,
}, },

View File

@ -268,8 +268,9 @@ func TestPlugin(t *testing.T) {
// PVName: "test-volume-name", // PVName: "test-volume-name",
PersistentVolumeReclaimPolicy: v1.PersistentVolumeReclaimDelete, PersistentVolumeReclaimPolicy: v1.PersistentVolumeReclaimDelete,
Parameters: map[string]string{ Parameters: map[string]string{
"VolumeNamespace": "test-volume-namespace", "VolumeNamespace": "test-volume-namespace",
"adminSecretName": secretName, "adminSecretName": secretName,
"adminsecretnamespace": "default",
}, },
MountOptions: mountOptions, MountOptions: mountOptions,
} }

View File

@ -40,6 +40,7 @@ go_test(
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",

View File

@ -248,7 +248,7 @@ func (t *tracker) List(gvr schema.GroupVersionResource, gvk schema.GroupVersionK
return list, nil return list, nil
} }
matchingObjs, err := filterByNamespaceAndName(objs, ns, "") matchingObjs, err := filterByNamespace(objs, ns)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -282,9 +282,19 @@ func (t *tracker) Get(gvr schema.GroupVersionResource, ns, name string) (runtime
return nil, errNotFound return nil, errNotFound
} }
matchingObjs, err := filterByNamespaceAndName(objs, ns, name) var matchingObjs []runtime.Object
if err != nil { for _, obj := range objs {
return nil, err acc, err := meta.Accessor(obj)
if err != nil {
return nil, err
}
if acc.GetNamespace() != ns {
continue
}
if acc.GetName() != name {
continue
}
matchingObjs = append(matchingObjs, obj)
} }
if len(matchingObjs) == 0 { if len(matchingObjs) == 0 {
return nil, errNotFound return nil, errNotFound
@ -472,10 +482,10 @@ func (t *tracker) Delete(gvr schema.GroupVersionResource, ns, name string) error
return errors.NewNotFound(gvr.GroupResource(), name) return errors.NewNotFound(gvr.GroupResource(), name)
} }
// filterByNamespaceAndName returns all objects in the collection that // filterByNamespace returns all objects in the collection that
// match provided namespace and name. Empty namespace matches // match provided namespace. Empty namespace matches
// non-namespaced objects. // non-namespaced objects.
func filterByNamespaceAndName(objs []runtime.Object, ns, name string) ([]runtime.Object, error) { func filterByNamespace(objs []runtime.Object, ns string) ([]runtime.Object, error) {
var res []runtime.Object var res []runtime.Object
for _, obj := range objs { for _, obj := range objs {
@ -486,9 +496,6 @@ func filterByNamespaceAndName(objs []runtime.Object, ns, name string) ([]runtime
if ns != "" && acc.GetNamespace() != ns { if ns != "" && acc.GetNamespace() != ns {
continue continue
} }
if name != "" && acc.GetName() != name {
continue
}
res = append(res, obj) res = append(res, obj)
} }

View File

@ -25,6 +25,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
@ -274,3 +275,50 @@ func TestPatchWithMissingObject(t *testing.T) {
assert.Nil(t, node) assert.Nil(t, node)
assert.EqualError(t, err, `nodes "node-1" not found`) assert.EqualError(t, err, `nodes "node-1" not found`)
} }
func TestGetWithExactMatch(t *testing.T) {
scheme := runtime.NewScheme()
codecs := serializer.NewCodecFactory(scheme)
constructObject := func(s schema.GroupVersionResource, name, namespace string) (*unstructured.Unstructured, schema.GroupVersionResource) {
obj := getArbitraryResource(s, name, namespace)
gvks, _, err := scheme.ObjectKinds(obj)
assert.Nil(t, err)
gvr, _ := meta.UnsafeGuessKindToResource(gvks[0])
return obj, gvr
}
var err error
// Object with empty namespace
o := NewObjectTracker(scheme, codecs.UniversalDecoder())
nodeResource := schema.GroupVersionResource{Group: "", Version: "v1", Resource: "node"}
node, gvr := constructObject(nodeResource, "node", "")
assert.Nil(t, o.Add(node))
// Exact match
_, err = o.Get(gvr, "", "node")
assert.Nil(t, err)
// Unexpected namespace provided
_, err = o.Get(gvr, "ns", "node")
assert.NotNil(t, err)
errNotFound := errors.NewNotFound(gvr.GroupResource(), "node")
assert.EqualError(t, err, errNotFound.Error())
// Object with non-empty namespace
o = NewObjectTracker(scheme, codecs.UniversalDecoder())
podResource := schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pod"}
pod, gvr := constructObject(podResource, "pod", "default")
assert.Nil(t, o.Add(pod))
// Exact match
_, err = o.Get(gvr, "default", "pod")
assert.Nil(t, err)
// Missing namespace
_, err = o.Get(gvr, "", "pod")
assert.NotNil(t, err)
errNotFound = errors.NewNotFound(gvr.GroupResource(), "pod")
assert.EqualError(t, err, errNotFound.Error())
}

View File

@ -3133,7 +3133,7 @@ Spec:
}, },
}) })
d := NetworkPolicyDescriber{versionedFake} d := NetworkPolicyDescriber{versionedFake}
out, err := d.Describe("", "network-policy-1", describe.DescriberSettings{}) out, err := d.Describe("default", "network-policy-1", describe.DescriberSettings{})
if err != nil { if err != nil {
t.Errorf("unexpected error: %s", err) t.Errorf("unexpected error: %s", err)
} }