Skip to content

Commit 7e06888

Browse files
authored
Convert testclusters to use distro download plugin (#44253) (#44362)
Test clusters currently has its own set of logic for dealing with finding different versions of Elasticsearch, downloading them, and extracting them. This commit converts testclusters to use the DistributionDownloadPlugin.
1 parent 753da8f commit 7e06888

File tree

58 files changed

+177
-370
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+177
-370
lines changed

buildSrc/src/main/groovy/org/elasticsearch/gradle/doc/DocsTestPlugin.groovy

+1-3
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@ package org.elasticsearch.gradle.doc
2121
import org.elasticsearch.gradle.OS
2222
import org.elasticsearch.gradle.Version
2323
import org.elasticsearch.gradle.VersionProperties
24-
import org.elasticsearch.gradle.test.ClusterFormationTasks
2524
import org.elasticsearch.gradle.test.RestTestPlugin
2625
import org.gradle.api.Project
2726
import org.gradle.api.Task
28-
2927
/**
3028
* Sets up tests for documentation.
3129
*/
@@ -38,7 +36,7 @@ public class DocsTestPlugin extends RestTestPlugin {
3836
super.apply(project)
3937
String distribution = System.getProperty('tests.distribution', 'default')
4038
// The distribution can be configured with -Dtests.distribution on the command line
41-
project.testClusters.integTest.distribution = distribution.toUpperCase()
39+
project.testClusters.integTest.testDistribution = distribution.toUpperCase()
4240
project.testClusters.integTest.nameCustomization = { it.replace("integTest", "node") }
4341
// Docs are published separately so no need to assemble
4442
project.tasks.assemble.enabled = false

buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestIntegTestTask.groovy

+1-5
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@
1818
*/
1919
package org.elasticsearch.gradle.test
2020

21-
import org.elasticsearch.gradle.VersionProperties
21+
2222
import org.elasticsearch.gradle.testclusters.ElasticsearchCluster
2323
import org.elasticsearch.gradle.testclusters.TestClustersPlugin
2424
import org.gradle.api.DefaultTask
2525
import org.gradle.api.Task
2626
import org.gradle.api.execution.TaskExecutionAdapter
2727
import org.gradle.api.logging.Logger
2828
import org.gradle.api.logging.Logging
29-
import org.gradle.api.specs.Specs
3029
import org.gradle.api.tasks.Copy
3130
import org.gradle.api.tasks.Input
3231
import org.gradle.api.tasks.TaskState
@@ -38,7 +37,6 @@ import org.gradle.process.CommandLineArgumentProvider
3837
import java.nio.charset.StandardCharsets
3938
import java.nio.file.Files
4039
import java.util.stream.Stream
41-
4240
/**
4341
* A wrapper task around setting up a cluster and running rest tests.
4442
*/
@@ -70,8 +68,6 @@ class RestIntegTestTask extends DefaultTask {
7068
} else {
7169
project.testClusters {
7270
"$name" {
73-
distribution = 'INTEG_TEST'
74-
version = VersionProperties.elasticsearch
7571
javaHome = project.file(project.ext.runtimeJavaHome)
7672
}
7773
}

buildSrc/src/main/java/org/elasticsearch/gradle/Distribution.java

-80
This file was deleted.

buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
*/
5555
public class DistributionDownloadPlugin implements Plugin<Project> {
5656

57+
private static final String CONTAINER_NAME = "elasticsearch_distributions";
5758
private static final String FAKE_IVY_GROUP = "elasticsearch-distribution";
5859
private static final String DOWNLOAD_REPO_NAME = "elasticsearch-downloads";
5960

@@ -67,7 +68,7 @@ public void apply(Project project) {
6768
Configuration extractedConfiguration = project.getConfigurations().create("es_distro_extracted_" + name);
6869
return new ElasticsearchDistribution(name, project.getObjects(), fileConfiguration, extractedConfiguration);
6970
});
70-
project.getExtensions().add("elasticsearch_distributions", distributionsContainer);
71+
project.getExtensions().add(CONTAINER_NAME, distributionsContainer);
7172

7273
setupDownloadServiceRepo(project);
7374

@@ -78,6 +79,11 @@ public void apply(Project project) {
7879
project.afterEvaluate(this::setupDistributions);
7980
}
8081

82+
@SuppressWarnings("unchecked")
83+
public static NamedDomainObjectContainer<ElasticsearchDistribution> getContainer(Project project) {
84+
return (NamedDomainObjectContainer<ElasticsearchDistribution>) project.getExtensions().getByName(CONTAINER_NAME);
85+
}
86+
8187
// pkg private for tests
8288
void setupDistributions(Project project) {
8389
for (ElasticsearchDistribution distribution : distributionsContainer) {

buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchDistribution.java

+7
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@
2020
package org.elasticsearch.gradle;
2121

2222
import org.gradle.api.Buildable;
23+
import org.gradle.api.Project;
2324
import org.gradle.api.artifacts.Configuration;
25+
import org.gradle.api.file.FileTree;
2426
import org.gradle.api.model.ObjectFactory;
2527
import org.gradle.api.provider.Property;
2628
import org.gradle.api.tasks.TaskDependency;
2729

2830
import java.io.File;
2931
import java.util.Iterator;
3032
import java.util.Locale;
33+
import java.util.concurrent.Callable;
3134

3235
public class ElasticsearchDistribution implements Buildable {
3336

@@ -90,6 +93,10 @@ public TaskDependency getBuildDependencies() {
9093
return configuration.getBuildDependencies();
9194
}
9295

96+
public FileTree getFileTree(Project project) {
97+
return project.fileTree((Callable<File>) configuration::getSingleFile);
98+
}
99+
93100
@Override
94101
public String toString() {
95102
return configuration.getSingleFile().toString();

buildSrc/src/main/java/org/elasticsearch/gradle/test/RestTestRunnerTask.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import java.util.ArrayList;
99
import java.util.Collection;
1010

11-
import static org.elasticsearch.gradle.Distribution.INTEG_TEST;
11+
import static org.elasticsearch.gradle.testclusters.TestDistribution.INTEG_TEST;
1212

1313
/**
1414
* Customized version of Gradle {@link Test} task which tracks a collection of {@link ElasticsearchCluster} as a task input. We must do this
@@ -23,7 +23,7 @@ public class RestTestRunnerTask extends Test {
2323
public RestTestRunnerTask() {
2424
super();
2525
this.getOutputs().doNotCacheIf("Build cache is only enabled for tests against clusters using the 'integ-test' distribution",
26-
task -> clusters.stream().flatMap(c -> c.getNodes().stream()).anyMatch(n -> n.getDistribution() != INTEG_TEST));
26+
task -> clusters.stream().flatMap(c -> c.getNodes().stream()).anyMatch(n -> n.getTestDistribution() != INTEG_TEST));
2727
}
2828

2929
@Nested

buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchCluster.java

+12-19
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@
1818
*/
1919
package org.elasticsearch.gradle.testclusters;
2020

21-
import org.elasticsearch.gradle.Distribution;
21+
import org.elasticsearch.gradle.ElasticsearchDistribution;
2222
import org.elasticsearch.gradle.FileSupplier;
2323
import org.elasticsearch.gradle.PropertyNormalization;
24-
import org.elasticsearch.gradle.Version;
2524
import org.elasticsearch.gradle.http.WaitForHttpResource;
2625
import org.gradle.api.Named;
2726
import org.gradle.api.NamedDomainObjectContainer;
@@ -43,7 +42,6 @@
4342
import java.util.Objects;
4443
import java.util.concurrent.TimeUnit;
4544
import java.util.concurrent.atomic.AtomicBoolean;
46-
import java.util.function.BiConsumer;
4745
import java.util.function.Function;
4846
import java.util.function.Predicate;
4947
import java.util.function.Supplier;
@@ -60,22 +58,23 @@ public class ElasticsearchCluster implements TestClusterConfiguration, Named {
6058
private final String clusterName;
6159
private final NamedDomainObjectContainer<ElasticsearchNode> nodes;
6260
private final File workingDirBase;
63-
private final File artifactsExtractDir;
61+
private final Function<Integer, ElasticsearchDistribution> distributionFactory;
6462
private final LinkedHashMap<String, Predicate<TestClusterConfiguration>> waitConditions = new LinkedHashMap<>();
6563
private final Project project;
6664

67-
public ElasticsearchCluster(String path, String clusterName, Project project, File artifactsExtractDir, File workingDirBase) {
65+
public ElasticsearchCluster(String path, String clusterName, Project project,
66+
Function<Integer, ElasticsearchDistribution> distributionFactory, File workingDirBase) {
6867
this.path = path;
6968
this.clusterName = clusterName;
7069
this.project = project;
70+
this.distributionFactory = distributionFactory;
7171
this.workingDirBase = workingDirBase;
72-
this.artifactsExtractDir = artifactsExtractDir;
7372
this.nodes = project.container(ElasticsearchNode.class);
7473
this.nodes.add(
7574
new ElasticsearchNode(
7675
path, clusterName + "-0",
77-
project, artifactsExtractDir, workingDirBase
78-
)
76+
project, workingDirBase, distributionFactory.apply(0)
77+
)
7978
);
8079
// configure the cluster name eagerly so nodes know about it
8180
this.nodes.all((node) -> node.defaultConfig.put("cluster.name", safeName(clusterName)));
@@ -98,8 +97,8 @@ public void setNumberOfNodes(int numberOfNodes) {
9897

9998
for (int i = nodes.size() ; i < numberOfNodes; i++) {
10099
this.nodes.add(new ElasticsearchNode(
101-
path, clusterName + "-" + i, project, artifactsExtractDir, workingDirBase
102-
));
100+
path, clusterName + "-" + i, project, workingDirBase, distributionFactory.apply(i)
101+
));
103102
}
104103
}
105104

@@ -121,8 +120,8 @@ public void setVersion(String version) {
121120
}
122121

123122
@Override
124-
public void setDistribution(Distribution distribution) {
125-
nodes.all(each -> each.setDistribution(distribution));
123+
public void setTestDistribution(TestDistribution distribution) {
124+
nodes.all(each -> each.setTestDistribution(distribution));
126125
}
127126

128127
@Override
@@ -248,7 +247,7 @@ public void start() {
248247
for (ElasticsearchNode node : nodes) {
249248
if (nodeNames != null) {
250249
// Can only configure master nodes if we have node names defined
251-
if (Version.fromString(node.getVersion()).getMajor() >= 7) {
250+
if (node.getVersion().getMajor() >= 7) {
252251
node.defaultConfig.put("cluster.initial_master_nodes", "[" + nodeNames + "]");
253252
node.defaultConfig.put("discovery.seed_providers", "file");
254253
node.defaultConfig.put("discovery.seed_hosts", "[]");
@@ -338,12 +337,6 @@ public boolean isProcessAlive() {
338337
return nodes.stream().noneMatch(node -> node.isProcessAlive() == false);
339338
}
340339

341-
void eachVersionedDistribution(BiConsumer<String, Distribution> consumer) {
342-
nodes.forEach(each -> {
343-
consumer.accept(each.getVersion(), each.getDistribution());
344-
});
345-
}
346-
347340
public ElasticsearchNode singleNode() {
348341
if (nodes.size() != 1) {
349342
throw new IllegalStateException(

0 commit comments

Comments
 (0)