Skip to content

Commit 66e110b

Browse files
authored
Add JUnit rule based integration test cluster orchestration framework (#92379) (#92515)
This commit adds a new test framework for configuring and orchestrating test clusters for both Java and YAML REST testing. This will eventually replace the existing "test-clusters" Gradle plugin and the build-time cluster orchestration. # Conflicts: # x-pack/plugin/ml/qa/semantic-search-tests/build.gradle
1 parent e822b9a commit 66e110b

File tree

223 files changed

+4113
-312
lines changed

Some content is hidden

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

223 files changed

+4113
-312
lines changed

build-tools-internal/build.gradle

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ gradlePlugin {
115115
id = 'elasticsearch.java'
116116
implementationClass = 'org.elasticsearch.gradle.internal.ElasticsearchJavaPlugin'
117117
}
118+
legacyInternalJavaRestTest {
119+
id = 'elasticsearch.legacy-java-rest-test'
120+
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.LegacyJavaRestTestPlugin'
121+
}
118122
internalJavaRestTest {
119123
id = 'elasticsearch.internal-java-rest-test'
120124
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.InternalJavaRestTestPlugin'
@@ -167,9 +171,17 @@ gradlePlugin {
167171
id = 'elasticsearch.validate-rest-spec'
168172
implementationClass = 'org.elasticsearch.gradle.internal.precommit.ValidateRestSpecPlugin'
169173
}
174+
legacyYamlRestCompatTest {
175+
id = 'elasticsearch.legacy-yaml-rest-compat-test'
176+
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.compat.compat.LegacyYamlRestCompatTestPlugin'
177+
}
170178
yamlRestCompatTest {
171179
id = 'elasticsearch.yaml-rest-compat-test'
172-
implementationClass = 'org.elasticsearch.gradle.internal.rest.compat.YamlRestCompatTestPlugin'
180+
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.compat.compat.YamlRestCompatTestPlugin'
181+
}
182+
legacyYamlRestTest {
183+
id = 'elasticsearch.legacy-yaml-rest-test'
184+
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.LegacyYamlRestTestPlugin'
173185
}
174186
yamlRestTest {
175187
id = 'elasticsearch.internal-yaml-rest-test'

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ abstract class AbstractRestResourcesFuncTest extends AbstractGradleFuncTest {
1313

1414
def setup() {
1515
subProject(":test:framework") << "apply plugin: 'elasticsearch.java'"
16+
subProject(":test:test-clusters") << "apply plugin: 'elasticsearch.java'"
1617
subProject(":test:yaml-rest-runner") << "apply plugin: 'elasticsearch.java'"
1718

1819
subProject(":rest-api-spec") << """

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPluginFuncTest.groovy

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,12 @@ class TestingConventionsPrecommitPluginFuncTest extends AbstractGradleInternalPl
174174
given:
175175
clazz(dir('src/yamlRestTest/java'), "org.elasticsearch.test.rest.yaml.ESClientYamlSuiteTestCase")
176176
buildFile << """
177-
apply plugin:'elasticsearch.internal-yaml-rest-test'
178-
177+
apply plugin:'elasticsearch.legacy-yaml-rest-test'
178+
179179
dependencies {
180180
yamlRestTestImplementation "org.apache.lucene:tests.util:1.0"
181181
yamlRestTestImplementation "org.junit:junit:4.42"
182-
}
182+
}
183183
"""
184184

185185
clazz(dir("src/yamlRestTest/java"), "org.acme.valid.SomeMatchingIT", "org.elasticsearch.test.rest.yaml.ESClientYamlSuiteTestCase") {
@@ -216,11 +216,11 @@ class TestingConventionsPrecommitPluginFuncTest extends AbstractGradleInternalPl
216216
buildFile << """
217217
import org.elasticsearch.gradle.internal.precommit.TestingConventionsCheckTask
218218
apply plugin:'$pluginName'
219-
219+
220220
dependencies {
221221
${sourceSetName}Implementation "org.apache.lucene:tests.util:1.0"
222222
${sourceSetName}Implementation "org.junit:junit:4.42"
223-
}
223+
}
224224
tasks.withType(TestingConventionsCheckTask).configureEach {
225225
suffix 'IT'
226226
suffix 'Tests'
@@ -252,19 +252,19 @@ class TestingConventionsPrecommitPluginFuncTest extends AbstractGradleInternalPl
252252
)
253253

254254
where:
255-
pluginName | taskName | sourceSetName
256-
"elasticsearch.internal-java-rest-test" | ":javaRestTestTestingConventions" | "javaRestTest"
255+
pluginName | taskName | sourceSetName
256+
"elasticsearch.legacy-java-rest-test" | ":javaRestTestTestingConventions" | "javaRestTest"
257257
"elasticsearch.internal-cluster-test" | ":internalClusterTestTestingConventions" | "internalClusterTest"
258258
}
259259

260260
private void simpleJavaBuild() {
261261
buildFile << """
262262
apply plugin:'java'
263-
263+
264264
dependencies {
265265
testImplementation "org.apache.lucene:tests.util:1.0"
266266
testImplementation "org.junit:junit:4.42"
267-
}
267+
}
268268
"""
269269
}
270270
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import org.elasticsearch.gradle.fixtures.AbstractRestResourcesFuncTest
1717
import org.elasticsearch.gradle.VersionProperties
1818
import org.gradle.testkit.runner.TaskOutcome
1919

20-
class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
20+
class LegacyYamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
2121

2222
def compatibleVersion = Version.fromString(VersionProperties.getVersions().get("elasticsearch")).getMajor() - 1
2323
def specIntermediateDir = "restResources/v${compatibleVersion}/yamlSpecs"
@@ -45,7 +45,7 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
4545

4646
buildFile << """
4747
plugins {
48-
id 'elasticsearch.yaml-rest-compat-test'
48+
id 'elasticsearch.legacy-yaml-rest-compat-test'
4949
}
5050
"""
5151

@@ -71,7 +71,7 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
7171
"""
7272

7373
buildFile << """
74-
apply plugin: 'elasticsearch.yaml-rest-compat-test'
74+
apply plugin: 'elasticsearch.legacy-yaml-rest-compat-test'
7575
7676
// avoids a dependency problem in this test, the distribution in use here is inconsequential to the test
7777
import org.elasticsearch.gradle.testclusters.TestDistribution;
@@ -151,7 +151,7 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
151151

152152
buildFile << """
153153
plugins {
154-
id 'elasticsearch.yaml-rest-compat-test'
154+
id 'elasticsearch.legacy-yaml-rest-compat-test'
155155
}
156156
157157
"""
@@ -194,7 +194,7 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
194194
"""
195195

196196
buildFile << """
197-
apply plugin: 'elasticsearch.yaml-rest-compat-test'
197+
apply plugin: 'elasticsearch.legacy-yaml-rest-compat-test'
198198
199199
// avoids a dependency problem in this test, the distribution in use here is inconsequential to the test
200200
import org.elasticsearch.gradle.testclusters.TestDistribution;
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ import org.elasticsearch.gradle.fixtures.AbstractRestResourcesFuncTest
1515
import org.gradle.testkit.runner.TaskOutcome
1616

1717
@IgnoreIf({ os.isWindows() })
18-
class InternalYamlRestTestPluginFuncTest extends AbstractRestResourcesFuncTest {
18+
class LegacyYamlRestTestPluginFuncTest extends AbstractRestResourcesFuncTest {
1919

2020
def "yamlRestTest does nothing when there are no tests"() {
2121
given:
2222
// RestIntegTestTask not cc compatible due to
2323
configurationCacheCompatible = false
2424
buildFile << """
2525
plugins {
26-
id 'elasticsearch.internal-yaml-rest-test'
26+
id 'elasticsearch.legacy-yaml-rest-test'
2727
}
2828
"""
2929

@@ -42,7 +42,7 @@ class InternalYamlRestTestPluginFuncTest extends AbstractRestResourcesFuncTest {
4242
configurationCacheCompatible = false
4343
internalBuild()
4444
buildFile << """
45-
apply plugin: 'elasticsearch.internal-yaml-rest-test'
45+
apply plugin: 'elasticsearch.legacy-yaml-rest-test'
4646
4747
dependencies {
4848
yamlRestTestImplementation "junit:junit:4.12"
@@ -96,7 +96,7 @@ class InternalYamlRestTestPluginFuncTest extends AbstractRestResourcesFuncTest {
9696
def subProjectBuildFile = subProject(pluginProjectPath)
9797
subProjectBuildFile << """
9898
apply plugin: 'elasticsearch.esplugin'
99-
apply plugin: 'elasticsearch.internal-yaml-rest-test'
99+
apply plugin: 'elasticsearch.legacy-yaml-rest-test'
100100
101101
dependencies {
102102
yamlRestTestImplementation "junit:junit:4.12"

build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/doc/DocsTestPlugin.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class DocsTestPlugin implements Plugin<Project> {
3838

3939
@Override
4040
void apply(Project project) {
41-
project.pluginManager.apply('elasticsearch.internal-yaml-rest-test')
41+
project.pluginManager.apply('elasticsearch.legacy-yaml-rest-test')
4242

4343
String distribution = System.getProperty('tests.distribution', 'default')
4444
// The distribution can be configured with -Dtests.distribution on the command line

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ResolveAllDependencies.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import javax.inject.Inject;
2222

2323
import static org.elasticsearch.gradle.DistributionDownloadPlugin.DISTRO_EXTRACTED_CONFIG_PREFIX;
24-
import static org.elasticsearch.gradle.internal.rest.compat.YamlRestCompatTestPlugin.BWC_MINOR_CONFIG_NAME;
24+
import static org.elasticsearch.gradle.internal.test.rest.compat.compat.LegacyYamlRestCompatTestPlugin.BWC_MINOR_CONFIG_NAME;
2525

2626
public class ResolveAllDependencies extends DefaultTask {
2727

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin;
1212
import org.elasticsearch.gradle.internal.test.InternalClusterTestPlugin;
1313
import org.elasticsearch.gradle.internal.test.rest.InternalJavaRestTestPlugin;
14-
import org.elasticsearch.gradle.internal.test.rest.InternalYamlRestTestPlugin;
14+
import org.elasticsearch.gradle.internal.test.rest.LegacyJavaRestTestPlugin;
15+
import org.elasticsearch.gradle.internal.test.rest.LegacyYamlRestTestPlugin;
1516
import org.gradle.api.Action;
1617
import org.gradle.api.NamedDomainObjectProvider;
1718
import org.gradle.api.Project;
@@ -43,8 +44,8 @@ public TaskProvider<? extends Task> createTask(Project project) {
4344
});
4445
});
4546

46-
project.getPlugins().withType(InternalYamlRestTestPlugin.class, yamlRestTestPlugin -> {
47-
NamedDomainObjectProvider<SourceSet> sourceSet = sourceSets.named(InternalYamlRestTestPlugin.SOURCE_SET_NAME);
47+
project.getPlugins().withType(LegacyYamlRestTestPlugin.class, yamlRestTestPlugin -> {
48+
NamedDomainObjectProvider<SourceSet> sourceSet = sourceSets.named(LegacyYamlRestTestPlugin.SOURCE_SET_NAME);
4849
setupTaskForSourceSet(project, sourceSet, t -> {
4950
t.getSuffixes().convention(List.of("IT"));
5051
t.getBaseClasses().convention(List.of("org.elasticsearch.test.rest.yaml.ESClientYamlSuiteTestCase"));
@@ -68,8 +69,17 @@ public TaskProvider<? extends Task> createTask(Project project) {
6869
});
6970
});
7071

72+
project.getPlugins().withType(LegacyJavaRestTestPlugin.class, javaRestTestPlugin -> {
73+
NamedDomainObjectProvider<SourceSet> sourceSet = sourceSets.named(LegacyJavaRestTestPlugin.SOURCE_SET_NAME);
74+
setupTaskForSourceSet(project, sourceSet, t -> {
75+
t.getSuffixes().convention(List.of("IT"));
76+
t.getBaseClasses()
77+
.convention(List.of("org.elasticsearch.test.ESIntegTestCase", "org.elasticsearch.test.rest.ESRestTestCase"));
78+
});
79+
});
80+
7181
project.getPlugins().withType(InternalJavaRestTestPlugin.class, javaRestTestPlugin -> {
72-
NamedDomainObjectProvider<SourceSet> sourceSet = sourceSets.named(InternalJavaRestTestPlugin.SOURCE_SET_NAME);
82+
NamedDomainObjectProvider<SourceSet> sourceSet = sourceSets.named(LegacyJavaRestTestPlugin.SOURCE_SET_NAME);
7383
setupTaskForSourceSet(project, sourceSet, t -> {
7484
t.getSuffixes().convention(List.of("IT"));
7585
t.getBaseClasses()
Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@
3131
import static org.elasticsearch.gradle.plugin.BasePluginBuildPlugin.BUNDLE_PLUGIN_TASK_NAME;
3232
import static org.elasticsearch.gradle.plugin.BasePluginBuildPlugin.EXPLODED_BUNDLE_PLUGIN_TASK_NAME;
3333

34-
public class RestTestBasePlugin implements Plugin<Project> {
34+
/**
35+
* @deprecated use {@link RestTestBasePlugin} instead
36+
*/
37+
@Deprecated
38+
public class LegacyRestTestBasePlugin implements Plugin<Project> {
3539
private static final String TESTS_REST_CLUSTER = "tests.rest.cluster";
3640
private static final String TESTS_CLUSTER = "tests.cluster";
3741
private static final String TESTS_CLUSTER_NAME = "tests.clustername";
@@ -40,7 +44,7 @@ public class RestTestBasePlugin implements Plugin<Project> {
4044
private ProviderFactory providerFactory;
4145

4246
@Inject
43-
public RestTestBasePlugin(ProviderFactory providerFactory) {
47+
public LegacyRestTestBasePlugin(ProviderFactory providerFactory) {
4448
this.providerFactory = providerFactory;
4549
}
4650

@@ -87,17 +91,19 @@ public void apply(Project project) {
8791
.withType(StandaloneRestIntegTestTask.class)
8892
.configureEach(t -> t.finalizedBy(project.getTasks().withType(FixtureStop.class)));
8993

90-
project.getTasks().withType(StandaloneRestIntegTestTask.class).configureEach(t ->
91-
// if this a module or plugin, it may have an associated zip file with it's contents, add that to the test cluster
92-
project.getPluginManager().withPlugin("elasticsearch.esplugin", plugin -> {
93-
if (GradleUtils.isModuleProject(project.getPath())) {
94-
var bundle = project.getTasks().withType(Sync.class).named(EXPLODED_BUNDLE_PLUGIN_TASK_NAME);
95-
t.getClusters().forEach(c -> c.module(bundle));
96-
} else {
97-
var bundle = project.getTasks().withType(Zip.class).named(BUNDLE_PLUGIN_TASK_NAME);
98-
t.getClusters().forEach(c -> c.plugin(bundle));
99-
}
100-
}));
94+
project.getTasks().withType(StandaloneRestIntegTestTask.class).configureEach(t -> {
95+
t.setMaxParallelForks(1);
96+
// if this a module or plugin, it may have an associated zip file with it's contents, add that to the test cluster
97+
project.getPluginManager().withPlugin("elasticsearch.esplugin", plugin -> {
98+
if (GradleUtils.isModuleProject(project.getPath())) {
99+
var bundle = project.getTasks().withType(Sync.class).named(EXPLODED_BUNDLE_PLUGIN_TASK_NAME);
100+
t.getClusters().forEach(c -> c.module(bundle));
101+
} else {
102+
var bundle = project.getTasks().withType(Zip.class).named(BUNDLE_PLUGIN_TASK_NAME);
103+
t.getClusters().forEach(c -> c.plugin(bundle));
104+
}
105+
});
106+
});
101107
}
102108

103109
private String systemProperty(String propName) {

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneRestTestPlugin.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import org.elasticsearch.gradle.internal.ExportElasticsearchBuildResourcesTask;
1212
import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
1313
import org.elasticsearch.gradle.internal.precommit.InternalPrecommitTasks;
14-
import org.elasticsearch.gradle.internal.test.rest.InternalJavaRestTestPlugin;
15-
import org.elasticsearch.gradle.internal.test.rest.InternalYamlRestTestPlugin;
14+
import org.elasticsearch.gradle.internal.test.rest.LegacyJavaRestTestPlugin;
15+
import org.elasticsearch.gradle.internal.test.rest.LegacyYamlRestTestPlugin;
1616
import org.elasticsearch.gradle.internal.test.rest.RestTestUtil;
1717
import org.gradle.api.InvalidUserDataException;
1818
import org.gradle.api.Plugin;
@@ -32,8 +32,8 @@
3232
* and run REST tests. Use BuildPlugin if you want to build main code as well
3333
* as tests.
3434
*
35-
* @deprecated use {@link InternalClusterTestPlugin}, {@link InternalJavaRestTestPlugin} or
36-
* {@link InternalYamlRestTestPlugin} instead.
35+
* @deprecated use {@link InternalClusterTestPlugin}, {@link LegacyJavaRestTestPlugin} or
36+
* {@link LegacyYamlRestTestPlugin} instead.
3737
*/
3838
@Deprecated
3939
public class StandaloneRestTestPlugin implements Plugin<Project> {
@@ -46,7 +46,7 @@ public void apply(final Project project) {
4646
}
4747

4848
project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class);
49-
project.getPluginManager().apply(RestTestBasePlugin.class);
49+
project.getPluginManager().apply(LegacyRestTestBasePlugin.class);
5050

5151
project.getTasks().register("buildResources", ExportElasticsearchBuildResourcesTask.class);
5252

0 commit comments

Comments
 (0)