echonesis commented on code in PR #10986:
URL: https://github.com/apache/ozone/pull/10986#discussion_r3754945169
##########
hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java:
##########
@@ -2404,6 +2405,160 @@ public void testReadSnapshotDirectoryUsingS3SDK()
throws Exception {
assertEquals(content, snapshotResponse.asUtf8String());
}
+ @Test
+ public void testS3LifecycleConfigurationCreateSuccessfully() {
+ final String bucketName = getBucketName();
+ s3Client.createBucket(b -> b.bucket(bucketName));
+
+ LifecycleRule rule1 = LifecycleRule.builder()
+ .id("expire-logs-after-365-days")
+ .prefix("logs/")
+ .status(ExpirationStatus.ENABLED)
+ .expiration(LifecycleExpiration.builder().days(365).build())
+ .build();
+
+ BucketLifecycleConfiguration configuration =
BucketLifecycleConfiguration.builder()
+ .rules(rule1)
+ .build();
+
+ // Set lifecycle configuration
+ s3Client.putBucketLifecycleConfiguration(b -> b
+ .bucket(bucketName)
+ .lifecycleConfiguration(configuration));
+
+ // Verify the configuration was set
+ GetBucketLifecycleConfigurationResponse response =
+ s3Client.getBucketLifecycleConfiguration(b -> b.bucket(bucketName));
+ List<LifecycleRule> rules = response.rules();
+ assertEquals(1, rules.size());
+
+ // Verify rule 1
+ LifecycleRule retrievedRule1 = rules.get(0);
+ assertEquals("expire-logs-after-365-days", retrievedRule1.id());
+ assertEquals("logs/", retrievedRule1.prefix());
+ assertEquals(ExpirationStatus.ENABLED, retrievedRule1.status());
+ assertEquals(365, retrievedRule1.expiration().days());
+ }
+
+ @Test
+ public void testS3LifecycleConfigurationCreationFailed() {
+ final String bucketName = getBucketName();
+ s3Client.createBucket(b -> b.bucket(bucketName));
+
+ // Test 1: Invalid configuration (no prefix, filter, or expiration)
+ LifecycleRule rule = LifecycleRule.builder()
+ .id("invalid")
+ .status(ExpirationStatus.ENABLED)
+ .build();
+ BucketLifecycleConfiguration configuration =
BucketLifecycleConfiguration.builder()
+ .rules(rule)
+ .build();
+
+ S3Exception exception = assertThrows(S3Exception.class,
+ () -> s3Client.putBucketLifecycleConfiguration(b -> b
+ .bucket(bucketName)
+ .lifecycleConfiguration(configuration)));
+ assertEquals(400, exception.statusCode());
+ assertEquals(S3ErrorTable.INVALID_REQUEST.getCode(),
exception.awsErrorDetails().errorCode());
+
+ // Test 2: Non-existent bucket
+ final String nonExistentBucket = getBucketName("nonexistent");
+ LifecycleRule validRule = LifecycleRule.builder()
+ .id("test-rule")
+ .prefix("test/")
+ .status(ExpirationStatus.ENABLED)
+ .expiration(LifecycleExpiration.builder().days(30).build())
+ .build();
+ BucketLifecycleConfiguration validConfig =
BucketLifecycleConfiguration.builder()
+ .rules(validRule)
+ .build();
+
+ S3Exception exception2 = assertThrows(S3Exception.class,
+ () -> s3Client.putBucketLifecycleConfiguration(b -> b
+ .bucket(nonExistentBucket)
+ .lifecycleConfiguration(validConfig)));
+ assertEquals(404, exception2.statusCode());
+ assertEquals(S3ErrorTable.NO_SUCH_BUCKET.getCode(),
exception2.awsErrorDetails().errorCode());
+ }
+
+ @Test
+ public void testS3LifecycleConfigurationDelete() {
+ final String bucketName = getBucketName();
+ s3Client.createBucket(b -> b.bucket(bucketName));
+
+ // Test delete lifecycle for a bucket, while it doesn't have lifecycle
+ assertThrows(S3Exception.class,
+ () -> s3Client.getBucketLifecycleConfiguration(b ->
b.bucket(bucketName)));
Review Comment:
Could we assert `HTTP_NOT_FOUND` and
`S3ErrorTable.NO_SUCH_LIFECYCLE_CONFIGURATION.getCode()` as the PR description
mentioned?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]