Skip to content

Commit c7fdaf6

Browse files
committed
Tests: Fix reproduce line for packagingTest (#23365)
This commit fixes the reproduce line output when the vagrant packagingTest fails. Before only the `gradle packagingTest` would be output, but the seed and list of versions was swallowed by groovy with an ancillary failure (due to the `+` being on the wrong line for a string continuation). With the new reproduce line, it is now output next to the task right after failure, contains the actual task (specific to the box that fails), and contains the seed. It also no longer contains the upgrade versions list, as the seed is used to determine which of those to use, and the same file would be read when testing a failure on a particular git commit. Finally, this also ties bats test setup directly to packagingTest, instead of to the vagrant up command.
1 parent c15f99b commit c7fdaf6

File tree

1 file changed

+47
-56
lines changed

1 file changed

+47
-56
lines changed

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

Lines changed: 47 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package org.elasticsearch.gradle.vagrant
22

33
import org.elasticsearch.gradle.FileContentsTask
4-
import org.gradle.BuildAdapter
5-
import org.gradle.BuildResult
64
import org.gradle.api.*
75
import org.gradle.api.artifacts.dsl.RepositoryHandler
6+
import org.gradle.api.execution.TaskExecutionAdapter
87
import org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency
98
import org.gradle.api.tasks.Copy
109
import org.gradle.api.tasks.Delete
1110
import org.gradle.api.tasks.Exec
11+
import org.gradle.api.tasks.TaskState
1212

1313
class 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

Comments
 (0)