Skip to content

Commit 246064f

Browse files
committed
Add better coverage for testing distribution handling across architectures
1 parent 4e8724e commit 246064f

File tree

3 files changed

+83
-39
lines changed

3 files changed

+83
-39
lines changed

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginFuncTest.groovy

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,21 @@
99

1010
package org.elasticsearch.gradle.internal
1111

12+
13+
import spock.lang.Unroll
14+
1215
import org.elasticsearch.gradle.Architecture
1316
import org.elasticsearch.gradle.VersionProperties
1417
import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest
1518
import org.gradle.testkit.runner.TaskOutcome
1619

17-
20+
@Unroll
1821
class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest {
1922

20-
def "resolves current version from local build"() {
23+
def "resolves current #arch version from local build"() {
2124
given:
2225
internalBuild()
23-
localDistroSetup()
26+
localDistroSetup(arch)
2427
def distroVersion = VersionProperties.getElasticsearch()
2528
buildFile << """
2629
apply plugin: 'elasticsearch.internal-distribution-download'
@@ -40,12 +43,14 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
4043
"""
4144

4245
when:
43-
def result = gradleRunner("setupDistro", '-g', gradleUserHome).build()
46+
def result = gradleRunner("-Dos.arch=${arch.classifier}", "setupDistro", '-g', gradleUserHome).build()
4447

4548
then:
46-
result.task(":distribution:archives:${testArchiveProjectName}:buildExpanded").outcome == TaskOutcome.SUCCESS
49+
result.task(":distribution:archives:${getTestArchiveProjectName(arch)}:buildExpanded").outcome == TaskOutcome.SUCCESS
4750
result.task(":setupDistro").outcome == TaskOutcome.SUCCESS
4851
assertExtractedDistroIsCreated("build/distro", 'current-marker.txt')
52+
where:
53+
arch << [Architecture.AARCH64, Architecture.AMD64]
4954
}
5055

5156
def "resolves expanded bwc versions from source"() {
@@ -74,8 +79,10 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
7479
then:
7580
result.task(":distribution:bwc:minor:buildBwcExpandedTask").outcome == TaskOutcome.SUCCESS
7681
result.task(":setupDistro").outcome == TaskOutcome.SUCCESS
77-
assertExtractedDistroIsCreated("distribution/bwc/minor/build/install/elastic-distro",
78-
'bwc-marker.txt')
82+
assertExtractedDistroIsCreated(
83+
"distribution/bwc/minor/build/install/elastic-distro",
84+
'bwc-marker.txt'
85+
)
7986
}
8087

8188
def "fails on resolving bwc versions with no bundled jdk"() {
@@ -101,8 +108,10 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
101108
when:
102109
def result = gradleRunner("createExtractedTestDistro").buildAndFail()
103110
then:
104-
assertOutputContains(result.output, "Configuring a snapshot bwc distribution ('test_distro') " +
105-
"without a bundled JDK is not supported.")
111+
assertOutputContains(
112+
result.output, "Configuring a snapshot bwc distribution ('test_distro') " +
113+
"without a bundled JDK is not supported."
114+
)
106115
}
107116

108117
private void bwcMinorProjectSetup() {
@@ -140,11 +149,12 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
140149
"""
141150
}
142151

143-
private void localDistroSetup() {
152+
private void localDistroSetup(Architecture arch = Architecture.current()) {
153+
def archiveProjectName = getTestArchiveProjectName(arch)
144154
settingsFile << """
145-
include ":distribution:archives:${testArchiveProjectName}"
155+
include ":distribution:archives:${ archiveProjectName}"
146156
"""
147-
def bwcSubProjectFolder = testProjectDir.newFolder("distribution", "archives", testArchiveProjectName)
157+
def bwcSubProjectFolder = testProjectDir.newFolder("distribution", "archives", archiveProjectName)
148158
new File(bwcSubProjectFolder, 'current-marker.txt') << "current"
149159
new File(bwcSubProjectFolder, 'build.gradle') << """
150160
import org.gradle.api.internal.artifacts.ArtifactAttributes;
@@ -174,10 +184,11 @@ class InternalDistributionDownloadPluginFuncTest extends AbstractGradleFuncTest
174184
"""
175185
}
176186

177-
String getTestArchiveProjectName() {
178-
def archSuffix = Architecture.current() == Architecture.AARCH64 ? '-aarch64' : ''
187+
String getTestArchiveProjectName(Architecture architecture = Architecture.current()) {
188+
def archSuffix = '-' + architecture.classifier
179189
return "linux${archSuffix}-tar"
180190
}
191+
181192
boolean assertExtractedDistroIsCreated(String relativeDistroPath, String markerFileName) {
182193
File extractedFolder = new File(testProjectDir.root, relativeDistroPath)
183194
assert extractedFolder.exists()

build-tools/src/integTest/groovy/org/elasticsearch/gradle/DistributionDownloadPluginFuncTest.groovy

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,27 @@
99

1010
package org.elasticsearch.gradle
1111

12+
import spock.lang.Unroll
13+
1214
import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest
1315
import org.gradle.testkit.runner.TaskOutcome
14-
import spock.lang.Unroll
1516

1617
import static org.elasticsearch.gradle.fixtures.DistributionDownloadFixture.withMockedDistributionDownload
1718

1819
class DistributionDownloadPluginFuncTest extends AbstractGradleFuncTest {
1920

2021
@Unroll
21-
def "extracted #distType version can be resolved"() {
22+
def "extracted #distType #arch version can be resolved"() {
2223
given:
2324
buildFile << applyPluginAndSetupDistro(version, platform)
2425

2526
when:
26-
def result = withMockedDistributionDownload(version, platform, gradleRunner('setupDistro', '-i')) {
27+
def result = withMockedDistributionDownload(
28+
version,
29+
platform,
30+
arch,
31+
gradleRunner("-Dos.arch=${arch.classifier}", 'setupDistro', '-i')
32+
) {
2733
build()
2834
}
2935

@@ -32,10 +38,13 @@ class DistributionDownloadPluginFuncTest extends AbstractGradleFuncTest {
3238
assertExtractedDistroCreated("build/distro")
3339

3440
where:
35-
version | platform | distType
36-
VersionProperties.getElasticsearch() | ElasticsearchDistribution.Platform.LINUX | "current"
37-
"8.1.0-SNAPSHOT" | ElasticsearchDistribution.Platform.LINUX | "bwc"
38-
"7.0.0" | ElasticsearchDistribution.Platform.WINDOWS | "released"
41+
version | platform | arch | distType
42+
VersionProperties.getElasticsearch() | ElasticsearchDistribution.Platform.LINUX | Architecture.AMD64 | "current"
43+
VersionProperties.getElasticsearch() | ElasticsearchDistribution.Platform.LINUX | Architecture.AARCH64 | "current"
44+
"8.1.0-SNAPSHOT" | ElasticsearchDistribution.Platform.LINUX | Architecture.AMD64 | "bwc"
45+
"8.1.0-SNAPSHOT" | ElasticsearchDistribution.Platform.LINUX | Architecture.AARCH64 | "bwc"
46+
"7.0.0" | ElasticsearchDistribution.Platform.WINDOWS | Architecture.AMD64 | "released"
47+
"7.0.0" | ElasticsearchDistribution.Platform.WINDOWS | Architecture.AARCH64 | "released"
3948
}
4049

4150

@@ -52,7 +61,7 @@ class DistributionDownloadPluginFuncTest extends AbstractGradleFuncTest {
5261
when:
5362
def runner = gradleRunner('clean', 'setupDistro', '-i', '-g', gradleUserHome)
5463
def unpackingMessage = "Unpacking elasticsearch-${version}-linux-${Architecture.current().classifier}.tar.gz " +
55-
"using SymbolicLinkPreservingUntarTransform"
64+
"using SymbolicLinkPreservingUntarTransform"
5665
def result = withMockedDistributionDownload(version, platform, runner) {
5766
// initial run
5867
def firstRun = build()
@@ -88,8 +97,10 @@ class DistributionDownloadPluginFuncTest extends AbstractGradleFuncTest {
8897

8998
then:
9099
result.tasks.size() == 3
91-
result.output.count("Unpacking elasticsearch-${version}-linux-${Architecture.current().classifier}.tar.gz " +
92-
"using SymbolicLinkPreservingUntarTransform") == 1
100+
result.output.count(
101+
"Unpacking elasticsearch-${version}-linux-${Architecture.current().classifier}.tar.gz " +
102+
"using SymbolicLinkPreservingUntarTransform"
103+
) == 1
93104
}
94105

95106
private boolean assertExtractedDistroCreated(String relativePath) {

build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/DistributionDownloadFixture.groovy

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package org.elasticsearch.gradle.fixtures
1111

1212
import org.elasticsearch.gradle.Architecture
1313
import org.elasticsearch.gradle.ElasticsearchDistribution
14+
import org.elasticsearch.gradle.Version
1415
import org.elasticsearch.gradle.VersionProperties
1516
import org.gradle.testkit.runner.BuildResult
1617
import org.gradle.testkit.runner.GradleRunner
@@ -20,33 +21,50 @@ class DistributionDownloadFixture {
2021
public static final String INIT_SCRIPT = "repositories-init.gradle"
2122

2223
static BuildResult withMockedDistributionDownload(GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure) {
23-
return withMockedDistributionDownload(VersionProperties.getElasticsearch(), ElasticsearchDistribution.CURRENT_PLATFORM,
24-
gradleRunner, buildRunClosure)
24+
return withMockedDistributionDownload(
25+
VersionProperties.getElasticsearch(), ElasticsearchDistribution.CURRENT_PLATFORM,
26+
gradleRunner, buildRunClosure
27+
)
2528
}
2629

2730
static BuildResult withChangedClasspathMockedDistributionDownload(GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure) {
28-
return doRunWithMockedDistributionDownload(VersionProperties.getElasticsearch(), ElasticsearchDistribution.CURRENT_PLATFORM,
29-
gradleRunner, buildRunClosure, true, false)
31+
return doRunWithMockedDistributionDownload(
32+
VersionProperties.getElasticsearch(), ElasticsearchDistribution.CURRENT_PLATFORM,
33+
Architecture.current(), gradleRunner, buildRunClosure, true, false
34+
)
3035
}
36+
3137
static BuildResult withChangedConfigMockedDistributionDownload(GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure) {
32-
return doRunWithMockedDistributionDownload(VersionProperties.getElasticsearch(), ElasticsearchDistribution.CURRENT_PLATFORM,
33-
gradleRunner, buildRunClosure, false, true)
38+
return doRunWithMockedDistributionDownload(
39+
VersionProperties.getElasticsearch(), ElasticsearchDistribution.CURRENT_PLATFORM,
40+
Architecture.current(), gradleRunner, buildRunClosure, false, true
41+
)
42+
}
43+
44+
static BuildResult withMockedDistributionDownload(String version,
45+
ElasticsearchDistribution.Platform platform,
46+
Architecture architecture,
47+
GradleRunner gradleRunner,
48+
Closure<BuildResult> buildRunClosure) {
49+
return doRunWithMockedDistributionDownload(version, platform, architecture, gradleRunner, buildRunClosure, false, false)
3450
}
3551

3652
static BuildResult withMockedDistributionDownload(String version, ElasticsearchDistribution.Platform platform,
3753
GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure) {
38-
return doRunWithMockedDistributionDownload(version, platform, gradleRunner, buildRunClosure, false, false)
54+
return withMockedDistributionDownload(version, platform, Architecture.current(), gradleRunner, buildRunClosure)
3955
}
4056

4157
static BuildResult withChangedClasspathMockedDistributionDownload(String version, ElasticsearchDistribution.Platform platform,
42-
GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure) {
43-
return doRunWithMockedDistributionDownload(version, platform, gradleRunner, buildRunClosure, true, false)
58+
GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure) {
59+
return doRunWithMockedDistributionDownload(version, platform, Architecture.current(), gradleRunner, buildRunClosure, true, false)
4460
}
4561

46-
private static BuildResult doRunWithMockedDistributionDownload(String version, ElasticsearchDistribution.Platform platform,
62+
private static BuildResult doRunWithMockedDistributionDownload(String version,
63+
ElasticsearchDistribution.Platform platform,
64+
Architecture architecture,
4765
GradleRunner gradleRunner, Closure<BuildResult> buildRunClosure,
4866
boolean withAddedJar, boolean withAddedConfig) {
49-
String urlPath = urlPath(version, platform);
67+
String urlPath = urlPath(version, platform, architecture);
5068
return WiremockFixture.withWireMock(urlPath, filebytes(urlPath, withAddedJar, withAddedConfig)) { server ->
5169
File initFile = new File(gradleRunner.getProjectDir(), INIT_SCRIPT)
5270
initFile.text = """allprojects { p ->
@@ -62,10 +80,14 @@ class DistributionDownloadFixture {
6280
}
6381
}
6482

65-
private static String urlPath(String version,ElasticsearchDistribution.Platform platform) {
66-
String fileType = ((platform == ElasticsearchDistribution.Platform.LINUX ||
67-
platform == ElasticsearchDistribution.Platform.DARWIN)) ? "tar.gz" : "zip"
68-
"/downloads/elasticsearch/elasticsearch-${version}-${platform}-${Architecture.current().classifier}.$fileType"
83+
private static String urlPath(String version, ElasticsearchDistribution.Platform platform, Architecture architecture) {
84+
String fileType = ((platform == ElasticsearchDistribution.Platform.LINUX || platform ==
85+
ElasticsearchDistribution.Platform.DARWIN)) ? "tar.gz" : "zip"
86+
"/downloads/elasticsearch/elasticsearch-${version}-${platform}-${mapArchitectureToBwcClassifier(version, architecture)}.$fileType"
87+
}
88+
89+
private static String mapArchitectureToBwcClassifier(String version, Architecture architecture) {
90+
return Version.fromString(version).onOrAfter("9.2.0") ? architecture.classifier : architecture.bwcClassifier
6991
}
7092

7193
private static byte[] filebytes(String urlPath, boolean withAddedJar, boolean withAddedConfig) throws IOException {

0 commit comments

Comments
 (0)