diff --git a/core/src/test/java/org/elasticsearch/common/io/stream/StreamTests.java b/core/src/test/java/org/elasticsearch/common/io/stream/StreamTests.java index bc6d5648c6f..cec70fb61f5 100644 --- a/core/src/test/java/org/elasticsearch/common/io/stream/StreamTests.java +++ b/core/src/test/java/org/elasticsearch/common/io/stream/StreamTests.java @@ -25,8 +25,7 @@ import org.elasticsearch.test.ESTestCase; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.Arrays; -import java.util.List; +import java.util.*; public class StreamTests extends ESTestCase { public void testRandomVLongSerialization() throws IOException { @@ -59,4 +58,34 @@ public class StreamTests extends ESTestCase { assertEquals(Arrays.toString(value.v2()), (long)value.v1(), bytes.streamInput().readZLong()); } } + + public void testLinkedHashMap() throws IOException { + int size = randomIntBetween(1, 1024); + boolean accessOrder = randomBoolean(); + List> list = new ArrayList<>(size); + LinkedHashMap write = new LinkedHashMap<>(size, 0.75f, accessOrder); + for (int i = 0; i < size; i++) { + int value = randomInt(); + list.add(new Tuple<>(Integer.toString(i), value)); + write.put(Integer.toString(i), value); + } + if (accessOrder) { + // randomize access order + Collections.shuffle(list, random()); + for (Tuple entry : list) { + // touch the entries to set the access order + write.get(entry.v1()); + } + } + BytesStreamOutput out = new BytesStreamOutput(); + out.writeGenericValue(write); + LinkedHashMap read = (LinkedHashMap)out.bytes().streamInput().readGenericValue(); + assertEquals(size, read.size()); + int index = 0; + for (Map.Entry entry : read.entrySet()) { + assertEquals(list.get(index).v1(), entry.getKey()); + assertEquals(list.get(index).v2(), entry.getValue()); + index++; + } + } }