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.
This commit is contained in:
parent
6cea2694dc
commit
78cbdd2c93
|
@ -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 {
|
||||
additionalRuntimeJars += file("src/integration-test/resources")
|
||||
daemon = true
|
||||
}
|
||||
|
||||
jettyRunWar.daemon = true
|
||||
jettyRunWar.httpConnector.port = availablePort()
|
||||
jettyRunWar.httpsConnector.port = jettyRunWar.httpConnector.confidentialPort = availablePort()
|
||||
casServer.httpsConnector.port = availablePort()
|
||||
[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
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue