Skip to content

Commit

Permalink
[7.14] Introduce external build-tools JavaRestTestPlugin (#77603) (#7…
Browse files Browse the repository at this point in the history
  • Loading branch information
mark-vieira committed Sep 13, 2021
1 parent 8aab0e5 commit 1d9f246
Show file tree
Hide file tree
Showing 51 changed files with 204 additions and 54 deletions.
6 changes: 3 additions & 3 deletions build-tools-internal/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,9 @@ gradlePlugin {
id = 'elasticsearch.java'
implementationClass = 'org.elasticsearch.gradle.internal.ElasticsearchJavaPlugin'
}
javaRestTest {
id = 'elasticsearch.java-rest-test'
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.JavaRestTestPlugin'
internalJavaRestTest {
id = 'elasticsearch.internal-java-rest-test'
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.InternalJavaRestTestPlugin'
}
repositories {
id = 'elasticsearch.repositories'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
/**
* Apply this plugin to run the Java based REST tests.
*/
public class JavaRestTestPlugin implements Plugin<Project> {
public class InternalJavaRestTestPlugin implements Plugin<Project> {

public static final String SOURCE_SET_NAME = "javaRestTest";

Expand Down
4 changes: 4 additions & 0 deletions build-tools/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ gradlePlugin {
id = 'elasticsearch.esplugin'
implementationClass = 'org.elasticsearch.gradle.plugin.PluginBuildPlugin'
}
javaRestTest {
id = 'elasticsearch.java-rest-test'
implementationClass = 'org.elasticsearch.gradle.test.JavaRestTestPlugin'
}
testclusters {
id = 'elasticsearch.testclusters'
implementationClass = 'org.elasticsearch.gradle.testclusters.TestClustersPlugin'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

package org.elasticsearch.gradle.test

import org.elasticsearch.gradle.VersionProperties
import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest
import org.gradle.testkit.runner.TaskOutcome

class JavaRestTestPluginFuncTest extends AbstractGradleFuncTest {

def "declares default dependencies"() {
given:
buildFile << """
plugins {
id 'elasticsearch.java-rest-test'
}
"""

when:
def result = gradleRunner("dependencies").build()
def output = normalized(result.output)
then:
output.contains(normalized("""
javaRestTestImplementation - Implementation only dependencies for source set 'java rest test'. (n)
/--- org.elasticsearch.test:framework:${VersionProperties.elasticsearch} (n)"""))
}

def "javaRestTest does nothing when there are no tests"() {
given:
buildFile << """
plugins {
id 'elasticsearch.java-rest-test'
}
repositories {
mavenCentral()
}
dependencies {
javaRestTestImplementation "org.elasticsearch.test:framework:7.14.0"
}
"""

when:
def result = gradleRunner("javaRestTest").build()
then:
result.task(':compileJavaRestTestJava').outcome == TaskOutcome.NO_SOURCE
result.task(':javaRestTest').outcome == TaskOutcome.NO_SOURCE
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

package org.elasticsearch.gradle.test;

import org.elasticsearch.gradle.VersionProperties;
import org.elasticsearch.gradle.plugin.PluginBuildPlugin;
import org.elasticsearch.gradle.testclusters.ElasticsearchCluster;
import org.elasticsearch.gradle.testclusters.StandaloneRestIntegTestTask;
import org.elasticsearch.gradle.testclusters.TestClustersPlugin;
import org.gradle.api.NamedDomainObjectContainer;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.bundling.Zip;
import org.gradle.language.base.plugins.LifecycleBasePlugin;

import static org.elasticsearch.gradle.plugin.PluginBuildPlugin.BUNDLE_PLUGIN_TASK_NAME;

public class JavaRestTestPlugin implements Plugin<Project> {

public static final String JAVA_REST_TEST = "javaRestTest";

@Override
public void apply(Project project) {
project.getPluginManager().apply(GradleTestPolicySetupPlugin.class);
project.getPluginManager().apply(TestClustersPlugin.class);
project.getPluginManager().apply(JavaBasePlugin.class);

// Setup source set and dependencies
var sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
var testSourceSet = sourceSets.maybeCreate(JAVA_REST_TEST);
var javaRestTestImplementation = project.getConfigurations().getByName(testSourceSet.getImplementationConfigurationName());

String elasticsearchVersion = VersionProperties.getElasticsearch();
javaRestTestImplementation.defaultDependencies(
deps -> deps.add(project.getDependencies().create("org.elasticsearch.test:framework:" + elasticsearchVersion))
);

// Register test cluster
NamedDomainObjectContainer<ElasticsearchCluster> testClusters = (NamedDomainObjectContainer<ElasticsearchCluster>) project
.getExtensions()
.getByName(TestClustersPlugin.EXTENSION_NAME);
var cluster = testClusters.maybeCreate(JAVA_REST_TEST);

// Register test task
TaskProvider<StandaloneRestIntegTestTask> javaRestTestTask = project.getTasks()
.register(JAVA_REST_TEST, StandaloneRestIntegTestTask.class, task -> {
task.useCluster(cluster);
task.setTestClassesDirs(testSourceSet.getOutput().getClassesDirs());
task.setClasspath(testSourceSet.getRuntimeClasspath());

var nonInputProperties = new SystemPropertyCommandLineArgumentProvider();
nonInputProperties.systemProperty("tests.rest.cluster", () -> String.join(",", cluster.getAllHttpSocketURI()));
nonInputProperties.systemProperty("tests.cluster", () -> String.join(",", cluster.getAllTransportPortURI()));
nonInputProperties.systemProperty("tests.clustername", () -> cluster.getName());
task.getJvmArgumentProviders().add(nonInputProperties);
});

// Register plugin bundle with test cluster
project.getPlugins().withType(PluginBuildPlugin.class, p -> {
TaskProvider<Zip> bundle = project.getTasks().withType(Zip.class).named(BUNDLE_PLUGIN_TASK_NAME);
cluster.plugin(bundle.flatMap(Zip::getArchiveFile));
javaRestTestTask.configure(t -> t.dependsOn(bundle));
});

// Wire up to check task
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(check -> check.dependsOn(javaRestTestTask));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,15 @@
import org.gradle.api.artifacts.type.ArtifactTypeDefinition;
import org.gradle.api.attributes.Attribute;
import org.gradle.api.internal.artifacts.ArtifactAttributes;
import org.gradle.api.plugins.BasePlugin;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.tasks.Copy;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.bundling.Zip;
import org.gradle.language.base.plugins.LifecycleBasePlugin;

import java.io.File;

Expand Down Expand Up @@ -85,6 +88,9 @@ public void apply(Project project) {
cluster.plugin(bundle.flatMap(Zip::getArchiveFile));
yamlRestTestTask.configure(t -> t.dependsOn(bundle));
});

// Wire up to check task
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(check -> check.dependsOn(yamlRestTestTask));
}

private static void setupDefaultDependencies(
Expand All @@ -107,7 +113,7 @@ private TaskProvider<StandaloneRestIntegTestTask> setupTestTask(
SourceSet testSourceSet,
ElasticsearchCluster cluster
) {
return project.getTasks().register("yamlRestTest", StandaloneRestIntegTestTask.class, task -> {
return project.getTasks().register(YAML_REST_TEST, StandaloneRestIntegTestTask.class, task -> {
task.useCluster(cluster);
task.setTestClassesDirs(testSourceSet.getOutput().getClassesDirs());
task.setClasspath(testSourceSet.getRuntimeClasspath());
Expand Down
2 changes: 1 addition & 1 deletion modules/kibana/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

esplugin {
description 'Plugin exposing APIs for Kibana system indices'
Expand Down
2 changes: 1 addition & 1 deletion modules/lang-mustache/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* Side Public License, v 1.
*/
apply plugin: 'elasticsearch.internal-yaml-rest-test'
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'
apply plugin: 'elasticsearch.internal-cluster-test'

esplugin {
Expand Down
2 changes: 1 addition & 1 deletion modules/reindex/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import org.elasticsearch.gradle.internal.test.AntFixture
apply plugin: 'elasticsearch.test-with-dependencies'
apply plugin: 'elasticsearch.jdk-download'
apply plugin: 'elasticsearch.internal-yaml-rest-test'
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'
apply plugin: 'elasticsearch.internal-cluster-test'

esplugin {
Expand Down
8 changes: 3 additions & 5 deletions modules/transport-netty4/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,12 @@
* Side Public License, v 1.
*/


import org.elasticsearch.gradle.internal.info.BuildParams
import org.elasticsearch.gradle.internal.test.RestIntegTestTask
import org.elasticsearch.gradle.internal.test.rest.JavaRestTestPlugin
import org.elasticsearch.gradle.internal.test.rest.InternalJavaRestTestPlugin
import org.elasticsearch.gradle.internal.test.InternalClusterTestPlugin

apply plugin: 'elasticsearch.internal-yaml-rest-test'
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'
apply plugin: 'elasticsearch.internal-cluster-test'

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

Expand Down
9 changes: 9 additions & 0 deletions plugins/examples/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@ subprojects { p ->
p.dependencies.add("restTestSpecs", p.dependencies.project(path:':rest-api-spec', configuration:'basicRestSpecs'))
}
})

// configure project dependencies for java rest test plugin.
// plugin defaults to external available artifacts
p.getPluginManager().withPlugin("elasticsearch.java-rest-test", new Action<AppliedPlugin>() {
@Override
void execute(AppliedPlugin appliedPlugin) {
p.dependencies.add("javaRestTestImplementation", project(":test:framework"))
}
})
}

configure(project('painless-whitelist')) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
apply plugin: 'elasticsearch.internal-es-plugin'
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

esplugin {
name 'security-authorization-engine'
Expand Down
2 changes: 1 addition & 1 deletion qa/die-with-dignity/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import org.elasticsearch.gradle.internal.info.BuildParams
import org.elasticsearch.gradle.util.GradleUtils

apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'
apply plugin: 'elasticsearch.internal-es-plugin'

esplugin {
Expand Down
2 changes: 1 addition & 1 deletion qa/system-indices/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*/

apply plugin: 'elasticsearch.internal-es-plugin'
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

esplugin {
name 'system-indices-qa'
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/async-search/qa/security/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

dependencies {
javaRestTestImplementation(testArtifact(project(xpackModule('core'))))
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/data-streams/qa/multi-node/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import org.elasticsearch.gradle.internal.info.BuildParams

apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

File repoDir = file("$buildDir/testclusters/repo")

Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/data-streams/qa/rest/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import org.elasticsearch.gradle.internal.info.BuildParams

apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'
apply plugin: 'elasticsearch.internal-yaml-rest-test'

restResources {
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/deprecation/qa/rest/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import org.elasticsearch.gradle.util.GradleUtils
import org.elasticsearch.gradle.internal.info.BuildParams

apply plugin: 'elasticsearch.internal-es-plugin'
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

esplugin {
description 'Deprecated query plugin'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

import org.elasticsearch.gradle.internal.info.BuildParams

Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/enrich/qa/rest-with-security/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

import org.elasticsearch.gradle.internal.info.BuildParams

Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/enrich/qa/rest/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'
apply plugin: 'elasticsearch.internal-yaml-rest-test'

import org.elasticsearch.gradle.internal.info.BuildParams
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/eql/qa/correctness/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'
apply plugin: 'elasticsearch.build'
apply plugin: 'elasticsearch.internal-testclusters'
tasks.named("test").configure { enabled = false }
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/eql/qa/rest/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'
apply plugin: 'elasticsearch.internal-yaml-rest-test'

import org.elasticsearch.gradle.internal.info.BuildParams
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/eql/qa/security/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

import org.elasticsearch.gradle.internal.info.BuildParams

Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/fleet/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

apply plugin: 'elasticsearch.internal-es-plugin'
apply plugin: 'elasticsearch.internal-cluster-test'
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

esplugin {
name 'x-pack-fleet'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import org.elasticsearch.gradle.internal.info.BuildParams
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

dependencies {
javaRestTestImplementation(testArtifact(project(xpackModule('core'))))
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/ilm/qa/multi-node/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import org.elasticsearch.gradle.util.GradleUtils
import org.elasticsearch.gradle.internal.info.BuildParams

apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

dependencies {
javaRestTestImplementation(testArtifact(project(xpackModule('core'))))
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/ilm/qa/with-security/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apply plugin: 'elasticsearch.java-rest-test'
apply plugin: 'elasticsearch.internal-java-rest-test'

dependencies {
javaRestTestImplementation project(path: xpackModule('core'))
Expand Down

0 comments on commit 1d9f246

Please sign in to comment.