Start using the nebula-test plugin for integration testing

Also adding an integration test which actually verifies the production of a tar
file

See <https://github.com/nebula-plugins/nebula-test>
This commit is contained in:
R. Tyler Croy 2015-07-03 08:47:25 -07:00
parent 82b13201ae
commit 9611606b31
No known key found for this signature in database
GPG Key ID: 1426C7DC3F51E16F
4 changed files with 76 additions and 53 deletions

View File

@ -10,6 +10,7 @@ buildscript {
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1"
classpath "com.gradle.publish:plugin-publish-plugin:0.9.0"
classpath 'org.ysb33r.gradle:gradletest:0.5.3'
classpath "com.netflix.nebula:nebula-project-plugin:2.2.1"
}
}
@ -20,6 +21,7 @@ apply plugin: 'idea'
apply plugin: "com.jfrog.bintray"
apply plugin: "com.gradle.plugin-publish"
apply plugin: 'org.ysb33r.gradletest'
apply plugin: 'nebula.nebula-integtest'
version = '0.4.0'
group = 'com.github.lookout'
@ -29,8 +31,6 @@ description = 'Gradle plugin for building a prim and proper Lookout service arti
// Dependency management
////////////////////////
configurations {
integrationCompile.extendsFrom testCompile
integrationRuntime.extendsFrom testRuntime
gradleTest.extendsFrom compile
}
@ -75,22 +75,20 @@ dependencies {
exclude module: 'groovy-all'
}
testCompile 'cglib:cglib-nodep:2.2.+'
integTestCompile('com.netflix.nebula:nebula-test:2.2.2+') {
/* the nebula-test dependency pulls in a conflicting version of Groovy
* so let's use the one we already have sitting around
*/
exclude module: 'groovy-all'
}
}
////////////////////////
// Tasks
////////
sourceSets {
integration {
groovy {
srcDir file('src/integration/groovy')
}
runtimeClasspath += main.output
}
}
test {
maxParallelForks 2
testLogging {
@ -101,19 +99,6 @@ test {
events "passed", "skipped", "failed", "standardOut", "standardError"
}
}
task integrationTest(type: Test) {
maxParallelForks 2
testClassesDir = sourceSets.integration.output.classesDir
classpath = sourceSets.integration.runtimeClasspath
testLogging {
/* we want more test failure information, see:
* <http://mrhaki.blogspot.com/2013/05/gradle-goodness-show-more-information.html>
*/
exceptionFormat = 'full'
events "passed", "skipped", "failed", "standardOut", "standardError"
}
}
check.dependsOn integrationTest
/* Whenever we're building an artifact, we should run the tests */
@ -129,6 +114,14 @@ gradleTest {
dependsOn jar
}
integrationTest.testLogging {
/* we want more test failure information, see:
* <http://mrhaki.blogspot.com/2013/05/gradle-goodness-show-more-information.html>
*/
exceptionFormat = 'full'
events "passed", "skipped", "failed", "standardOut", "standardError"
}
codenarc {
sourceSets = [sourceSets.main]
configFile = file('gradle/codenarc.xml')

View File

@ -7,9 +7,12 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/groovy" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/integTest/groovy" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/integTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/groovy" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/integTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
<excludeFolder url="file://$MODULE_DIR$/build" />
@ -17,6 +20,14 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="Gradle: org.ajoberstar:grgit:1.1.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.asciidoctor:asciidoctor-gradle-plugin:1.5.2" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.netflix.nebula:gradle-dependency-lock-plugin:2.2.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.github.jruby-gradle:jruby-gradle-plugin:0.3.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.github.jruby-gradle:jruby-gradle-jar-plugin:0.3.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.github.jengelman.gradle.plugins:shadow:1.2.1" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.fasterxml.jackson.core:jackson-annotations:2.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.fasterxml.jackson.core:jackson-databind:2.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.eclipse.jgit:org.eclipse.jgit:3.7.0.201502260915-r" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.eclipse.jgit:org.eclipse.jgit.ui:3.7.0.201502260915-r" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.jcraft:jsch.agentproxy.jsch:0.0.7" level="project" />
@ -25,28 +36,24 @@
<orderEntry type="library" exported="" name="Gradle: com.jcraft:jsch.agentproxy.usocket-jna:0.0.7" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.jcraft:jsch.agentproxy.usocket-nc:0.0.7" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.slf4j:slf4j-api:1.7.7" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.netflix.nebula:gradle-scm-plugin:2.2.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.jdom:jdom2:2.0.5" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.ow2.asm:asm:5.0.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.ow2.asm:asm-commons:5.0.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: commons-io:commons-io:2.4" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.apache.ant:ant:1.9.4" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.fasterxml.jackson.core:jackson-core:2.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.jcraft:jsch:0.1.50" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.googlecode.javaewah:JavaEWAH:0.7.9" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.apache.httpcomponents:httpclient:4.1.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.jcraft:jsch.agentproxy.core:0.0.7" level="project" />
<orderEntry type="library" exported="" name="Gradle: net.java.dev.jna:jna:3.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: net.java.dev.jna:platform:3.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.ow2.asm:asm-tree:5.0.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.apache.ant:ant-launcher:1.9.4" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.apache.httpcomponents:httpcore:4.1.4" level="project" />
<orderEntry type="library" exported="" name="Gradle: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" exported="" name="Gradle: commons-codec:commons-codec:1.4" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.spockframework:spock-core:1.0-groovy-2.3" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: cglib:cglib-nodep:2.2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.asciidoctor:asciidoctor-gradle-plugin:1.5.2" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.github.jengelman.gradle.plugins:shadow:1.2.1" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.jdom:jdom2:2.0.5" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.ow2.asm:asm:5.0.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.ow2.asm:asm-commons:5.0.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: commons-io:commons-io:2.4" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.apache.ant:ant:1.9.4" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.ow2.asm:asm-tree:5.0.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: org.apache.ant:ant-launcher:1.9.4" level="project" />
<orderEntry type="module-library" exported="">
<library name="Gradle: gradle-core-2.0">
<CLASSES>
@ -1332,13 +1339,9 @@
</SOURCES>
</library>
</orderEntry>
<orderEntry type="library" exported="" name="Gradle: com.github.jruby-gradle:jruby-gradle-plugin:0.3.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.github.jruby-gradle:jruby-gradle-jar-plugin:0.3.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.netflix.nebula:gradle-dependency-lock-plugin:2.2.3" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.netflix.nebula:gradle-scm-plugin:2.2.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.fasterxml.jackson.core:jackson-core:2.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.fasterxml.jackson.core:jackson-annotations:2.4.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: com.fasterxml.jackson.core:jackson-databind:2.4.0" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.spockframework:spock-core:1.0-groovy-2.3" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: cglib:cglib-nodep:2.2.2" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" />
</component>
</module>

View File

@ -6,21 +6,20 @@ import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.testfixtures.ProjectBuilder
import nebula.test.PluginProjectSpec
import nebula.test.IntegrationSpec
import com.github.jrubygradle.jar.JRubyJar
/**
* Verify that the end-to-end JRuby support works
*/
class JRubyIntegrationSpec extends Specification {
protected Project project
class JRubyIntegrationSpec extends PluginProjectSpec {
protected String serviceName = 'faas'
protected String componentName = 'backend'
protected String version = '1.1'
protected String version = '1.1'
void setup() {
project = ProjectBuilder.builder().build()
project.apply plugin: 'com.github.lookout.service-artifact'
}
String getPluginName() { 'com.github.lookout.service-artifact' }
boolean hasJRubyPlugins(Project project) {
return (project.plugins.findPlugin('com.github.jruby-gradle.base') &&
@ -28,6 +27,7 @@ class JRubyIntegrationSpec extends Specification {
}
void enableJRuby() {
project.apply plugin: this.pluginName
project.version = version
project.service {
name this.serviceName
@ -59,4 +59,31 @@ class JRubyIntegrationSpec extends Specification {
config
config.artifacts.find { it.archiveTask instanceof JRubyJar }
}
}
class JRubyFullIntegrationSpec extends IntegrationSpec {
def "the assemble task should produce a tar"() {
given:
String version = '1.0'
String projectName = 'fullinteg'
settingsFile << "rootProject.name = '${projectName}'"
buildFile << """
apply plugin: 'com.github.lookout.service-artifact'
version = '${version}'
service {
name '${projectName}'
component('api', type: JRuby) { }
}
"""
/* XXX: why do I have to make the buildDir myself? */
directory('build')
expect:
runTasksSuccessfully('assemble')
fileExists("build/distributions/${projectName}-${version}.tar")
}
}