11package org.elasticsearch.gradle.vagrant
22
3- import com.carrotsearch.gradle.junit4.RandomizedTestingPlugin
43import org.apache.tools.ant.taskdefs.condition.Os
54import org.elasticsearch.gradle.FileContentsTask
65import 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}
0 commit comments