@@ -42,12 +42,14 @@ import (
42
42
"k8s.io/apimachinery/pkg/labels"
43
43
"k8s.io/apimachinery/pkg/runtime"
44
44
"k8s.io/apimachinery/pkg/runtime/schema"
45
+ "k8s.io/apimachinery/pkg/runtime/serializer"
45
46
"k8s.io/apimachinery/pkg/types"
46
47
"k8s.io/apimachinery/pkg/watch"
47
48
clientgoapplyconfigurations "k8s.io/client-go/applyconfigurations"
48
49
corev1applyconfigurations "k8s.io/client-go/applyconfigurations/core/v1"
49
50
"k8s.io/client-go/kubernetes/fake"
50
51
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
52
+ "k8s.io/client-go/testing"
51
53
"k8s.io/utils/ptr"
52
54
53
55
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -2839,6 +2841,93 @@ var _ = Describe("Fake client", func() {
2839
2841
Expect (* obj .DeletionTimestamp ).To (BeEquivalentTo (now ))
2840
2842
})
2841
2843
2844
+ It ("will error out if an object with invalid managedFields is added" , func (ctx SpecContext ) {
2845
+ fieldV1Map := map [string ]interface {}{
2846
+ "f:metadata" : map [string ]interface {}{
2847
+ "f:name" : map [string ]interface {}{},
2848
+ "f:labels" : map [string ]interface {}{},
2849
+ "f:annotations" : map [string ]interface {}{},
2850
+ "f:finalizers" : map [string ]interface {}{},
2851
+ },
2852
+ }
2853
+ fieldV1 , err := json .Marshal (fieldV1Map )
2854
+ Expect (err ).NotTo (HaveOccurred ())
2855
+
2856
+ obj := & corev1.ConfigMap {ObjectMeta : metav1.ObjectMeta {
2857
+ Name : "cm-1" ,
2858
+ Namespace : "default" ,
2859
+ ManagedFields : []metav1.ManagedFieldsEntry {{
2860
+ Manager : "my-manager" ,
2861
+ Operation : metav1 .ManagedFieldsOperationUpdate ,
2862
+ FieldsType : "FieldsV1" ,
2863
+ FieldsV1 : & metav1.FieldsV1 {Raw : fieldV1 },
2864
+ }},
2865
+ }}
2866
+
2867
+ Expect (func () {
2868
+ NewClientBuilder ().WithObjects (obj ).Build ()
2869
+ }).To (PanicWith (MatchError (ContainSubstring ("invalid managedFields" ))))
2870
+ })
2871
+
2872
+ It ("allows adding an object with managedFields" , func (ctx SpecContext ) {
2873
+ fieldV1Map := map [string ]interface {}{
2874
+ "f:metadata" : map [string ]interface {}{
2875
+ "f:name" : map [string ]interface {}{},
2876
+ "f:labels" : map [string ]interface {}{},
2877
+ "f:annotations" : map [string ]interface {}{},
2878
+ "f:finalizers" : map [string ]interface {}{},
2879
+ },
2880
+ }
2881
+ fieldV1 , err := json .Marshal (fieldV1Map )
2882
+ Expect (err ).NotTo (HaveOccurred ())
2883
+
2884
+ obj := & corev1.ConfigMap {ObjectMeta : metav1.ObjectMeta {
2885
+ Name : "cm-1" ,
2886
+ Namespace : "default" ,
2887
+ ManagedFields : []metav1.ManagedFieldsEntry {{
2888
+ Manager : "my-manager" ,
2889
+ Operation : metav1 .ManagedFieldsOperationUpdate ,
2890
+ FieldsType : "FieldsV1" ,
2891
+ FieldsV1 : & metav1.FieldsV1 {Raw : fieldV1 },
2892
+ APIVersion : "v1" ,
2893
+ }},
2894
+ }}
2895
+
2896
+ NewClientBuilder ().WithObjects (obj ).Build ()
2897
+ })
2898
+
2899
+ It ("allows adding an object with invalid managedFields when not using the FieldManagedObjectTracker" , func (ctx SpecContext ) {
2900
+ fieldV1Map := map [string ]interface {}{
2901
+ "f:metadata" : map [string ]interface {}{
2902
+ "f:name" : map [string ]interface {}{},
2903
+ "f:labels" : map [string ]interface {}{},
2904
+ "f:annotations" : map [string ]interface {}{},
2905
+ "f:finalizers" : map [string ]interface {}{},
2906
+ },
2907
+ }
2908
+ fieldV1 , err := json .Marshal (fieldV1Map )
2909
+ Expect (err ).NotTo (HaveOccurred ())
2910
+
2911
+ obj := & corev1.ConfigMap {ObjectMeta : metav1.ObjectMeta {
2912
+ Name : "cm-1" ,
2913
+ Namespace : "default" ,
2914
+ ManagedFields : []metav1.ManagedFieldsEntry {{
2915
+ Manager : "my-manager" ,
2916
+ Operation : metav1 .ManagedFieldsOperationUpdate ,
2917
+ FieldsType : "FieldsV1" ,
2918
+ FieldsV1 : & metav1.FieldsV1 {Raw : fieldV1 },
2919
+ }},
2920
+ }}
2921
+
2922
+ NewClientBuilder ().
2923
+ WithObjectTracker (testing .NewObjectTracker (
2924
+ clientgoscheme .Scheme ,
2925
+ serializer .NewCodecFactory (clientgoscheme .Scheme ).UniversalDecoder (),
2926
+ )).
2927
+ WithObjects (obj ).
2928
+ Build ()
2929
+ })
2930
+
2842
2931
scalableObjs := []client.Object {
2843
2932
& appsv1.Deployment {
2844
2933
ObjectMeta : metav1.ObjectMeta {
0 commit comments