Skip to content

Commit d47d450

Browse files
committed
Merge branch 'master' into feature/runtime_fields
2 parents acfaccb + 49f886d commit d47d450

File tree

248 files changed

+3631
-2541
lines changed

Some content is hidden

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

248 files changed

+3631
-2541
lines changed

buildSrc/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ dependencies {
9393

9494
api 'commons-codec:commons-codec:1.12'
9595
api 'org.apache.commons:commons-compress:1.19'
96-
96+
api 'org.apache.ant:ant:1.10.8'
9797
api 'com.netflix.nebula:gradle-extra-configurations-plugin:3.0.3'
9898
api 'com.netflix.nebula:nebula-publishing-plugin:4.4.4'
9999
api 'com.netflix.nebula:gradle-info-plugin:7.1.3'
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
/*
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.elasticsearch.gradle
21+
22+
import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest
23+
import org.elasticsearch.gradle.transform.SymbolicLinkPreservingUntarTransform
24+
import org.gradle.testkit.runner.TaskOutcome
25+
import spock.lang.Unroll
26+
27+
import static org.elasticsearch.gradle.fixtures.DistributionDownloadFixture.withMockedDistributionDownload
28+
29+
class DistributionDownloadPluginFuncTest extends AbstractGradleFuncTest {
30+
31+
@Unroll
32+
def "#distType version can be resolved"() {
33+
given:
34+
buildFile << applyPluginAndSetupDistro(version, platform)
35+
36+
when:
37+
def result = withMockedDistributionDownload(version, platform, gradleRunner('setupDistro', '-i')) {
38+
build()
39+
}
40+
41+
then:
42+
result.task(":setupDistro").outcome == TaskOutcome.SUCCESS
43+
assertExtractedDistroCreated("build/distro")
44+
45+
where:
46+
version | platform | distType
47+
VersionProperties.getElasticsearch() | ElasticsearchDistribution.Platform.LINUX | "current"
48+
"8.1.0-SNAPSHOT" | ElasticsearchDistribution.Platform.LINUX | "bwc"
49+
"7.0.0" | ElasticsearchDistribution.Platform.WINDOWS | "released"
50+
}
51+
52+
53+
def "transformed versions are kept across builds"() {
54+
given:
55+
def version = VersionProperties.getElasticsearch()
56+
def platform = ElasticsearchDistribution.Platform.LINUX
57+
58+
buildFile << applyPluginAndSetupDistro(version, platform)
59+
buildFile << """
60+
apply plugin:'base'
61+
"""
62+
63+
when:
64+
def runner = gradleRunner('clean', 'setupDistro', '-i')
65+
def result = withMockedDistributionDownload(version, platform, runner) {
66+
// initial run
67+
build()
68+
// 2nd invocation
69+
build()
70+
}
71+
72+
then:
73+
result.task(":setupDistro").outcome == TaskOutcome.SUCCESS
74+
assertOutputContains(result.output, "Skipping ${SymbolicLinkPreservingUntarTransform.class.simpleName}")
75+
}
76+
77+
def "transforms are reused across projects"() {
78+
given:
79+
def version = VersionProperties.getElasticsearch()
80+
def platform = ElasticsearchDistribution.Platform.LINUX
81+
82+
3.times {
83+
settingsFile << """
84+
include ':sub-$it'
85+
"""
86+
}
87+
buildFile.text = """
88+
import org.elasticsearch.gradle.Architecture
89+
90+
plugins {
91+
id 'elasticsearch.distribution-download'
92+
}
93+
94+
subprojects {
95+
apply plugin: 'elasticsearch.distribution-download'
96+
97+
${setupTestDistro(version, platform)}
98+
${setupDistroTask()}
99+
}
100+
"""
101+
102+
when:
103+
def customGradleUserHome = testProjectDir.newFolder().absolutePath;
104+
def runner = gradleRunner('setupDistro', '-i', '-g', customGradleUserHome)
105+
def result = withMockedDistributionDownload(version, platform, runner) {
106+
build()
107+
}
108+
109+
then:
110+
result.tasks.size() == 3
111+
result.output.count("Unpacking elasticsearch-${version}-linux-x86_64.tar.gz " +
112+
"using SymbolicLinkPreservingUntarTransform.") == 1
113+
}
114+
115+
private boolean assertExtractedDistroCreated(String relativePath) {
116+
File distroExtracted = new File(testProjectDir.root, relativePath)
117+
assert distroExtracted.exists()
118+
assert distroExtracted.isDirectory()
119+
assert new File(distroExtracted, "elasticsearch-1.2.3/bin/elasticsearch").exists()
120+
true
121+
}
122+
123+
private static String applyPluginAndSetupDistro(String version, ElasticsearchDistribution.Platform platform) {
124+
"""
125+
import org.elasticsearch.gradle.Architecture
126+
127+
plugins {
128+
id 'elasticsearch.distribution-download'
129+
}
130+
131+
${setupTestDistro(version, platform)}
132+
${setupDistroTask()}
133+
134+
"""
135+
}
136+
137+
private static String setupTestDistro(String version, ElasticsearchDistribution.Platform platform) {
138+
return """
139+
elasticsearch_distributions {
140+
test_distro {
141+
version = "$version"
142+
type = "archive"
143+
platform = "$platform"
144+
architecture = Architecture.current();
145+
}
146+
}
147+
"""
148+
}
149+
150+
private static String setupDistroTask() {
151+
return """
152+
tasks.register("setupDistro", Sync) {
153+
from(elasticsearch_distributions.test_distro.extracted)
154+
into("build/distro")
155+
}
156+
"""
157+
}
158+
}

buildSrc/src/integTest/groovy/org/elasticsearch/gradle/JdkDownloadPluginFuncTest.groovy

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
9595
given:
9696
def mockRepoUrl = urlPath(jdkVendor, jdkVersion, platform)
9797
def mockedContent = filebytes(jdkVendor, platform)
98-
10.times {
98+
3.times {
9999
settingsFile << """
100100
include ':sub-$it'
101101
"""
@@ -132,8 +132,8 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
132132
}
133133

134134
then:
135-
result.tasks.size() == 10
136-
result.output.count("Unpacking linux-12.0.2-x64.tar.gz using SymbolicLinkPreservingUntarTransform.") == 1
135+
result.tasks.size() == 3
136+
result.output.count("Unpacking linux-12.0.2-x64.tar.gz using ${SymbolicLinkPreservingUntarTransform.simpleName}.") == 1
137137

138138
where:
139139
platform | jdkVendor | jdkVersion | expectedJavaBin
@@ -149,7 +149,7 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
149149
plugins {
150150
id 'elasticsearch.jdk-download'
151151
}
152-
152+
apply plugin: 'base'
153153
apply plugin: 'elasticsearch.jdk-download'
154154
155155
jdks {
@@ -175,9 +175,9 @@ class JdkDownloadPluginFuncTest extends AbstractGradleFuncTest {
175175

176176
def commonGradleUserHome = testProjectDir.newFolder().toString()
177177
// initial run
178-
gradleRunner('getJdk', '-g', commonGradleUserHome).build()
178+
gradleRunner('clean', 'getJdk', '-g', commonGradleUserHome).build()
179179
// run against up-to-date transformations
180-
gradleRunner('getJdk', '-i', '-g', commonGradleUserHome).build()
180+
gradleRunner('clean', 'getJdk', '-i', '-g', commonGradleUserHome).build()
181181
}
182182

183183
then:

buildSrc/src/integTest/groovy/org/elasticsearch/gradle/TestClustersPluginFuncTest.groovy

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ class TestClustersPluginFuncTest extends AbstractGradleFuncTest {
6464
"""
6565

6666
when:
67-
def result = withMockedDistributionDownload(gradleRunner("myTask", '-i')) { GradleRunner runner ->
68-
return runner.build()
67+
def result = withMockedDistributionDownload(gradleRunner("myTask", '-i')) {
68+
build()
6969
}
7070

7171
then:
@@ -91,8 +91,8 @@ class TestClustersPluginFuncTest extends AbstractGradleFuncTest {
9191
"""
9292

9393
when:
94-
def result = withMockedDistributionDownload(gradleRunner("myTask", '-i')) { GradleRunner runner ->
95-
return runner.build()
94+
def result = withMockedDistributionDownload(gradleRunner("myTask", '-i')) {
95+
build()
9696
}
9797

9898
then:
@@ -103,7 +103,8 @@ class TestClustersPluginFuncTest extends AbstractGradleFuncTest {
103103
}
104104

105105
boolean assertEsStdoutContains(String testCluster, String expectedOutput) {
106-
assert new File(testProjectDir.root, "build/testclusters/${testCluster}-0/logs/es.stdout.log").text.contains(expectedOutput)
106+
assert new File(testProjectDir.root,
107+
"build/testclusters/${testCluster}-0/logs/es.stdout.log").text.contains(expectedOutput)
107108
true
108109
}
109110

buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@ abstract class AbstractGradleFuncTest extends Specification {
5757
}
5858

5959
String normalizedOutput(String input) {
60+
String normalizedPathPrefix = testProjectDir.root.canonicalPath.replace('\\', '/')
6061
return input.readLines()
61-
.collect {it.replaceAll(testProjectDir.root.canonicalPath, ".") }
62+
.collect { it.replace('\\', '/') }
63+
.collect {it.replace(normalizedPathPrefix , '.') }
6264
.join("\n")
6365
}
6466

buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/DistributionDownloadFixture.groovy

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@ class DistributionDownloadFixture {
2929
public static final String INIT_SCRIPT = "repositories-init.gradle"
3030

3131
static BuildResult withMockedDistributionDownload(GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure) {
32-
String urlPath = urlPath();
32+
return withMockedDistributionDownload(VersionProperties.getElasticsearch(), ElasticsearchDistribution.CURRENT_PLATFORM,
33+
gradleRunner, buildRunClosure)
34+
}
35+
36+
static BuildResult withMockedDistributionDownload(String version, ElasticsearchDistribution.Platform platform,
37+
GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure) {
38+
String urlPath = urlPath(version, platform);
3339
return WiremockFixture.withWireMock(urlPath, filebytes(urlPath)) { server ->
3440
File initFile = new File(gradleRunner.getProjectDir(), INIT_SCRIPT)
3541
initFile.text = """allprojects { p ->
@@ -40,15 +46,14 @@ class DistributionDownloadFixture {
4046
}"""
4147
List<String> givenArguments = gradleRunner.getArguments()
4248
GradleRunner effectiveRunner = gradleRunner.withArguments(givenArguments + ['-I', initFile.getAbsolutePath()])
49+
buildRunClosure.delegate = effectiveRunner
4350
return buildRunClosure.call(effectiveRunner)
4451
}
4552
}
4653

47-
private static String urlPath() {
48-
String version = VersionProperties.getElasticsearch()
49-
ElasticsearchDistribution.Platform platform = ElasticsearchDistribution.CURRENT_PLATFORM
50-
String fileType = ((ElasticsearchDistribution.CURRENT_PLATFORM == ElasticsearchDistribution.Platform.LINUX ||
51-
ElasticsearchDistribution.CURRENT_PLATFORM == ElasticsearchDistribution.Platform.DARWIN)) ? "tar.gz" : "zip"
54+
private static String urlPath(String version,ElasticsearchDistribution.Platform platform) {
55+
String fileType = ((platform == ElasticsearchDistribution.Platform.LINUX ||
56+
platform == ElasticsearchDistribution.Platform.DARWIN)) ? "tar.gz" : "zip"
5257
"/downloads/elasticsearch/elasticsearch-${version}-${platform}-x86_64.$fileType"
5358
}
5459

buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginFuncTest.groovy

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
3939
"""
4040

4141
when:
42-
def result = gradleRunner("createExtractedTestDistro").buildAndFail()
42+
def result = gradleRunner("tasks").buildAndFail()
4343

4444
then:
4545
assertOutputContains(result.output, "Plugin 'elasticsearch.internal-distribution-download' is not supported. " +
@@ -62,18 +62,19 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
6262
architecture = Architecture.current();
6363
}
6464
}
65-
tasks.register("createExtractedTestDistro") {
66-
dependsOn elasticsearch_distributions.test_distro.extracted
65+
tasks.register("setupDistro", Sync) {
66+
from(elasticsearch_distributions.test_distro.extracted)
67+
into("build/distro")
6768
}
6869
"""
6970

7071
when:
71-
def result = gradleRunner("createExtractedTestDistro").build()
72+
def result = gradleRunner("setupDistro", '-g', testProjectDir.newFolder('GUH').path).build()
7273

7374
then:
7475
result.task(":distribution:archives:linux-tar:buildTar").outcome == TaskOutcome.SUCCESS
75-
result.task(":extractElasticsearchLinux$distroVersion").outcome == TaskOutcome.SUCCESS
76-
assertExtractedDistroIsCreated(distroVersion, 'current-marker.txt')
76+
result.task(":setupDistro").outcome == TaskOutcome.SUCCESS
77+
assertExtractedDistroIsCreated(distroVersion, "build/distro", 'current-marker.txt')
7778
}
7879

7980
def "resolves bwc versions from source"() {
@@ -92,16 +93,18 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
9293
architecture = Architecture.current();
9394
}
9495
}
95-
tasks.register("createExtractedTestDistro") {
96-
dependsOn elasticsearch_distributions.test_distro.extracted
96+
tasks.register("setupDistro", Sync) {
97+
from(elasticsearch_distributions.test_distro.extracted)
98+
into("build/distro")
9799
}
98100
"""
99101
when:
100-
def result = gradleRunner("createExtractedTestDistro").build()
102+
103+
def result = gradleRunner("setupDistro").build()
101104
then:
102105
result.task(":distribution:bwc:minor:buildBwcTask").outcome == TaskOutcome.SUCCESS
103-
result.task(":extractElasticsearchLinux8.1.0").outcome == TaskOutcome.SUCCESS
104-
assertExtractedDistroIsCreated(distroVersion,'bwc-marker.txt')
106+
result.task(":setupDistro").outcome == TaskOutcome.SUCCESS
107+
assertExtractedDistroIsCreated(distroVersion, "build/distro", 'bwc-marker.txt')
105108
}
106109

107110
def "fails on resolving bwc versions with no bundled jdk"() {
@@ -195,8 +198,8 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
195198

196199
}
197200

198-
boolean assertExtractedDistroIsCreated(String version, String markerFileName) {
199-
File extractedFolder = new File(testProjectDir.root, "build/elasticsearch-distros/extracted_elasticsearch_${version}_archive_linux_default")
201+
boolean assertExtractedDistroIsCreated(String version, String relativeDistroPath, String markerFileName) {
202+
File extractedFolder = new File(testProjectDir.root, relativeDistroPath)
200203
assert extractedFolder.exists()
201204
assert new File(extractedFolder, markerFileName).exists()
202205
true

0 commit comments

Comments
 (0)