From e5ff6d9dd0396421ece5509760f7f02ac5ecc246 Mon Sep 17 00:00:00 2001 From: Christoph Sturm Date: Thu, 10 Oct 2019 12:08:49 +0200 Subject: [PATCH 1/2] Verify the assumption that a HashMap orders keys. --- .../src/test/java/bisq/HashMapOrderTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 common/src/test/java/bisq/HashMapOrderTest.java diff --git a/common/src/test/java/bisq/HashMapOrderTest.java b/common/src/test/java/bisq/HashMapOrderTest.java new file mode 100644 index 00000000000..42f41246f8e --- /dev/null +++ b/common/src/test/java/bisq/HashMapOrderTest.java @@ -0,0 +1,22 @@ +package bisq; + +import java.util.Map; + +import org.junit.Test; + +import static org.junit.Assert.assertArrayEquals; + + + +import protobuf.TempProposalPayload; + +public class HashMapOrderTest { + @Test + public void mapIsNotOrderPreservingButAlwaysEnforcesKeyOrder() { + TempProposalPayload prop = TempProposalPayload.newBuilder().putAllExtraData(Map.of("k1", "v1", "k2", "v2")).build(); + byte[] bytes1 = prop.toByteArray(); + TempProposalPayload prop2 = TempProposalPayload.newBuilder().putAllExtraData(Map.of("k2", "v2", "k1", "v1")).build(); + byte[] bytes2 = prop2.toByteArray(); + assertArrayEquals(bytes1, bytes2); + } +} From daa379760770b2cd751fe0b2c78ed011d547b3ae Mon Sep 17 00:00:00 2001 From: Christoph Sturm Date: Fri, 11 Oct 2019 10:55:34 +0200 Subject: [PATCH 2/2] Show that even with a order preserving TreeMap protobuf orders the map --- common/src/test/java/bisq/HashMapOrderTest.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/common/src/test/java/bisq/HashMapOrderTest.java b/common/src/test/java/bisq/HashMapOrderTest.java index 42f41246f8e..1755eff4f63 100644 --- a/common/src/test/java/bisq/HashMapOrderTest.java +++ b/common/src/test/java/bisq/HashMapOrderTest.java @@ -1,6 +1,6 @@ package bisq; -import java.util.Map; +import java.util.TreeMap; import org.junit.Test; @@ -13,9 +13,15 @@ public class HashMapOrderTest { @Test public void mapIsNotOrderPreservingButAlwaysEnforcesKeyOrder() { - TempProposalPayload prop = TempProposalPayload.newBuilder().putAllExtraData(Map.of("k1", "v1", "k2", "v2")).build(); + TreeMap order1 = new TreeMap<>(); + order1.put("k1", "v1"); + order1.put("k2", "v2"); + TreeMap order2 = new TreeMap<>(); + order2.put("k2", "v2"); + order2.put("k1", "v1"); + TempProposalPayload prop = TempProposalPayload.newBuilder().putAllExtraData(order1).build(); byte[] bytes1 = prop.toByteArray(); - TempProposalPayload prop2 = TempProposalPayload.newBuilder().putAllExtraData(Map.of("k2", "v2", "k1", "v1")).build(); + TempProposalPayload prop2 = TempProposalPayload.newBuilder().putAllExtraData(order2).build(); byte[] bytes2 = prop2.toByteArray(); assertArrayEquals(bytes1, bytes2); }