Randomize the port number to avoid race condition in REST unit test
Change-Id: Ib1b3bd5f16c7642af47b01d7a7930cae238fa71b
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/ResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/ResourceTest.java
index 1d2bb12..465f25c 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/ResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/ResourceTest.java
@@ -18,15 +18,39 @@
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
+import java.io.IOException;
+import java.net.ServerSocket;
+
/**
* Base class for REST API tests. Performs common configuration operations.
*/
public class ResourceTest extends JerseyTest {
+ private static final int DEFAULT_PORT = 9998;
/**
* Creates a new web-resource test.
*/
public ResourceTest() {
super(ResourceConfig.forApplicationClass(CoreWebApplication.class));
+ this.set("jersey.config.test.container.port", getRandomPort(DEFAULT_PORT));
+ }
+
+ /**
+ * Returns an unused port number to make sure that each unit test runs in
+ * different port number.
+ *
+ * @param defaultPort default port number
+ * @return a randomized unique port number
+ */
+ private int getRandomPort(int defaultPort) {
+ try {
+ ServerSocket socket = new ServerSocket(0);
+ socket.setReuseAddress(true);
+ int port = socket.getLocalPort();
+ socket.close();
+ return port;
+ } catch (IOException ioe) {
+ return defaultPort;
+ }
}
}