소스 검색

SEC-2622: Add integration test support to samples

Rob Winch 11 년 전
부모
커밋
82e89db1c8
2개의 변경된 파일62개의 추가작업 그리고 0개의 파일을 삭제
  1. 7 0
      gradle/javaprojects.gradle
  2. 55 0
      gradle/tomcat.gradle

+ 7 - 0
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",

+ 55 - 0
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
 }