@@ -1810,6 +1810,56 @@ var _ = Describe("Fake client", func() {
1810
1810
Expect (cmp .Diff (objOriginal , actual )).To (BeEmpty ())
1811
1811
})
1812
1812
1813
+ It ("should Unmarshal the schemaless object with int64 to preserve ints" , func () {
1814
+ schemeBuilder := & scheme.Builder {GroupVersion : schema.GroupVersion {Group : "test" , Version : "v1" }}
1815
+ schemeBuilder .Register (& WithSchemalessSpec {})
1816
+
1817
+ scheme := runtime .NewScheme ()
1818
+ Expect (schemeBuilder .AddToScheme (scheme )).NotTo (HaveOccurred ())
1819
+
1820
+ spec := Schemaless {
1821
+ "key" : int64 (1 ),
1822
+ }
1823
+
1824
+ obj := & WithSchemalessSpec {
1825
+ ObjectMeta : metav1.ObjectMeta {
1826
+ Name : "a-foo" ,
1827
+ },
1828
+ Spec : spec ,
1829
+ }
1830
+ cl := NewClientBuilder ().WithScheme (scheme ).WithStatusSubresource (obj ).WithObjects (obj ).Build ()
1831
+
1832
+ Expect (cl .Update (context .Background (), obj )).To (Succeed ())
1833
+ Expect (obj .Spec ).To (BeEquivalentTo (spec ))
1834
+ Expect (cl .Get (context .Background (), client .ObjectKeyFromObject (obj ), obj )).To (Succeed ())
1835
+ Expect (obj .Spec ).To (BeEquivalentTo (spec ))
1836
+ })
1837
+
1838
+ It ("should Unmarshal the schemaless object with float64 to preserve ints" , func () {
1839
+ schemeBuilder := & scheme.Builder {GroupVersion : schema.GroupVersion {Group : "test" , Version : "v1" }}
1840
+ schemeBuilder .Register (& WithSchemalessSpec {})
1841
+
1842
+ scheme := runtime .NewScheme ()
1843
+ Expect (schemeBuilder .AddToScheme (scheme )).NotTo (HaveOccurred ())
1844
+
1845
+ spec := Schemaless {
1846
+ "key" : 1.1 ,
1847
+ }
1848
+
1849
+ obj := & WithSchemalessSpec {
1850
+ ObjectMeta : metav1.ObjectMeta {
1851
+ Name : "a-foo" ,
1852
+ },
1853
+ Spec : spec ,
1854
+ }
1855
+ cl := NewClientBuilder ().WithScheme (scheme ).WithStatusSubresource (obj ).WithObjects (obj ).Build ()
1856
+
1857
+ Expect (cl .Update (context .Background (), obj )).To (Succeed ())
1858
+ Expect (obj .Spec ).To (BeEquivalentTo (spec ))
1859
+ Expect (cl .Get (context .Background (), client .ObjectKeyFromObject (obj ), obj )).To (Succeed ())
1860
+ Expect (obj .Spec ).To (BeEquivalentTo (spec ))
1861
+ })
1862
+
1813
1863
It ("should not change the status of unstructured objects that are configured to have a status subresource on update" , func () {
1814
1864
obj := & unstructured.Unstructured {}
1815
1865
obj .SetAPIVersion ("foo/v1" )
@@ -2695,6 +2745,52 @@ var _ = Describe("Fake client", func() {
2695
2745
}
2696
2746
})
2697
2747
2748
+ type Schemaless map [string ]interface {}
2749
+
2750
+ type WithSchemalessSpec struct {
2751
+ metav1.TypeMeta `json:",inline"`
2752
+ metav1.ObjectMeta `json:"metadata,omitempty"`
2753
+
2754
+ Spec Schemaless `json:"spec,omitempty"`
2755
+ }
2756
+
2757
+ func (t * WithSchemalessSpec ) DeepCopy () * WithSchemalessSpec {
2758
+ w := & WithSchemalessSpec {
2759
+ ObjectMeta : * t .ObjectMeta .DeepCopy (),
2760
+ }
2761
+ w .TypeMeta = metav1.TypeMeta {
2762
+ APIVersion : t .APIVersion ,
2763
+ Kind : t .Kind ,
2764
+ }
2765
+ t .Spec .DeepCopyInto (& w .Spec )
2766
+
2767
+ return w
2768
+ }
2769
+
2770
+ func (t * WithSchemalessSpec ) DeepCopyObject () runtime.Object {
2771
+ return t .DeepCopy ()
2772
+ }
2773
+
2774
+ // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
2775
+ func (in * Schemaless ) DeepCopyInto (out * Schemaless ) {
2776
+ if * in != nil {
2777
+ * out = make (Schemaless , len (* in ))
2778
+ for key := range * in {
2779
+ (* out )[key ] = (* in )[key ]
2780
+ }
2781
+ }
2782
+ }
2783
+
2784
+ // DeepCopy copies the receiver, creating a new Schemaless.
2785
+ func (in * Schemaless ) DeepCopy () * Schemaless {
2786
+ if in == nil {
2787
+ return nil
2788
+ }
2789
+ out := new (Schemaless )
2790
+ in .DeepCopyInto (out )
2791
+ return out
2792
+ }
2793
+
2698
2794
type WithPointerMetaList struct {
2699
2795
* metav1.ListMeta
2700
2796
* metav1.TypeMeta
0 commit comments