diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java index 3657808b91979..7b9ad59878e28 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java @@ -20,9 +20,11 @@ import groovy.lang.Closure; import org.elasticsearch.gradle.util.GradleUtils; +import org.elasticsearch.gradle.util.Util; import org.gradle.api.DefaultTask; import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; import org.gradle.api.file.FileCollection; import org.gradle.api.file.FileTree; import org.gradle.api.tasks.Input; @@ -81,8 +83,9 @@ public Map> getClassFilesPerEnabledTask() { @Input public Map getTestClassNames() { if (testClassNames == null) { - testClassNames = GradleUtils.getJavaSourceSets(getProject()) - .getByName("test") + // add standard test source sets class files + testClassNames = Util.getJavaTestSourceSet(getProject()) + .get() .getOutput() .getClassesDirs() .getFiles() @@ -90,6 +93,20 @@ public Map getTestClassNames() { .filter(File::exists) .flatMap(testRoot -> walkPathAndLoadClasses(testRoot).entrySet().stream()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + // add yaml test source sets if they exist + if (Util.getYamlTestSourceSet(getProject()).isPresent()) { + Map yamlTestClassNames = Util.getYamlTestSourceSet(getProject()) + .get() + .getOutput() + .getClassesDirs() + .getFiles() + .stream() + .filter(File::exists) + .flatMap(testRoot -> walkPathAndLoadClasses(testRoot).entrySet().stream()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + testClassNames.putAll(yamlTestClassNames); + } } return testClassNames; } @@ -349,8 +366,11 @@ private FileCollection getTestsClassPath() { // the classes these don't influence the checks done by this task. // A side effect is that we could mark as up-to-date with missing dependencies, but these will be found when // running the tests. + Configuration yamlTestRuntime = getProject().getConfigurations().findByName("yamlTestRuntime"); + Configuration testRuntime = getProject().getConfigurations().getByName("testRuntime"); return getProject().files( - getProject().getConfigurations().getByName("testRuntime").resolve(), + testRuntime.resolve(), + yamlTestRuntime != null ? yamlTestRuntime.resolve() : null, GradleUtils.getJavaSourceSets(getProject()) .stream() .flatMap(sourceSet -> sourceSet.getOutput().getClassesDirs().getFiles().stream()) diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/CopyRestApiTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/CopyRestApiTask.java index a059400844c3d..31f443127f784 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/CopyRestApiTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/CopyRestApiTask.java @@ -20,7 +20,7 @@ import org.elasticsearch.gradle.VersionProperties; import org.elasticsearch.gradle.info.BuildParams; -import org.elasticsearch.gradle.util.GradleUtils; +import org.elasticsearch.gradle.util.Util; import org.gradle.api.DefaultTask; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; @@ -41,6 +41,8 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -109,7 +111,8 @@ public FileTree getInputDir() { @OutputDirectory public File getOutputDir() { - return new File(getTestSourceSet().getOutput().getResourcesDir(), REST_API_PREFIX); + assert Util.getSingleTestSourceSet(getProject()).isPresent(); + return new File(Util.getSingleTestSourceSet(getProject()).get().getOutput().getResourcesDir(), REST_API_PREFIX); } @TaskAction @@ -131,7 +134,8 @@ void copy() { ); project.copy(c -> { c.from(project.zipTree(coreConfig.getSingleFile())); - c.into(getTestSourceSet().getOutput().getResourcesDir()); // this ends up as the same dir as outputDir + // this ends up as the same dir as outputDir + c.into(Objects.requireNonNull(Util.getSingleTestSourceSet(getProject()).orElseThrow().getOutput().getResourcesDir())); if (includeCore.get().isEmpty()) { c.include(REST_API_PREFIX + "/**"); } else { @@ -178,31 +182,26 @@ private boolean projectHasYamlRestTests() { } private File getTestSourceResourceDir() { - SourceSet testSources = getTestSourceSet(); - if (testSources == null) { - return null; - } - Set resourceDir = testSources.getResources() - .getSrcDirs() - .stream() - .filter(f -> f.isDirectory() && f.getParentFile().getName().equals("test") && f.getName().equals("resources")) - .collect(Collectors.toSet()); - assert resourceDir.size() <= 1; - if (resourceDir.size() == 0) { + Optional testSourceSet = Util.getSingleTestSourceSet(getProject()); + if (testSourceSet.isPresent()) { + SourceSet testSources = testSourceSet.get(); + Set resourceDir = testSources.getResources() + .getSrcDirs() + .stream() + .filter(f -> f.isDirectory() && f.getParentFile().getName().equals("test") && f.getName().equals("resources")) + .collect(Collectors.toSet()); + assert resourceDir.size() <= 1; + if (resourceDir.size() == 0) { + return null; + } + return resourceDir.iterator().next(); + } else { return null; } - return resourceDir.iterator().next(); } private File getTestOutputResourceDir() { - SourceSet testSources = getTestSourceSet(); - if (testSources == null) { - return null; - } - return testSources.getOutput().getResourcesDir(); - } - - private SourceSet getTestSourceSet() { - return GradleUtils.getJavaSourceSets(getProject()).findByName("test"); + Optional testSourceSet = Util.getSingleTestSourceSet(getProject()); + return testSourceSet.map(sourceSet -> sourceSet.getOutput().getResourcesDir()).orElse(null); } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/CopyRestTestsTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/CopyRestTestsTask.java index 0d067b40edb29..abb802d5f95f7 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/CopyRestTestsTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/CopyRestTestsTask.java @@ -20,7 +20,7 @@ import org.elasticsearch.gradle.VersionProperties; import org.elasticsearch.gradle.info.BuildParams; -import org.elasticsearch.gradle.util.GradleUtils; +import org.elasticsearch.gradle.util.Util; import org.gradle.api.DefaultTask; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; @@ -31,7 +31,6 @@ import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.SkipWhenEmpty; -import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.util.PatternFilterable; import org.gradle.api.tasks.util.PatternSet; @@ -39,6 +38,7 @@ import javax.inject.Inject; import java.io.File; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -103,7 +103,8 @@ public FileTree getInputDir() { @OutputDirectory public File getOutputDir() { - return new File(getTestSourceSet().getOutput().getResourcesDir(), REST_TEST_PREFIX); + assert Util.getSingleTestSourceSet(getProject()).isPresent(); + return new File(Util.getSingleTestSourceSet(getProject()).get().getOutput().getResourcesDir(), REST_TEST_PREFIX); } @TaskAction @@ -127,7 +128,8 @@ void copy() { ); project.copy(c -> { c.from(project.zipTree(coreConfig.getSingleFile())); - c.into(getTestSourceSet().getOutput().getResourcesDir()); // this ends up as the same dir as outputDir + // this ends up as the same dir as outputDir + c.into(Objects.requireNonNull(Util.getSingleTestSourceSet(getProject()).orElseThrow().getOutput().getResourcesDir())); c.include( includeCore.get().stream().map(prefix -> REST_TEST_PREFIX + "/" + prefix + "*/**").collect(Collectors.toList()) ); @@ -144,8 +146,4 @@ void copy() { }); } } - - private SourceSet getTestSourceSet() { - return GradleUtils.getJavaSourceSets(getProject()).findByName("test"); - } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/YamlTestPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/YamlTestPlugin.java new file mode 100644 index 0000000000000..b1c7add6e98b5 --- /dev/null +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/YamlTestPlugin.java @@ -0,0 +1,134 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.gradle.test.rest; + +import org.elasticsearch.gradle.plugin.PluginPropertiesExtension; +import org.elasticsearch.gradle.test.RestIntegTestTask; +import org.elasticsearch.gradle.testclusters.RestTestRunnerTask; +import org.elasticsearch.gradle.testclusters.TestClustersPlugin; +import org.gradle.api.InvalidUserDataException; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.plugins.JavaBasePlugin; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.bundling.Zip; +import org.gradle.plugins.ide.eclipse.model.EclipseModel; +import org.gradle.plugins.ide.idea.model.IdeaModel; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +/** + * Apply this plugin to run the YAML based REST tests. This will adda + */ +public class YamlTestPlugin implements Plugin { + + @Override + public void apply(Project project) { + + if (project.getPluginManager().hasPlugin("elasticsearch.build") == false + && project.getPluginManager().hasPlugin("elasticsearch.standalone-rest-test") == false) { + throw new InvalidUserDataException( + "elasticsearch.build or elasticsearch.standalone-rest-test plugin " + "must be applied before the YAML test plugin" + ); + } + + // project.getPluginManager().apply(JavaPlugin.class); // for the Java based runner + project.getPluginManager().apply(TestClustersPlugin.class); // to spin up the external cluster + project.getPluginManager().apply(RestResourcesPlugin.class); // to copy around the yaml tests and json spec + + // create source set + SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); + SourceSet yamlTestSourceSet = sourceSets.create("yamlTest"); + + // create task + RestIntegTestTask yamlTestTask = project.getTasks() + .create("yamlTest", RestIntegTestTask.class, task -> { task.dependsOn(project.getTasks().getByName("copyRestApiSpecsTask")); }); + yamlTestTask.setGroup(JavaBasePlugin.VERIFICATION_GROUP); + yamlTestTask.setDescription("Runs the YAML based REST tests against an external cluster"); + + // setup task dependency + project.getDependencies().add("yamlTestCompile", project.project(":test:framework")); + + // ensure correct dependency and execution order + project.getTasks().getByName("check").dependsOn(yamlTestTask); + Task testTask = project.getTasks().findByName("test"); + if (testTask != null) { + yamlTestTask.mustRunAfter(testTask); + } + yamlTestTask.mustRunAfter(project.getTasks().getByName("precommit")); + + // setup the runner + RestTestRunnerTask runner = (RestTestRunnerTask) project.getTasks().getByName(yamlTestTask.getName() + "Runner"); + runner.setTestClassesDirs(yamlTestSourceSet.getOutput().getClassesDirs()); + runner.setClasspath(yamlTestSourceSet.getRuntimeClasspath()); + + // if this a module or plugin, it may have an associated zip file with it's contents, add that to the test cluster + boolean isModule = project.getPath().startsWith(":modules:"); + Zip bundle = (Zip) project.getTasks().findByName("bundlePlugin"); + if (bundle != null) { + yamlTestTask.dependsOn(bundle); + if (isModule) { + runner.getClusters().forEach(c -> c.module(bundle.getArchiveFile())); + } else { + runner.getClusters().forEach(c -> c.plugin(project.getObjects().fileProperty().value(bundle.getArchiveFile()))); + } + } + + // es-plugins may declare dependencies on additional modules, add those to the test cluster too. + project.afterEvaluate(p -> { + PluginPropertiesExtension pluginPropertiesExtension = project.getExtensions().findByType(PluginPropertiesExtension.class); + if (pluginPropertiesExtension != null) { // not all projects are defined as plugins + pluginPropertiesExtension.getExtendedPlugins().forEach(pluginName -> { + Project extensionProject = project.getProject().findProject(":modules:" + pluginName); + if (extensionProject != null) { // extension plugin may be defined, but not required to be a module + Zip extensionBundle = (Zip) extensionProject.getTasks().getByName("bundlePlugin"); + yamlTestTask.dependsOn(extensionBundle); + runner.getClusters().forEach(c -> c.module(extensionBundle.getArchiveFile())); + } + }); + } + }); + + // setup eclipse + EclipseModel eclipse = project.getExtensions().getByType(EclipseModel.class); + List eclipseSourceSets = StreamSupport.stream(eclipse.getClasspath().getSourceSets().spliterator(), false) + .collect(Collectors.toList()); + eclipseSourceSets.add(yamlTestSourceSet); + eclipse.getClasspath().setSourceSets(eclipseSourceSets); + List plusConfiguration = new ArrayList<>(eclipse.getClasspath().getPlusConfigurations()); + plusConfiguration.add(project.getConfigurations().getByName("yamlTestRuntimeClasspath")); + eclipse.getClasspath().setPlusConfigurations(plusConfiguration); + + // setup intellij + IdeaModel idea = project.getExtensions().getByType(IdeaModel.class); + idea.getModule().getTestSourceDirs().addAll(yamlTestSourceSet.getJava().getSrcDirs()); + idea.getModule() + .getScopes() + .put("TEST", Map.of("plus", Collections.singletonList(project.getConfigurations().getByName("yamlTestRuntimeClasspath")))); + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/util/Util.java b/buildSrc/src/main/java/org/elasticsearch/gradle/util/Util.java index bd29fa08e9a78..eb82361d45b63 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/util/Util.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/util/Util.java @@ -102,7 +102,7 @@ public static FileTree getJavaMainSourceResources(Project project, Action filter) { - final Optional testFileTree = getJavaTestSourceSet(project).map(SourceSet::getResources).map(FileTree::getAsFileTree); + final Optional testFileTree = getSingleTestSourceSet(project).map(SourceSet::getResources).map(FileTree::getAsFileTree); return testFileTree.map(files -> files.matching(filter)).orElse(null); } @@ -113,7 +113,7 @@ public static FileTree getJavaTestSourceResources(Project project, Action filter) { - final Optional testFileTree = getJavaTestSourceSet(project).map(SourceSet::getResources).map(FileTree::getAsFileTree); + final Optional testFileTree = getSingleTestSourceSet(project).map(SourceSet::getResources).map(FileTree::getAsFileTree); final Optional mainFileTree = getJavaMainSourceSet(project).map(SourceSet::getResources).map(FileTree::getAsFileTree); if (testFileTree.isPresent() && mainFileTree.isPresent()) { return testFileTree.get().plus(mainFileTree.get()).matching(filter); @@ -126,15 +126,39 @@ public static FileTree getJavaTestAndMainSourceResources(Project project, Action } /** + * Returns the source set for either the YamlTests or the standard test source set. Preference goes to YamlTest source set if it exists. + * * @param project The project to look for test Java resources. * @return An Optional that contains the Java test SourceSet if it exists. */ + public static Optional getSingleTestSourceSet(Project project) { + if (getYamlTestSourceSet(project).isPresent()) { + return getYamlTestSourceSet(project); + } else { + return getJavaTestSourceSet(project); + } + } + + /** + * @param project The project to look for test Java sources. + * @return An Optional that contains the Java test SourceSet if it exists. + */ public static Optional getJavaTestSourceSet(Project project) { return project.getConvention().findPlugin(JavaPluginConvention.class) == null ? Optional.empty() : Optional.ofNullable(GradleUtils.getJavaSourceSets(project).findByName(SourceSet.TEST_SOURCE_SET_NAME)); } + /** + * @param project The project to look for yaml test sources. + * @return An Optional that contains the yaml test SourceSet if it exists. + */ + public static Optional getYamlTestSourceSet(Project project) { + return project.getConvention().findPlugin(JavaPluginConvention.class) == null + ? Optional.empty() + : Optional.ofNullable(GradleUtils.getJavaSourceSets(project).findByName("yamlTest")); + } + /** * @param project The project to look for main Java resources. * @return An Optional that contains the Java main SourceSet if it exists. diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/elasticsearch.yaml-test.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/elasticsearch.yaml-test.properties new file mode 100644 index 0000000000000..4c8b723ff5c24 --- /dev/null +++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/elasticsearch.yaml-test.properties @@ -0,0 +1,20 @@ +# +# Licensed to Elasticsearch under one or more contributor +# license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright +# ownership. Elasticsearch licenses this file to you under +# the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +implementation-class=org.elasticsearch.gradle.test.rest.YamlTestPlugin diff --git a/distribution/archives/build.gradle b/distribution/archives/build.gradle index 4534cfb356fa2..6410c29adbb4c 100644 --- a/distribution/archives/build.gradle +++ b/distribution/archives/build.gradle @@ -327,6 +327,7 @@ subprojects { configure(subprojects.findAll { it.name == 'integ-test-zip' }) { apply plugin: 'elasticsearch.standalone-rest-test' apply plugin: 'elasticsearch.rest-test' + apply plugin: 'elasticsearch.yaml-test' group = "org.elasticsearch.distribution.integ-test-zip" @@ -336,7 +337,7 @@ configure(subprojects.findAll { it.name == 'integ-test-zip' }) { } } - integTest { + yamlTest { dependsOn assemble } diff --git a/distribution/archives/integ-test-zip/build.gradle b/distribution/archives/integ-test-zip/build.gradle index ed8f893d7f840..119a8c337982f 100644 --- a/distribution/archives/integ-test-zip/build.gradle +++ b/distribution/archives/integ-test-zip/build.gradle @@ -17,7 +17,7 @@ * under the License. */ -integTest.runner { +yamlTest.runner { /* * There are two unique things going on here: * 1. These tests can be run against an external cluster with diff --git a/distribution/archives/integ-test-zip/src/test/java/org/elasticsearch/test/rest/IntegTestZipClientYamlTestSuiteIT.java b/distribution/archives/integ-test-zip/src/yamlTest/java/org/elasticsearch/test/rest/IntegTestZipClientYamlTestSuiteIT.java similarity index 100% rename from distribution/archives/integ-test-zip/src/test/java/org/elasticsearch/test/rest/IntegTestZipClientYamlTestSuiteIT.java rename to distribution/archives/integ-test-zip/src/yamlTest/java/org/elasticsearch/test/rest/IntegTestZipClientYamlTestSuiteIT.java diff --git a/modules/ingest-common/build.gradle b/modules/ingest-common/build.gradle index 605096e26cd02..06fd2477278d1 100644 --- a/modules/ingest-common/build.gradle +++ b/modules/ingest-common/build.gradle @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ - +apply plugin: 'elasticsearch.yaml-test' esplugin { description 'Module for ingest processors that do not require additional security permissions or have large dependencies and resources' classname 'org.elasticsearch.ingest.common.IngestCommonPlugin' @@ -35,7 +35,7 @@ restResources { } } -testClusters.integTest { +testClusters.all { // Needed in order to test ingest pipeline templating: // (this is because the integTest node is not using default distribution, but only the minimal number of required modules) module project(':modules:lang-mustache').tasks.bundlePlugin.archiveFile diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/IngestCommonClientYamlTestSuiteIT.java b/modules/ingest-common/src/yamlTest/java/org/elasticsearch/ingest/common/IngestCommonClientYamlTestSuiteIT.java similarity index 100% rename from modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/IngestCommonClientYamlTestSuiteIT.java rename to modules/ingest-common/src/yamlTest/java/org/elasticsearch/ingest/common/IngestCommonClientYamlTestSuiteIT.java diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/100_date_index_name_processor.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/100_date_index_name_processor.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/100_date_index_name_processor.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/100_date_index_name_processor.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/10_basic.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/10_basic.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/10_basic.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/10_basic.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/110_sort.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/110_sort.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/110_sort.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/110_sort.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/120_grok.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/120_grok.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/120_grok.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/120_grok.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/130_escape_dot.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/130_escape_dot.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/130_escape_dot.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/130_escape_dot.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/140_json.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/140_json.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/140_json.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/140_json.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/150_kv.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/150_kv.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/150_kv.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/150_kv.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/160_urldecode.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/160_urldecode.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/160_urldecode.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/160_urldecode.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/170_version.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/170_version.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/170_version.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/170_version.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/180_bytes_processor.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/180_bytes_processor.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/180_bytes_processor.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/180_bytes_processor.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/190_script_processor.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/190_script_processor.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/190_script_processor.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/190_script_processor.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/200_default_pipeline.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/200_default_pipeline.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/200_default_pipeline.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/200_default_pipeline.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/200_dissect_processor.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/200_dissect_processor.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/200_dissect_processor.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/200_dissect_processor.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/20_crud.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/20_crud.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/20_crud.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/20_crud.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/210_conditional_processor.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/210_conditional_processor.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/210_conditional_processor.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/210_conditional_processor.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/210_pipeline_processor.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/210_pipeline_processor.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/210_pipeline_processor.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/210_pipeline_processor.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/220_drop_processor.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/220_drop_processor.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/220_drop_processor.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/220_drop_processor.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/230_change_target_index.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/230_change_target_index.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/230_change_target_index.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/230_change_target_index.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/240_required_pipeline.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/240_required_pipeline.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/240_required_pipeline.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/240_required_pipeline.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/250_csv.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/250_csv.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/250_csv.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/250_csv.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/30_date_processor.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/30_date_processor.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/30_date_processor.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/30_date_processor.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/40_mutate.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/40_mutate.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/40_mutate.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/40_mutate.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/50_on_failure.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/50_on_failure.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/50_on_failure.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/50_on_failure.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/60_fail.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/60_fail.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/60_fail.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/60_fail.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/70_bulk.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/70_bulk.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/70_bulk.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/70_bulk.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/80_foreach.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/80_foreach.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/80_foreach.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/80_foreach.yml diff --git a/modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/90_simulate.yml b/modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/90_simulate.yml similarity index 100% rename from modules/ingest-common/src/test/resources/rest-api-spec/test/ingest/90_simulate.yml rename to modules/ingest-common/src/yamlTest/resources/rest-api-spec/test/ingest/90_simulate.yml diff --git a/plugins/analysis-icu/build.gradle b/plugins/analysis-icu/build.gradle index e4bec84d1fabb..727c979f23bb6 100644 --- a/plugins/analysis-icu/build.gradle +++ b/plugins/analysis-icu/build.gradle @@ -24,10 +24,12 @@ esplugin { classname 'org.elasticsearch.plugin.analysis.icu.AnalysisICUPlugin' } -tasks.withType(CheckForbiddenApis).configureEach { - signatures += [ - "com.ibm.icu.text.Collator#getInstance() @ Don't use default locale, use getInstance(ULocale) instead" - ] +tasks.withType(CheckForbiddenApis).configureEach { c -> + if (c.name.endsWith('YamlTest') == false) { + signatures += [ + "com.ibm.icu.text.Collator#getInstance() @ Don't use default locale, use getInstance(ULocale) instead" + ] + } } dependencies { diff --git a/plugins/analysis-icu/src/test/java/org/elasticsearch/index/analysis/IcuClientYamlTestSuiteIT.java b/plugins/analysis-icu/src/yamlTest/java/org/elasticsearch/index/analysis/IcuClientYamlTestSuiteIT.java similarity index 100% rename from plugins/analysis-icu/src/test/java/org/elasticsearch/index/analysis/IcuClientYamlTestSuiteIT.java rename to plugins/analysis-icu/src/yamlTest/java/org/elasticsearch/index/analysis/IcuClientYamlTestSuiteIT.java diff --git a/plugins/analysis-icu/src/test/resources/rest-api-spec/test/analysis_icu/10_basic.yml b/plugins/analysis-icu/src/yamlTest/resources/rest-api-spec/test/analysis_icu/10_basic.yml similarity index 100% rename from plugins/analysis-icu/src/test/resources/rest-api-spec/test/analysis_icu/10_basic.yml rename to plugins/analysis-icu/src/yamlTest/resources/rest-api-spec/test/analysis_icu/10_basic.yml diff --git a/plugins/analysis-icu/src/test/resources/rest-api-spec/test/analysis_icu/20_search.yml b/plugins/analysis-icu/src/yamlTest/resources/rest-api-spec/test/analysis_icu/20_search.yml similarity index 100% rename from plugins/analysis-icu/src/test/resources/rest-api-spec/test/analysis_icu/20_search.yml rename to plugins/analysis-icu/src/yamlTest/resources/rest-api-spec/test/analysis_icu/20_search.yml diff --git a/x-pack/plugin/ilm/qa/rest/build.gradle b/x-pack/plugin/ilm/qa/rest/build.gradle index 4bea097f56bba..b9a21fae433ce 100644 --- a/x-pack/plugin/ilm/qa/rest/build.gradle +++ b/x-pack/plugin/ilm/qa/rest/build.gradle @@ -1,11 +1,9 @@ -import org.elasticsearch.gradle.test.RestIntegTestTask - -apply plugin: 'elasticsearch.testclusters' -apply plugin: 'elasticsearch.standalone-test' +apply plugin: 'elasticsearch.build' +apply plugin: 'elasticsearch.yaml-test' dependencies { - testCompile project(path: xpackModule('core'), configuration: 'testArtifacts') - testCompile project(path: xpackModule('ilm'), configuration: 'runtime') + yamlTestCompile project(path: xpackModule('core'), configuration: 'testArtifacts') + yamlTestCompile project(path: xpackModule('ilm'), configuration: 'runtime') } restResources { @@ -18,15 +16,12 @@ restResources { def clusterCredentials = [username: System.getProperty('tests.rest.cluster.username', 'test_admin'), password: System.getProperty('tests.rest.cluster.password', 'x-pack-test-password')] -task restTest(type: RestIntegTestTask) { - mustRunAfter(precommit) - runner { - systemProperty 'tests.rest.cluster.username', clusterCredentials.username - systemProperty 'tests.rest.cluster.password', clusterCredentials.password - } +yamlTestRunner { + systemProperty 'tests.rest.cluster.username', clusterCredentials.username + systemProperty 'tests.rest.cluster.password', clusterCredentials.password } -testClusters.restTest { +testClusters.all { testDistribution = 'DEFAULT' setting 'xpack.ml.enabled', 'false' setting 'xpack.security.enabled', 'true' @@ -34,5 +29,4 @@ testClusters.restTest { user clusterCredentials } -check.dependsOn restTest test.enabled = false diff --git a/x-pack/plugin/ilm/qa/rest/src/test/java/org/elasticsearch/xpack/ilm/IndexLifecycleRestIT.java b/x-pack/plugin/ilm/qa/rest/src/yamlTest/java/org/elasticsearch/xpack/ilm/IndexLifecycleRestIT.java similarity index 90% rename from x-pack/plugin/ilm/qa/rest/src/test/java/org/elasticsearch/xpack/ilm/IndexLifecycleRestIT.java rename to x-pack/plugin/ilm/qa/rest/src/yamlTest/java/org/elasticsearch/xpack/ilm/IndexLifecycleRestIT.java index bc753540c9e91..2d489e6dafb4e 100644 --- a/x-pack/plugin/ilm/qa/rest/src/test/java/org/elasticsearch/xpack/ilm/IndexLifecycleRestIT.java +++ b/x-pack/plugin/ilm/qa/rest/src/yamlTest/java/org/elasticsearch/xpack/ilm/IndexLifecycleRestIT.java @@ -38,10 +38,6 @@ public static Iterable parameters() throws Exception { @Override protected Settings restClientSettings() { String token = basicAuthHeaderValue(USER, new SecureString(PASS.toCharArray())); - return Settings.builder() - .put(super.restClientSettings()) - .put(ThreadContext.PREFIX + ".Authorization", token) - .build(); + return Settings.builder().put(super.restClientSettings()).put(ThreadContext.PREFIX + ".Authorization", token).build(); } } - diff --git a/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/10_basic.yml b/x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/10_basic.yml similarity index 100% rename from x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/10_basic.yml rename to x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/10_basic.yml diff --git a/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/11_basic_slm.yml b/x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/11_basic_slm.yml similarity index 100% rename from x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/11_basic_slm.yml rename to x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/11_basic_slm.yml diff --git a/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/20_move_to_step.yml b/x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/20_move_to_step.yml similarity index 100% rename from x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/20_move_to_step.yml rename to x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/20_move_to_step.yml diff --git a/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/30_retry.yml b/x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/30_retry.yml similarity index 100% rename from x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/30_retry.yml rename to x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/30_retry.yml diff --git a/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/40_explain_lifecycle.yml b/x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/40_explain_lifecycle.yml similarity index 100% rename from x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/40_explain_lifecycle.yml rename to x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/40_explain_lifecycle.yml diff --git a/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/60_operation_mode.yml b/x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/60_operation_mode.yml similarity index 100% rename from x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/60_operation_mode.yml rename to x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/60_operation_mode.yml diff --git a/x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/60_remove_policy_for_index.yml b/x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/60_remove_policy_for_index.yml similarity index 100% rename from x-pack/plugin/ilm/qa/rest/src/test/resources/rest-api-spec/test/ilm/60_remove_policy_for_index.yml rename to x-pack/plugin/ilm/qa/rest/src/yamlTest/resources/rest-api-spec/test/ilm/60_remove_policy_for_index.yml