Skip to content

Commit 0a5be43

Browse files
m
1 parent 9522261 commit 0a5be43

2 files changed

Lines changed: 29 additions & 3 deletions

File tree

src/test/java/software/amazon/encryption/s3/S3AsyncEncryptionClientTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,15 @@
4646
import software.amazon.awssdk.services.s3.multipart.MultipartConfiguration;
4747
import software.amazon.encryption.s3.algorithms.AlgorithmSuite;
4848
import software.amazon.encryption.s3.internal.InstructionFileConfig;
49+
import software.amazon.encryption.s3.materials.AesKeyring;
4950
import software.amazon.encryption.s3.materials.KmsKeyring;
5051
import software.amazon.encryption.s3.utils.BoundedInputStream;
5152
import software.amazon.encryption.s3.utils.S3EncryptionClientTestResources;
5253
import software.amazon.encryption.s3.utils.TinyBufferAsyncRequestBody;
5354

5455
import javax.crypto.KeyGenerator;
5556
import javax.crypto.SecretKey;
57+
import javax.crypto.spec.SecretKeySpec;
5658
import java.io.IOException;
5759
import java.io.InputStream;
5860
import java.security.NoSuchAlgorithmException;
@@ -349,6 +351,30 @@ public void asyncTopLevelConfigurationWrongRegion() {
349351
}
350352
}
351353

354+
@RetryingTest(3)
355+
public void roundTripWithCrossRegionAccessEnabled() {
356+
final String objectKey = appendTestSuffix("roundTripWithCrossRegionAccessEnabled-async-s3ec");
357+
SecretKeySpec aesKey = new SecretKeySpec(new byte[32], "AES");
358+
AesKeyring keyRing = AesKeyring.builder().wrappingKey(aesKey).build();
359+
360+
S3AsyncClient s3Client = S3AsyncEncryptionClient.builderV4()
361+
.region(Region.EU_CENTRAL_1)
362+
.crossRegionAccessEnabled(true)
363+
.keyring(keyRing)
364+
.build();
365+
366+
try {
367+
PutObjectRequest request = PutObjectRequest.builder().bucket(BUCKET).key(objectKey).build();
368+
S3EncryptionClientException ex = assertThrows(S3EncryptionClientException.class, () ->
369+
s3Client.putObject(request, AsyncRequestBody.fromBytes("test".getBytes())).join());
370+
// Cross-region redirect causes the SDK to re-subscribe to the request body.
371+
// NoRetriesAsyncRequestBody blocks this to prevent GCM cipher key/IV reuse.
372+
assertTrue(ex.getMessage().contains("Re-subscription is not supported"));
373+
} finally {
374+
s3Client.close();
375+
}
376+
}
377+
352378
@RetryingTest(3)
353379
public void asyncTopLevelConfigurationNullCreds() {
354380
final String objectKey = appendTestSuffix("wrapped-s3-client-with-null-credentials-async");

src/test/java/software/amazon/encryption/s3/S3EncryptionClientTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -967,9 +967,9 @@ public void s3EncryptionClientTopLevelCredentialsWrongRegion() {
967967
}
968968
}
969969

970-
@Test
971-
public void crossRegionRoundTrip() {
972-
final String objectKey = appendTestSuffix("cross-region-test");
970+
@RetryingTest(3)
971+
public void roundTripWithCrossRegionAccessEnabled() {
972+
final String objectKey = appendTestSuffix("roundTripWithCrossRegionAccessEnabled-sync-s3ec");
973973
SecretKeySpec aesKey = new SecretKeySpec(new byte[32], "AES");
974974
AesKeyring keyRing = AesKeyring.builder().wrappingKey(aesKey).build();
975975

0 commit comments

Comments
 (0)