Skip to content

Commit 81842d0

Browse files
authored
Merge pull request #620 from zaneb/resource-version
✨ fakeClient: bump ResourceVersion on write
2 parents 838c86f + 916aeed commit 81842d0

File tree

2 files changed

+43
-6
lines changed

2 files changed

+43
-6
lines changed

pkg/client/fake/client.go

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"encoding/json"
2222
"fmt"
23+
"strconv"
2324
"strings"
2425

2526
"k8s.io/apimachinery/pkg/api/meta"
@@ -34,8 +35,12 @@ import (
3435
"sigs.k8s.io/controller-runtime/pkg/internal/objectutil"
3536
)
3637

38+
type versionedTracker struct {
39+
testing.ObjectTracker
40+
}
41+
3742
type fakeClient struct {
38-
tracker testing.ObjectTracker
43+
tracker versionedTracker
3944
scheme *runtime.Scheme
4045
}
4146

@@ -61,11 +66,37 @@ func NewFakeClientWithScheme(clientScheme *runtime.Scheme, initObjs ...runtime.O
6166
}
6267
}
6368
return &fakeClient{
64-
tracker: tracker,
69+
tracker: versionedTracker{tracker},
6570
scheme: clientScheme,
6671
}
6772
}
6873

74+
func (t versionedTracker) Create(gvr schema.GroupVersionResource, obj runtime.Object, ns string) error {
75+
if accessor, err := meta.Accessor(obj); err == nil {
76+
if accessor.GetResourceVersion() == "" {
77+
accessor.SetResourceVersion("1")
78+
}
79+
} else {
80+
return err
81+
}
82+
return t.ObjectTracker.Create(gvr, obj, ns)
83+
}
84+
85+
func (t versionedTracker) Update(gvr schema.GroupVersionResource, obj runtime.Object, ns string) error {
86+
if accessor, err := meta.Accessor(obj); err == nil {
87+
version := 0
88+
if rv := accessor.GetResourceVersion(); rv != "" {
89+
version, err = strconv.Atoi(rv)
90+
}
91+
if err == nil {
92+
accessor.SetResourceVersion(strconv.Itoa(version + 1))
93+
}
94+
} else {
95+
return err
96+
}
97+
return t.ObjectTracker.Update(gvr, obj, ns)
98+
}
99+
69100
func (c *fakeClient) Get(ctx context.Context, key client.ObjectKey, obj runtime.Object) error {
70101
gvr, err := getGVRFromObject(obj, c.scheme)
71102
if err != nil {

pkg/client/fake/client_test.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,14 +118,16 @@ var _ = Describe("Fake client", func() {
118118
err = cl.Get(nil, namespacedName, obj)
119119
Expect(err).To(BeNil())
120120
Expect(obj).To(Equal(newcm))
121+
Expect(obj.ObjectMeta.ResourceVersion).To(Equal("1"))
121122
})
122123

123124
It("should be able to Update", func() {
124125
By("Updating a new configmap")
125126
newcm := &corev1.ConfigMap{
126127
ObjectMeta: metav1.ObjectMeta{
127-
Name: "test-cm",
128-
Namespace: "ns2",
128+
Name: "test-cm",
129+
Namespace: "ns2",
130+
ResourceVersion: "1",
129131
},
130132
Data: map[string]string{
131133
"test-key": "new-value",
@@ -143,6 +145,7 @@ var _ = Describe("Fake client", func() {
143145
err = cl.Get(nil, namespacedName, obj)
144146
Expect(err).To(BeNil())
145147
Expect(obj).To(Equal(newcm))
148+
Expect(obj.ObjectMeta.ResourceVersion).To(Equal("2"))
146149
})
147150

148151
It("should be able to Delete", func() {
@@ -198,8 +201,9 @@ var _ = Describe("Fake client", func() {
198201
By("Updating a new configmap with DryRun")
199202
newcm := &corev1.ConfigMap{
200203
ObjectMeta: metav1.ObjectMeta{
201-
Name: "test-cm",
202-
Namespace: "ns2",
204+
Name: "test-cm",
205+
Namespace: "ns2",
206+
ResourceVersion: "1",
203207
},
204208
Data: map[string]string{
205209
"test-key": "new-value",
@@ -217,6 +221,7 @@ var _ = Describe("Fake client", func() {
217221
err = cl.Get(nil, namespacedName, obj)
218222
Expect(err).To(BeNil())
219223
Expect(obj).To(Equal(cm))
224+
Expect(obj.ObjectMeta.ResourceVersion).To(Equal(""))
220225
})
221226
})
222227

@@ -242,6 +247,7 @@ var _ = Describe("Fake client", func() {
242247
err = cl.Get(nil, namespacedName, obj)
243248
Expect(err).NotTo(HaveOccurred())
244249
Expect(obj.Annotations["foo"]).To(Equal("bar"))
250+
Expect(obj.ObjectMeta.ResourceVersion).To(Equal("1"))
245251
})
246252
}
247253

0 commit comments

Comments
 (0)