@@ -184,6 +184,12 @@ func TestEnsureSynced(t *testing.T) {
184184}
185185
186186func 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
258272func TestEnsureSyncedSingleNamespace (t * testing.T ) {
0 commit comments