11package org.elasticsearch.gradle.vagrant
22
33import org.elasticsearch.gradle.FileContentsTask
4- import org.gradle.BuildAdapter
5- import org.gradle.BuildResult
64import org.gradle.api.*
75import org.gradle.api.artifacts.dsl.RepositoryHandler
6+ import org.gradle.api.execution.TaskExecutionAdapter
87import org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency
98import org.gradle.api.tasks.Copy
109import org.gradle.api.tasks.Delete
1110import org.gradle.api.tasks.Exec
11+ import org.gradle.api.tasks.TaskState
1212
1313class VagrantTestPlugin implements Plugin<Project > {
1414
@@ -123,33 +123,27 @@ class VagrantTestPlugin implements Plugin<Project> {
123123 private static void createBatsConfiguration (Project project ) {
124124 project. configurations. create(BATS )
125125
126- Long seed
127- String formattedSeed = null
128- String [] upgradeFromVersions
129-
130- String maybeTestsSeed = System . getProperty(" tests.seed" , null );
126+ final long seed
127+ final String formattedSeed
128+ String maybeTestsSeed = System . getProperty(" tests.seed" )
131129 if (maybeTestsSeed != null ) {
132- List<String > seeds = maybeTestsSeed. tokenize(' :' )
133- if (seeds. size() != 0 ) {
134- String masterSeed = seeds. get(0 )
135- seed = new BigInteger (masterSeed, 16 ). longValue()
136- formattedSeed = maybeTestsSeed
130+ if (maybeTestsSeed. trim(). isEmpty()) {
131+ throw new GradleException (" explicit tests.seed cannot be empty" )
137132 }
138- }
139- if (formattedSeed == null ) {
133+ String masterSeed = maybeTestsSeed. tokenize(' :' ). get(0 )
134+ seed = new BigInteger (masterSeed, 16 ). longValue()
135+ formattedSeed = maybeTestsSeed
136+ } else {
140137 seed = new Random (). nextLong()
141138 formattedSeed = String . format(" %016X" , seed)
142139 }
143140
144- String maybeUpdradeFromVersions = System . getProperty(" tests.packaging.upgrade.from.versions" , null )
145- if (maybeUpdradeFromVersions != null ) {
146- upgradeFromVersions = maybeUpdradeFromVersions. split(" ," )
147- } else {
148- upgradeFromVersions = getVersionsFile(project)
141+ String upgradeFromVersion = System . getProperty(" tests.packaging.upgradeVersion" );
142+ if (upgradeFromVersion == null ) {
143+ List<String > availableVersions = getVersionsFile(project). readLines(' UTF-8' )
144+ upgradeFromVersion = availableVersions[new Random (seed). nextInt(availableVersions. size())]
149145 }
150146
151- String upgradeFromVersion = upgradeFromVersions[new Random (seed). nextInt(upgradeFromVersions. length)]
152-
153147 DISTRIBUTION_ARCHIVES . each {
154148 // Adds a dependency for the current version
155149 project. dependencies. add(BATS , project. dependencies. project(path : " :distribution:${ it} " , configuration : ' archives' ))
@@ -163,7 +157,6 @@ class VagrantTestPlugin implements Plugin<Project> {
163157 project. extensions. esvagrant. testSeed = seed
164158 project. extensions. esvagrant. formattedTestSeed = formattedSeed
165159 project. extensions. esvagrant. upgradeFromVersion = upgradeFromVersion
166- project. extensions. esvagrant. upgradeFromVersions = upgradeFromVersions
167160 }
168161
169162 private static void createCleanTask (Project project ) {
@@ -254,22 +247,9 @@ class VagrantTestPlugin implements Plugin<Project> {
254247 contents project. extensions. esvagrant. upgradeFromVersion
255248 }
256249
257- Task vagrantSetUpTask = project. tasks. create(' vagrantSetUp ' )
250+ Task vagrantSetUpTask = project. tasks. create(' setupBats ' )
258251 vagrantSetUpTask. dependsOn ' vagrantCheckVersion'
259252 vagrantSetUpTask. dependsOn copyBatsTests, copyBatsUtils, copyBatsArchives, createVersionFile, createUpgradeFromFile
260- vagrantSetUpTask. doFirst {
261- project. gradle. addBuildListener new BuildAdapter () {
262- @Override
263- void buildFinished (BuildResult result ) {
264- if (result. failure) {
265- println " Reproduce with: gradle packagingTest "
266- + " -Pvagrant.boxes=${ project.extensions.esvagrant.boxes} "
267- + " -Dtests.seed=${ project.extensions.esvagrant.formattedSeed} "
268- + " -Dtests.packaging.upgrade.from.versions=${ project.extensions.esvagrant.upgradeFromVersions.join(",")} "
269- }
270- }
271- }
272- }
273253 }
274254
275255 private static void createUpdateVersionsTask (Project project ) {
@@ -278,7 +258,7 @@ class VagrantTestPlugin implements Plugin<Project> {
278258 group ' Verification'
279259 doLast {
280260 File versions = getVersionsFile(project)
281- versions. text = listVersions(project). join(' \n ' ) + ' \n '
261+ versions. setText( listVersions(project). join(' \n ' ) + ' \n ' , ' UTF-8 ' )
282262 }
283263 }
284264 }
@@ -288,14 +268,11 @@ class VagrantTestPlugin implements Plugin<Project> {
288268 description ' Update file containing options for the\n "starting" version in the "upgrade from" packaging tests.'
289269 group ' Verification'
290270 doLast {
291- String maybeUpdateFromVersions = System . getProperty(" tests.packaging.upgrade.from.versions" , null )
292- if (maybeUpdateFromVersions == null ) {
293- Set<String > versions = listVersions(project)
294- Set<String > actualVersions = new TreeSet<> (project. extensions. esvagrant. upgradeFromVersions)
295- if (! versions. equals(actualVersions)) {
296- throw new GradleException (" out-of-date versions " + actualVersions +
297- " , expected " + versions + " ; run gradle vagrantUpdateVersions" )
298- }
271+ Set<String > versions = listVersions(project)
272+ Set<String > actualVersions = new TreeSet<> (getVersionsFile(project). readLines(' UTF-8' ))
273+ if (! versions. equals(actualVersions)) {
274+ throw new GradleException (" out-of-date versions " + actualVersions +
275+ " , expected " + versions + " ; run gradle vagrantUpdateVersions" )
299276 }
300277 }
301278 }
@@ -377,8 +354,8 @@ class VagrantTestPlugin implements Plugin<Project> {
377354 assert project. tasks. virtualboxCheckVersion != null
378355 Task virtualboxCheckVersion = project. tasks. virtualboxCheckVersion
379356
380- assert project. tasks. vagrantSetUp != null
381- Task vagrantSetUp = project. tasks. vagrantSetUp
357+ assert project. tasks. setupBats != null
358+ Task setupBats = project. tasks. setupBats
382359
383360 assert project. tasks. packagingTest != null
384361 Task packagingTest = project. tasks. packagingTest
@@ -409,8 +386,9 @@ class VagrantTestPlugin implements Plugin<Project> {
409386 boxName box
410387 environmentVars vagrantEnvVars
411388 args ' box' , ' update' , box
412- dependsOn vagrantCheckVersion, virtualboxCheckVersion, vagrantSetUp
389+ dependsOn vagrantCheckVersion, virtualboxCheckVersion
413390 }
391+ update. mustRunAfter(setupBats)
414392
415393 Task up = project. tasks. create(" vagrant${ boxTask} #up" , VagrantCommandTask ) {
416394 boxName box
@@ -431,11 +409,6 @@ class VagrantTestPlugin implements Plugin<Project> {
431409 dependsOn update
432410 }
433411
434- if (project. extensions. esvagrant. boxes. contains(box) == false ) {
435- // we d'ont need tests tasks if this box was not specified
436- continue ;
437- }
438-
439412 Task smoke = project. tasks. create(" vagrant${ boxTask} #smoketest" , Exec ) {
440413 environment vagrantEnvVars
441414 dependsOn up
@@ -445,14 +418,32 @@ class VagrantTestPlugin implements Plugin<Project> {
445418 }
446419 vagrantSmokeTest. dependsOn(smoke)
447420
448- Task packaging = project. tasks. create(" vagrant${ boxTask} #packagingtest " , BatsOverVagrantTask ) {
421+ Task packaging = project. tasks. create(" vagrant${ boxTask} #packagingTest " , BatsOverVagrantTask ) {
449422 boxName box
450423 environmentVars vagrantEnvVars
451- dependsOn up
424+ dependsOn up, setupBats
452425 finalizedBy halt
453426 command BATS_TEST_COMMAND
454427 }
455- packagingTest. dependsOn(packaging)
428+ TaskExecutionAdapter reproduceListener = new TaskExecutionAdapter () {
429+ @Override
430+ void afterExecute (Task task , TaskState state ) {
431+ if (state. failure != null ) {
432+ println " REPRODUCE WITH: gradle ${ packaging.path} " +
433+ " -Dtests.seed=${ project.extensions.esvagrant.formattedTestSeed} "
434+ }
435+ }
436+ }
437+ packaging. doFirst {
438+ project. gradle. addListener(reproduceListener)
439+ }
440+ packaging. doLast {
441+ project. gradle. removeListener(reproduceListener)
442+ }
443+
444+ if (project. extensions. esvagrant. boxes. contains(box)) {
445+ packagingTest. dependsOn(packaging)
446+ }
456447 }
457448 }
458449}
0 commit comments