mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-08-02 23:53:38 +00:00
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.
130 lines
4.8 KiB
Groovy
130 lines
4.8 KiB
Groovy
// CAS sample build file
|
|
|
|
apply plugin: 'war'
|
|
apply plugin: 'jetty'
|
|
apply plugin: 'groovy'
|
|
|
|
def excludeModules = ['spring-security-acl', 'jsr250-api', 'spring-jdbc', 'spring-tx']
|
|
def jettyVersion = '7.1.6.v20100715'
|
|
def keystore = "$rootDir/samples/certificates/server.jks"
|
|
def password = 'password'
|
|
|
|
configurations {
|
|
casServer
|
|
excludeModules.each {name ->
|
|
runtime.exclude module: name
|
|
}
|
|
|
|
runtime.exclude group: 'org.aspectj'
|
|
|
|
integrationTestCompile.extendsFrom groovy
|
|
}
|
|
|
|
sourceSets {
|
|
test.resources.exclude 'GebConfig.groovy'
|
|
integrationTest.groovy.srcDir file('src/integration-test/groovy')
|
|
}
|
|
|
|
eclipse.classpath.plusConfigurations += configurations.integrationTestRuntime
|
|
|
|
dependencies {
|
|
groovy 'org.codehaus.groovy:groovy:1.8.7'
|
|
|
|
providedCompile 'javax.servlet:servlet-api:2.5@jar'
|
|
|
|
compile project(':spring-security-core'),
|
|
project(':spring-security-cas-client'),
|
|
"org.jasig.cas.client:cas-client-core:3.1.12"
|
|
|
|
runtime project(':spring-security-web'),
|
|
project(':spring-security-config'),
|
|
"org.slf4j:jcl-over-slf4j:$slf4jVersion",
|
|
"ch.qos.logback:logback-classic:$logbackVersion"
|
|
|
|
integrationTestCompile project(':spring-security-cas-client'),
|
|
'org.seleniumhq.selenium:selenium-htmlunit-driver:2.25.0',
|
|
'org.spockframework:spock-core:0.6-groovy-1.8',
|
|
'org.codehaus.geb:geb-spock:0.7.2',
|
|
'commons-httpclient:commons-httpclient:3.1',
|
|
"org.eclipse.jetty:jetty-server:$jettyVersion",
|
|
"org.eclipse.jetty:jetty-servlet:$jettyVersion"
|
|
}
|
|
|
|
[jettyRun, jettyRunWar]*.configure {
|
|
contextPath = "/cas-sample"
|
|
def httpConnector = jettyRunWar.class.classLoader.loadClass('org.mortbay.jetty.nio.SelectChannelConnector').newInstance()
|
|
httpConnector.port = 8080
|
|
httpConnector.confidentialPort = 8443
|
|
def httpsConnector = jettyRunWar.class.classLoader.loadClass('org.mortbay.jetty.security.SslSocketConnector').newInstance()
|
|
httpsConnector.port = 8443
|
|
httpsConnector.keystore = httpsConnector.truststore = keystore
|
|
httpsConnector.keyPassword = httpsConnector.trustPassword = password
|
|
|
|
connectors = [httpConnector, httpsConnector]
|
|
doFirst() {
|
|
System.setProperty('cas.server.host', casServer().httpsHost)
|
|
System.setProperty('cas.service.host', jettyRunWar.httpsHost)
|
|
}
|
|
}
|
|
|
|
task cas (dependsOn: [jettyRunWar]) {
|
|
jettyRunWar.dependsOn(':spring-security-samples-casserver:casServer')
|
|
}
|
|
|
|
task casServer(dependsOn: ':spring-security-samples-casserver:casServer') {
|
|
}
|
|
|
|
integrationTest.dependsOn cas
|
|
integrationTest.doFirst {
|
|
def casServiceHost = jettyRunWar.httpsHost
|
|
systemProperties['cas.server.host'] = casServer().httpsHost
|
|
systemProperties['cas.service.host'] = casServiceHost
|
|
systemProperties['geb.build.baseUrl'] = 'https://'+casServiceHost+'/cas-sample/'
|
|
systemProperties['geb.build.reportsDir'] = 'build/geb-reports'
|
|
systemProperties['jar.path'] = jar.archivePath
|
|
systemProperties['javax.net.ssl.trustStore'] = keystore
|
|
systemProperties['javax.net.ssl.trustStorePassword'] = password
|
|
}
|
|
|
|
gradle.taskGraph.whenReady {graph ->
|
|
def casServer = casServer()
|
|
[casServer,jettyRunWar]*.metaClass*.getHttpsConnector {->
|
|
def sslSocketConnClass = jettyRunWar.class.classLoader.loadClass('org.mortbay.jetty.security.SslSocketConnector')
|
|
delegate.connectors.find { it in sslSocketConnClass }
|
|
}
|
|
[casServer,jettyRunWar]*.metaClass*.getHttpsHost {->
|
|
"localhost:"+delegate.httpsConnector.port
|
|
}
|
|
jettyRunWar.metaClass.getHttpConnector {->
|
|
def channelConnClass = jettyRunWar.class.classLoader.loadClass('org.mortbay.jetty.nio.SelectChannelConnector')
|
|
delegate.connectors.find { it in channelConnClass }
|
|
}
|
|
if (graph.hasTask(cas)) {
|
|
casServer.daemon = true
|
|
}
|
|
if(graph.hasTask(integrationTest)) {
|
|
tasks.getByPath(':spring-security-samples-casserver:casServerOverlay').logLevel = 'ERROR'
|
|
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')
|
|
}
|