@@ -1884,6 +1884,19 @@ var _ = Describe("Fake client", func() {
18841884 Expect (obj .Spec ).To (BeEquivalentTo (spec ))
18851885 })
18861886
1887+ It ("works with types that have an embedded struct pointer" , func (ctx SpecContext ) {
1888+ schemeBuilder := & scheme.Builder {GroupVersion : schema.GroupVersion {Group : "test" , Version : "v1" }}
1889+ schemeBuilder .Register (& EmbeddedPointerStructCRD {})
1890+
1891+ scheme := runtime .NewScheme ()
1892+ Expect (schemeBuilder .AddToScheme (scheme )).NotTo (HaveOccurred ())
1893+
1894+ c := NewClientBuilder ().WithScheme (scheme ).Build ()
1895+
1896+ object := & EmbeddedPointerStructCRD {ObjectMeta : metav1.ObjectMeta {Name : "eps" }}
1897+ Expect (c .Create (ctx , object )).NotTo (HaveOccurred ())
1898+ })
1899+
18871900 It ("should not change the status of unstructured objects that are configured to have a status subresource on update" , func (ctx SpecContext ) {
18881901 obj := & unstructured.Unstructured {}
18891902 obj .SetAPIVersion ("foo/v1" )
@@ -3371,3 +3384,26 @@ var _ = Describe("Fake client builder", func() {
33713384 }).To (Panic ())
33723385 })
33733386})
3387+
3388+ type EmbeddedPointerStructCRD struct {
3389+ metav1.TypeMeta `json:",inline"`
3390+ metav1.ObjectMeta `json:"metadata,omitzero"`
3391+ * EmbededField `json:",inline"`
3392+ }
3393+
3394+ type EmbededField struct {
3395+ AnInt int `json:"anInt"`
3396+ }
3397+
3398+ func (in * EmbeddedPointerStructCRD ) DeepCopyObject () runtime.Object {
3399+ s , err := json .Marshal (in )
3400+ if err != nil {
3401+ panic (err )
3402+ }
3403+ var out EmbeddedPointerStructCRD
3404+ if err := json .Unmarshal (s , & out ); err != nil {
3405+ panic (err )
3406+ }
3407+
3408+ return & out
3409+ }
0 commit comments