From 23cc0a324fc56a3a79ee10d12a9215983057195e Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Tue, 30 Sep 2025 17:02:30 -0700 Subject: [PATCH 1/2] chore: add suffix to test-objects to avoid accidental collisions --- .../amazon/encryption/s3/RoundTripTests.java | 22 +++++++++---------- .../amazon/encryption/s3/TestUtils.java | 15 +++++++++++++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java index 6a16ba7b..894c2639 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java @@ -64,7 +64,7 @@ public void crossLanguageTestKms(LanguageServerTarget encLang, LanguageServerTar String encS3ECId = encClientOutput.getClientId(); encClient.putObject(PutObjectInput.builder() .clientID(encS3ECId) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .bucket(BUCKET) .body(ByteBuffer.wrap(input.getBytes(StandardCharsets.UTF_8))) .build()); @@ -77,7 +77,7 @@ public void crossLanguageTestKms(LanguageServerTarget encLang, LanguageServerTar GetObjectOutput output = decClient.getObject(GetObjectInput.builder() .clientID(decS3ECId) .bucket(BUCKET) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .build()); if (!input.equals(StandardCharsets.UTF_8.decode(output.getBody()).toString())) { @@ -109,7 +109,7 @@ public void crossLanguageTestKmsWithEncCtx(LanguageServerTarget encLang, Languag encClient.putObject(PutObjectInput.builder() .clientID(encS3ECId) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .bucket(BUCKET) .metadata(mdAsList) .body(ByteBuffer.wrap(input.getBytes(StandardCharsets.UTF_8))) @@ -123,7 +123,7 @@ public void crossLanguageTestKmsWithEncCtx(LanguageServerTarget encLang, Languag GetObjectOutput output = decClient.getObject(GetObjectInput.builder() .clientID(decS3ECId) .bucket(BUCKET) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .metadata(mdAsList) .build()); @@ -159,7 +159,7 @@ public void crossLanguageTestKmsWithSubsetEncCtxFails(LanguageServerTarget encLa encClient.putObject(PutObjectInput.builder() .clientID(encS3ECId) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .bucket(BUCKET) .metadata(mdAsList) .body(ByteBuffer.wrap(input.getBytes(StandardCharsets.UTF_8))) @@ -174,7 +174,7 @@ public void crossLanguageTestKmsWithSubsetEncCtxFails(LanguageServerTarget encLa decClient.getObject(GetObjectInput.builder() .clientID(decS3ECId) .bucket(BUCKET) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .build()); fail("Expected exception!"); } catch (S3EncryptionClientError e) { @@ -210,7 +210,7 @@ public void crossLanguageTestKmsWithIncorrectEncCtxFails(LanguageServerTarget en encClient.putObject(PutObjectInput.builder() .clientID(encS3ECId) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .bucket(BUCKET) .metadata(mdAsList) .body(ByteBuffer.wrap(input.getBytes(StandardCharsets.UTF_8))) @@ -229,7 +229,7 @@ public void crossLanguageTestKmsWithIncorrectEncCtxFails(LanguageServerTarget en decClient.getObject(GetObjectInput.builder() .clientID(decS3ECId) .bucket(BUCKET) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .metadata(incorrectMdAsList) .build()); fail("Expected exception!"); @@ -278,7 +278,7 @@ public void kmsV1Legacy(String language) { GetObjectOutput output = client.getObject(GetObjectInput.builder() .clientID(s3ECId) .bucket(BUCKET) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .build()); assertEquals(input, new String(output.getBody().array())); @@ -326,7 +326,7 @@ public void kmsV1LegacyWithEncCtx(String language) { GetObjectOutput output = client.getObject(GetObjectInput.builder() .clientID(s3ECId) .bucket(BUCKET) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .metadata(metadataMapToList(encCtx)) .build()); @@ -370,7 +370,7 @@ public void kmsV1LegacyFailsWhenLegacyDisabled(String language) { client.getObject(GetObjectInput.builder() .clientID(s3ECId) .bucket(BUCKET) - .key(objectKey) + .key(appendTestSuffix(objectKey)) .build()); fail("Expected Exception"); } catch (S3EncryptionClientError e) { diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java index 3237ee72..62371b56 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/TestUtils.java @@ -17,6 +17,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; import org.junit.jupiter.params.provider.Arguments; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; @@ -316,4 +318,17 @@ public static Stream crossLanguageClients() { Arguments.of(t1, t2) ))); } + + /** + * For a given string, append a suffix to distinguish it from + * simultaneous test runs. + * @param s The string to append the suffix to + * @return The string with the suffix appended + */ + public static String appendTestSuffix(final String s) { + StringBuilder stringBuilder = new StringBuilder(s); + stringBuilder.append(DateTimeFormat.forPattern("-yyMMdd-hhmmss-").print(new DateTime())); + stringBuilder.append((int) (Math.random() * 100000)); + return stringBuilder.toString(); + } } From 46dfd620f887b5ef43a501c81a0924cf6b862daa Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Tue, 30 Sep 2025 17:11:12 -0700 Subject: [PATCH 2/2] oopsie --- .../amazon/encryption/s3/RoundTripTests.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java index 894c2639..a94c561c 100644 --- a/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java +++ b/test-server/java-tests/src/it/java/software/amazon/encryption/s3/RoundTripTests.java @@ -52,7 +52,7 @@ public static void setup() { @MethodSource("software.amazon.encryption.s3.TestUtils#crossLanguageClients") public void crossLanguageTestKms(LanguageServerTarget encLang, LanguageServerTarget decLang) { S3ECTestServerClient encClient = testServerClientFor(encLang); - final String objectKey = "cross-lang-test-key-" + encLang; + final String objectKey = appendTestSuffix("cross-lang-test-key-" + encLang); final String input = "simple-test-input"; KeyMaterial kmsKeyArn = KeyMaterial.builder() .kmsKeyId(KMS_KEY_ARN) @@ -64,7 +64,7 @@ public void crossLanguageTestKms(LanguageServerTarget encLang, LanguageServerTar String encS3ECId = encClientOutput.getClientId(); encClient.putObject(PutObjectInput.builder() .clientID(encS3ECId) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .bucket(BUCKET) .body(ByteBuffer.wrap(input.getBytes(StandardCharsets.UTF_8))) .build()); @@ -77,7 +77,7 @@ public void crossLanguageTestKms(LanguageServerTarget encLang, LanguageServerTar GetObjectOutput output = decClient.getObject(GetObjectInput.builder() .clientID(decS3ECId) .bucket(BUCKET) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .build()); if (!input.equals(StandardCharsets.UTF_8.decode(output.getBody()).toString())) { @@ -92,7 +92,7 @@ public void crossLanguageTestKmsWithEncCtx(LanguageServerTarget encLang, Languag return; } S3ECTestServerClient encClient = testServerClientFor(encLang); - final String objectKey = "cross-lang-test-key-kms-ec-" + encLang; + final String objectKey = appendTestSuffix("cross-lang-test-key-kms-ec-" + encLang); final String input = "simple-test-input"; final Map encCtx = new HashMap<>(); encCtx.put("user-defined-enc-ctx-key", "user-defined-enc-ctx-value"); @@ -109,7 +109,7 @@ public void crossLanguageTestKmsWithEncCtx(LanguageServerTarget encLang, Languag encClient.putObject(PutObjectInput.builder() .clientID(encS3ECId) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .bucket(BUCKET) .metadata(mdAsList) .body(ByteBuffer.wrap(input.getBytes(StandardCharsets.UTF_8))) @@ -123,7 +123,7 @@ public void crossLanguageTestKmsWithEncCtx(LanguageServerTarget encLang, Languag GetObjectOutput output = decClient.getObject(GetObjectInput.builder() .clientID(decS3ECId) .bucket(BUCKET) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .metadata(mdAsList) .build()); @@ -142,7 +142,7 @@ public void crossLanguageTestKmsWithSubsetEncCtxFails(LanguageServerTarget encLa return; } S3ECTestServerClient encClient = testServerClientFor(encLang); - final String objectKey = "cross-lang-test-key-kms-ec-subset-fails" + encLang; + final String objectKey = appendTestSuffix("cross-lang-test-key-kms-ec-subset-fails" + encLang); final String input = "simple-test-input"; final Map encCtx = new HashMap<>(); encCtx.put("user-defined-enc-ctx-key", "user-defined-enc-ctx-value"); @@ -159,7 +159,7 @@ public void crossLanguageTestKmsWithSubsetEncCtxFails(LanguageServerTarget encLa encClient.putObject(PutObjectInput.builder() .clientID(encS3ECId) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .bucket(BUCKET) .metadata(mdAsList) .body(ByteBuffer.wrap(input.getBytes(StandardCharsets.UTF_8))) @@ -174,7 +174,7 @@ public void crossLanguageTestKmsWithSubsetEncCtxFails(LanguageServerTarget encLa decClient.getObject(GetObjectInput.builder() .clientID(decS3ECId) .bucket(BUCKET) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .build()); fail("Expected exception!"); } catch (S3EncryptionClientError e) { @@ -193,7 +193,7 @@ public void crossLanguageTestKmsWithIncorrectEncCtxFails(LanguageServerTarget en return; } S3ECTestServerClient encClient = testServerClientFor(encLang); - final String objectKey = "cross-lang-test-key-kms-ec-incorrect-fails" + encLang; + final String objectKey = appendTestSuffix("cross-lang-test-key-kms-ec-incorrect-fails" + encLang); final String input = "simple-test-input"; final Map encCtx = new HashMap<>(); encCtx.put("user-defined-enc-ctx-key", "user-defined-enc-ctx-value"); @@ -210,7 +210,7 @@ public void crossLanguageTestKmsWithIncorrectEncCtxFails(LanguageServerTarget en encClient.putObject(PutObjectInput.builder() .clientID(encS3ECId) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .bucket(BUCKET) .metadata(mdAsList) .body(ByteBuffer.wrap(input.getBytes(StandardCharsets.UTF_8))) @@ -229,7 +229,7 @@ public void crossLanguageTestKmsWithIncorrectEncCtxFails(LanguageServerTarget en decClient.getObject(GetObjectInput.builder() .clientID(decS3ECId) .bucket(BUCKET) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .metadata(incorrectMdAsList) .build()); fail("Expected exception!"); @@ -246,7 +246,7 @@ public void crossLanguageTestKmsWithIncorrectEncCtxFails(LanguageServerTarget en @MethodSource("software.amazon.encryption.s3.TestUtils#clientsForTest") public void kmsV1Legacy(String language) { S3ECTestServerClient client = testServerClientFor(getServerMap().get(language)); - final String objectKey = "test-key-kms-v1-" + language; + final String objectKey = appendTestSuffix("test-key-kms-v1-" + language); final String input = "simple-test-input"; KeyMaterial kmsKeyArn = KeyMaterial.builder() .kmsKeyId(KMS_KEY_ARN) @@ -278,7 +278,7 @@ public void kmsV1Legacy(String language) { GetObjectOutput output = client.getObject(GetObjectInput.builder() .clientID(s3ECId) .bucket(BUCKET) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .build()); assertEquals(input, new String(output.getBody().array())); @@ -288,7 +288,7 @@ public void kmsV1Legacy(String language) { @MethodSource("software.amazon.encryption.s3.TestUtils#clientsForTest") public void kmsV1LegacyWithEncCtx(String language) { S3ECTestServerClient client = testServerClientFor(getServerMap().get(language)); - final String objectKey = "test-key-kms-v1-with-enc-ctx-" + language; + final String objectKey = appendTestSuffix("test-key-kms-v1-with-enc-ctx-" + language); final String input = "simple-test-input"; KeyMaterial kmsKeyArn = KeyMaterial.builder() .kmsKeyId(KMS_KEY_ARN) @@ -326,7 +326,7 @@ public void kmsV1LegacyWithEncCtx(String language) { GetObjectOutput output = client.getObject(GetObjectInput.builder() .clientID(s3ECId) .bucket(BUCKET) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .metadata(metadataMapToList(encCtx)) .build()); @@ -337,7 +337,7 @@ public void kmsV1LegacyWithEncCtx(String language) { @MethodSource("software.amazon.encryption.s3.TestUtils#clientsForTest") public void kmsV1LegacyFailsWhenLegacyDisabled(String language) { S3ECTestServerClient client = testServerClientFor(getServerMap().get(language)); - final String objectKey = "test-key-kms-v1-fails-disabled" + language; + final String objectKey = appendTestSuffix("test-key-kms-v1-fails-disabled" + language); final String input = "simple-test-input"; KeyMaterial kmsKeyArn = KeyMaterial.builder() .kmsKeyId(KMS_KEY_ARN) @@ -370,7 +370,7 @@ public void kmsV1LegacyFailsWhenLegacyDisabled(String language) { client.getObject(GetObjectInput.builder() .clientID(s3ECId) .bucket(BUCKET) - .key(appendTestSuffix(objectKey)) + .key(objectKey) .build()); fail("Expected Exception"); } catch (S3EncryptionClientError e) {