mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-18 19:05:06 +00:00
Add TestWithDependenciesPlugin to build (#22646)
This commit adds a MessyRestTestPlugin to the gradle build. It extends StandaloneRestTestPlugin. The main piece of functionality that it adds is to copy plugin-metadata from dependencies into the generated-resources for the current test source. This is necessary to ensure that permissions for dependencies are applied when running the tests. A current limitation is that the permissions are applied differently than in the distribution sources. When permissions are granted to all depedencies for a module or plugin, the permissions are granted to all dependencies on the classpath for tests besides a few hardcoded exclusions: - es core - es test framework - lucene test framework - randomized runner - junit library
This commit is contained in:
parent
e03554070c
commit
a10aa8aade
@ -48,7 +48,7 @@ class MessyTestPlugin extends StandaloneTestPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static addPluginResources(Project project, Project pluginProject) {
|
private static addPluginResources(Project project, Project pluginProject) {
|
||||||
String outputDir = "generated-resources/${pluginProject.name}"
|
String outputDir = "${project.buildDir}/generated-resources/${pluginProject.name}"
|
||||||
String taskName = ClusterFormationTasks.pluginTaskName("copy", pluginProject.name, "Metadata")
|
String taskName = ClusterFormationTasks.pluginTaskName("copy", pluginProject.name, "Metadata")
|
||||||
Copy copyPluginMetadata = project.tasks.create(taskName, Copy.class)
|
Copy copyPluginMetadata = project.tasks.create(taskName, Copy.class)
|
||||||
copyPluginMetadata.into(outputDir)
|
copyPluginMetadata.into(outputDir)
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
import org.elasticsearch.gradle.plugin.PluginBuildPlugin
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.artifacts.Dependency
|
||||||
|
import org.gradle.api.artifacts.ProjectDependency
|
||||||
|
import org.gradle.api.tasks.Copy
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A plugin to run tests that depend on other plugins or modules.
|
||||||
|
*
|
||||||
|
* This plugin will add the plugin-metadata and properties files for each
|
||||||
|
* dependency to the test source set.
|
||||||
|
*/
|
||||||
|
class TestWithDependenciesPlugin implements Plugin<Project> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void apply(Project project) {
|
||||||
|
project.configurations.testCompile.dependencies.all { Dependency dep ->
|
||||||
|
// this closure is run every time a compile dependency is added
|
||||||
|
if (dep instanceof ProjectDependency && dep.dependencyProject.plugins.hasPlugin(PluginBuildPlugin)) {
|
||||||
|
project.gradle.projectsEvaluated {
|
||||||
|
addPluginResources(project, dep.dependencyProject)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static addPluginResources(Project project, Project pluginProject) {
|
||||||
|
String outputDir = "${project.buildDir}/generated-resources/${pluginProject.name}"
|
||||||
|
String taskName = ClusterFormationTasks.pluginTaskName("copy", pluginProject.name, "Metadata")
|
||||||
|
Copy copyPluginMetadata = project.tasks.create(taskName, Copy.class)
|
||||||
|
copyPluginMetadata.into(outputDir)
|
||||||
|
copyPluginMetadata.from(pluginProject.tasks.pluginProperties)
|
||||||
|
copyPluginMetadata.from(pluginProject.file('src/main/plugin-metadata'))
|
||||||
|
project.sourceSets.test.output.dir(outputDir, builtBy: taskName)
|
||||||
|
}
|
||||||
|
}
|
@ -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.TestWithDependenciesPlugin
|
@ -17,6 +17,8 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
apply plugin: 'elasticsearch.test-with-dependencies'
|
||||||
|
|
||||||
esplugin {
|
esplugin {
|
||||||
description 'The Reindex module adds APIs to reindex from one index to another or update documents in place.'
|
description 'The Reindex module adds APIs to reindex from one index to another or update documents in place.'
|
||||||
classname 'org.elasticsearch.index.reindex.ReindexPlugin'
|
classname 'org.elasticsearch.index.reindex.ReindexPlugin'
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
apply plugin: 'elasticsearch.standalone-rest-test'
|
apply plugin: 'elasticsearch.standalone-rest-test'
|
||||||
apply plugin: 'elasticsearch.rest-test'
|
apply plugin: 'elasticsearch.rest-test'
|
||||||
|
apply plugin: 'elasticsearch.test-with-dependencies'
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testCompile project(path: ':modules:transport-netty4', configuration: 'runtime') // for http
|
testCompile project(path: ':modules:transport-netty4', configuration: 'runtime') // for http
|
||||||
|
Loading…
x
Reference in New Issue
Block a user