forked from TrueCloudLab/frostfs-s3-gw
[#604] Add support of MFADelete argument and x-amz-mfa header
Signed-off-by: Pavel Pogodaev <p.pogodaev@yadro.com>
This commit is contained in:
parent
13fce51021
commit
7fbc69f4f5
28 changed files with 906 additions and 118 deletions
|
@ -124,7 +124,7 @@ func TestDeleteObjectsError(t *testing.T) {
|
|||
|
||||
bktName, objName := "bucket-for-removal", "object-to-delete"
|
||||
bktInfo := createTestBucket(hc, bktName)
|
||||
putBucketVersioning(t, hc, bktName, true)
|
||||
putBucketVersioning(t, hc, bktName, true, "")
|
||||
|
||||
putObject(hc, bktName, objName)
|
||||
|
||||
|
@ -302,7 +302,7 @@ func TestDeleteMarkerSuspended(t *testing.T) {
|
|||
|
||||
bktName, objName := "bucket-for-removal", "object-to-delete"
|
||||
bktInfo, _ := createVersionedBucketAndObject(t, tc, bktName, objName)
|
||||
putBucketVersioning(t, tc, bktName, false)
|
||||
putBucketVersioning(t, tc, bktName, false, "")
|
||||
|
||||
t.Run("not create new delete marker if last version is delete marker", func(t *testing.T) {
|
||||
deleteMarkerVersion, isDeleteMarker := deleteObject(t, tc, bktName, objName, emptyVersion)
|
||||
|
@ -350,7 +350,7 @@ func TestDeleteObjectCombined(t *testing.T) {
|
|||
bktName, objName := "bucket-for-removal", "object-to-delete"
|
||||
bktInfo, objInfo := createBucketAndObject(tc, bktName, objName)
|
||||
|
||||
putBucketVersioning(t, tc, bktName, true)
|
||||
putBucketVersioning(t, tc, bktName, true, "")
|
||||
|
||||
checkFound(t, tc, bktName, objName, emptyVersion)
|
||||
deleteObject(t, tc, bktName, objName, emptyVersion)
|
||||
|
@ -367,13 +367,13 @@ func TestDeleteObjectSuspended(t *testing.T) {
|
|||
bktName, objName := "bucket-for-removal", "object-to-delete"
|
||||
bktInfo, objInfo := createBucketAndObject(tc, bktName, objName)
|
||||
|
||||
putBucketVersioning(t, tc, bktName, true)
|
||||
putBucketVersioning(t, tc, bktName, true, "")
|
||||
|
||||
checkFound(t, tc, bktName, objName, emptyVersion)
|
||||
deleteObject(t, tc, bktName, objName, emptyVersion)
|
||||
checkNotFound(t, tc, bktName, objName, emptyVersion)
|
||||
|
||||
putBucketVersioning(t, tc, bktName, false)
|
||||
putBucketVersioning(t, tc, bktName, false, "")
|
||||
|
||||
deleteObject(t, tc, bktName, objName, emptyVersion)
|
||||
checkNotFound(t, tc, bktName, objName, objInfo.VersionID())
|
||||
|
@ -386,7 +386,7 @@ func TestDeleteMarkers(t *testing.T) {
|
|||
|
||||
bktName, objName := "bucket-for-removal", "object-to-delete"
|
||||
createTestBucket(tc, bktName)
|
||||
putBucketVersioning(t, tc, bktName, true)
|
||||
putBucketVersioning(t, tc, bktName, true, "")
|
||||
|
||||
checkNotFound(t, tc, bktName, objName, emptyVersion)
|
||||
deleteObject(t, tc, bktName, objName, emptyVersion)
|
||||
|
@ -405,7 +405,7 @@ func TestGetHeadDeleteMarker(t *testing.T) {
|
|||
|
||||
bktName, objName := "bucket-for-removal", "object-to-delete"
|
||||
createTestBucket(hc, bktName)
|
||||
putBucketVersioning(t, hc, bktName, true)
|
||||
putBucketVersioning(t, hc, bktName, true, "")
|
||||
|
||||
putObject(hc, bktName, objName)
|
||||
|
||||
|
@ -472,6 +472,16 @@ func TestDeleteBucketByNotOwner(t *testing.T) {
|
|||
deleteBucket(t, hc, bktName, http.StatusNoContent)
|
||||
}
|
||||
|
||||
func TestDeleteObjectMFAEnabled(t *testing.T) {
|
||||
hc := prepareHandlerContext(t)
|
||||
|
||||
bktName := "bucket-name"
|
||||
deviceName := "mfa"
|
||||
serialNumber := "arn:aws:iam:::mfa/" + deviceName
|
||||
token := "123456"
|
||||
_ = createVersionedBucketMFAEnabled(hc, bktName, serialNumber+" "+token)
|
||||
}
|
||||
|
||||
func TestRemovalOnReplace(t *testing.T) {
|
||||
hc := prepareHandlerContext(t)
|
||||
|
||||
|
@ -537,17 +547,32 @@ func createVersionedBucketAndObject(_ *testing.T, tc *handlerContext, bktName, o
|
|||
|
||||
func createVersionedBucket(hc *handlerContext, bktName string) *data.BucketInfo {
|
||||
bktInfo := createTestBucket(hc, bktName)
|
||||
putBucketVersioning(hc.t, hc, bktName, true)
|
||||
putBucketVersioning(hc.t, hc, bktName, true, "")
|
||||
|
||||
return bktInfo
|
||||
}
|
||||
|
||||
func putBucketVersioning(t *testing.T, tc *handlerContext, bktName string, enabled bool) {
|
||||
func createVersionedBucketMFAEnabled(hc *handlerContext, bktName, mfa string) *data.BucketInfo {
|
||||
bktInfo := createTestBucket(hc, bktName)
|
||||
putBucketVersioning(hc.t, hc, bktName, true, mfa)
|
||||
|
||||
return bktInfo
|
||||
}
|
||||
|
||||
func putBucketVersioning(t *testing.T, tc *handlerContext, bktName string, enabled bool, mfa string) {
|
||||
cfg := &VersioningConfiguration{Status: "Suspended"}
|
||||
if enabled {
|
||||
cfg.Status = "Enabled"
|
||||
}
|
||||
if len(mfa) > 0 {
|
||||
cfg.MfaDelete = "Enabled"
|
||||
}
|
||||
w, r := prepareTestRequest(tc, bktName, "", cfg)
|
||||
|
||||
if len(mfa) > 0 {
|
||||
r.Header.Set(api.AmzMFA, mfa)
|
||||
}
|
||||
|
||||
tc.Handler().PutBucketVersioningHandler(w, r)
|
||||
assertStatus(t, w, http.StatusOK)
|
||||
}
|
||||
|
@ -671,6 +696,6 @@ func createSuspendedBucket(t *testing.T, tc *handlerContext, bktName string) *da
|
|||
createTestBucket(tc, bktName)
|
||||
bktInfo, err := tc.Layer().GetBucketInfo(tc.Context(), bktName)
|
||||
require.NoError(t, err)
|
||||
putBucketVersioning(t, tc, bktName, false)
|
||||
putBucketVersioning(t, tc, bktName, false, "")
|
||||
return bktInfo
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue