From cdccdcc4d6def1c67cb0b38451a1b3f2a4cbbb0e Mon Sep 17 00:00:00 2001 From: niksis02 Date: Tue, 19 Aug 2025 21:23:05 +0400 Subject: [PATCH] feat: adds not implemented routes for bucket intelligent tiering actions Closes #1440 Adds `NotImplemented` routes for intelligent tiering S3 actions: - `PutBucketIntelligentTieringConfiguration` - `GetBucketIntelligentTieringConfiguration` - `ListBucketIntelligentTieringConfigurations` - `DeleteBucketIntelligentTieringConfiguration` --- auth/bucket_policy_actions.go | 86 +++++++++++----------- metrics/actions.go | 120 ++++++++++++++++--------------- s3api/router.go | 56 +++++++++++++++ tests/integration/group-tests.go | 9 +++ tests/integration/tests.go | 70 ++++++++++++++++++ 5 files changed, 241 insertions(+), 100 deletions(-) diff --git a/auth/bucket_policy_actions.go b/auth/bucket_policy_actions.go index be3f475a..2f5b65f7 100644 --- a/auth/bucket_policy_actions.go +++ b/auth/bucket_policy_actions.go @@ -22,48 +22,50 @@ import ( type Action string const ( - GetBucketAclAction Action = "s3:GetBucketAcl" - CreateBucketAction Action = "s3:CreateBucket" - PutBucketAclAction Action = "s3:PutBucketAcl" - DeleteBucketAction Action = "s3:DeleteBucket" - PutBucketVersioningAction Action = "s3:PutBucketVersioning" - GetBucketVersioningAction Action = "s3:GetBucketVersioning" - PutBucketPolicyAction Action = "s3:PutBucketPolicy" - GetBucketPolicyAction Action = "s3:GetBucketPolicy" - DeleteBucketPolicyAction Action = "s3:DeleteBucketPolicy" - AbortMultipartUploadAction Action = "s3:AbortMultipartUpload" - ListMultipartUploadPartsAction Action = "s3:ListMultipartUploadParts" - ListBucketMultipartUploadsAction Action = "s3:ListBucketMultipartUploads" - PutObjectAction Action = "s3:PutObject" - GetObjectAction Action = "s3:GetObject" - GetObjectVersionAction Action = "s3:GetObjectVersion" - DeleteObjectAction Action = "s3:DeleteObject" - GetObjectAclAction Action = "s3:GetObjectAcl" - GetObjectAttributesAction Action = "s3:GetObjectAttributes" - PutObjectAclAction Action = "s3:PutObjectAcl" - RestoreObjectAction Action = "s3:RestoreObject" - GetBucketTaggingAction Action = "s3:GetBucketTagging" - PutBucketTaggingAction Action = "s3:PutBucketTagging" - GetObjectTaggingAction Action = "s3:GetObjectTagging" - PutObjectTaggingAction Action = "s3:PutObjectTagging" - DeleteObjectTaggingAction Action = "s3:DeleteObjectTagging" - ListBucketVersionsAction Action = "s3:ListBucketVersions" - ListBucketAction Action = "s3:ListBucket" - GetBucketObjectLockConfigurationAction Action = "s3:GetBucketObjectLockConfiguration" - PutBucketObjectLockConfigurationAction Action = "s3:PutBucketObjectLockConfiguration" - GetObjectLegalHoldAction Action = "s3:GetObjectLegalHold" - PutObjectLegalHoldAction Action = "s3:PutObjectLegalHold" - GetObjectRetentionAction Action = "s3:GetObjectRetention" - PutObjectRetentionAction Action = "s3:PutObjectRetention" - BypassGovernanceRetentionAction Action = "s3:BypassGovernanceRetention" - PutBucketOwnershipControlsAction Action = "s3:PutBucketOwnershipControls" - GetBucketOwnershipControlsAction Action = "s3:GetBucketOwnershipControls" - PutBucketCorsAction Action = "s3:PutBucketCORS" - GetBucketCorsAction Action = "s3:GetBucketCORS" - PutAnalyticsConfigurationAction Action = "s3:PutAnalyticsConfiguration" - GetAnalyticsConfigurationAction Action = "s3:GetAnalyticsConfiguration" - PutEncryptionConfigurationAction Action = "s3:PutEncryptionConfiguration" - GetEncryptionConfigurationAction Action = "s3:GetEncryptionConfiguration" + GetBucketAclAction Action = "s3:GetBucketAcl" + CreateBucketAction Action = "s3:CreateBucket" + PutBucketAclAction Action = "s3:PutBucketAcl" + DeleteBucketAction Action = "s3:DeleteBucket" + PutBucketVersioningAction Action = "s3:PutBucketVersioning" + GetBucketVersioningAction Action = "s3:GetBucketVersioning" + PutBucketPolicyAction Action = "s3:PutBucketPolicy" + GetBucketPolicyAction Action = "s3:GetBucketPolicy" + DeleteBucketPolicyAction Action = "s3:DeleteBucketPolicy" + AbortMultipartUploadAction Action = "s3:AbortMultipartUpload" + ListMultipartUploadPartsAction Action = "s3:ListMultipartUploadParts" + ListBucketMultipartUploadsAction Action = "s3:ListBucketMultipartUploads" + PutObjectAction Action = "s3:PutObject" + GetObjectAction Action = "s3:GetObject" + GetObjectVersionAction Action = "s3:GetObjectVersion" + DeleteObjectAction Action = "s3:DeleteObject" + GetObjectAclAction Action = "s3:GetObjectAcl" + GetObjectAttributesAction Action = "s3:GetObjectAttributes" + PutObjectAclAction Action = "s3:PutObjectAcl" + RestoreObjectAction Action = "s3:RestoreObject" + GetBucketTaggingAction Action = "s3:GetBucketTagging" + PutBucketTaggingAction Action = "s3:PutBucketTagging" + GetObjectTaggingAction Action = "s3:GetObjectTagging" + PutObjectTaggingAction Action = "s3:PutObjectTagging" + DeleteObjectTaggingAction Action = "s3:DeleteObjectTagging" + ListBucketVersionsAction Action = "s3:ListBucketVersions" + ListBucketAction Action = "s3:ListBucket" + GetBucketObjectLockConfigurationAction Action = "s3:GetBucketObjectLockConfiguration" + PutBucketObjectLockConfigurationAction Action = "s3:PutBucketObjectLockConfiguration" + GetObjectLegalHoldAction Action = "s3:GetObjectLegalHold" + PutObjectLegalHoldAction Action = "s3:PutObjectLegalHold" + GetObjectRetentionAction Action = "s3:GetObjectRetention" + PutObjectRetentionAction Action = "s3:PutObjectRetention" + BypassGovernanceRetentionAction Action = "s3:BypassGovernanceRetention" + PutBucketOwnershipControlsAction Action = "s3:PutBucketOwnershipControls" + GetBucketOwnershipControlsAction Action = "s3:GetBucketOwnershipControls" + PutBucketCorsAction Action = "s3:PutBucketCORS" + GetBucketCorsAction Action = "s3:GetBucketCORS" + PutAnalyticsConfigurationAction Action = "s3:PutAnalyticsConfiguration" + GetAnalyticsConfigurationAction Action = "s3:GetAnalyticsConfiguration" + PutEncryptionConfigurationAction Action = "s3:PutEncryptionConfiguration" + GetEncryptionConfigurationAction Action = "s3:GetEncryptionConfiguration" + PutIntelligentTieringConfigurationAction Action = "s3:PutIntelligentTieringConfiguration" + GetIntelligentTieringConfigurationAction Action = "s3:GetIntelligentTieringConfiguration" AllActions Action = "s3:*" ) diff --git a/metrics/actions.go b/metrics/actions.go index 6f0ecdf1..c25a3d1e 100644 --- a/metrics/actions.go +++ b/metrics/actions.go @@ -24,64 +24,68 @@ var ( ) var ( - ActionUndetected = "ActionUnDetected" - ActionAbortMultipartUpload = "s3_AbortMultipartUpload" - ActionCompleteMultipartUpload = "s3_CompleteMultipartUpload" - ActionCopyObject = "s3_CopyObject" - ActionCreateBucket = "s3_CreateBucket" - ActionCreateMultipartUpload = "s3_CreateMultipartUpload" - ActionDeleteBucket = "s3_DeleteBucket" - ActionDeleteBucketPolicy = "s3_DeleteBucketPolicy" - ActionDeleteBucketTagging = "s3_DeleteBucketTagging" - ActionDeleteObject = "s3_DeleteObject" - ActionDeleteObjectTagging = "s3_DeleteObjectTagging" - ActionDeleteObjects = "s3_DeleteObjects" - ActionGetBucketAcl = "s3_GetBucketAcl" - ActionGetBucketPolicy = "s3_GetBucketPolicy" - ActionGetBucketTagging = "s3_GetBucketTagging" - ActionGetBucketVersioning = "s3_GetBucketVersioning" - ActionGetObject = "s3_GetObject" - ActionGetObjectAcl = "s3_GetObjectAcl" - ActionGetObjectAttributes = "s3_GetObjectAttributes" - ActionGetObjectLegalHold = "s3_GetObjectLegalHold" - ActionGetObjectLockConfiguration = "s3_GetObjectLockConfiguration" - ActionGetObjectRetention = "s3_GetObjectRetention" - ActionGetObjectTagging = "s3_GetObjectTagging" - ActionHeadBucket = "s3_HeadBucket" - ActionHeadObject = "s3_HeadObject" - ActionListAllMyBuckets = "s3_ListAllMyBuckets" - ActionListMultipartUploads = "s3_ListMultipartUploads" - ActionListObjectVersions = "s3_ListObjectVersions" - ActionListObjects = "s3_ListObjects" - ActionListObjectsV2 = "s3_ListObjectsV2" - ActionListParts = "s3_ListParts" - ActionPutBucketAcl = "s3_PutBucketAcl" - ActionPutBucketPolicy = "s3_PutBucketPolicy" - ActionPutBucketTagging = "s3_PutBucketTagging" - ActionPutBucketVersioning = "s3_PutBucketVersioning" - ActionPutObject = "s3_PutObject" - ActionPutObjectAcl = "s3_PutObjectAcl" - ActionPutObjectLegalHold = "s3_PutObjectLegalHold" - ActionPutObjectLockConfiguration = "s3_PutObjectLockConfiguration" - ActionPutObjectRetention = "s3_PutObjectRetention" - ActionPutObjectTagging = "s3_PutObjectTagging" - ActionRestoreObject = "s3_RestoreObject" - ActionSelectObjectContent = "s3_SelectObjectContent" - ActionUploadPart = "s3_UploadPart" - ActionUploadPartCopy = "s3_UploadPartCopy" - ActionPutBucketOwnershipControls = "s3_PutBucketOwnershipControls" - ActionGetBucketOwnershipControls = "s3_GetBucketOwnershipControls" - ActionDeleteBucketOwnershipControls = "s3_DeleteBucketOwnershipControls" - ActionPutBucketCors = "s3_PutBucketCors" - ActionGetBucketCors = "s3_GetBucketCors" - ActionDeleteBucketCors = "s3_DeleteBucketCors" - ActionPutBucketAnalyticsConfiguration = "s3_PutBucketAnalyticsConfiguration" - ActionGetBucketAnalyticsConfiguration = "s3_GetBucketAnalyticsConfiguration" - ActionListBucketAnalyticsConfigurations = "s3_ListBucketAnalyticsConfigurations" - ActionDeleteBucketAnalyticsConfiguration = "s3_DeleteBucketAnalyticsConfiguration" - ActionPutBucketEncryption = "s3_PutBucketEncryption" - ActionGetBucketEncryption = "s3_GetBucketEncryption" - ActionDeleteBucketEncryption = "s3_DeleteBucketEcryption" + ActionUndetected = "ActionUnDetected" + ActionAbortMultipartUpload = "s3_AbortMultipartUpload" + ActionCompleteMultipartUpload = "s3_CompleteMultipartUpload" + ActionCopyObject = "s3_CopyObject" + ActionCreateBucket = "s3_CreateBucket" + ActionCreateMultipartUpload = "s3_CreateMultipartUpload" + ActionDeleteBucket = "s3_DeleteBucket" + ActionDeleteBucketPolicy = "s3_DeleteBucketPolicy" + ActionDeleteBucketTagging = "s3_DeleteBucketTagging" + ActionDeleteObject = "s3_DeleteObject" + ActionDeleteObjectTagging = "s3_DeleteObjectTagging" + ActionDeleteObjects = "s3_DeleteObjects" + ActionGetBucketAcl = "s3_GetBucketAcl" + ActionGetBucketPolicy = "s3_GetBucketPolicy" + ActionGetBucketTagging = "s3_GetBucketTagging" + ActionGetBucketVersioning = "s3_GetBucketVersioning" + ActionGetObject = "s3_GetObject" + ActionGetObjectAcl = "s3_GetObjectAcl" + ActionGetObjectAttributes = "s3_GetObjectAttributes" + ActionGetObjectLegalHold = "s3_GetObjectLegalHold" + ActionGetObjectLockConfiguration = "s3_GetObjectLockConfiguration" + ActionGetObjectRetention = "s3_GetObjectRetention" + ActionGetObjectTagging = "s3_GetObjectTagging" + ActionHeadBucket = "s3_HeadBucket" + ActionHeadObject = "s3_HeadObject" + ActionListAllMyBuckets = "s3_ListAllMyBuckets" + ActionListMultipartUploads = "s3_ListMultipartUploads" + ActionListObjectVersions = "s3_ListObjectVersions" + ActionListObjects = "s3_ListObjects" + ActionListObjectsV2 = "s3_ListObjectsV2" + ActionListParts = "s3_ListParts" + ActionPutBucketAcl = "s3_PutBucketAcl" + ActionPutBucketPolicy = "s3_PutBucketPolicy" + ActionPutBucketTagging = "s3_PutBucketTagging" + ActionPutBucketVersioning = "s3_PutBucketVersioning" + ActionPutObject = "s3_PutObject" + ActionPutObjectAcl = "s3_PutObjectAcl" + ActionPutObjectLegalHold = "s3_PutObjectLegalHold" + ActionPutObjectLockConfiguration = "s3_PutObjectLockConfiguration" + ActionPutObjectRetention = "s3_PutObjectRetention" + ActionPutObjectTagging = "s3_PutObjectTagging" + ActionRestoreObject = "s3_RestoreObject" + ActionSelectObjectContent = "s3_SelectObjectContent" + ActionUploadPart = "s3_UploadPart" + ActionUploadPartCopy = "s3_UploadPartCopy" + ActionPutBucketOwnershipControls = "s3_PutBucketOwnershipControls" + ActionGetBucketOwnershipControls = "s3_GetBucketOwnershipControls" + ActionDeleteBucketOwnershipControls = "s3_DeleteBucketOwnershipControls" + ActionPutBucketCors = "s3_PutBucketCors" + ActionGetBucketCors = "s3_GetBucketCors" + ActionDeleteBucketCors = "s3_DeleteBucketCors" + ActionPutBucketAnalyticsConfiguration = "s3_PutBucketAnalyticsConfiguration" + ActionGetBucketAnalyticsConfiguration = "s3_GetBucketAnalyticsConfiguration" + ActionListBucketAnalyticsConfigurations = "s3_ListBucketAnalyticsConfigurations" + ActionDeleteBucketAnalyticsConfiguration = "s3_DeleteBucketAnalyticsConfiguration" + ActionPutBucketEncryption = "s3_PutBucketEncryption" + ActionGetBucketEncryption = "s3_GetBucketEncryption" + ActionDeleteBucketEncryption = "s3_DeleteBucketEcryption" + ActionPutBucketIntelligentTieringConfiguration = "s3_PutBucketIntelligentTieringConfiguration" + ActionGetBucketIntelligentTieringConfiguration = "s3_GetBucketIntelligentTieringConfiguration" + ActionListBucketIntelligentTieringConfigurations = "s3_ListBucketIntelligentTieringConfigurations" + ActionDeleteBucketIntelligentTieringConfiguration = "s3_DeleteBucketIntelligentTieringConfiguration" // Admin actions ActionAdminCreateUser = "admin_CreateUser" diff --git a/s3api/router.go b/s3api/router.go index 89143a79..c4ac04e6 100644 --- a/s3api/router.go +++ b/s3api/router.go @@ -223,6 +223,20 @@ func (sa *S3ApiRouter) Init(app *fiber.App, be backend.Backend, iam auth.IAMServ middlewares.ParseAcl(be), ), ) + bucketRouter.Put("", + middlewares.MatchQueryArgs("intelligent-tiering"), + controllers.ProcessHandlers( + ctrl.HandleErrorRoute(s3err.GetAPIError(s3err.ErrNotImplemented)), + metrics.ActionPutBucketIntelligentTieringConfiguration, + services, + middlewares.BucketObjectNameValidator(), + middlewares.AuthorizePublicBucketAccess(be, metrics.ActionPutBucketIntelligentTieringConfiguration, auth.PutIntelligentTieringConfigurationAction, auth.PermissionWrite), + middlewares.VerifyPresignedV4Signature(root, iam, region, debug), + middlewares.VerifyV4Signature(root, iam, region, debug), + middlewares.VerifyMD5Body(), + middlewares.ParseAcl(be), + ), + ) bucketRouter.Put("", controllers.ProcessHandlers( ctrl.CreateBucket, @@ -330,6 +344,20 @@ func (sa *S3ApiRouter) Init(app *fiber.App, be backend.Backend, iam auth.IAMServ middlewares.ParseAcl(be), ), ) + bucketRouter.Delete("", + middlewares.MatchQueryArgs("intelligent-tiering"), + controllers.ProcessHandlers( + ctrl.HandleErrorRoute(s3err.GetAPIError(s3err.ErrNotImplemented)), + metrics.ActionDeleteBucketIntelligentTieringConfiguration, + services, + middlewares.BucketObjectNameValidator(), + middlewares.AuthorizePublicBucketAccess(be, metrics.ActionDeleteBucketIntelligentTieringConfiguration, auth.PutIntelligentTieringConfigurationAction, auth.PermissionWrite), + middlewares.VerifyPresignedV4Signature(root, iam, region, debug), + middlewares.VerifyV4Signature(root, iam, region, debug), + middlewares.VerifyMD5Body(), + middlewares.ParseAcl(be), + ), + ) bucketRouter.Delete("", controllers.ProcessHandlers( ctrl.DeleteBucket, @@ -503,6 +531,34 @@ func (sa *S3ApiRouter) Init(app *fiber.App, be backend.Backend, iam auth.IAMServ middlewares.ParseAcl(be), ), ) + bucketRouter.Get("", + middlewares.MatchQueryArgs("intelligent-tiering", "id"), + controllers.ProcessHandlers( + ctrl.HandleErrorRoute(s3err.GetAPIError(s3err.ErrNotImplemented)), + metrics.ActionGetBucketIntelligentTieringConfiguration, + services, + middlewares.BucketObjectNameValidator(), + middlewares.AuthorizePublicBucketAccess(be, metrics.ActionGetBucketIntelligentTieringConfiguration, auth.GetIntelligentTieringConfigurationAction, auth.PermissionRead), + middlewares.VerifyPresignedV4Signature(root, iam, region, debug), + middlewares.VerifyV4Signature(root, iam, region, debug), + middlewares.VerifyMD5Body(), + middlewares.ParseAcl(be), + ), + ) + bucketRouter.Get("", + middlewares.MatchQueryArgs("intelligent-tiering"), + controllers.ProcessHandlers( + ctrl.HandleErrorRoute(s3err.GetAPIError(s3err.ErrNotImplemented)), + metrics.ActionListBucketIntelligentTieringConfigurations, + services, + middlewares.BucketObjectNameValidator(), + middlewares.AuthorizePublicBucketAccess(be, metrics.ActionListBucketIntelligentTieringConfigurations, auth.GetIntelligentTieringConfigurationAction, auth.PermissionRead), + middlewares.VerifyPresignedV4Signature(root, iam, region, debug), + middlewares.VerifyV4Signature(root, iam, region, debug), + middlewares.VerifyMD5Body(), + middlewares.ParseAcl(be), + ), + ) bucketRouter.Get("", middlewares.MatchQueryArgWithValue("list-type", "2"), controllers.ProcessHandlers( diff --git a/tests/integration/group-tests.go b/tests/integration/group-tests.go index 2787ef83..f8aeb6f8 100644 --- a/tests/integration/group-tests.go +++ b/tests/integration/group-tests.go @@ -593,6 +593,11 @@ func TestNotImplementedActions(s *S3Conf) { PutBucketEncryption_not_implemented(s) GetBucketEncryption_not_implemented(s) DeleteBucketEncryption_not_implemented(s) + // bucket intelligent tierieng actions + PutBucketIntelligentTieringConfiguration_not_implemented(s) + GetBucketIntelligentTieringConfiguration_not_implemented(s) + ListBucketIntelligentTieringConfiguration_not_implemented(s) + DeleteBucketIntelligentTieringConfiguration_not_implemented(s) } func TestWORMProtection(s *S3Conf) { @@ -1307,6 +1312,10 @@ func GetIntTests() IntTests { "PutBucketEncryption_not_implemented": PutBucketEncryption_not_implemented, "GetBucketEncryption_not_implemented": GetBucketEncryption_not_implemented, "DeleteBucketEncryption_not_implemented": DeleteBucketEncryption_not_implemented, + "PutBucketIntelligentTieringConfiguration_not_implemented": PutBucketIntelligentTieringConfiguration_not_implemented, + "GetBucketIntelligentTieringConfiguration_not_implemented": GetBucketIntelligentTieringConfiguration_not_implemented, + "ListBucketIntelligentTieringConfiguration_not_implemented": ListBucketIntelligentTieringConfiguration_not_implemented, + "DeleteBucketIntelligentTieringConfiguration_not_implemented": DeleteBucketIntelligentTieringConfiguration_not_implemented, "WORMProtection_bucket_object_lock_configuration_compliance_mode": WORMProtection_bucket_object_lock_configuration_compliance_mode, "WORMProtection_bucket_object_lock_configuration_governance_mode": WORMProtection_bucket_object_lock_configuration_governance_mode, "WORMProtection_bucket_object_lock_governance_bypass_delete": WORMProtection_bucket_object_lock_governance_bypass_delete, diff --git a/tests/integration/tests.go b/tests/integration/tests.go index b8aa6513..1bb76c14 100644 --- a/tests/integration/tests.go +++ b/tests/integration/tests.go @@ -14718,6 +14718,76 @@ func DeleteBucketEncryption_not_implemented(s *S3Conf) error { }) } +func PutBucketIntelligentTieringConfiguration_not_implemented(s *S3Conf) error { + testName := "PutBucketIntelligentTieringConfiguration_not_implemented" + return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { + days := int32(32) + ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) + _, err := s3client.PutBucketIntelligentTieringConfiguration(ctx, + &s3.PutBucketIntelligentTieringConfigurationInput{ + Bucket: &bucket, + Id: getPtr("unique_id"), + IntelligentTieringConfiguration: &types.IntelligentTieringConfiguration{ + Id: getPtr("my-id"), + Status: types.IntelligentTieringStatusEnabled, + Tierings: []types.Tiering{ + { + AccessTier: types.IntelligentTieringAccessTierArchiveAccess, + Days: &days, + }, + }, + }, + }) + cancel() + + return checkApiErr(err, s3err.GetAPIError(s3err.ErrNotImplemented)) + }) +} + +func GetBucketIntelligentTieringConfiguration_not_implemented(s *S3Conf) error { + testName := "GetBucketIntelligentTieringConfiguration_not_implemented" + return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { + ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) + _, err := s3client.GetBucketIntelligentTieringConfiguration(ctx, + &s3.GetBucketIntelligentTieringConfigurationInput{ + Bucket: &bucket, + Id: getPtr("unique_id"), + }) + cancel() + + return checkApiErr(err, s3err.GetAPIError(s3err.ErrNotImplemented)) + }) +} + +func ListBucketIntelligentTieringConfiguration_not_implemented(s *S3Conf) error { + testName := "ListBucketIntelligentTieringConfiguration_not_implemented" + return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { + ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) + _, err := s3client.ListBucketIntelligentTieringConfigurations(ctx, + &s3.ListBucketIntelligentTieringConfigurationsInput{ + Bucket: &bucket, + }) + cancel() + + return checkApiErr(err, s3err.GetAPIError(s3err.ErrNotImplemented)) + }) +} + +func DeleteBucketIntelligentTieringConfiguration_not_implemented(s *S3Conf) error { + testName := "DeleteBucketIntelligentTieringConfiguration_not_implemented" + return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { + ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) + _, err := s3client.DeleteBucketIntelligentTieringConfiguration(ctx, + &s3.DeleteBucketIntelligentTieringConfigurationInput{ + Bucket: &bucket, + Id: getPtr("unique_id"), + }) + cancel() + + return checkApiErr(err, s3err.GetAPIError(s3err.ErrNotImplemented)) + }) +} + func WORMProtection_bucket_object_lock_configuration_compliance_mode(s *S3Conf) error { testName := "WORMProtection_bucket_object_lock_configuration_compliance_mode" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {