Improve test robustness and park flaky tests.

This commit is contained in:
Peter Lawrey
2014-11-30 22:05:33 +02:00
parent 6fdfc9184c
commit 6dc1792f19
25 changed files with 526 additions and 272 deletions
@@ -19,7 +19,9 @@
package net.openhft.chronicle.map;
import net.openhft.chronicle.hash.replication.TcpTransportAndNetworkConfig;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
@@ -29,14 +31,13 @@ import java.util.concurrent.ExecutionException;
import static org.junit.Assert.assertEquals;
/**
* @author Rob Austin.
*/
public class StatelessClientTest {
public static final int SIZE = 2500;
static int s_port = 9050;
enum ToString implements Function<Object, String> {
INSTANCE;
@@ -47,23 +48,69 @@ public class StatelessClientTest {
}
}
Set<Thread> threads;
@Test
@Before
public void sampleThreads() {
threads = Thread.getAllStackTraces().keySet();
}
@After
public void checkThreadsShutdown() {
checkThreadsShutdown(threads);
}
public static void checkThreadsShutdown(Set<Thread> threads) {
// give them a change to stop if there were killed.
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
Map<Thread, StackTraceElement[]> threadMap = Thread.getAllStackTraces();
threadMap.keySet().removeAll(threads);
if (!threadMap.isEmpty()) {
System.out.println("### threads still running after the test ###");
for (Map.Entry<Thread, StackTraceElement[]> entry : threadMap.entrySet()) {
System.out.println(entry.getKey());
for (StackTraceElement ste : entry.getValue()) {
System.out.println("\t" + ste);
}
}
try {
for (Thread thread : threadMap.keySet()) {
if (thread.isAlive()) {
System.out.println("Waiting for " + thread);
thread.join(1000);
if (thread.isAlive()) {
System.out.println("Forcing " + thread + " to die");
thread.stop();
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Test(timeout = 10000)
public void testMapForKeyWithEntry() throws IOException, InterruptedException {
try (ChronicleMap<Integer, StringBuilder> serverMap = ChronicleMapBuilder.of(Integer.class,
StringBuilder.class)
int port = s_port++;
try (ChronicleMap<Integer, StringBuilder> serverMap = ChronicleMapBuilder
.of(Integer.class, StringBuilder.class)
.putReturnsNull(true)
.entries(SIZE)
.defaultValue(new StringBuilder())
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
.replication((byte) 2, TcpTransportAndNetworkConfig.of(port))
.create()) {
serverMap.put(10, new StringBuilder("Hello World"));
try (ChronicleMap<Integer, StringBuilder> statelessMap = ChronicleMapBuilder.of(Integer
.class, StringBuilder.class)
.putReturnsNull(true)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
.statelessClient(new InetSocketAddress("localhost", port)).create()) {
String actual = statelessMap.mapForKey(10, ToString.INSTANCE);
@@ -72,21 +119,20 @@ public class StatelessClientTest {
}
}
@Test
@Test(timeout = 10000)
public void testMapForKeyWhenNoEntry() throws IOException, InterruptedException {
try (ChronicleMap<Integer, StringBuilder> serverMap = ChronicleMapBuilder.of(Integer.class,
StringBuilder.class)
int port = s_port++;
try (ChronicleMap<Integer, StringBuilder> serverMap = ChronicleMapBuilder
.of(Integer.class, StringBuilder.class)
.defaultValue(new StringBuilder())
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(port)).create()) {
serverMap.put(10, new StringBuilder("Hello World"));
try (ChronicleMap<Integer, StringBuilder> statelessMap = ChronicleMapBuilder.of(Integer
.class, StringBuilder.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
.statelessClient(new InetSocketAddress("localhost", port)).create()) {
String actual = statelessMap.mapForKey(11, ToString.INSTANCE);
@@ -95,17 +141,19 @@ public class StatelessClientTest {
}
}
@Test(timeout = 5000)
@Test(timeout = 10000)
public void testBufferOverFlowPutAllAndEntrySet() throws IOException, InterruptedException {
int port = s_port++;
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(port))
.create()) {
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", port))
.create()) {
Map<Integer, CharSequence> payload = new HashMap<Integer, CharSequence>();
@@ -113,10 +161,8 @@ public class StatelessClientTest {
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();
@@ -128,17 +174,20 @@ public class StatelessClientTest {
}
}
@Test
@Test(timeout = 10000)
public void testBufferOverFlowPutAllAndValues() throws IOException, InterruptedException {
int port = s_port++;
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(port))
.create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", port))
.create()) {
Map<Integer, CharSequence> payload = new HashMap<Integer, CharSequence>();
@@ -146,64 +195,60 @@ public class StatelessClientTest {
payload.put(i, "some value=" + i);
}
statelessMap.putAll(payload);
Collection<CharSequence> values = statelessMap.values();
assertEquals(values.size(), SIZE);
}
}
}
@Test
@Test(timeout = 10000)
public void testBufferOverFlowPutAllAndKeySet() throws IOException, InterruptedException {
int port = s_port++;
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(port))
.create()) {
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", port))
.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);
final Set<Integer> keys = statelessMap.keySet();
assertEquals(keys.size(), payload.size());
}
}
}
@Test
@Test(timeout = 10000)
public void test() throws IOException, InterruptedException {
int port = s_port++;
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(port))
.create()) {
serverMap.put(10, "EXAMPLE-10");
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
.statelessClient(new InetSocketAddress("localhost", port)).create()) {
assertEquals("EXAMPLE-10", statelessMap.get(10));
assertEquals(1, statelessMap.size());
@@ -211,17 +256,16 @@ public class StatelessClientTest {
}
}
@Test
@Test(timeout = 10000)
public void testClientCreatedBeforeServer() throws IOException, InterruptedException {
int port = s_port++;
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
.replication((byte) 2, TcpTransportAndNetworkConfig.of(port)).create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
.statelessClient(new InetSocketAddress("localhost", port)).create()) {
serverMap.put(10, "EXAMPLE-10");
@@ -230,24 +274,23 @@ public class StatelessClientTest {
}
}
}
@Test
@Test(timeout = 10000)
public void testServerPutStringKeyMap() throws IOException, InterruptedException {
try (ChronicleMap<String, Map> serverMap = ChronicleMapBuilder.of(String.class, Map
.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
try (ChronicleMap<String, Map> statelessMap = ChronicleMapBuilder.of(String.class, Map
.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
try (ChronicleMap<String, Map> serverMap = ChronicleMapBuilder
.of(String.class, Map.class)
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056))
.create()) {
try (ChronicleMap<String, Map> statelessMap = ChronicleMapBuilder
.of(String.class, Map.class)
.statelessClient(new InetSocketAddress("localhost", 8056))
.create()) {
serverMap.put("hello", Collections.singletonMap("hello", "world"));
@@ -256,14 +299,11 @@ public class StatelessClientTest {
}
}
}
@Test
@Test(timeout = 10000)
public void testStringKeyMapPutIntoStatelessMap() throws IOException, InterruptedException {
final Map<String, String> data = new HashMap<String, String>();
@@ -273,13 +313,16 @@ public class StatelessClientTest {
data.put("" + i, value);
}
try (ChronicleMap<String, Map> serverMap = ChronicleMapBuilder.of(String.class, Map
.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
try (ChronicleMap<String, Map> serverMap = ChronicleMapBuilder
.of(String.class, Map.class)
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056))
.create()) {
try (ChronicleMap<String, Map> statelessMap = ChronicleMapBuilder.of(String.class, Map
.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
try (ChronicleMap<String, Map> statelessMap = ChronicleMapBuilder
.of(String.class, Map.class)
.statelessClient(new InetSocketAddress("localhost", 8056))
.create()) {
statelessMap.put("hello", data);
@@ -292,16 +335,18 @@ public class StatelessClientTest {
}
@Test
@Test(timeout = 10000)
public void testBufferOverFlowPutAll() throws IOException, InterruptedException {
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056))
.create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056))
.create()) {
Map<Integer, CharSequence> payload = new HashMap<Integer, CharSequence>();
@@ -309,7 +354,6 @@ public class StatelessClientTest {
payload.put(i, "some value=" + i);
}
statelessMap.putAll(payload);
int value = SIZE - 10;
@@ -321,18 +365,19 @@ public class StatelessClientTest {
}
}
@Test(timeout = 10000)
public void testBufferOverFlowPutAllWherePutReturnsNull() throws IOException, InterruptedException {
@Test
public void testBufferOverFlowPutAllWherePutReturnsNull() throws IOException,
InterruptedException {
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056)).create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder.of(Integer
.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
try (ChronicleMap<Integer, CharSequence> serverMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.entries(SIZE)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(8056))
.create()) {
try (ChronicleMap<Integer, CharSequence> statelessMap = ChronicleMapBuilder
.of(Integer.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056))
.create()) {
Map<Integer, CharSequence> payload = new HashMap<Integer, CharSequence>();
@@ -340,7 +385,6 @@ public class StatelessClientTest {
payload.put(i, "some value=" + i);
}
statelessMap.putAll(payload);
int value = SIZE - 10;
@@ -353,8 +397,7 @@ public class StatelessClientTest {
}
@Test
@Test(timeout = 10000)
public void testPutWherePutReturnsNull() throws IOException,
InterruptedException {
@@ -370,13 +413,11 @@ public class StatelessClientTest {
assertEquals("some value", statelessMap.get(1));
assertEquals(1, statelessMap.size());
}
}
}
@Test
@Test(timeout = 10000)
public void testRemoveWhereRemoveReturnsNull() throws IOException,
InterruptedException {
@@ -387,7 +428,6 @@ public class StatelessClientTest {
.class, CharSequence.class)
.statelessClient(new InetSocketAddress("localhost", 8056)).create()) {
statelessMap.put(1, "some value");
assertEquals("some value", statelessMap.get(1));
@@ -403,8 +443,7 @@ public class StatelessClientTest {
}
@Test
@Test(timeout = 10000)
public void testGetLater() throws IOException,
InterruptedException, ExecutionException {
@@ -430,7 +469,6 @@ public class StatelessClientTest {
}
@Test
public void testPutLater() throws IOException,
InterruptedException, ExecutionException {
@@ -451,8 +489,7 @@ public class StatelessClientTest {
}
@Test
@Test(timeout = 10000)
public void testRemoveLater() throws IOException,
InterruptedException, ExecutionException {
@@ -472,8 +509,7 @@ public class StatelessClientTest {
}
@Test
@Test(timeout = 10000)
public void testEquals() throws IOException, InterruptedException {
final ChronicleMap<Integer, CharSequence> serverMap1;
@@ -481,7 +517,6 @@ public class StatelessClientTest {
final ChronicleMap<Integer, CharSequence> statelessMap1;
final ChronicleMap<Integer, CharSequence> statelessMap2;
// server
{
serverMap1 = ChronicleMapBuilder.of(Integer.class, CharSequence.class)
@@ -491,7 +526,6 @@ public class StatelessClientTest {
}
// stateless client
{
statelessMap1 = ChronicleMapBuilder.of(Integer
@@ -502,7 +536,6 @@ public class StatelessClientTest {
.statelessClient(new InetSocketAddress("localhost", 8077)).create();
}
Map<Integer, CharSequence> payload = new HashMap<Integer, CharSequence>();
for (int i = 0; i < 1000; i++) {
payload.put(i, "some value=" + i);
@@ -511,7 +544,6 @@ public class StatelessClientTest {
statelessMap1.putAll(payload);
Assert.assertTrue(statelessMap1.equals(payload));
statelessMap1.close();
statelessMap2.close();
@@ -519,6 +551,4 @@ public class StatelessClientTest {
serverMap2.close();
}
}