@@ -37,13 +37,15 @@ import (
37
37
"k8s.io/apimachinery/pkg/fields"
38
38
"k8s.io/apimachinery/pkg/labels"
39
39
"k8s.io/apimachinery/pkg/runtime"
40
+ "k8s.io/apimachinery/pkg/runtime/schema"
40
41
"k8s.io/apimachinery/pkg/types"
41
42
"k8s.io/apimachinery/pkg/watch"
42
43
"k8s.io/client-go/kubernetes/fake"
43
44
"k8s.io/utils/ptr"
44
45
45
46
"sigs.k8s.io/controller-runtime/pkg/client"
46
47
"sigs.k8s.io/controller-runtime/pkg/client/interceptor"
48
+ "sigs.k8s.io/controller-runtime/pkg/scheme"
47
49
)
48
50
49
51
const (
@@ -1354,10 +1356,6 @@ var _ = Describe("Fake client", func() {
1354
1356
Expect (cl .Get (context .Background (), types.NamespacedName {Name : "cm" }, retrieved )).To (Succeed ())
1355
1357
1356
1358
reference := & corev1.Secret {
1357
- TypeMeta : metav1.TypeMeta {
1358
- APIVersion : "v1" ,
1359
- Kind : "Secret" ,
1360
- },
1361
1359
ObjectMeta : metav1.ObjectMeta {
1362
1360
Name : "cm" ,
1363
1361
ResourceVersion : "999" ,
@@ -1771,8 +1769,6 @@ var _ = Describe("Fake client", func() {
1771
1769
1772
1770
actual := & corev1.Pod {}
1773
1771
Expect (cl .Get (context .Background (), client .ObjectKeyFromObject (obj ), actual )).To (Succeed ())
1774
- obj .APIVersion = "v1"
1775
- obj .Kind = "Pod"
1776
1772
obj .ResourceVersion = actual .ResourceVersion
1777
1773
// only the status mutation should persist
1778
1774
obj .Status .Phase = corev1 .PodRunning
@@ -1877,13 +1873,136 @@ var _ = Describe("Fake client", func() {
1877
1873
}
1878
1874
1879
1875
It ("should error when creating an eviction with the wrong type" , func () {
1880
-
1881
1876
cl := NewClientBuilder ().Build ()
1882
1877
err := cl .SubResource ("eviction" ).Create (context .Background (), & corev1.Pod {}, & corev1.Namespace {})
1883
1878
Expect (apierrors .IsBadRequest (err )).To (BeTrue ())
1884
1879
})
1880
+
1881
+ It ("should leave typemeta empty on typed get" , func () {
1882
+ cl := NewClientBuilder ().WithObjects (& corev1.Pod {ObjectMeta : metav1.ObjectMeta {
1883
+ Namespace : "default" ,
1884
+ Name : "foo" ,
1885
+ }}).Build ()
1886
+
1887
+ var pod corev1.Pod
1888
+ Expect (cl .Get (context .Background (), client.ObjectKey {Namespace : "default" , Name : "foo" }, & pod )).NotTo (HaveOccurred ())
1889
+
1890
+ Expect (pod .TypeMeta ).To (Equal (metav1.TypeMeta {}))
1891
+ })
1892
+
1893
+ It ("should leave typemeta empty on typed list" , func () {
1894
+ cl := NewClientBuilder ().WithObjects (& corev1.Pod {ObjectMeta : metav1.ObjectMeta {
1895
+ Namespace : "default" ,
1896
+ Name : "foo" ,
1897
+ }}).Build ()
1898
+
1899
+ var podList corev1.PodList
1900
+ Expect (cl .List (context .Background (), & podList )).NotTo (HaveOccurred ())
1901
+ Expect (podList .ListMeta ).To (Equal (metav1.ListMeta {}))
1902
+ Expect (podList .Items [0 ].TypeMeta ).To (Equal (metav1.TypeMeta {}))
1903
+ })
1904
+
1905
+ It ("should be able to Get an object that has pointer fields for metadata" , func () {
1906
+ schemeBuilder := & scheme.Builder {GroupVersion : schema.GroupVersion {Group : "test" , Version : "v1" }}
1907
+ schemeBuilder .Register (& WithPointerMeta {}, & WithPointerMetaList {})
1908
+ scheme := runtime .NewScheme ()
1909
+ Expect (schemeBuilder .AddToScheme (scheme )).NotTo (HaveOccurred ())
1910
+
1911
+ cl := NewClientBuilder ().
1912
+ WithScheme (scheme ).
1913
+ WithObjects (& WithPointerMeta {ObjectMeta : & metav1.ObjectMeta {
1914
+ Name : "foo" ,
1915
+ }}).
1916
+ Build ()
1917
+
1918
+ var object WithPointerMeta
1919
+ Expect (cl .Get (context .Background (), client.ObjectKey {Name : "foo" }, & object )).NotTo (HaveOccurred ())
1920
+ })
1921
+
1922
+ It ("should be able to List an object type that has pointer fields for metadata" , func () {
1923
+ schemeBuilder := & scheme.Builder {GroupVersion : schema.GroupVersion {Group : "test" , Version : "v1" }}
1924
+ schemeBuilder .Register (& WithPointerMeta {}, & WithPointerMetaList {})
1925
+ scheme := runtime .NewScheme ()
1926
+ Expect (schemeBuilder .AddToScheme (scheme )).NotTo (HaveOccurred ())
1927
+
1928
+ cl := NewClientBuilder ().
1929
+ WithScheme (scheme ).
1930
+ WithObjects (& WithPointerMeta {ObjectMeta : & metav1.ObjectMeta {
1931
+ Name : "foo" ,
1932
+ }}).
1933
+ Build ()
1934
+
1935
+ var objectList WithPointerMetaList
1936
+ Expect (cl .List (context .Background (), & objectList )).NotTo (HaveOccurred ())
1937
+ Expect (objectList .Items ).To (HaveLen (1 ))
1938
+ })
1939
+
1940
+ It ("should be able to List an object type that has pointer fields for metadata with no results" , func () {
1941
+ schemeBuilder := & scheme.Builder {GroupVersion : schema.GroupVersion {Group : "test" , Version : "v1" }}
1942
+ schemeBuilder .Register (& WithPointerMeta {}, & WithPointerMetaList {})
1943
+ scheme := runtime .NewScheme ()
1944
+ Expect (schemeBuilder .AddToScheme (scheme )).NotTo (HaveOccurred ())
1945
+
1946
+ cl := NewClientBuilder ().
1947
+ WithScheme (scheme ).
1948
+ Build ()
1949
+
1950
+ var objectList WithPointerMetaList
1951
+ Expect (cl .List (context .Background (), & objectList )).NotTo (HaveOccurred ())
1952
+ Expect (objectList .Items ).To (BeEmpty ())
1953
+ })
1885
1954
})
1886
1955
1956
+ type WithPointerMetaList struct {
1957
+ * metav1.ListMeta
1958
+ * metav1.TypeMeta
1959
+ Items []* WithPointerMeta
1960
+ }
1961
+
1962
+ func (t * WithPointerMetaList ) DeepCopy () * WithPointerMetaList {
1963
+ l := & WithPointerMetaList {
1964
+ ListMeta : t .ListMeta .DeepCopy (),
1965
+ }
1966
+ if t .TypeMeta != nil {
1967
+ l .TypeMeta = & metav1.TypeMeta {
1968
+ APIVersion : t .APIVersion ,
1969
+ Kind : t .Kind ,
1970
+ }
1971
+ }
1972
+ for _ , item := range t .Items {
1973
+ l .Items = append (l .Items , item .DeepCopy ())
1974
+ }
1975
+
1976
+ return l
1977
+ }
1978
+
1979
+ func (t * WithPointerMetaList ) DeepCopyObject () runtime.Object {
1980
+ return t .DeepCopy ()
1981
+ }
1982
+
1983
+ type WithPointerMeta struct {
1984
+ * metav1.TypeMeta
1985
+ * metav1.ObjectMeta
1986
+ }
1987
+
1988
+ func (t * WithPointerMeta ) DeepCopy () * WithPointerMeta {
1989
+ w := & WithPointerMeta {
1990
+ ObjectMeta : t .ObjectMeta .DeepCopy (),
1991
+ }
1992
+ if t .TypeMeta != nil {
1993
+ w .TypeMeta = & metav1.TypeMeta {
1994
+ APIVersion : t .APIVersion ,
1995
+ Kind : t .Kind ,
1996
+ }
1997
+ }
1998
+
1999
+ return w
2000
+ }
2001
+
2002
+ func (t * WithPointerMeta ) DeepCopyObject () runtime.Object {
2003
+ return t .DeepCopy ()
2004
+ }
2005
+
1887
2006
var _ = Describe ("Fake client builder" , func () {
1888
2007
It ("panics when an index with the same name and GroupVersionKind is registered twice" , func () {
1889
2008
// We need any realistic GroupVersionKind, the choice of apps/v1 Deployment is arbitrary.
0 commit comments