HCOLL-167 works with a small number of entries, there is a bug if we have a large number of entries

This commit is contained in:
Rob Austin
2014-10-27 13:14:56 +00:00
parent 95626f3ea2
commit dceb852092
3 changed files with 65 additions and 22 deletions
@@ -25,6 +25,7 @@ import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import static net.openhft.chronicle.common.StatelessBuilder.remoteAddress;
@@ -35,7 +36,55 @@ import static net.openhft.chronicle.common.StatelessBuilder.remoteAddress;
public class StatelessClientTest {
public static final int SIZE = 10000;
public static final int SIZE = 100;
@Test
public void testBufferOverFlowPutAllAndEntrySet() throws IOException, InterruptedException {
final ChronicleMap<Integer, CharSequence> serverMap;
final ChronicleMap<Integer, CharSequence> statelessMap;
// stateless client
{
statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.stateless(remoteAddress(new InetSocketAddress("localhost", 8076))).create();
}
// server
{
serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
.replicators((byte) 2, TcpReplicationConfig.of(8076)).create();
}
Map<Integer, CharSequence> payload = new HashMap<Integer, CharSequence>();
for (int i = 0; i < SIZE; i++) {
payload.put(i, "some value=" + i);
}
statelessMap.putAll(payload);
Set<Map.Entry<Integer, CharSequence>> entries = statelessMap.entrySet();
Map.Entry<Integer, CharSequence> next = entries.iterator().next();
Assert.assertEquals("some value=" + next.getKey(), next.getValue());
serverMap.close();
statelessMap.close();
// System.out.print("" + entries);
}
@Test
public void test() throws IOException, InterruptedException {
@@ -80,8 +129,6 @@ public class StatelessClientTest {
statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.stateless(remoteAddress(new InetSocketAddress("localhost", 8076))).create();
}
// server
@@ -132,7 +179,9 @@ public class StatelessClientTest {
statelessMap.putAll(payload);
Assert.assertEquals("some value=10", statelessMap.get(10));
int value = SIZE - 10;
Assert.assertEquals("some value=" + value, statelessMap.get(value));
Assert.assertEquals(SIZE, statelessMap.size());
serverMap.close();
@@ -141,6 +190,9 @@ public class StatelessClientTest {
}
@Test
public void testEquals() throws IOException, InterruptedException {
@@ -171,18 +223,17 @@ public class StatelessClientTest {
Map<Integer, CharSequence> payload = new HashMap<Integer, CharSequence>();
for (int i = 0; i < 10; i++) {
// todo still fails for large values
for (int i = 0; i < 1000; i++) {
payload.put(i, "some value=" + i);
}
statelessMap1.putAll(payload);
statelessMap2.putAll(payload);
Assert.assertTrue(statelessMap1.equals(statelessMap2));
Assert.assertTrue(statelessMap1.equals(payload));
Assert.assertTrue(statelessMap2.equals(payload));
statelessMap1.close();
statelessMap1.close();