Skip to content

Commit 22964d2

Browse files
committed
[test] packaging: gradle tasks for groovy tests (#29046)
The vagrant test plugin adds tasks for the groovy packaging tests, which run after the bats packaging test tasks.Rename the 'bats' configuration to 'packaging' and remove the option to inherit archives from this configuration.
1 parent a136eae commit 22964d2

File tree

5 files changed

+95
-96
lines changed

5 files changed

+95
-96
lines changed

TESTING.asciidoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -414,16 +414,16 @@ and in another window:
414414

415415
----------------------------------------------------
416416
vagrant up centos-7 --provider virtualbox && vagrant ssh centos-7
417-
cd $BATS_ARCHIVES
417+
cd $PACKAGING_ARCHIVES
418418
sudo -E bats $BATS_TESTS/*rpm*.bats
419419
----------------------------------------------------
420420

421421
If you wanted to retest all the release artifacts on a single VM you could:
422422

423423
-------------------------------------------------
424-
./gradlew setupBats
424+
./gradlew setupPackagingTest
425425
cd qa/vagrant; vagrant up ubuntu-1404 --provider virtualbox && vagrant ssh ubuntu-1404
426-
cd $BATS_ARCHIVES
426+
cd $PACKAGING_ARCHIVES
427427
sudo -E bats $BATS_TESTS/*.bats
428428
-------------------------------------------------
429429

Vagrantfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,9 @@ export TAR=/elasticsearch/distribution/tar/build/distributions
334334
export RPM=/elasticsearch/distribution/rpm/build/distributions
335335
export DEB=/elasticsearch/distribution/deb/build/distributions
336336
export BATS=/project/build/bats
337-
export BATS_UTILS=/project/build/bats/utils
338-
export BATS_TESTS=/project/build/bats/tests
339-
export BATS_ARCHIVES=/project/build/bats/archives
337+
export BATS_UTILS=/project/build/packaging/bats/utils
338+
export BATS_TESTS=/project/build/packaging/bats/tests
339+
export PACKAGING_ARCHIVES=/project/build/packaging/archives
340340
VARS
341341
cat \<\<SUDOERS_VARS > /etc/sudoers.d/elasticsearch_vars
342342
Defaults env_keep += "ZIP"
@@ -346,7 +346,7 @@ Defaults env_keep += "DEB"
346346
Defaults env_keep += "BATS"
347347
Defaults env_keep += "BATS_UTILS"
348348
Defaults env_keep += "BATS_TESTS"
349-
Defaults env_keep += "BATS_ARCHIVES"
349+
Defaults env_keep += "PACKAGING_ARCHIVES"
350350
SUDOERS_VARS
351351
chmod 0440 /etc/sudoers.d/elasticsearch_vars
352352
SHELL

buildSrc/src/main/groovy/org/elasticsearch/gradle/vagrant/VagrantPropertiesExtension.groovy

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ class VagrantPropertiesExtension {
3737
@Input
3838
Boolean inheritTests
3939

40-
@Input
41-
Boolean inheritTestArchives
42-
4340
@Input
4441
Boolean inheritTestUtils
4542

@@ -60,10 +57,6 @@ class VagrantPropertiesExtension {
6057
this.inheritTests = inheritTests
6158
}
6259

63-
void setInheritTestArchives(Boolean inheritTestArchives) {
64-
this.inheritTestArchives = inheritTestArchives
65-
}
66-
6760
void setInheritTestUtils(Boolean inheritTestUtils) {
6861
this.inheritTestUtils = inheritTestUtils
6962
}

buildSrc/src/main/groovy/org/elasticsearch/gradle/vagrant/VagrantTestPlugin.groovy

Lines changed: 86 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.elasticsearch.gradle.vagrant
22

3-
import com.carrotsearch.gradle.junit4.RandomizedTestingPlugin
43
import org.apache.tools.ant.taskdefs.condition.Os
54
import org.elasticsearch.gradle.FileContentsTask
65
import org.elasticsearch.gradle.LoggedExec
@@ -43,8 +42,9 @@ class VagrantTestPlugin implements Plugin<Project> {
4342
/** Packages onboarded for upgrade tests **/
4443
static List<String> UPGRADE_FROM_ARCHIVES = ['rpm', 'deb']
4544

45+
private static final PACKAGING_CONFIGURATION = 'packaging'
4646
private static final BATS = 'bats'
47-
private static final String BATS_TEST_COMMAND ="cd \$BATS_ARCHIVES && sudo bats --tap \$BATS_TESTS/*.$BATS"
47+
private static final String BATS_TEST_COMMAND ="cd \$PACKAGING_ARCHIVES && sudo bats --tap \$BATS_TESTS/*.$BATS"
4848
private static final String PLATFORM_TEST_COMMAND ="rm -rf ~/elasticsearch && rsync -r /elasticsearch/ ~/elasticsearch && cd ~/elasticsearch && ./gradlew test integTest"
4949

5050
@Override
@@ -53,11 +53,11 @@ class VagrantTestPlugin implements Plugin<Project> {
5353
// Creates the Vagrant extension for the project
5454
project.extensions.create('esvagrant', VagrantPropertiesExtension, listVagrantBoxes(project))
5555

56-
// Add required repositories for Bats tests
57-
configureBatsRepositories(project)
56+
// Add required repositories for packaging tests
57+
configurePackagingArchiveRepositories(project)
5858

5959
// Creates custom configurations for Bats testing files (and associated scripts and archives)
60-
createBatsConfiguration(project)
60+
createPackagingConfiguration(project)
6161

6262
// Creates all the main Vagrant tasks
6363
createVagrantTasks(project)
@@ -87,7 +87,7 @@ class VagrantTestPlugin implements Plugin<Project> {
8787
}
8888
}
8989

90-
private static void configureBatsRepositories(Project project) {
90+
private static void configurePackagingArchiveRepositories(Project project) {
9191
RepositoryHandler repos = project.repositories
9292

9393
// Try maven central first, it'll have releases before 5.0.0
@@ -102,10 +102,10 @@ class VagrantTestPlugin implements Plugin<Project> {
102102
}
103103
}
104104

105-
private static void createBatsConfiguration(Project project) {
106-
project.configurations.create(BATS)
105+
private static void createPackagingConfiguration(Project project) {
106+
project.configurations.create(PACKAGING_CONFIGURATION)
107107

108-
String upgradeFromVersion = System.getProperty("tests.packaging.upgradeVersion");
108+
String upgradeFromVersion = System.getProperty("tests.packaging.upgradeVersion")
109109
if (upgradeFromVersion == null) {
110110
String firstPartOfSeed = project.rootProject.testSeed.tokenize(':').get(0)
111111
final long seed = Long.parseUnsignedLong(firstPartOfSeed, 16)
@@ -120,12 +120,14 @@ class VagrantTestPlugin implements Plugin<Project> {
120120
} else {
121121
it = "packages:${it}"
122122
}
123-
project.dependencies.add(BATS, project.dependencies.project(path: ":distribution:${it}", configuration: 'default'))
123+
project.dependencies.add(PACKAGING_CONFIGURATION,
124+
project.dependencies.project(path: ":distribution:${it}", configuration: 'default'))
124125
}
125126

126127
UPGRADE_FROM_ARCHIVES.each {
127128
// The version of elasticsearch that we upgrade *from*
128-
project.dependencies.add(BATS, "org.elasticsearch.distribution.${it}:elasticsearch:${upgradeFromVersion}@${it}")
129+
project.dependencies.add(PACKAGING_CONFIGURATION,
130+
"org.elasticsearch.distribution.${it}:elasticsearch:${upgradeFromVersion}@${it}")
129131
}
130132

131133
project.extensions.esvagrant.upgradeFromVersion = upgradeFromVersion
@@ -154,73 +156,66 @@ class VagrantTestPlugin implements Plugin<Project> {
154156
}
155157

156158
private static void createPrepareVagrantTestEnvTask(Project project) {
157-
File batsDir = new File("${project.buildDir}/${BATS}")
159+
File packagingDir = new File(project.buildDir, PACKAGING_CONFIGURATION)
158160

159-
Task createBatsDirsTask = project.tasks.create('createBatsDirs')
160-
createBatsDirsTask.outputs.dir batsDir
161-
createBatsDirsTask.doLast {
162-
batsDir.mkdirs()
161+
File archivesDir = new File(packagingDir, 'archives')
162+
Copy copyPackagingArchives = project.tasks.create('copyPackagingArchives', Copy) {
163+
into archivesDir
164+
from project.configurations[PACKAGING_CONFIGURATION]
163165
}
164166

165-
Copy copyBatsArchives = project.tasks.create('copyBatsArchives', Copy) {
166-
dependsOn createBatsDirsTask
167-
into "${batsDir}/archives"
168-
from project.configurations[BATS]
167+
Task createVersionFile = project.tasks.create('createVersionFile', FileContentsTask) {
168+
dependsOn copyPackagingArchives
169+
file "${archivesDir}/version"
170+
contents project.version
171+
}
172+
173+
Task createUpgradeFromFile = project.tasks.create('createUpgradeFromFile', FileContentsTask) {
174+
dependsOn copyPackagingArchives
175+
file "${archivesDir}/upgrade_from_version"
176+
contents project.extensions.esvagrant.upgradeFromVersion
169177
}
170178

179+
File batsDir = new File(packagingDir, BATS)
171180
Copy copyBatsTests = project.tasks.create('copyBatsTests', Copy) {
172-
dependsOn createBatsDirsTask
173181
into "${batsDir}/tests"
174182
from {
175183
"${project.extensions.esvagrant.batsDir}/tests"
176184
}
177185
}
178186

179187
Copy copyBatsUtils = project.tasks.create('copyBatsUtils', Copy) {
180-
dependsOn createBatsDirsTask
181188
into "${batsDir}/utils"
182189
from {
183190
"${project.extensions.esvagrant.batsDir}/utils"
184191
}
185192
}
186193

187194
// Now we iterate over dependencies of the bats configuration. When a project dependency is found,
188-
// we bring back its own archives, test files or test utils.
195+
// we bring back its test files or test utils.
189196
project.afterEvaluate {
190-
project.configurations.bats.dependencies.findAll {it.targetConfiguration == BATS }.each { d ->
191-
if (d instanceof DefaultProjectDependency) {
192-
DefaultProjectDependency externalBatsDependency = (DefaultProjectDependency) d
193-
Project externalBatsProject = externalBatsDependency.dependencyProject
194-
String externalBatsDir = externalBatsProject.extensions.esvagrant.batsDir
195-
196-
if (project.extensions.esvagrant.inheritTests) {
197-
copyBatsTests.from(externalBatsProject.files("${externalBatsDir}/tests"))
198-
}
199-
if (project.extensions.esvagrant.inheritTestArchives) {
200-
copyBatsArchives.from(externalBatsDependency.projectConfiguration.files)
201-
}
202-
if (project.extensions.esvagrant.inheritTestUtils) {
203-
copyBatsUtils.from(externalBatsProject.files("${externalBatsDir}/utils"))
197+
project.configurations[PACKAGING_CONFIGURATION].dependencies
198+
.findAll {it.targetConfiguration == PACKAGING_CONFIGURATION }
199+
.each { d ->
200+
if (d instanceof DefaultProjectDependency) {
201+
DefaultProjectDependency externalBatsDependency = (DefaultProjectDependency) d
202+
Project externalBatsProject = externalBatsDependency.dependencyProject
203+
String externalBatsDir = externalBatsProject.extensions.esvagrant.batsDir
204+
205+
if (project.extensions.esvagrant.inheritTests) {
206+
copyBatsTests.from(externalBatsProject.files("${externalBatsDir}/tests"))
207+
}
208+
if (project.extensions.esvagrant.inheritTestUtils) {
209+
copyBatsUtils.from(externalBatsProject.files("${externalBatsDir}/utils"))
210+
}
204211
}
205-
}
206212
}
207213
}
208214

209-
Task createVersionFile = project.tasks.create('createVersionFile', FileContentsTask) {
210-
dependsOn createBatsDirsTask
211-
file "${batsDir}/archives/version"
212-
contents project.version
213-
}
214-
215-
Task createUpgradeFromFile = project.tasks.create('createUpgradeFromFile', FileContentsTask) {
216-
dependsOn createBatsDirsTask
217-
file "${batsDir}/archives/upgrade_from_version"
218-
contents project.extensions.esvagrant.upgradeFromVersion
219-
}
220-
221-
Task vagrantSetUpTask = project.tasks.create('setupBats')
215+
Task vagrantSetUpTask = project.tasks.create('setupPackagingTest')
222216
vagrantSetUpTask.dependsOn 'vagrantCheckVersion'
223-
vagrantSetUpTask.dependsOn copyBatsTests, copyBatsUtils, copyBatsArchives, createVersionFile, createUpgradeFromFile
217+
vagrantSetUpTask.dependsOn copyPackagingArchives, createVersionFile, createUpgradeFromFile
218+
vagrantSetUpTask.dependsOn copyBatsTests, copyBatsUtils
224219
}
225220

226221
private static void createPackagingTestTask(Project project) {
@@ -270,8 +265,8 @@ class VagrantTestPlugin implements Plugin<Project> {
270265
assert project.tasks.virtualboxCheckVersion != null
271266
Task virtualboxCheckVersion = project.tasks.virtualboxCheckVersion
272267

273-
assert project.tasks.setupBats != null
274-
Task setupBats = project.tasks.setupBats
268+
assert project.tasks.setupPackagingTest != null
269+
Task setupPackagingTest = project.tasks.setupPackagingTest
275270

276271
assert project.tasks.packagingTest != null
277272
Task packagingTest = project.tasks.packagingTest
@@ -308,7 +303,7 @@ class VagrantTestPlugin implements Plugin<Project> {
308303
environmentVars vagrantEnvVars
309304
dependsOn vagrantCheckVersion, virtualboxCheckVersion
310305
}
311-
update.mustRunAfter(setupBats)
306+
update.mustRunAfter(setupPackagingTest)
312307

313308
/*
314309
* Destroying before every execution can be annoying while iterating on tests locally. Therefore, we provide a flag
@@ -359,32 +354,39 @@ class VagrantTestPlugin implements Plugin<Project> {
359354
}
360355
vagrantSmokeTest.dependsOn(smoke)
361356

362-
Task packaging = project.tasks.create("vagrant${boxTask}#packagingTest", BatsOverVagrantTask) {
357+
Task batsPackagingTest = project.tasks.create("vagrant${boxTask}#batsPackagingTest", BatsOverVagrantTask) {
363358
remoteCommand BATS_TEST_COMMAND
364359
boxName box
365360
environmentVars vagrantEnvVars
366-
dependsOn up, setupBats
361+
dependsOn up, setupPackagingTest
367362
finalizedBy halt
368363
}
369364

370-
TaskExecutionAdapter packagingReproListener = new TaskExecutionAdapter() {
371-
@Override
372-
void afterExecute(Task task, TaskState state) {
373-
final String gradlew = Os.isFamily(Os.FAMILY_WINDOWS) ? "gradlew" : "./gradlew"
374-
if (state.failure != null) {
375-
println "REPRODUCE WITH: ${gradlew} ${packaging.path} " +
376-
"-Dtests.seed=${project.testSeed} "
377-
}
378-
}
365+
TaskExecutionAdapter batsPackagingReproListener = createReproListener(project, batsPackagingTest.path)
366+
batsPackagingTest.doFirst {
367+
project.gradle.addListener(batsPackagingReproListener)
368+
}
369+
batsPackagingTest.doLast {
370+
project.gradle.removeListener(batsPackagingReproListener)
379371
}
380-
packaging.doFirst {
381-
project.gradle.addListener(packagingReproListener)
372+
if (project.extensions.esvagrant.boxes.contains(box)) {
373+
packagingTest.dependsOn(batsPackagingTest)
374+
}
375+
376+
// This task doesn't do anything yet. In the future it will execute a jar containing tests on the vm
377+
Task groovyPackagingTest = project.tasks.create("vagrant${boxTask}#groovyPackagingTest")
378+
groovyPackagingTest.dependsOn(up)
379+
groovyPackagingTest.finalizedBy(halt)
380+
381+
TaskExecutionAdapter groovyPackagingReproListener = createReproListener(project, groovyPackagingTest.path)
382+
groovyPackagingTest.doFirst {
383+
project.gradle.addListener(groovyPackagingReproListener)
382384
}
383-
packaging.doLast {
384-
project.gradle.removeListener(packagingReproListener)
385+
groovyPackagingTest.doLast {
386+
project.gradle.removeListener(groovyPackagingReproListener)
385387
}
386388
if (project.extensions.esvagrant.boxes.contains(box)) {
387-
packagingTest.dependsOn(packaging)
389+
packagingTest.dependsOn(groovyPackagingTest)
388390
}
389391

390392
Task platform = project.tasks.create("vagrant${boxTask}#platformTest", VagrantCommandTask) {
@@ -395,15 +397,7 @@ class VagrantTestPlugin implements Plugin<Project> {
395397
finalizedBy halt
396398
args '--command', PLATFORM_TEST_COMMAND + " -Dtests.seed=${-> project.testSeed}"
397399
}
398-
TaskExecutionAdapter platformReproListener = new TaskExecutionAdapter() {
399-
@Override
400-
void afterExecute(Task task, TaskState state) {
401-
if (state.failure != null) {
402-
println "REPRODUCE WITH: gradle ${platform.path} " +
403-
"-Dtests.seed=${project.testSeed} "
404-
}
405-
}
406-
}
400+
TaskExecutionAdapter platformReproListener = createReproListener(project, platform.path)
407401
platform.doFirst {
408402
project.gradle.addListener(platformReproListener)
409403
}
@@ -415,4 +409,16 @@ class VagrantTestPlugin implements Plugin<Project> {
415409
}
416410
}
417411
}
412+
413+
private static TaskExecutionAdapter createReproListener(Project project, String reproTaskPath) {
414+
return new TaskExecutionAdapter() {
415+
@Override
416+
void afterExecute(Task task, TaskState state) {
417+
final String gradlew = Os.isFamily(Os.FAMILY_WINDOWS) ? "gradlew" : "./gradlew"
418+
if (state.failure != null) {
419+
println "REPRODUCE WITH: ${gradlew} ${reproTaskPath} -Dtests.seed=${project.testSeed} "
420+
}
421+
}
422+
}
423+
}
418424
}

qa/vagrant/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ for (Project subproj : project.rootProject.subprojects) {
2525
if (subproj.path.startsWith(':plugins:') || subproj.path.equals(':example-plugins:custom-settings')) {
2626
// add plugin as a dep
2727
dependencies {
28-
bats project(path: "${subproj.path}", configuration: 'zip')
28+
packaging project(path: "${subproj.path}", configuration: 'zip')
2929
}
3030
plugins.add(subproj.name)
3131
}
3232
}
3333
plugins = plugins.toSorted()
3434

35-
setupBats {
35+
setupPackagingTest {
3636
doFirst {
3737
File expectedPlugins = file('build/plugins/expected')
3838
expectedPlugins.parentFile.mkdirs()

0 commit comments

Comments
 (0)