# HG changeset patch # User Zdenek Zambersky # Date 1506525628 -7200 # Node ID 2de9f7a29768c1f6adb69eee35f85f1de826931d # Parent 3055303a670fd8d5119f26a885ede24d98c1a9da Tests: wait for mongodb socket to close before considering it stopped diff -r 3055303a670f -r 2de9f7a29768 tests/test-utils/src/main/java/com/redhat/thermostat/gateway/tests/utils/MongodTestUtil.java --- a/tests/test-utils/src/main/java/com/redhat/thermostat/gateway/tests/utils/MongodTestUtil.java Tue Sep 26 11:41:34 2017 -0400 +++ b/tests/test-utils/src/main/java/com/redhat/thermostat/gateway/tests/utils/MongodTestUtil.java Wed Sep 27 17:20:28 2017 +0200 @@ -50,6 +50,10 @@ import com.mongodb.client.MongoCollection; import com.redhat.thermostat.gateway.common.util.OS; +import java.net.ServerSocket; +import java.net.SocketAddress; +import java.net.InetSocketAddress; + public class MongodTestUtil { private static final int WAIT_FOR_MAX_ITERATIONS = 100; @@ -100,6 +104,7 @@ mongoClient.close(); mongoClient = null; waitForMongodStop(); + waitForSocketToClose(port); finish(); } } @@ -174,6 +179,21 @@ return false; } + private boolean waitForSocketToClose(int port) throws InterruptedException { + for (int i = 0; i < WAIT_FOR_MAX_ITERATIONS; ++i) { + /* Try to bind socket, if it fails, port is still in use */ + try (ServerSocket socket = new ServerSocket()) { + SocketAddress address = new InetSocketAddress(port); + socket.bind(address, 0); + return true; + } catch (IOException e) { + /* ignored */ + } + Thread.sleep(WAIT_FOR_SLEEP_DURATION); + } + return false; + } + public boolean isConnectedToDatabase() { return connectedToDatabase; }