Skip to content

Commit 1d9f246

Browse files
authored
[7.14] Introduce external build-tools JavaRestTestPlugin (#77603) (#77664)
1 parent 8aab0e5 commit 1d9f246

File tree

51 files changed

+204
-54
lines changed

Some content is hidden

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

51 files changed

+204
-54
lines changed

build-tools-internal/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ gradlePlugin {
103103
id = 'elasticsearch.java'
104104
implementationClass = 'org.elasticsearch.gradle.internal.ElasticsearchJavaPlugin'
105105
}
106-
javaRestTest {
107-
id = 'elasticsearch.java-rest-test'
108-
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.JavaRestTestPlugin'
106+
internalJavaRestTest {
107+
id = 'elasticsearch.internal-java-rest-test'
108+
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.InternalJavaRestTestPlugin'
109109
}
110110
repositories {
111111
id = 'elasticsearch.repositories'
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
/**
2828
* Apply this plugin to run the Java based REST tests.
2929
*/
30-
public class JavaRestTestPlugin implements Plugin<Project> {
30+
public class InternalJavaRestTestPlugin implements Plugin<Project> {
3131

3232
public static final String SOURCE_SET_NAME = "javaRestTest";
3333

build-tools/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ gradlePlugin {
4949
id = 'elasticsearch.esplugin'
5050
implementationClass = 'org.elasticsearch.gradle.plugin.PluginBuildPlugin'
5151
}
52+
javaRestTest {
53+
id = 'elasticsearch.java-rest-test'
54+
implementationClass = 'org.elasticsearch.gradle.test.JavaRestTestPlugin'
55+
}
5256
testclusters {
5357
id = 'elasticsearch.testclusters'
5458
implementationClass = 'org.elasticsearch.gradle.testclusters.TestClustersPlugin'
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0 and the Server Side Public License, v 1; you may not use this file except
5+
* in compliance with, at your election, the Elastic License 2.0 or the Server
6+
* Side Public License, v 1.
7+
*/
8+
9+
package org.elasticsearch.gradle.test
10+
11+
import org.elasticsearch.gradle.VersionProperties
12+
import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest
13+
import org.gradle.testkit.runner.TaskOutcome
14+
15+
class JavaRestTestPluginFuncTest extends AbstractGradleFuncTest {
16+
17+
def "declares default dependencies"() {
18+
given:
19+
buildFile << """
20+
plugins {
21+
id 'elasticsearch.java-rest-test'
22+
}
23+
"""
24+
25+
when:
26+
def result = gradleRunner("dependencies").build()
27+
def output = normalized(result.output)
28+
then:
29+
output.contains(normalized("""
30+
javaRestTestImplementation - Implementation only dependencies for source set 'java rest test'. (n)
31+
/--- org.elasticsearch.test:framework:${VersionProperties.elasticsearch} (n)"""))
32+
}
33+
34+
def "javaRestTest does nothing when there are no tests"() {
35+
given:
36+
buildFile << """
37+
plugins {
38+
id 'elasticsearch.java-rest-test'
39+
}
40+
41+
repositories {
42+
mavenCentral()
43+
}
44+
45+
dependencies {
46+
javaRestTestImplementation "org.elasticsearch.test:framework:7.14.0"
47+
}
48+
"""
49+
50+
when:
51+
def result = gradleRunner("javaRestTest").build()
52+
then:
53+
result.task(':compileJavaRestTestJava').outcome == TaskOutcome.NO_SOURCE
54+
result.task(':javaRestTest').outcome == TaskOutcome.NO_SOURCE
55+
}
56+
57+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0 and the Server Side Public License, v 1; you may not use this file except
5+
* in compliance with, at your election, the Elastic License 2.0 or the Server
6+
* Side Public License, v 1.
7+
*/
8+
9+
package org.elasticsearch.gradle.test;
10+
11+
import org.elasticsearch.gradle.VersionProperties;
12+
import org.elasticsearch.gradle.plugin.PluginBuildPlugin;
13+
import org.elasticsearch.gradle.testclusters.ElasticsearchCluster;
14+
import org.elasticsearch.gradle.testclusters.StandaloneRestIntegTestTask;
15+
import org.elasticsearch.gradle.testclusters.TestClustersPlugin;
16+
import org.gradle.api.NamedDomainObjectContainer;
17+
import org.gradle.api.Plugin;
18+
import org.gradle.api.Project;
19+
import org.gradle.api.plugins.JavaBasePlugin;
20+
import org.gradle.api.tasks.SourceSetContainer;
21+
import org.gradle.api.tasks.TaskProvider;
22+
import org.gradle.api.tasks.bundling.Zip;
23+
import org.gradle.language.base.plugins.LifecycleBasePlugin;
24+
25+
import static org.elasticsearch.gradle.plugin.PluginBuildPlugin.BUNDLE_PLUGIN_TASK_NAME;
26+
27+
public class JavaRestTestPlugin implements Plugin<Project> {
28+
29+
public static final String JAVA_REST_TEST = "javaRestTest";
30+
31+
@Override
32+
public void apply(Project project) {
33+
project.getPluginManager().apply(GradleTestPolicySetupPlugin.class);
34+
project.getPluginManager().apply(TestClustersPlugin.class);
35+
project.getPluginManager().apply(JavaBasePlugin.class);
36+
37+
// Setup source set and dependencies
38+
var sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
39+
var testSourceSet = sourceSets.maybeCreate(JAVA_REST_TEST);
40+
var javaRestTestImplementation = project.getConfigurations().getByName(testSourceSet.getImplementationConfigurationName());
41+
42+
String elasticsearchVersion = VersionProperties.getElasticsearch();
43+
javaRestTestImplementation.defaultDependencies(
44+
deps -> deps.add(project.getDependencies().create("org.elasticsearch.test:framework:" + elasticsearchVersion))
45+
);
46+
47+
// Register test cluster
48+
NamedDomainObjectContainer<ElasticsearchCluster> testClusters = (NamedDomainObjectContainer<ElasticsearchCluster>) project
49+
.getExtensions()
50+
.getByName(TestClustersPlugin.EXTENSION_NAME);
51+
var cluster = testClusters.maybeCreate(JAVA_REST_TEST);
52+
53+
// Register test task
54+
TaskProvider<StandaloneRestIntegTestTask> javaRestTestTask = project.getTasks()
55+
.register(JAVA_REST_TEST, StandaloneRestIntegTestTask.class, task -> {
56+
task.useCluster(cluster);
57+
task.setTestClassesDirs(testSourceSet.getOutput().getClassesDirs());
58+
task.setClasspath(testSourceSet.getRuntimeClasspath());
59+
60+
var nonInputProperties = new SystemPropertyCommandLineArgumentProvider();
61+
nonInputProperties.systemProperty("tests.rest.cluster", () -> String.join(",", cluster.getAllHttpSocketURI()));
62+
nonInputProperties.systemProperty("tests.cluster", () -> String.join(",", cluster.getAllTransportPortURI()));
63+
nonInputProperties.systemProperty("tests.clustername", () -> cluster.getName());
64+
task.getJvmArgumentProviders().add(nonInputProperties);
65+
});
66+
67+
// Register plugin bundle with test cluster
68+
project.getPlugins().withType(PluginBuildPlugin.class, p -> {
69+
TaskProvider<Zip> bundle = project.getTasks().withType(Zip.class).named(BUNDLE_PLUGIN_TASK_NAME);
70+
cluster.plugin(bundle.flatMap(Zip::getArchiveFile));
71+
javaRestTestTask.configure(t -> t.dependsOn(bundle));
72+
});
73+
74+
// Wire up to check task
75+
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(check -> check.dependsOn(javaRestTestTask));
76+
}
77+
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,15 @@
2525
import org.gradle.api.artifacts.type.ArtifactTypeDefinition;
2626
import org.gradle.api.attributes.Attribute;
2727
import org.gradle.api.internal.artifacts.ArtifactAttributes;
28+
import org.gradle.api.plugins.BasePlugin;
2829
import org.gradle.api.plugins.JavaBasePlugin;
30+
import org.gradle.api.plugins.JavaPlugin;
2931
import org.gradle.api.tasks.Copy;
3032
import org.gradle.api.tasks.SourceSet;
3133
import org.gradle.api.tasks.SourceSetContainer;
3234
import org.gradle.api.tasks.TaskProvider;
3335
import org.gradle.api.tasks.bundling.Zip;
36+
import org.gradle.language.base.plugins.LifecycleBasePlugin;
3437

3538
import java.io.File;
3639

@@ -85,6 +88,9 @@ public void apply(Project project) {
8588
cluster.plugin(bundle.flatMap(Zip::getArchiveFile));
8689
yamlRestTestTask.configure(t -> t.dependsOn(bundle));
8790
});
91+
92+
// Wire up to check task
93+
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(check -> check.dependsOn(yamlRestTestTask));
8894
}
8995

9096
private static void setupDefaultDependencies(
@@ -107,7 +113,7 @@ private TaskProvider<StandaloneRestIntegTestTask> setupTestTask(
107113
SourceSet testSourceSet,
108114
ElasticsearchCluster cluster
109115
) {
110-
return project.getTasks().register("yamlRestTest", StandaloneRestIntegTestTask.class, task -> {
116+
return project.getTasks().register(YAML_REST_TEST, StandaloneRestIntegTestTask.class, task -> {
111117
task.useCluster(cluster);
112118
task.setTestClassesDirs(testSourceSet.getOutput().getClassesDirs());
113119
task.setClasspath(testSourceSet.getRuntimeClasspath());

modules/kibana/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* in compliance with, at your election, the Elastic License 2.0 or the Server
66
* Side Public License, v 1.
77
*/
8-
apply plugin: 'elasticsearch.java-rest-test'
8+
apply plugin: 'elasticsearch.internal-java-rest-test'
99

1010
esplugin {
1111
description 'Plugin exposing APIs for Kibana system indices'

modules/lang-mustache/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Side Public License, v 1.
77
*/
88
apply plugin: 'elasticsearch.internal-yaml-rest-test'
9-
apply plugin: 'elasticsearch.java-rest-test'
9+
apply plugin: 'elasticsearch.internal-java-rest-test'
1010
apply plugin: 'elasticsearch.internal-cluster-test'
1111

1212
esplugin {

modules/reindex/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import org.elasticsearch.gradle.internal.test.AntFixture
1515
apply plugin: 'elasticsearch.test-with-dependencies'
1616
apply plugin: 'elasticsearch.jdk-download'
1717
apply plugin: 'elasticsearch.internal-yaml-rest-test'
18-
apply plugin: 'elasticsearch.java-rest-test'
18+
apply plugin: 'elasticsearch.internal-java-rest-test'
1919
apply plugin: 'elasticsearch.internal-cluster-test'
2020

2121
esplugin {

modules/transport-netty4/build.gradle

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
* Side Public License, v 1.
77
*/
88

9-
10-
import org.elasticsearch.gradle.internal.info.BuildParams
119
import org.elasticsearch.gradle.internal.test.RestIntegTestTask
12-
import org.elasticsearch.gradle.internal.test.rest.JavaRestTestPlugin
10+
import org.elasticsearch.gradle.internal.test.rest.InternalJavaRestTestPlugin
1311
import org.elasticsearch.gradle.internal.test.InternalClusterTestPlugin
1412

1513
apply plugin: 'elasticsearch.internal-yaml-rest-test'
16-
apply plugin: 'elasticsearch.java-rest-test'
14+
apply plugin: 'elasticsearch.internal-java-rest-test'
1715
apply plugin: 'elasticsearch.internal-cluster-test'
1816

1917
/*
@@ -84,7 +82,7 @@ TaskProvider<Test> pooledInternalClusterTest = tasks.register("pooledInternalClu
8482
TaskProvider<RestIntegTestTask> pooledJavaRestTest = tasks.register("pooledJavaRestTest", RestIntegTestTask) {
8583
systemProperty 'es.set.netty.runtime.available.processors', 'false'
8684
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
87-
SourceSet javaRestTestSourceSet = sourceSets.getByName(JavaRestTestPlugin.SOURCE_SET_NAME)
85+
SourceSet javaRestTestSourceSet = sourceSets.getByName(InternalJavaRestTestPlugin.SOURCE_SET_NAME)
8886
setTestClassesDirs(javaRestTestSourceSet.getOutput().getClassesDirs())
8987
setClasspath(javaRestTestSourceSet.getRuntimeClasspath())
9088

0 commit comments

Comments
 (0)