From 8e1a44433e60a0cbbe383763632de785c16c601d Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Jan 2022 12:33:30 +0800 Subject: [PATCH 01/13] Fixed All Flaky Tests --- .../datamodeling/encryption/DynamoDBEncryptorTest.java | 8 +++++--- .../internal/AttributeValueMarshallerTest.java | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java index 6ec4aefd..77684b6c 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java @@ -198,15 +198,17 @@ public void ensureEncryptedAttributesUnmodified() throws GeneralSecurityExceptio Map encryptedAttributes = encryptor.encryptAllFieldsExcept( Collections.unmodifiableMap(attribs), context, "hashKey", "rangeKey", "version"); - String encryptedString = encryptedAttributes.toString(); + HashMap beforeDecryption = new HashMap<>(); + for (HashMap.Entry entry: encryptedAttributes.entrySet()) { + beforeDecryption.put(entry.getKey(), entry.getValue()); + } encryptor.decryptAllFieldsExcept( Collections.unmodifiableMap(encryptedAttributes), context, "hashKey", "rangeKey", "version"); - - assertEquals(encryptedString, encryptedAttributes.toString()); + assertTrue(beforeDecryption.equals(encryptedAttributes)); } @Test(expectedExceptions = SignatureException.class) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index 523a1958..c407e786 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -266,9 +266,10 @@ public void testSimpleMapWithNull() { marshall(av); Assert.fail("Unexpected success"); } catch (final NullPointerException npe) { - Assert.assertEquals( - "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}", - npe.getMessage()); + String expected_v1 = "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; + String expected_v2 = "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; + boolean flag = ((expected_v1.equals(npe.getMessage())) || (expected_v2.equals(npe.getMessage()))); + Assert.assertTrue(flag); } } From f13b093379fccd8efe3625ef5050451ad8a95083 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Jan 2022 12:06:10 +0800 Subject: [PATCH 02/13] Refactored Code Changes --- .../encryption/DynamoDBEncryptorTest.java | 8 +++----- .../internal/AttributeValueMarshallerTest.java | 14 +++++++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java index 77684b6c..b653997e 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java @@ -198,17 +198,15 @@ public void ensureEncryptedAttributesUnmodified() throws GeneralSecurityExceptio Map encryptedAttributes = encryptor.encryptAllFieldsExcept( Collections.unmodifiableMap(attribs), context, "hashKey", "rangeKey", "version"); - HashMap beforeDecryption = new HashMap<>(); - for (HashMap.Entry entry: encryptedAttributes.entrySet()) { - beforeDecryption.put(entry.getKey(), entry.getValue()); - } + HashMap beforeDecryption = new HashMap<>(encryptedAttributes); encryptor.decryptAllFieldsExcept( Collections.unmodifiableMap(encryptedAttributes), context, "hashKey", "rangeKey", "version"); - assertTrue(beforeDecryption.equals(encryptedAttributes)); + + assertEquals(beforeDecryption, encryptedAttributes); } @Test(expectedExceptions = SignatureException.class) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index c407e786..5c7cb1a6 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -266,10 +266,18 @@ public void testSimpleMapWithNull() { marshall(av); Assert.fail("Unexpected success"); } catch (final NullPointerException npe) { - String expected_v1 = "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; - String expected_v2 = "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; - boolean flag = ((expected_v1.equals(npe.getMessage())) || (expected_v2.equals(npe.getMessage()))); + // Map entries may permute under nondeterministic JAVA API + String npeMessage = npe.getMessage(); + String common = "Encountered null map value for key NullKeyValue while marshalling attribute value"; + String permutation1 = common + " {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; + String permutation2 = common + " {M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; + boolean flag = ((permutation1.equals(npeMessage)) || (permutation2.equals(npeMessage))); Assert.assertTrue(flag); + /** + Assert.assertEquals( + "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}", + npe.getMessage()); + */ } } From 3cb795b050b730a75d1c93dba6e74d103d801fec Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Jan 2022 12:14:00 +0800 Subject: [PATCH 03/13] Deleted Unused Code --- .../datamodeling/internal/AttributeValueMarshallerTest.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index 5c7cb1a6..ba690b22 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -273,11 +273,6 @@ public void testSimpleMapWithNull() { String permutation2 = common + " {M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; boolean flag = ((permutation1.equals(npeMessage)) || (permutation2.equals(npeMessage))); Assert.assertTrue(flag); - /** - Assert.assertEquals( - "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}", - npe.getMessage()); - */ } } From 687a1b6b51948dd9b5849b87fc739f6d8d513cc0 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Jan 2022 15:02:07 +0800 Subject: [PATCH 04/13] Refactor --- .../datamodeling/internal/AttributeValueMarshallerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index ba690b22..7ad04f9e 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -266,7 +266,7 @@ public void testSimpleMapWithNull() { marshall(av); Assert.fail("Unexpected success"); } catch (final NullPointerException npe) { - // Map entries may permute under nondeterministic JAVA API + // Map entries may permute under nondeterministic Java API String npeMessage = npe.getMessage(); String common = "Encountered null map value for key NullKeyValue while marshalling attribute value"; String permutation1 = common + " {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; From 385f72fd021d9c69805e318512a2935869ea4cfe Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Jan 2022 13:50:07 +0800 Subject: [PATCH 05/13] Refactor --- .../internal/AttributeValueMarshallerTest.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index 7ad04f9e..f3904a32 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -266,13 +266,12 @@ public void testSimpleMapWithNull() { marshall(av); Assert.fail("Unexpected success"); } catch (final NullPointerException npe) { - // Map entries may permute under nondeterministic Java API + // Map entries may permute under nondeterministic JAVA API String npeMessage = npe.getMessage(); String common = "Encountered null map value for key NullKeyValue while marshalling attribute value"; - String permutation1 = common + " {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; - String permutation2 = common + " {M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; - boolean flag = ((permutation1.equals(npeMessage)) || (permutation2.equals(npeMessage))); - Assert.assertTrue(flag); + String case1 = common + " {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; + String case2 = common + " {M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; + Assert.assertTrue((case1.equals(npeMessage)) || (case2.equals(npeMessage))); } } From b3258220be8b1bde25d866e08facc0e610a92a2e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Jan 2022 14:19:49 +0800 Subject: [PATCH 06/13] Refactor --- .../internal/AttributeValueMarshallerTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index f3904a32..904624e4 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -266,12 +266,12 @@ public void testSimpleMapWithNull() { marshall(av); Assert.fail("Unexpected success"); } catch (final NullPointerException npe) { - // Map entries may permute under nondeterministic JAVA API + // Map entries may permute under nondeterministic Java API String npeMessage = npe.getMessage(); - String common = "Encountered null map value for key NullKeyValue while marshalling attribute value"; - String case1 = common + " {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; - String case2 = common + " {M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; - Assert.assertTrue((case1.equals(npeMessage)) || (case2.equals(npeMessage))); + String common = "Encountered null map value for key NullKeyValue while marshalling attribute value "; + String case1 = common + "{M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; + String case2 = common + "{M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; + Assert.assertTrue(case1.equals(npeMessage) || case2.equals(npeMessage)); } } From 67dcb1f0a0e875a8145ab44025f66a077c1db9de Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Jan 2022 14:21:41 +0800 Subject: [PATCH 07/13] Refactor --- .../datamodeling/encryption/DynamoDBEncryptorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java index b653997e..d76c2b08 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java @@ -198,7 +198,7 @@ public void ensureEncryptedAttributesUnmodified() throws GeneralSecurityExceptio Map encryptedAttributes = encryptor.encryptAllFieldsExcept( Collections.unmodifiableMap(attribs), context, "hashKey", "rangeKey", "version"); - HashMap beforeDecryption = new HashMap<>(encryptedAttributes); + Map beforeDecryption = new HashMap<>(encryptedAttributes); encryptor.decryptAllFieldsExcept( Collections.unmodifiableMap(encryptedAttributes), context, From 072c95e8d67fd218802e002c9ca85bd7001c0ced Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 23 Jan 2022 15:05:43 +0800 Subject: [PATCH 08/13] Refactor --- .../datamodeling/encryption/DynamoDBEncryptorTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java index d76c2b08..c3b43fe3 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java @@ -46,6 +46,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.TreeMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -198,15 +199,16 @@ public void ensureEncryptedAttributesUnmodified() throws GeneralSecurityExceptio Map encryptedAttributes = encryptor.encryptAllFieldsExcept( Collections.unmodifiableMap(attribs), context, "hashKey", "rangeKey", "version"); - Map beforeDecryption = new HashMap<>(encryptedAttributes); + String beforeDecryption = (new TreeMap<>(encryptedAttributes)).toString(); encryptor.decryptAllFieldsExcept( Collections.unmodifiableMap(encryptedAttributes), context, "hashKey", "rangeKey", "version"); + String afterDecryption = (new TreeMap<>(encryptedAttributes)).toString(); - assertEquals(beforeDecryption, encryptedAttributes); + assertEquals(beforeDecryption, afterDecryption); } @Test(expectedExceptions = SignatureException.class) From 2c45d1fee6fe6c78d5443cdc0f1bdd6ff93642a4 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 23 Jan 2022 23:26:45 +0800 Subject: [PATCH 09/13] Refactored Changes after Peer Review --- .../datamodeling/encryption/DynamoDBEncryptorTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java index c3b43fe3..32a22993 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java @@ -199,16 +199,15 @@ public void ensureEncryptedAttributesUnmodified() throws GeneralSecurityExceptio Map encryptedAttributes = encryptor.encryptAllFieldsExcept( Collections.unmodifiableMap(attribs), context, "hashKey", "rangeKey", "version"); - String beforeDecryption = (new TreeMap<>(encryptedAttributes)).toString(); + String encryptedString = new TreeMap<>(encryptedAttributes).toString(); encryptor.decryptAllFieldsExcept( Collections.unmodifiableMap(encryptedAttributes), context, "hashKey", "rangeKey", "version"); - String afterDecryption = (new TreeMap<>(encryptedAttributes)).toString(); - assertEquals(beforeDecryption, afterDecryption); + assertEquals(encryptedString, new TreeMap<>(encryptedAttributes).toString()); } @Test(expectedExceptions = SignatureException.class) From 3e70d9a570362ffe2aea054ffa8f17659566e4f5 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 9 Feb 2022 10:33:36 +0800 Subject: [PATCH 10/13] Addresses Changes --- .../datamodeling/internal/AttributeValueMarshaller.java | 6 +++++- .../datamodeling/encryption/DynamoDBEncryptorTest.java | 1 + .../internal/AttributeValueMarshallerTest.java | 9 +++------ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java b/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java index 26622af4..7082ad08 100644 --- a/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java +++ b/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.TreeMap; import java.util.List; import java.util.Map; @@ -119,7 +120,10 @@ private static void marshall(final AttributeValue attributeValue, final DataOutp marshall(attr, out); } } else if (attributeValue.getM() != null) { - final Map m = attributeValue.getM(); + // Using TreeMap to ensure deterministic entry order + final Map m = new TreeMap<>(attributeValue.getM()); + // Update the deterministic order to attributeValue + attributeValue.setM(m); final List mKeys = new ArrayList(m.keySet()); Collections.sort(mKeys); out.writeChar('M'); diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java index 32a22993..9d7496ac 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java @@ -199,6 +199,7 @@ public void ensureEncryptedAttributesUnmodified() throws GeneralSecurityExceptio Map encryptedAttributes = encryptor.encryptAllFieldsExcept( Collections.unmodifiableMap(attribs), context, "hashKey", "rangeKey", "version"); + // Using TreeMap before casting to string to avoid nondeterministic key orders. String encryptedString = new TreeMap<>(encryptedAttributes).toString(); encryptor.decryptAllFieldsExcept( Collections.unmodifiableMap(encryptedAttributes), diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index 904624e4..523a1958 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -266,12 +266,9 @@ public void testSimpleMapWithNull() { marshall(av); Assert.fail("Unexpected success"); } catch (final NullPointerException npe) { - // Map entries may permute under nondeterministic Java API - String npeMessage = npe.getMessage(); - String common = "Encountered null map value for key NullKeyValue while marshalling attribute value "; - String case1 = common + "{M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; - String case2 = common + "{M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; - Assert.assertTrue(case1.equals(npeMessage) || case2.equals(npeMessage)); + Assert.assertEquals( + "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}", + npe.getMessage()); } } From 4cf88eee64936c9e59d68ce1f9f7668f96c84451 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 9 Feb 2022 12:28:08 +0800 Subject: [PATCH 11/13] Changed Style --- .../datamodeling/internal/AttributeValueMarshaller.java | 2 +- .../datamodeling/encryption/DynamoDBEncryptorTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java b/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java index 7082ad08..3a625a00 100644 --- a/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java +++ b/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java @@ -25,9 +25,9 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.TreeMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; /** @author Greg Rubin */ public class AttributeValueMarshaller { diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java index 9d7496ac..8ae6028d 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/DynamoDBEncryptorTest.java @@ -46,10 +46,10 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.TreeMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import javax.crypto.KeyGenerator; From dbf848d26683aacab5c03fbcb31c2237af3955c3 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 10 Feb 2022 13:37:33 +0800 Subject: [PATCH 12/13] Restored Changes --- .../datamodeling/internal/AttributeValueMarshaller.java | 6 +----- .../internal/AttributeValueMarshallerTest.java | 9 ++++++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java b/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java index 3a625a00..26622af4 100644 --- a/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java +++ b/sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshaller.java @@ -27,7 +27,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.TreeMap; /** @author Greg Rubin */ public class AttributeValueMarshaller { @@ -120,10 +119,7 @@ private static void marshall(final AttributeValue attributeValue, final DataOutp marshall(attr, out); } } else if (attributeValue.getM() != null) { - // Using TreeMap to ensure deterministic entry order - final Map m = new TreeMap<>(attributeValue.getM()); - // Update the deterministic order to attributeValue - attributeValue.setM(m); + final Map m = attributeValue.getM(); final List mKeys = new ArrayList(m.keySet()); Collections.sort(mKeys); out.writeChar('M'); diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index 523a1958..904624e4 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -266,9 +266,12 @@ public void testSimpleMapWithNull() { marshall(av); Assert.fail("Unexpected success"); } catch (final NullPointerException npe) { - Assert.assertEquals( - "Encountered null map value for key NullKeyValue while marshalling attribute value {M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}", - npe.getMessage()); + // Map entries may permute under nondeterministic Java API + String npeMessage = npe.getMessage(); + String common = "Encountered null map value for key NullKeyValue while marshalling attribute value "; + String case1 = common + "{M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; + String case2 = common + "{M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; + Assert.assertTrue(case1.equals(npeMessage) || case2.equals(npeMessage)); } } From ef7283b957dd528a32b3cb1986f93ae6bfe5cdd3 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 10 Feb 2022 13:43:37 +0800 Subject: [PATCH 13/13] Changed Style --- .../datamodeling/internal/AttributeValueMarshallerTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java index 904624e4..5ff73f4f 100644 --- a/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java +++ b/sdk1/src/test/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/AttributeValueMarshallerTest.java @@ -268,7 +268,8 @@ public void testSimpleMapWithNull() { } catch (final NullPointerException npe) { // Map entries may permute under nondeterministic Java API String npeMessage = npe.getMessage(); - String common = "Encountered null map value for key NullKeyValue while marshalling attribute value "; + String common = + "Encountered null map value for key NullKeyValue while marshalling attribute value "; String case1 = common + "{M: {KeyValue={S: ValueValue,}, NullKeyValue=null},}"; String case2 = common + "{M: {NullKeyValue=null, KeyValue={S: ValueValue,}},}"; Assert.assertTrue(case1.equals(npeMessage) || case2.equals(npeMessage));