Browse Source

fix: use unique bucket name in TestS3IAMPresignedURLIntegration to avoid flaky test (#7801)

The test was using a static bucket name 'test-iam-bucket' that could conflict
with buckets created by other tests or previous runs. Each test framework
creates new RSA keys for JWT signing, so the 'admin-user' identity differs
between runs. When the bucket exists from a previous test, the new admin
cannot access or delete it, causing AccessDenied errors.

Changed to use GenerateUniqueBucketName() which ensures each test run gets
its own bucket, avoiding cross-test conflicts.
pull/7804/head
Chris Lu 13 hours ago
committed by GitHub
parent
commit
2763f105f4
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 13
      test/s3/iam/s3_iam_integration_test.go

13
test/s3/iam/s3_iam_integration_test.go

@ -558,13 +558,14 @@ func TestS3IAMPresignedURLIntegration(t *testing.T) {
adminClient, err := framework.CreateS3ClientWithJWT("admin-user", "TestAdminRole") adminClient, err := framework.CreateS3ClientWithJWT("admin-user", "TestAdminRole")
require.NoError(t, err) require.NoError(t, err)
// Use static bucket name but with cleanup to handle conflicts
err = framework.CreateBucketWithCleanup(adminClient, testBucket)
// Use unique bucket name to avoid conflicts with other tests
bucketName := framework.GenerateUniqueBucketName("test-iam-presigned")
err = framework.CreateBucket(adminClient, bucketName)
require.NoError(t, err) require.NoError(t, err)
// Put test object // Put test object
_, err = adminClient.PutObject(&s3.PutObjectInput{ _, err = adminClient.PutObject(&s3.PutObjectInput{
Bucket: aws.String(testBucket),
Bucket: aws.String(bucketName),
Key: aws.String(testObjectKey), Key: aws.String(testObjectKey),
Body: strings.NewReader(testObjectData), Body: strings.NewReader(testObjectData),
}) })
@ -586,7 +587,7 @@ func TestS3IAMPresignedURLIntegration(t *testing.T) {
// Test direct object access with JWT Bearer token (recommended approach) // Test direct object access with JWT Bearer token (recommended approach)
_, err := adminClient.GetObject(&s3.GetObjectInput{ _, err := adminClient.GetObject(&s3.GetObjectInput{
Bucket: aws.String(testBucket),
Bucket: aws.String(bucketName),
Key: aws.String(testObjectKey), Key: aws.String(testObjectKey),
}) })
require.NoError(t, err, "Direct object access with JWT Bearer token works correctly") require.NoError(t, err, "Direct object access with JWT Bearer token works correctly")
@ -597,13 +598,13 @@ func TestS3IAMPresignedURLIntegration(t *testing.T) {
// Cleanup // Cleanup
_, err = adminClient.DeleteObject(&s3.DeleteObjectInput{ _, err = adminClient.DeleteObject(&s3.DeleteObjectInput{
Bucket: aws.String(testBucket),
Bucket: aws.String(bucketName),
Key: aws.String(testObjectKey), Key: aws.String(testObjectKey),
}) })
require.NoError(t, err) require.NoError(t, err)
_, err = adminClient.DeleteBucket(&s3.DeleteBucketInput{ _, err = adminClient.DeleteBucket(&s3.DeleteBucketInput{
Bucket: aws.String(testBucket),
Bucket: aws.String(bucketName),
}) })
require.NoError(t, err) require.NoError(t, err)
} }
Loading…
Cancel
Save