1
1
package org.elasticsearch.gradle.vagrant
2
2
3
- import com.carrotsearch.gradle.junit4.RandomizedTestingPlugin
4
3
import org.apache.tools.ant.taskdefs.condition.Os
5
4
import org.elasticsearch.gradle.FileContentsTask
6
5
import org.elasticsearch.gradle.LoggedExec
@@ -43,8 +42,9 @@ class VagrantTestPlugin implements Plugin<Project> {
43
42
/* * Packages onboarded for upgrade tests **/
44
43
static List<String > UPGRADE_FROM_ARCHIVES = [' rpm' , ' deb' ]
45
44
45
+ private static final PACKAGING_CONFIGURATION = ' packaging'
46
46
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 "
48
48
private static final String PLATFORM_TEST_COMMAND = " rm -rf ~/elasticsearch && rsync -r /elasticsearch/ ~/elasticsearch && cd ~/elasticsearch && ./gradlew test integTest"
49
49
50
50
@Override
@@ -53,11 +53,11 @@ class VagrantTestPlugin implements Plugin<Project> {
53
53
// Creates the Vagrant extension for the project
54
54
project. extensions. create(' esvagrant' , VagrantPropertiesExtension , listVagrantBoxes(project))
55
55
56
- // Add required repositories for Bats tests
57
- configureBatsRepositories (project)
56
+ // Add required repositories for packaging tests
57
+ configurePackagingArchiveRepositories (project)
58
58
59
59
// Creates custom configurations for Bats testing files (and associated scripts and archives)
60
- createBatsConfiguration (project)
60
+ createPackagingConfiguration (project)
61
61
62
62
// Creates all the main Vagrant tasks
63
63
createVagrantTasks(project)
@@ -87,7 +87,7 @@ class VagrantTestPlugin implements Plugin<Project> {
87
87
}
88
88
}
89
89
90
- private static void configureBatsRepositories (Project project ) {
90
+ private static void configurePackagingArchiveRepositories (Project project ) {
91
91
RepositoryHandler repos = project. repositories
92
92
93
93
// Try maven central first, it'll have releases before 5.0.0
@@ -102,10 +102,10 @@ class VagrantTestPlugin implements Plugin<Project> {
102
102
}
103
103
}
104
104
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 )
107
107
108
- String upgradeFromVersion = System . getProperty(" tests.packaging.upgradeVersion" );
108
+ String upgradeFromVersion = System . getProperty(" tests.packaging.upgradeVersion" )
109
109
if (upgradeFromVersion == null ) {
110
110
String firstPartOfSeed = project. rootProject. testSeed. tokenize(' :' ). get(0 )
111
111
final long seed = Long . parseUnsignedLong(firstPartOfSeed, 16 )
@@ -120,12 +120,14 @@ class VagrantTestPlugin implements Plugin<Project> {
120
120
} else {
121
121
it = " packages:${ it} "
122
122
}
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' ))
124
125
}
125
126
126
127
UPGRADE_FROM_ARCHIVES . each {
127
128
// 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} " )
129
131
}
130
132
131
133
project. extensions. esvagrant. upgradeFromVersion = upgradeFromVersion
@@ -154,73 +156,66 @@ class VagrantTestPlugin implements Plugin<Project> {
154
156
}
155
157
156
158
private static void createPrepareVagrantTestEnvTask (Project project ) {
157
- File batsDir = new File (" ${ project.buildDir} / ${ BATS } " )
159
+ File packagingDir = new File (project. buildDir, PACKAGING_CONFIGURATION )
158
160
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 ]
163
165
}
164
166
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
169
177
}
170
178
179
+ File batsDir = new File (packagingDir, BATS )
171
180
Copy copyBatsTests = project. tasks. create(' copyBatsTests' , Copy ) {
172
- dependsOn createBatsDirsTask
173
181
into " ${ batsDir} /tests"
174
182
from {
175
183
" ${ project.extensions.esvagrant.batsDir} /tests"
176
184
}
177
185
}
178
186
179
187
Copy copyBatsUtils = project. tasks. create(' copyBatsUtils' , Copy ) {
180
- dependsOn createBatsDirsTask
181
188
into " ${ batsDir} /utils"
182
189
from {
183
190
" ${ project.extensions.esvagrant.batsDir} /utils"
184
191
}
185
192
}
186
193
187
194
// 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.
189
196
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
+ }
204
211
}
205
- }
206
212
}
207
213
}
208
214
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' )
222
216
vagrantSetUpTask. dependsOn ' vagrantCheckVersion'
223
- vagrantSetUpTask. dependsOn copyBatsTests, copyBatsUtils, copyBatsArchives, createVersionFile, createUpgradeFromFile
217
+ vagrantSetUpTask. dependsOn copyPackagingArchives, createVersionFile, createUpgradeFromFile
218
+ vagrantSetUpTask. dependsOn copyBatsTests, copyBatsUtils
224
219
}
225
220
226
221
private static void createPackagingTestTask (Project project ) {
@@ -270,8 +265,8 @@ class VagrantTestPlugin implements Plugin<Project> {
270
265
assert project. tasks. virtualboxCheckVersion != null
271
266
Task virtualboxCheckVersion = project. tasks. virtualboxCheckVersion
272
267
273
- assert project. tasks. setupBats != null
274
- Task setupBats = project. tasks. setupBats
268
+ assert project. tasks. setupPackagingTest != null
269
+ Task setupPackagingTest = project. tasks. setupPackagingTest
275
270
276
271
assert project. tasks. packagingTest != null
277
272
Task packagingTest = project. tasks. packagingTest
@@ -308,7 +303,7 @@ class VagrantTestPlugin implements Plugin<Project> {
308
303
environmentVars vagrantEnvVars
309
304
dependsOn vagrantCheckVersion, virtualboxCheckVersion
310
305
}
311
- update. mustRunAfter(setupBats )
306
+ update. mustRunAfter(setupPackagingTest )
312
307
313
308
/*
314
309
* 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> {
359
354
}
360
355
vagrantSmokeTest. dependsOn(smoke)
361
356
362
- Task packaging = project. tasks. create(" vagrant${ boxTask} #packagingTest " , BatsOverVagrantTask ) {
357
+ Task batsPackagingTest = project. tasks. create(" vagrant${ boxTask} #batsPackagingTest " , BatsOverVagrantTask ) {
363
358
remoteCommand BATS_TEST_COMMAND
364
359
boxName box
365
360
environmentVars vagrantEnvVars
366
- dependsOn up, setupBats
361
+ dependsOn up, setupPackagingTest
367
362
finalizedBy halt
368
363
}
369
364
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)
379
371
}
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)
382
384
}
383
- packaging . doLast {
384
- project. gradle. removeListener(packagingReproListener )
385
+ groovyPackagingTest . doLast {
386
+ project. gradle. removeListener(groovyPackagingReproListener )
385
387
}
386
388
if (project. extensions. esvagrant. boxes. contains(box)) {
387
- packagingTest. dependsOn(packaging )
389
+ packagingTest. dependsOn(groovyPackagingTest )
388
390
}
389
391
390
392
Task platform = project. tasks. create(" vagrant${ boxTask} #platformTest" , VagrantCommandTask ) {
@@ -395,15 +397,7 @@ class VagrantTestPlugin implements Plugin<Project> {
395
397
finalizedBy halt
396
398
args ' --command' , PLATFORM_TEST_COMMAND + " -Dtests.seed=${ -> project.testSeed} "
397
399
}
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)
407
401
platform. doFirst {
408
402
project. gradle. addListener(platformReproListener)
409
403
}
@@ -415,4 +409,16 @@ class VagrantTestPlugin implements Plugin<Project> {
415
409
}
416
410
}
417
411
}
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
+ }
418
424
}
0 commit comments