Skip to content

Commit 1f461a1

Browse files
clwluvwmergify[bot]
authored andcommitted
rgw/admin: add test for versioning and object lock
Signed-off-by: Seena Fallah <[email protected]>
1 parent 828899d commit 1f461a1

File tree

2 files changed

+74
-3
lines changed

2 files changed

+74
-3
lines changed

internal/util/util.go

+6
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ const (
1111
CephOctopus
1212
CephPacific
1313
CephQuincy
14+
CephReef
15+
CephSquid
1416
CephUnknown
1517
)
1618

@@ -31,6 +33,10 @@ func CephVersionOfString(vname string) CephVersion {
3133
return CephPacific
3234
case "quincy":
3335
return CephQuincy
36+
case "reef":
37+
return CephReef
38+
case "squid":
39+
return CephSquid
3440
default:
3541
return CephUnknown
3642
}

rgw/admin/bucket_test.go

+68-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import (
77
"testing"
88
"time"
99

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"
1013
"github.com/ceph/go-ceph/internal/util"
1114
"github.com/stretchr/testify/assert"
1215
)
@@ -16,11 +19,11 @@ func (suite *RadosGWTestSuite) TestBucket() {
1619
co, err := New(suite.endpoint, suite.accessKey, suite.secretKey, newDebugHTTPClient(http.DefaultClient))
1720
assert.NoError(suite.T(), err)
1821

19-
s3, err := newS3Agent(suite.accessKey, suite.secretKey, suite.endpoint, true)
22+
s3Agent, err := newS3Agent(suite.accessKey, suite.secretKey, suite.endpoint, true)
2023
assert.NoError(suite.T(), err)
2124

2225
beforeCreate := time.Now()
23-
err = s3.createBucket(suite.bucketTestName)
26+
err = s3Agent.createBucket(suite.bucketTestName)
2427
assert.NoError(suite.T(), err)
2528

2629
suite.T().Run("list buckets", func(_ *testing.T) {
@@ -36,7 +39,69 @@ func (suite *RadosGWTestSuite) TestBucket() {
3639
})
3740

3841
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})
40105
assert.NoError(suite.T(), err)
41106
})
42107

0 commit comments

Comments
 (0)