7
7
"testing"
8
8
"time"
9
9
10
+ "github.com/aws/aws-sdk-go-v2/aws"
11
+ "github.com/aws/aws-sdk-go-v2/service/s3"
12
+ "github.com/aws/aws-sdk-go-v2/service/s3/types"
10
13
"github.com/ceph/go-ceph/internal/util"
11
14
"github.com/stretchr/testify/assert"
12
15
)
@@ -16,11 +19,11 @@ func (suite *RadosGWTestSuite) TestBucket() {
16
19
co , err := New (suite .endpoint , suite .accessKey , suite .secretKey , newDebugHTTPClient (http .DefaultClient ))
17
20
assert .NoError (suite .T (), err )
18
21
19
- s3 , err := newS3Agent (suite .accessKey , suite .secretKey , suite .endpoint , true )
22
+ s3Agent , err := newS3Agent (suite .accessKey , suite .secretKey , suite .endpoint , true )
20
23
assert .NoError (suite .T (), err )
21
24
22
25
beforeCreate := time .Now ()
23
- err = s3 .createBucket (suite .bucketTestName )
26
+ err = s3Agent .createBucket (suite .bucketTestName )
24
27
assert .NoError (suite .T (), err )
25
28
26
29
suite .T ().Run ("list buckets" , func (_ * testing.T ) {
@@ -36,7 +39,69 @@ func (suite *RadosGWTestSuite) TestBucket() {
36
39
})
37
40
38
41
suite .T ().Run ("info existing bucket" , func (_ * testing.T ) {
39
- _ , err := co .GetBucketInfo (context .Background (), Bucket {Bucket : suite .bucketTestName })
42
+ bucketInfo , err := co .GetBucketInfo (context .Background (), Bucket {Bucket : suite .bucketTestName })
43
+ assert .NoError (suite .T (), err )
44
+
45
+ // check if versioning is disabled
46
+ switch {
47
+ case util .CurrentCephVersion () < util .CephQuincy :
48
+ // No action needed for versions below CephQuincy
49
+ case util .CurrentCephVersion () == util .CephReef :
50
+ assert .False (suite .T (), * bucketInfo .VersioningEnabled )
51
+ assert .False (suite .T (), * bucketInfo .Versioned )
52
+ default :
53
+ assert .Equal (suite .T (), "off" , * bucketInfo .Versioning )
54
+ }
55
+
56
+ // check if object lock is disabled
57
+ if util .CurrentCephVersion () >= util .CephQuincy {
58
+ assert .False (suite .T (), bucketInfo .ObjectLockEnabled )
59
+ }
60
+ })
61
+
62
+ suite .T ().Run ("enable versioning" , func (t * testing.T ) {
63
+ if util .CurrentCephVersion () < util .CephQuincy {
64
+ t .Skip ("versioning is not reported in bucket stats" )
65
+ }
66
+
67
+ _ , err := s3Agent .Client .PutBucketVersioning (context .Background (), & s3.PutBucketVersioningInput {
68
+ Bucket : & suite .bucketTestName ,
69
+ VersioningConfiguration : & types.VersioningConfiguration {Status : types .BucketVersioningStatusEnabled },
70
+ })
71
+ assert .NoError (suite .T (), err )
72
+
73
+ // check if versioning is enabled
74
+ bucketInfo , err := co .GetBucketInfo (context .Background (), Bucket {Bucket : suite .bucketTestName })
75
+ assert .NoError (suite .T (), err )
76
+ if util .CurrentCephVersion () == util .CephReef {
77
+ assert .True (suite .T (), * bucketInfo .VersioningEnabled )
78
+ assert .True (suite .T (), * bucketInfo .Versioned )
79
+ } else {
80
+ assert .Equal (suite .T (), "enabled" , * bucketInfo .Versioning )
81
+ }
82
+ })
83
+
84
+ suite .T ().Run ("enable bucket object lock" , func (t * testing.T ) {
85
+ if util .CurrentCephVersion () < util .CephQuincy {
86
+ t .Skip ("bucket object lock is not reported in bucket stats" )
87
+ }
88
+
89
+ const bucketName = "bucket-object-lock"
90
+
91
+ // create bucket with object lock enabled
92
+ _ , err := s3Agent .Client .CreateBucket (context .Background (), & s3.CreateBucketInput {
93
+ Bucket : aws .String (bucketName ),
94
+ ObjectLockEnabledForBucket : aws .Bool (true ),
95
+ })
96
+ assert .NoError (suite .T (), err )
97
+
98
+ // check if object lock is enabled
99
+ bucketInfo , err := co .GetBucketInfo (context .Background (), Bucket {Bucket : bucketName })
100
+ assert .NoError (suite .T (), err )
101
+ assert .True (suite .T (), bucketInfo .ObjectLockEnabled )
102
+
103
+ // remove bucket
104
+ err = co .RemoveBucket (context .Background (), Bucket {Bucket : bucketName })
40
105
assert .NoError (suite .T (), err )
41
106
})
42
107
0 commit comments