@@ -3,17 +3,17 @@ package services
3
3
import (
4
4
"context"
5
5
"fmt"
6
- v1 "k8s.io/api/core/v1"
7
- "k8s.io/apimachinery/pkg/api/errors"
8
- "k8s.io/apimachinery/pkg/runtime/schema"
9
- "k8s.io/apimachinery/pkg/types"
10
- "sigs.k8s.io/controller-runtime/pkg/client"
11
6
"testing"
12
7
13
8
"github.com/linode/linodego"
14
9
"github.com/stretchr/testify/assert"
15
10
"go.uber.org/mock/gomock"
11
+ v1 "k8s.io/api/core/v1"
12
+ "k8s.io/apimachinery/pkg/api/errors"
16
13
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14
+ "k8s.io/apimachinery/pkg/runtime/schema"
15
+ "k8s.io/apimachinery/pkg/types"
16
+ "sigs.k8s.io/controller-runtime/pkg/client"
17
17
18
18
infrav1alpha2 "github.com/linode/cluster-api-provider-linode/api/v1alpha2"
19
19
"github.com/linode/cluster-api-provider-linode/cloud/scope"
@@ -311,3 +311,89 @@ func TestCreateS3ClientWithAccessKey(t *testing.T) {
311
311
})
312
312
}
313
313
}
314
+
315
+ func TestDeleteBucket (t * testing.T ) {
316
+ t .Parallel ()
317
+
318
+ tests := []struct {
319
+ name string
320
+ bScope * scope.ObjectStorageBucketScope
321
+ expectedError error
322
+ expects func (k8s * mock.MockK8sClient , lc * mock.MockLinodeClient )
323
+ }{
324
+ {
325
+ name : "Error - failed to purge all objects" ,
326
+ bScope : & scope.ObjectStorageBucketScope {
327
+ Bucket : & infrav1alpha2.LinodeObjectStorageBucket {
328
+ ObjectMeta : metav1.ObjectMeta {
329
+ Name : "test-bucket" ,
330
+ },
331
+ Spec : infrav1alpha2.LinodeObjectStorageBucketSpec {
332
+ Region : "test-region" ,
333
+ AccessKeyRef : & v1.ObjectReference {
334
+ Name : "test-bucket" ,
335
+ },
336
+ },
337
+ },
338
+ },
339
+ expects : func (k8s * mock.MockK8sClient , lc * mock.MockLinodeClient ) {
340
+ k8s .EXPECT ().Get (gomock .Any (), gomock .Any (), gomock .Any (), gomock .Any ()).DoAndReturn (func (ctx context.Context , name types.NamespacedName , obj * v1.Secret , opts ... client.GetOption ) error {
341
+ secret := v1.Secret {
342
+ ObjectMeta : metav1.ObjectMeta {
343
+ Name : "test-bucket-obj-key" ,
344
+ },
345
+ Data : map [string ][]byte {
346
+ "access" : []byte ("test-access-key" ),
347
+ "secret" : []byte ("test-secret-key" ),
348
+ "bucket" : []byte ("test-bucket" ),
349
+ },
350
+ }
351
+ * obj = secret
352
+ return nil
353
+ })
354
+ },
355
+ expectedError : fmt .Errorf ("failed to purge all objects" ),
356
+ },
357
+ {
358
+ name : "Error - failed to create S3 client" ,
359
+ bScope : & scope.ObjectStorageBucketScope {
360
+ Bucket : & infrav1alpha2.LinodeObjectStorageBucket {
361
+ ObjectMeta : metav1.ObjectMeta {
362
+ Name : "test-bucket" ,
363
+ },
364
+ Spec : infrav1alpha2.LinodeObjectStorageBucketSpec {
365
+ Region : "test-region" ,
366
+ AccessKeyRef : & v1.ObjectReference {
367
+ Name : "test" ,
368
+ },
369
+ },
370
+ },
371
+ },
372
+ expects : func (k8s * mock.MockK8sClient , lc * mock.MockLinodeClient ) {
373
+ k8s .EXPECT ().Get (gomock .Any (), gomock .Any (), gomock .Any ()).Return (errors .NewNotFound (schema.GroupResource {}, "" ))
374
+ },
375
+ expectedError : fmt .Errorf ("failed to create S3 client" ),
376
+ },
377
+ }
378
+ for _ , tt := range tests {
379
+ testcase := tt
380
+ t .Run (testcase .name , func (t * testing.T ) {
381
+ t .Parallel ()
382
+
383
+ ctrl := gomock .NewController (t )
384
+ defer ctrl .Finish ()
385
+
386
+ mockK8s := mock .NewMockK8sClient (ctrl )
387
+ testcase .bScope .Client = mockK8s
388
+ mockClient := mock .NewMockLinodeClient (ctrl )
389
+ testcase .bScope .LinodeClient = mockClient
390
+
391
+ testcase .expects (mockK8s , mockClient )
392
+
393
+ err := DeleteBucket (t .Context (), testcase .bScope )
394
+ if testcase .expectedError != nil {
395
+ assert .ErrorContains (t , err , testcase .expectedError .Error ())
396
+ }
397
+ })
398
+ }
399
+ }
0 commit comments