@@ -20,10 +20,15 @@ package org.elasticsearch.gradle.test
2020
2121import com.carrotsearch.gradle.junit4.RandomizedTestingTask
2222import org.elasticsearch.gradle.BuildPlugin
23+ import org.elasticsearch.gradle.VersionProperties
2324import org.gradle.api.DefaultTask
25+ import org.gradle.api.Project
2426import org.gradle.api.Task
2527import org.gradle.api.execution.TaskExecutionAdapter
2628import org.gradle.api.internal.tasks.options.Option
29+ import org.gradle.api.provider.Property
30+ import org.gradle.api.provider.Provider
31+ import org.gradle.api.tasks.Copy
2732import org.gradle.api.tasks.Input
2833import org.gradle.api.tasks.TaskState
2934
@@ -47,7 +52,7 @@ public class RestIntegTestTask extends DefaultTask {
4752
4853 /* * Flag indicating whether the rest tests in the rest spec should be run. */
4954 @Input
50- boolean includePackaged = false
55+ Property< Boolean > includePackaged = project . objects . property( Boolean )
5156
5257 public RestIntegTestTask () {
5358 runner = project. tasks. create(" ${ name} Runner" , RandomizedTestingTask . class)
@@ -92,10 +97,9 @@ public class RestIntegTestTask extends DefaultTask {
9297 }
9398
9499 // copy the rest spec/tests into the test resources
95- RestSpecHack . configureDependencies(project)
96- project. afterEvaluate {
97- runner. dependsOn(RestSpecHack . configureTask(project, includePackaged))
98- }
100+ Task copyRestSpec = createCopyRestSpecTask(project, includePackaged)
101+ runner. dependsOn(copyRestSpec)
102+
99103 // this must run after all projects have been configured, so we know any project
100104 // references can be accessed as a fully configured
101105 project. gradle. projectsEvaluated {
@@ -109,6 +113,11 @@ public class RestIntegTestTask extends DefaultTask {
109113 }
110114 }
111115
116+ /* * Sets the includePackaged property */
117+ public void includePackaged (boolean include ) {
118+ includePackaged. set(include)
119+ }
120+
112121 @Option (
113122 option = " debug-jvm" ,
114123 description = " Enable debugging configuration, to allow attaching a debugger to elasticsearch."
@@ -184,4 +193,47 @@ public class RestIntegTestTask extends DefaultTask {
184193 println (' =========================================' )
185194
186195 }
196+
197+ /**
198+ * Creates a task (if necessary) to copy the rest spec files.
199+ *
200+ * @param project The project to add the copy task to
201+ * @param includePackagedTests true if the packaged tests should be copied, false otherwise
202+ */
203+ private static Task createCopyRestSpecTask (Project project , Provider<Boolean > includePackagedTests ) {
204+ project. configurations {
205+ restSpec
206+ }
207+ project. dependencies {
208+ restSpec " org.elasticsearch:rest-api-spec:${ VersionProperties.elasticsearch} "
209+ }
210+ Task copyRestSpec = project. tasks. findByName(' copyRestSpec' )
211+ if (copyRestSpec != null ) {
212+ return copyRestSpec
213+ }
214+ Map copyRestSpecProps = [
215+ name : ' copyRestSpec' ,
216+ type : Copy ,
217+ dependsOn : [project. configurations. restSpec, ' processTestResources' ]
218+ ]
219+ copyRestSpec = project. tasks. create(copyRestSpecProps) {
220+ into project. sourceSets. test. output. resourcesDir
221+ }
222+ project. afterEvaluate {
223+ copyRestSpec. from({ project. zipTree(project. configurations. restSpec. singleFile) }) {
224+ include ' rest-api-spec/api/**'
225+ if (includePackagedTests. get()) {
226+ include ' rest-api-spec/test/**'
227+ }
228+ }
229+ }
230+ project. idea {
231+ module {
232+ if (scopes. TEST != null ) {
233+ scopes. TEST . plus. add(project. configurations. restSpec)
234+ }
235+ }
236+ }
237+ return copyRestSpec
238+ }
187239}
0 commit comments