changeset 267:2de9f7a29768

Tests: wait for mongodb socket to close before considering it stopped
author Zdenek Zambersky <zzambers@redhat.com>
date Wed, 27 Sep 2017 17:20:28 +0200
parents 3055303a670f
children e159ff4b557f
files tests/test-utils/src/main/java/com/redhat/thermostat/gateway/tests/utils/MongodTestUtil.java
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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;
     }