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

Commit 70a3891

Browse files
committed
Adding logic to process BR and BAR deletes.
1 parent 197dbfa commit 70a3891

File tree

6 files changed

+442
-11
lines changed

6 files changed

+442
-11
lines changed

go.sum

-6
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
179179
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
180180
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
181181
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
182-
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
183182
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
184183
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
185184
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -200,7 +199,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
200199
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
201200
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
202201
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
203-
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
204202
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
205203
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
206204
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
@@ -222,7 +220,6 @@ github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OI
222220
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
223221
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
224222
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
225-
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
226223
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
227224
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
228225
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -271,7 +268,6 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p
271268
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
272269
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
273270
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
274-
github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q=
275271
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
276272
github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg=
277273
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
@@ -690,7 +686,6 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
690686
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
691687
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
692688
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
693-
google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
694689
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
695690
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
696691
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
@@ -718,7 +713,6 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
718713
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
719714
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
720715
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
721-
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
722716
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
723717
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
724718
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

pkg/bucketaccessrequest/bucketaccessrequest.go

+62-3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func (b *bucketAccessRequestListener) InitializeBucketClient(bc bucketclientset.
3434
b.bucketClient = bc
3535
}
3636

37+
// Add is in response to user adding a BucketAccessRequest. The call here will respond by creating a BucketAccess Object.
3738
func (b *bucketAccessRequestListener) Add(ctx context.Context, obj *v1alpha1.BucketAccessRequest) error {
3839
klog.V(1).Infof("Add called for BucketAccessRequest %s", obj.Name)
3940
bucketAccessRequest := obj
@@ -55,13 +56,22 @@ func (b *bucketAccessRequestListener) Add(ctx context.Context, obj *v1alpha1.Buc
5556
return nil
5657
}
5758

59+
// Update is called in response to a change to BucketAccessRequest. At this point
60+
// BucketAccess cannot be changed once created as the Provisioner might have already acted upon the create BucketAccess and created the backend Bucket Credentials
61+
// Changes to Protocol, Provisioner, BucketInstanceName, BucketRequest cannot be allowed. Best is to delete and recreate a new BucketAccessRequest
62+
// Changes to ServiceAccount, PolicyActionsConfigMapData and Parameters should be considered in lieu with sidecar implementation
5863
func (b *bucketAccessRequestListener) Update(ctx context.Context, old, new *v1alpha1.BucketAccessRequest) error {
5964
klog.V(1).Infof("Update called for BucketAccessRequest %v", old.Name)
65+
if new.ObjectMeta.DeletionTimestamp != nil {
66+
// BucketAccessRequest is being deleted, check and remove finalizer once BA is deleted
67+
return b.removeBucketAccess(ctx, new)
68+
}
6069
return nil
6170
}
6271

63-
func (b *bucketAccessRequestListener) Delete(ctx context.Context, obj *v1alpha1.BucketAccessRequest) error {
64-
klog.V(1).Infof("Delete called for BucketAccessRequest %v", obj.Name)
72+
// Delete is in response to user deleting a BucketAccessRequest. The call here will respond by deleting a BucketAccess Object.
73+
func (b *bucketAccessRequestListener) Delete(ctx context.Context, bucketAccessRequest *v1alpha1.BucketAccessRequest) error {
74+
klog.V(1).Infof("Delete called for BucketAccessRequest %v/%v", bucketAccessRequest.Namespace, bucketAccessRequest.Name)
6575
return nil
6676
}
6777

@@ -132,7 +142,7 @@ func (b *bucketAccessRequestListener) provisionBucketAccess(ctx context.Context,
132142
}
133143
// bucketaccess.Spec.MintedSecretName - set by the driver
134144
bucketaccess.Spec.PolicyActionsConfigMapData, err = util.ReadConfigData(b.kubeClient, bucketAccessClass.PolicyActionsConfigMap)
135-
if err != nil {
145+
if err != nil && err != util.ErrNilConfigMap {
136146
return err
137147
}
138148
// bucketaccess.Spec.Principal - set by the driver
@@ -144,6 +154,10 @@ func (b *bucketAccessRequestListener) provisionBucketAccess(ctx context.Context,
144154
return err
145155
}
146156

157+
if !util.CheckFinalizer(bucketAccessRequest, util.BARDeleteFinalizer) {
158+
bucketAccessRequest.ObjectMeta.Finalizers = append(bucketAccessRequest.ObjectMeta.Finalizers, util.BARDeleteFinalizer)
159+
}
160+
147161
err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
148162
bucketAccessRequest.Status.BucketAccessName = bucketaccess.Name
149163
bucketAccessRequest.Status.AccessGranted = true
@@ -159,3 +173,48 @@ func (b *bucketAccessRequestListener) provisionBucketAccess(ctx context.Context,
159173
klog.Infof("Finished creating BucketAccess %v", bucketaccess.Name)
160174
return nil
161175
}
176+
177+
func (b *bucketAccessRequestListener) removeBucketAccess(ctx context.Context, bucketAccessRequest *v1alpha1.BucketAccessRequest) error {
178+
bucketaccess := b.FindBucketAccess(ctx, bucketAccessRequest)
179+
if bucketaccess == nil {
180+
// bucketaccess for this BucketAccessRequest is not found
181+
return util.ErrBucketAccessDoesNotExist
182+
}
183+
184+
// time to delete the BucketAccess Object
185+
err := b.bucketClient.ObjectstorageV1alpha1().BucketAccesses().Delete(context.Background(), bucketaccess.Name, metav1.DeleteOptions{})
186+
if err != nil {
187+
return err
188+
}
189+
190+
// we can safely remove the finalizer
191+
return b.removeBARDeleteFinalizer(ctx, bucketAccessRequest)
192+
}
193+
194+
func (b *bucketAccessRequestListener) FindBucketAccess(ctx context.Context, bucketAccessRequest *v1alpha1.BucketAccessRequest) *v1alpha1.BucketAccess {
195+
bucketAccessList, err := b.bucketClient.ObjectstorageV1alpha1().BucketAccesses().List(ctx, metav1.ListOptions{})
196+
if err != nil || len(bucketAccessList.Items) <= 0 {
197+
return nil
198+
}
199+
for _, bucketaccess := range bucketAccessList.Items {
200+
if bucketaccess.Spec.BucketAccessRequest.Name == bucketAccessRequest.Name &&
201+
bucketaccess.Spec.BucketAccessRequest.Namespace == bucketAccessRequest.Namespace &&
202+
bucketaccess.Spec.BucketAccessRequest.UID == bucketAccessRequest.UID {
203+
return &bucketaccess
204+
}
205+
}
206+
return nil
207+
}
208+
209+
func (b *bucketAccessRequestListener) removeBARDeleteFinalizer(ctx context.Context, bucketAccessRequest *v1alpha1.BucketAccessRequest) error {
210+
newFinalizers := []string{}
211+
for _, finalizer := range bucketAccessRequest.ObjectMeta.Finalizers {
212+
if finalizer != util.BARDeleteFinalizer {
213+
newFinalizers = append(newFinalizers, finalizer)
214+
}
215+
}
216+
bucketAccessRequest.ObjectMeta.Finalizers = newFinalizers
217+
218+
_, err := b.bucketClient.ObjectstorageV1alpha1().BucketAccessRequests(bucketAccessRequest.Namespace).Update(ctx, bucketAccessRequest, metav1.UpdateOptions{})
219+
return err
220+
}

pkg/bucketaccessrequest/bucketaccessrequest_test.go

+179-2
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,22 @@ func TestAddBAR(t *testing.T) {
120120

121121
// Test add with multipleBRs
122122
func TestAddWithMultipleBAR(t *testing.T) {
123-
runCreateBucketWithMultipleBA(t, "addWithMultipleBR")
123+
runCreateBucketWithMultipleBA(t, "addWithMultipleBAR")
124124
}
125125

126126
// Test add idempotency
127127
func TestAddBARIdempotency(t *testing.T) {
128-
runCreateBucketIdempotency(t, "addWithMultipleBR")
128+
runCreateBucketIdempotency(t, "addBARIdempotency")
129+
}
130+
131+
// Test delete BAR
132+
func TestDeleteBAR(t *testing.T) {
133+
runDeleteBucketAccessRequest(t, "deleteBAR")
134+
}
135+
136+
// Test delete BAR Idempotency
137+
func TestDeleteBARIdempotency(t *testing.T) {
138+
runDeleteBucketAccessRequestIdempotency(t, "deleteBARIdempotency")
129139
}
130140

131141
func runCreateBucketAccess(t *testing.T, name string) {
@@ -331,3 +341,170 @@ func runCreateBucketIdempotency(t *testing.T, name string) {
331341
t.Fatalf("Expecting a single BucketAccess created but found %v", len(bucketAccessList.Items))
332342
}
333343
}
344+
345+
func runDeleteBucketAccessRequest(t *testing.T, name string) {
346+
ctx, cancel := context.WithCancel(context.Background())
347+
defer cancel()
348+
349+
client := bucketclientset.NewSimpleClientset()
350+
kubeClient := fake.NewSimpleClientset()
351+
352+
listener := NewListener()
353+
listener.InitializeKubeClient(kubeClient)
354+
listener.InitializeBucketClient(client)
355+
356+
_, err := kubeClient.CoreV1().ServiceAccounts(sa1.Namespace).Create(ctx, &sa1, metav1.CreateOptions{})
357+
if err != nil {
358+
t.Fatalf("Error occurred when creating ServiceAccount: %v", err)
359+
}
360+
defer kubeClient.CoreV1().ServiceAccounts(sa1.Namespace).Delete(ctx, sa1.Name, metav1.DeleteOptions{})
361+
362+
_, err = kubeClient.CoreV1().ConfigMaps(cosiConfigMap.Namespace).Create(ctx, &cosiConfigMap, metav1.CreateOptions{})
363+
if err != nil {
364+
t.Fatalf("Error occurred when creating ConfigMap: %v", err)
365+
}
366+
defer kubeClient.CoreV1().ConfigMaps(cosiConfigMap.Namespace).Delete(ctx, cosiConfigMap.Name, metav1.DeleteOptions{})
367+
368+
bucketaccessclass, err := util.CreateBucketAccessClass(ctx, client, &goldAccessClass)
369+
if err != nil {
370+
t.Fatalf("Error occurred when creating BucketAccessClass: %v", err)
371+
}
372+
373+
bucketrequest, err := util.CreateBucketRequest(ctx, client, &bucketRequest1)
374+
if err != nil {
375+
t.Fatalf("Error occurred when creating BucketRequest: %v", err)
376+
}
377+
378+
bucketaccessrequest, err := util.CreateBucketAccessRequest(ctx, client, &bucketAccessRequest1)
379+
if err != nil {
380+
t.Fatalf("Error occurred when creating BucketAccessRequest: %v", err)
381+
}
382+
383+
listener.Add(ctx, bucketaccessrequest)
384+
385+
bucketAccessList := util.GetBucketAccesses(ctx, client, 1)
386+
defer util.DeleteObjects(ctx, client, *bucketrequest, *bucketaccessrequest, *bucketaccessclass, bucketAccessList.Items)
387+
388+
if len(bucketAccessList.Items) != 1 {
389+
t.Fatalf("Expecting a single BucketAccess created but found %v", len(bucketAccessList.Items))
390+
}
391+
bucketaccess := bucketAccessList.Items[0]
392+
393+
bucketaccessrequest2, err := client.ObjectstorageV1alpha1().BucketAccessRequests(bucketaccessrequest.Namespace).Get(ctx, bucketaccessrequest.Name, metav1.GetOptions{})
394+
if err != nil {
395+
t.Fatalf("Error occurred when updating BucketAccessRequest: %v", err)
396+
}
397+
398+
if !util.ValidateBucketAccess(bucketaccess, *bucketaccessrequest, *bucketaccessclass) {
399+
t.Fatalf("Failed to compare the resulting BucketAccess with the BucketAccessRequest %v and BucketAccessClass %v", bucketaccessrequest, bucketaccessclass)
400+
}
401+
402+
//peform delete and see if the bucketAccessRequest can be deleted
403+
err = client.ObjectstorageV1alpha1().BucketAccessRequests(bucketaccessrequest2.Namespace).Delete(ctx, bucketaccessrequest2.Name, metav1.DeleteOptions{})
404+
if err != nil {
405+
t.Fatalf("Error occurred when deleting BucketAccessRequest: %v", err)
406+
}
407+
408+
// force update for the finalizer
409+
old := bucketaccessrequest
410+
now := metav1.Now()
411+
bucketaccessrequest2.ObjectMeta.DeletionTimestamp = &now
412+
listener.Update(ctx, old, bucketaccessrequest2)
413+
414+
// there should not be a corresponding BucketAccess
415+
bucketAccessList = util.GetBucketAccesses(ctx, client, 0)
416+
if len(bucketAccessList.Items) > 0 {
417+
t.Fatalf("Expecting BucketAccess object be deleted but found %v", bucketAccessList.Items)
418+
}
419+
}
420+
421+
func runDeleteBucketAccessRequestIdempotency(t *testing.T, name string) {
422+
ctx, cancel := context.WithCancel(context.Background())
423+
defer cancel()
424+
425+
client := bucketclientset.NewSimpleClientset()
426+
kubeClient := fake.NewSimpleClientset()
427+
428+
listener := NewListener()
429+
listener.InitializeKubeClient(kubeClient)
430+
listener.InitializeBucketClient(client)
431+
432+
_, err := kubeClient.CoreV1().ServiceAccounts(sa1.Namespace).Create(ctx, &sa1, metav1.CreateOptions{})
433+
if err != nil {
434+
t.Fatalf("Error occurred when creating ServiceAccount: %v", err)
435+
}
436+
defer kubeClient.CoreV1().ServiceAccounts(sa1.Namespace).Delete(ctx, sa1.Name, metav1.DeleteOptions{})
437+
438+
_, err = kubeClient.CoreV1().ConfigMaps(cosiConfigMap.Namespace).Create(ctx, &cosiConfigMap, metav1.CreateOptions{})
439+
if err != nil {
440+
t.Fatalf("Error occurred when creating ConfigMap: %v", err)
441+
}
442+
defer kubeClient.CoreV1().ConfigMaps(cosiConfigMap.Namespace).Delete(ctx, cosiConfigMap.Name, metav1.DeleteOptions{})
443+
444+
bucketaccessclass, err := util.CreateBucketAccessClass(ctx, client, &goldAccessClass)
445+
if err != nil {
446+
t.Fatalf("Error occurred when creating BucketAccessClass: %v", err)
447+
}
448+
449+
bucketrequest, err := util.CreateBucketRequest(ctx, client, &bucketRequest1)
450+
if err != nil {
451+
t.Fatalf("Error occurred when creating BucketRequest: %v", err)
452+
}
453+
454+
bucketaccessrequest, err := util.CreateBucketAccessRequest(ctx, client, &bucketAccessRequest1)
455+
if err != nil {
456+
t.Fatalf("Error occurred when creating BucketAccessRequest: %v", err)
457+
}
458+
459+
listener.Add(ctx, bucketaccessrequest)
460+
461+
bucketAccessList := util.GetBucketAccesses(ctx, client, 1)
462+
defer util.DeleteObjects(ctx, client, *bucketrequest, *bucketaccessrequest, *bucketaccessclass, bucketAccessList.Items)
463+
464+
if len(bucketAccessList.Items) != 1 {
465+
t.Fatalf("Expecting a single BucketAccess created but found %v", len(bucketAccessList.Items))
466+
}
467+
bucketaccess := bucketAccessList.Items[0]
468+
469+
bucketaccessrequest2, err := client.ObjectstorageV1alpha1().BucketAccessRequests(bucketaccessrequest.Namespace).Get(ctx, bucketaccessrequest.Name, metav1.GetOptions{})
470+
if err != nil {
471+
t.Fatalf("Error occurred when updating BucketAccessRequest: %v", err)
472+
}
473+
474+
if !util.ValidateBucketAccess(bucketaccess, *bucketaccessrequest, *bucketaccessclass) {
475+
t.Fatalf("Failed to compare the resulting BucketAccess with the BucketAccessRequest %v and BucketAccessClass %v", bucketaccessrequest, bucketaccessclass)
476+
}
477+
478+
//peform delete and see if the bucketAccessRequest can be deleted
479+
err = client.ObjectstorageV1alpha1().BucketAccessRequests(bucketaccessrequest2.Namespace).Delete(ctx, bucketaccessrequest2.Name, metav1.DeleteOptions{})
480+
if err != nil {
481+
t.Fatalf("Error occurred when deleting BucketAccessRequest: %v", err)
482+
}
483+
484+
// force update for the finalizer
485+
old := bucketaccessrequest
486+
now := metav1.Now()
487+
bucketaccessrequest2.ObjectMeta.DeletionTimestamp = &now
488+
listener.Update(ctx, old, bucketaccessrequest2)
489+
490+
//there should not be a corresponding BucketAccess
491+
bucketAccessList = util.GetBucketAccesses(ctx, client, 0)
492+
if len(bucketAccessList.Items) > 0 {
493+
t.Fatalf("Expecting BucketAccess object be deleted but found %v", bucketAccessList.Items)
494+
}
495+
496+
//Create a duplicate update
497+
listener.Update(ctx, old, bucketaccessrequest2)
498+
//there should not be a corresponding BucketAccess
499+
bucketAccessList = util.GetBucketAccesses(ctx, client, 0)
500+
if len(bucketAccessList.Items) > 0 {
501+
t.Fatalf("Expecting BucketAccess object be deleted but found %v", bucketAccessList.Items)
502+
}
503+
504+
// call the delete directly the second time
505+
listener.Delete(ctx, bucketaccessrequest)
506+
bucketAccessList = util.GetBucketAccesses(ctx, client, 0)
507+
if len(bucketAccessList.Items) != 0 {
508+
t.Fatalf("Expecting a single BucketAccess created but found %v", len(bucketAccessList.Items))
509+
}
510+
}

0 commit comments

Comments
 (0)