소스 검색

Reserve Server Ports in integrationTests

Previously the build would look up a server port dynamically, but since
it closed the port immediately it may not be reserved by the time jetty
started up.

We now reserve the port and do not close it till just before Jetty starts.
While there is still a race condition, it is much smaller window of time
than it was previously.
Rob Winch 12 년 전
부모
커밋
78cbdd2c93
1개의 변경된 파일18개의 추가작업 그리고 14개의 파일을 삭제
  1. 18 14
      samples/cas/sample/cassample.gradle

+ 18 - 14
samples/cas/sample/cassample.gradle

@@ -104,22 +104,26 @@ gradle.taskGraph.whenReady {graph ->
     }
     if(graph.hasTask(integrationTest)) {
         tasks.getByPath(':spring-security-samples-casserver:casServerOverlay').logLevel = 'ERROR'
-        jettyRunWar.additionalRuntimeJars += file("src/integration-test/resources")
-
-        jettyRunWar.daemon = true
-        jettyRunWar.httpConnector.port = availablePort()
-        jettyRunWar.httpsConnector.port = jettyRunWar.httpConnector.confidentialPort = availablePort()
-        casServer.httpsConnector.port = availablePort()
+        jettyRunWar {
+            additionalRuntimeJars += file("src/integration-test/resources")
+            daemon = true
+        }
+
+        [jettyRunWar.httpConnector,jettyRunWar.httpsConnector,casServer.httpsConnector]*.metaClass*.reservePort { taskToCloseSocket ->
+            def serverSocket = new ServerSocket(0)
+            delegate.metaClass.serverSocket = serverSocket
+            delegate.port = serverSocket.localPort
+            taskToCloseSocket.doFirst {
+                serverSocket.close()
+            }
+        }
+
+        [jettyRunWar.httpConnector,jettyRunWar.httpsConnector]*.reservePort(jettyRunWar)
+        jettyRunWar.httpConnector.confidentialPort = jettyRunWar.httpsConnector.port
+        casServer.httpsConnector.reservePort(casServer)
     }
 }
 
 def casServer() {
     tasks.getByPath(':spring-security-samples-casserver:casServer')
-}
-
-def availablePort() {
-    ServerSocket server = new ServerSocket(0)
-    int port = server.localPort
-    server.close()
-    port
-}
+}