Merge pull request #15382 from rjernst/integ_test_deps

Fix module/integ-test cluster shutdown task ordering
This commit is contained in:
Ryan Ernst 2015-12-10 17:20:11 -08:00
commit 2758099996
1 changed files with 29 additions and 15 deletions

View File

@ -55,22 +55,32 @@ ext.restTestExpansions = [
'expected.modules.count': 0,
]
// we create the buildModules task above so the distribution subprojects can
// depend on it, but we don't actually configure it until projects are evaluated
// so it can depend on the bundling of plugins (ie modules must have been configured)
project.gradle.projectsEvaluated {
// depend on it, but we don't actually configure it until here so we can do a single
// loop over modules to also setup cross task dependencies and increment our modules counter
project.rootProject.subprojects.findAll { it.path.startsWith(':modules:') }.each { Project module ->
buildModules {
dependsOn module.bundlePlugin
dependsOn({ project(module.path).bundlePlugin })
into(module.name) {
from { zipTree(module.bundlePlugin.outputs.files.singleFile) }
from { zipTree(project(module.path).bundlePlugin.outputs.files.singleFile) }
}
}
configure(subprojects.findAll { it.name != 'integ-test-zip' }) { Project distribution ->
distribution.integTest.mustRunAfter(module.integTest)
// We would like to make sure integ tests for the distribution run after
// integ tests for the modules included in the distribution. However, gradle
// has a bug where depending on a task with a finalizer can sometimes not make
// the finalizer task follow the original task immediately. To work around this,
// we make the mustRunAfter the finalizer task itself.
// See https://discuss.gradle.org/t/cross-project-task-dependencies-ordering-screws-up-finalizers/13190
project.configure(project.subprojects.findAll { it.name != 'integ-test-zip' }) { Project distribution ->
distribution.afterEvaluate({
distribution.integTest.mustRunAfter("${module.path}:integTest#stop")
})
}
// also want to make sure the module's integration tests run after the integ-test-zip (ie rest tests)
module.afterEvaluate({
module.integTest.mustRunAfter(':distribution:integ-test-zip:integTest#stop')
})
restTestExpansions['expected.modules.count'] += 1
}
}
// make sure we have a clean task since we aren't a java project, but we have tasks that
// put stuff in the build dir
@ -84,11 +94,15 @@ subprojects {
*****************************************************************************/
apply plugin: 'elasticsearch.rest-test'
project.integTest {
dependsOn(project.assemble)
includePackaged project.name == 'integ-test-zip'
dependsOn project.assemble
cluster {
distribution = project.name
}
if (project.name != 'integ-test-zip') {
includePackaged true
// see note above with module mustRunAfter about why integTest#stop is used here
mustRunAfter ':distribution:integ-test-zip:integTest#stop'
}
}
processTestResources {