mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
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:
commit
cbf1e2d360
@ -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,
|
||||||
},
|
},
|
||||||
|
@ -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,
|
||||||
}
|
}
|
||||||
|
@ -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",
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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())
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user