Skip to content

Commit b6092bd

Browse files
authored
Merge pull request kubernetes-sigs#886 from GrigoriyMikhalkin/CR-838
⚠️ Fakeclient: reject create/update if Name isn't provided
2 parents df180ac + e99a0ae commit b6092bd

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

pkg/client/fake/client.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"k8s.io/apimachinery/pkg/runtime"
3131
"k8s.io/apimachinery/pkg/runtime/schema"
3232
utilrand "k8s.io/apimachinery/pkg/util/rand"
33+
"k8s.io/apimachinery/pkg/util/validation/field"
3334
"k8s.io/client-go/kubernetes/scheme"
3435
"k8s.io/client-go/testing"
3536

@@ -85,6 +86,12 @@ func (t versionedTracker) Create(gvr schema.GroupVersionResource, obj runtime.Ob
8586
if err != nil {
8687
return err
8788
}
89+
if accessor.GetName() == "" {
90+
return apierrors.NewInvalid(
91+
obj.GetObjectKind().GroupVersionKind().GroupKind(),
92+
accessor.GetName(),
93+
field.ErrorList{field.Required(field.NewPath("metadata.name"), "name is required")})
94+
}
8895
if accessor.GetResourceVersion() != "" {
8996
return apierrors.NewBadRequest("resourceVersion can not be set for Create requests")
9097
}
@@ -97,6 +104,12 @@ func (t versionedTracker) Update(gvr schema.GroupVersionResource, obj runtime.Ob
97104
if err != nil {
98105
return fmt.Errorf("failed to get accessor for object: %v", err)
99106
}
107+
if accessor.GetName() == "" {
108+
return apierrors.NewInvalid(
109+
obj.GetObjectKind().GroupVersionKind().GroupKind(),
110+
accessor.GetName(),
111+
field.ErrorList{field.Required(field.NewPath("metadata.name"), "name is required")})
112+
}
100113
oldObject, err := t.ObjectTracker.Get(gvr, ns, accessor.GetName())
101114
if err != nil {
102115
return err

pkg/client/fake/client_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,36 @@ var _ = Describe("Fake client", func() {
186186
Expect(apierrors.IsBadRequest(err)).To(BeTrue())
187187
})
188188

189+
It("should error on Create with empty Name", func() {
190+
By("Creating a new configmap")
191+
newcm := &corev1.ConfigMap{
192+
TypeMeta: metav1.TypeMeta{
193+
APIVersion: "v1",
194+
Kind: "ConfigMap",
195+
},
196+
ObjectMeta: metav1.ObjectMeta{
197+
Namespace: "ns2",
198+
},
199+
}
200+
err := cl.Create(context.Background(), newcm)
201+
Expect(err.Error()).To(Equal("ConfigMap \"\" is invalid: metadata.name: Required value: name is required"))
202+
})
203+
204+
It("should error on Update with empty Name", func() {
205+
By("Creating a new configmap")
206+
newcm := &corev1.ConfigMap{
207+
TypeMeta: metav1.TypeMeta{
208+
APIVersion: "v1",
209+
Kind: "ConfigMap",
210+
},
211+
ObjectMeta: metav1.ObjectMeta{
212+
Namespace: "ns2",
213+
},
214+
}
215+
err := cl.Update(context.Background(), newcm)
216+
Expect(err.Error()).To(Equal("ConfigMap \"\" is invalid: metadata.name: Required value: name is required"))
217+
})
218+
189219
It("should be able to Create with GenerateName", func() {
190220
By("Creating a new configmap")
191221
newcm := &corev1.ConfigMap{

0 commit comments

Comments
 (0)