diff --git a/gradle/javaprojects.gradle b/gradle/javaprojects.gradle index 67cf5ccf8e..0d58284fbb 100644 --- a/gradle/javaprojects.gradle +++ b/gradle/javaprojects.gradle @@ -38,6 +38,13 @@ ext.spockDependencies = [ } ] +ext.gebDependencies = spockDependencies + [ + "org.seleniumhq.selenium:selenium-htmlunit-driver:$seleniumVersion", + "org.gebish:geb-spock:$gebVersion", + 'commons-httpclient:commons-httpclient:3.1', + "org.codehaus.groovy:groovy:$groovyVersion" +] + ext.powerMockDependencies = [ "org.powermock:powermock-core:$powerMockVersion", "org.powermock:powermock-api-support:$powerMockVersion", diff --git a/gradle/tomcat.gradle b/gradle/tomcat.gradle index 9260c97337..4f71ad3a2b 100644 --- a/gradle/tomcat.gradle +++ b/gradle/tomcat.gradle @@ -1,3 +1,12 @@ +buildscript { + repositories { + maven { url "https://repo.spring.io/plugins-release" } + } + dependencies { + classpath("org.gradle.api.plugins:gradle-tomcat-plugin:1.2.3") + } +} + apply plugin: 'tomcat' dependencies { @@ -7,4 +16,50 @@ dependencies { tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") { exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj' } +} + +task integrationTomcatRun(type: org.gradle.api.plugins.tomcat.tasks.TomcatRun) { + onlyIf { !sourceSets.integrationTest.allSource.empty } + buildscriptClasspath = tomcatRun.buildscriptClasspath + classesDirectory = project.sourceSets.main.output.classesDir + contextPath = tomcatRun.contextPath + daemon = true + tomcatClasspath = tomcatRun.tomcatClasspath + webAppClasspath = tomcatRun.webAppClasspath + webAppSourceDirectory = tomcatRun.webAppSourceDirectory + doFirst { + + // delay reserving ports to ensure they are still available + def ports = reservePorts(3) + httpPort = ports[0] + ajpPort = ports[1] + stopPort = ports[2] + } +} + +task integrationTomcatStop(type: org.gradle.api.plugins.tomcat.tasks.TomcatStop) { + onlyIf { !sourceSets.integrationTest.allSource.empty } + doFirst { + stopPort = integrationTomcatRun.stopPort + } +} + +integrationTest { + dependsOn integrationTomcatRun + doFirst { + def host = 'localhost:' + integrationTomcatRun.httpPort + systemProperties['geb.build.baseUrl'] = 'http://'+host+'/' + integrationTomcatRun.contextPath + '/' + systemProperties['geb.build.reportsDir'] = 'build/geb-reports' + } + finalizedBy integrationTomcatStop +} + +def reservePorts(int count) { + def sockets = [] + for(int i in 1..count) { + sockets << new ServerSocket(0) + } + def result = sockets*.localPort + sockets*.close() + result } \ No newline at end of file