Skip to content
This repository was archived by the owner on Dec 17, 2025. It is now read-only.

Commit 66d645e

Browse files
committed
test: update unit tests to verify batch events processing flag
Signed-off-by: Mykola Pelekh <[email protected]>
1 parent eb45f84 commit 66d645e

File tree

1 file changed

+66
-52
lines changed

1 file changed

+66
-52
lines changed

pkg/cache/cluster_test.go

Lines changed: 66 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,12 @@ func TestEnsureSynced(t *testing.T) {
184184
}
185185

186186
func TestStatefulSetOwnershipInferred(t *testing.T) {
187+
var opts []UpdateSettingsFunc
188+
opts = append(opts, func(c *clusterCache) {
189+
c.batchEventsProcessing = true
190+
c.eventProcessingInterval = 1 * time.Millisecond
191+
})
192+
187193
sts := &appsv1.StatefulSet{
188194
TypeMeta: metav1.TypeMeta{APIVersion: "apps/v1", Kind: kube.StatefulSetKind},
189195
ObjectMeta: metav1.ObjectMeta{UID: "123", Name: "web", Namespace: "default"},
@@ -196,63 +202,71 @@ func TestStatefulSetOwnershipInferred(t *testing.T) {
196202
},
197203
}
198204

199-
t.Run("STSTemplateNameNotMatching", func(t *testing.T) {
200-
cluster := newCluster(t, sts)
201-
err := cluster.EnsureSynced()
202-
require.NoError(t, err)
203-
204-
pvc := mustToUnstructured(&v1.PersistentVolumeClaim{
205-
TypeMeta: metav1.TypeMeta{Kind: kube.PersistentVolumeClaimKind},
206-
ObjectMeta: metav1.ObjectMeta{Name: "www1-web-0", Namespace: "default"},
207-
})
208-
209-
cluster.recordEvent(watch.Added, pvc)
210-
211-
cluster.lock.Lock()
212-
defer cluster.lock.Unlock()
213-
214-
refs := cluster.resources[kube.GetResourceKey(pvc)].OwnerRefs
215-
216-
assert.Len(t, refs, 0)
217-
})
218-
219-
t.Run("STSTemplateNameNotMatching", func(t *testing.T) {
220-
cluster := newCluster(t, sts)
221-
err := cluster.EnsureSynced()
222-
require.NoError(t, err)
223-
224-
pvc := mustToUnstructured(&v1.PersistentVolumeClaim{
225-
TypeMeta: metav1.TypeMeta{Kind: kube.PersistentVolumeClaimKind},
226-
ObjectMeta: metav1.ObjectMeta{Name: "www1-web-0", Namespace: "default"},
227-
})
228-
cluster.recordEvent(watch.Added, pvc)
229-
230-
cluster.lock.Lock()
231-
defer cluster.lock.Unlock()
205+
tests := []struct {
206+
name string
207+
cluster *clusterCache
208+
pvc *v1.PersistentVolumeClaim
209+
expectedRefs []metav1.OwnerReference
210+
expectNoOwner bool
211+
}{
212+
{
213+
name: "STSTemplateNameNotMatching",
214+
cluster: newCluster(t, sts),
215+
pvc: &v1.PersistentVolumeClaim{
216+
TypeMeta: metav1.TypeMeta{Kind: kube.PersistentVolumeClaimKind},
217+
ObjectMeta: metav1.ObjectMeta{Name: "www1-web-0", Namespace: "default"},
218+
},
219+
expectNoOwner: true,
220+
},
221+
{
222+
name: "MatchingSTSExists",
223+
cluster: newCluster(t, sts),
224+
pvc: &v1.PersistentVolumeClaim{
225+
TypeMeta: metav1.TypeMeta{Kind: kube.PersistentVolumeClaimKind},
226+
ObjectMeta: metav1.ObjectMeta{Name: "www-web-0", Namespace: "default"},
227+
},
228+
expectedRefs: []metav1.OwnerReference{{APIVersion: "apps/v1", Kind: kube.StatefulSetKind, Name: "web", UID: "123"}},
229+
},
230+
{
231+
name: "STSTemplateNameNotMatchingWithBatchProcessing",
232+
cluster: newClusterWithOptions(t, opts, sts),
233+
pvc: &v1.PersistentVolumeClaim{
234+
TypeMeta: metav1.TypeMeta{Kind: kube.PersistentVolumeClaimKind},
235+
ObjectMeta: metav1.ObjectMeta{Name: "www1-web-0", Namespace: "default"},
236+
},
237+
expectNoOwner: true,
238+
},
239+
{
240+
name: "MatchingSTSExistsWithBatchProcessing",
241+
cluster: newClusterWithOptions(t, opts, sts),
242+
pvc: &v1.PersistentVolumeClaim{
243+
TypeMeta: metav1.TypeMeta{Kind: kube.PersistentVolumeClaimKind},
244+
ObjectMeta: metav1.ObjectMeta{Name: "www-web-0", Namespace: "default"},
245+
},
246+
expectedRefs: []metav1.OwnerReference{{APIVersion: "apps/v1", Kind: kube.StatefulSetKind, Name: "web", UID: "123"}},
247+
},
248+
}
232249

233-
refs := cluster.resources[kube.GetResourceKey(pvc)].OwnerRefs
250+
for _, tc := range tests {
251+
t.Run(tc.name, func(t *testing.T) {
252+
err := tc.cluster.EnsureSynced()
253+
require.NoError(t, err)
234254

235-
assert.Len(t, refs, 0)
236-
})
255+
pvc := mustToUnstructured(tc.pvc)
256+
tc.cluster.recordEvent(watch.Added, pvc)
237257

238-
t.Run("MatchingSTSExists", func(t *testing.T) {
239-
cluster := newCluster(t, sts)
240-
err := cluster.EnsureSynced()
241-
require.NoError(t, err)
258+
require.Eventually(t, func() bool {
259+
tc.cluster.lock.Lock()
260+
defer tc.cluster.lock.Unlock()
242261

243-
pvc := mustToUnstructured(&v1.PersistentVolumeClaim{
244-
TypeMeta: metav1.TypeMeta{Kind: kube.PersistentVolumeClaimKind},
245-
ObjectMeta: metav1.ObjectMeta{Name: "www-web-0", Namespace: "default"},
262+
refs := tc.cluster.resources[kube.GetResourceKey(pvc)].OwnerRefs
263+
if tc.expectNoOwner {
264+
return len(refs) == 0
265+
}
266+
return assert.ElementsMatch(t, refs, tc.expectedRefs)
267+
}, 5*time.Second, 10*time.Millisecond, "Expected PVC to have correct owner reference")
246268
})
247-
cluster.recordEvent(watch.Added, pvc)
248-
249-
cluster.lock.Lock()
250-
defer cluster.lock.Unlock()
251-
252-
refs := cluster.resources[kube.GetResourceKey(pvc)].OwnerRefs
253-
254-
assert.ElementsMatch(t, refs, []metav1.OwnerReference{{APIVersion: "apps/v1", Kind: kube.StatefulSetKind, Name: "web", UID: "123"}})
255-
})
269+
}
256270
}
257271

258272
func TestEnsureSyncedSingleNamespace(t *testing.T) {

0 commit comments

Comments
 (0)