Skip to content

Commit c80da04

Browse files
authored
Improve jdk download tests (#42034)
This commit reworks the tests for jdk download to test the old and new url pattern from oracle. Additionally it limits to one repository created per version, based on the old or new pattern, and restricts other repositories from trying to resolve jdks. closes #41998
1 parent 47115b6 commit c80da04

File tree

5 files changed

+64
-35
lines changed

5 files changed

+64
-35
lines changed

buildSrc/src/main/java/org/elasticsearch/gradle/JdkDownloadPlugin.java

+33-19
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.gradle.api.artifacts.Configuration;
2828
import org.gradle.api.artifacts.ConfigurationContainer;
2929
import org.gradle.api.artifacts.dsl.DependencyHandler;
30+
import org.gradle.api.artifacts.dsl.RepositoryHandler;
3031
import org.gradle.api.artifacts.repositories.IvyArtifactRepository;
3132
import org.gradle.api.file.CopySpec;
3233
import org.gradle.api.file.FileTree;
@@ -45,6 +46,8 @@
4546

4647
public class JdkDownloadPlugin implements Plugin<Project> {
4748

49+
private static final String REPO_NAME_PREFIX = "jdk_repo_";
50+
4851
@Override
4952
public void apply(Project project) {
5053
NamedDomainObjectContainer<Jdk> jdksContainer = project.container(Jdk.class, name ->
@@ -69,6 +72,13 @@ public void apply(Project project) {
6972
setupRootJdkDownload(project.getRootProject(), platform, version);
7073
}
7174
});
75+
76+
// all other repos should ignore the special jdk artifacts
77+
project.getRootProject().getRepositories().all(repo -> {
78+
if (repo.getName().startsWith(REPO_NAME_PREFIX) == false) {
79+
repo.content(content -> content.excludeGroup("jdk"));
80+
}
81+
});
7282
}
7383

7484
private static void setupRootJdkDownload(Project rootProject, String platform, String version) {
@@ -94,26 +104,30 @@ private static void setupRootJdkDownload(Project rootProject, String platform, S
94104
String hash = jdkVersionMatcher.group(5);
95105

96106
// add fake ivy repo for jdk url
97-
String repoName = "jdk_repo_" + version;
107+
String repoName = REPO_NAME_PREFIX + version;
108+
RepositoryHandler repositories = rootProject.getRepositories();
98109
if (rootProject.getRepositories().findByName(repoName) == null) {
99-
// simpler legacy pattern from JDK 9 to JDK 12 that we are advocating to Oracle to bring back
100-
rootProject.getRepositories().ivy(ivyRepo -> {
101-
ivyRepo.setName(repoName);
102-
ivyRepo.setUrl("https://download.oracle.com");
103-
ivyRepo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
104-
ivyRepo.patternLayout(layout ->
105-
layout.artifact("java/GA/jdk" + jdkMajor + "/" + jdkBuild + "/GPL/openjdk-[revision]_[module]-x64_bin.[ext]"));
106-
ivyRepo.content(content -> content.includeGroup("jdk"));
107-
});
108-
// current pattern since 12.0.1
109-
rootProject.getRepositories().ivy(ivyRepo -> {
110-
ivyRepo.setName(repoName + "_with_hash");
111-
ivyRepo.setUrl("https://download.oracle.com");
112-
ivyRepo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
113-
ivyRepo.patternLayout(layout -> layout.artifact(
114-
"java/GA/jdk" + jdkVersion + "/" + hash + "/" + jdkBuild + "/GPL/openjdk-[revision]_[module]-x64_bin.[ext]"));
115-
ivyRepo.content(content -> content.includeGroup("jdk"));
116-
});
110+
if (hash != null) {
111+
// current pattern since 12.0.1
112+
repositories.ivy(ivyRepo -> {
113+
ivyRepo.setName(repoName);
114+
ivyRepo.setUrl("https://download.oracle.com");
115+
ivyRepo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
116+
ivyRepo.patternLayout(layout -> layout.artifact(
117+
"java/GA/jdk" + jdkVersion + "/" + hash + "/" + jdkBuild + "/GPL/openjdk-[revision]_[module]-x64_bin.[ext]"));
118+
ivyRepo.content(content -> content.includeGroup("jdk"));
119+
});
120+
} else {
121+
// simpler legacy pattern from JDK 9 to JDK 12 that we are advocating to Oracle to bring back
122+
repositories.ivy(ivyRepo -> {
123+
ivyRepo.setName(repoName);
124+
ivyRepo.setUrl("https://download.oracle.com");
125+
ivyRepo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
126+
ivyRepo.patternLayout(layout ->
127+
layout.artifact("java/GA/jdk" + jdkMajor + "/" + jdkBuild + "/GPL/openjdk-[revision]_[module]-x64_bin.[ext]"));
128+
ivyRepo.content(content -> content.includeGroup("jdk"));
129+
});
130+
}
117131
}
118132

119133
// add the jdk as a "dependency"

buildSrc/src/test/java/org/elasticsearch/gradle/JdkDownloadPluginIT.java

+31-16
Original file line numberDiff line numberDiff line change
@@ -41,60 +41,75 @@
4141

4242
public class JdkDownloadPluginIT extends GradleIntegrationTestCase {
4343

44-
private static final String FAKE_JDK_VERSION = "1.0.2+99";
44+
private static final String OLD_JDK_VERSION = "1+99";
45+
private static final String JDK_VERSION = "12.0.1+99@123456789123456789123456789abcde";
4546
private static final Pattern JDK_HOME_LOGLINE = Pattern.compile("JDK HOME: (.*)");
4647
private static final Pattern NUM_CONFIGS_LOGLINE = Pattern.compile("NUM CONFIGS: (.*)");
4748

4849
public void testLinuxExtraction() throws IOException {
49-
assertExtraction("getLinuxJdk", "linux", "bin/java");
50+
assertExtraction("getLinuxJdk", "linux", "bin/java", JDK_VERSION);
5051
}
5152

5253
public void testDarwinExtraction() throws IOException {
53-
assertExtraction("getDarwinJdk", "osx", "Contents/Home/bin/java");
54+
assertExtraction("getDarwinJdk", "osx", "Contents/Home/bin/java", JDK_VERSION);
5455
}
5556

5657
public void testWindowsExtraction() throws IOException {
57-
assertExtraction("getWindowsJdk", "windows", "bin/java");
58+
assertExtraction("getWindowsJdk", "windows", "bin/java", JDK_VERSION);
59+
}
60+
61+
public void testLinuxExtractionOldVersion() throws IOException {
62+
assertExtraction("getLinuxJdk", "linux", "bin/java", OLD_JDK_VERSION);
63+
}
64+
65+
public void testDarwinExtractionOldVersion() throws IOException {
66+
assertExtraction("getDarwinJdk", "osx", "Contents/Home/bin/java", OLD_JDK_VERSION);
67+
}
68+
69+
public void testWindowsExtractionOldVersion() throws IOException {
70+
assertExtraction("getWindowsJdk", "windows", "bin/java", OLD_JDK_VERSION);
5871
}
5972

6073
public void testCrossProjectReuse() throws IOException {
6174
runBuild("numConfigurations", "linux", result -> {
6275
Matcher matcher = NUM_CONFIGS_LOGLINE.matcher(result.getOutput());
6376
assertTrue("could not find num configs in output: " + result.getOutput(), matcher.find());
6477
assertThat(Integer.parseInt(matcher.group(1)), equalTo(6)); // 3 import configs, 3 export configs
65-
});
78+
}, JDK_VERSION);
6679
}
6780

68-
public void assertExtraction(String taskname, String platform, String javaBin) throws IOException {
81+
public void assertExtraction(String taskname, String platform, String javaBin, String version) throws IOException {
6982
runBuild(taskname, platform, result -> {
7083
Matcher matcher = JDK_HOME_LOGLINE.matcher(result.getOutput());
7184
assertTrue("could not find jdk home in output: " + result.getOutput(), matcher.find());
7285
String jdkHome = matcher.group(1);
7386
Path javaPath = Paths.get(jdkHome, javaBin);
7487
assertTrue(javaPath.toString(), Files.exists(javaPath));
75-
});
88+
}, version);
7689
}
7790

78-
private void runBuild(String taskname, String platform, Consumer<BuildResult> assertions) throws IOException {
91+
private void runBuild(String taskname, String platform, Consumer<BuildResult> assertions, String version) throws IOException {
7992
WireMockServer wireMock = new WireMockServer(0);
8093
try {
8194
String extension = platform.equals("windows") ? "zip" : "tar.gz";
82-
String filename = "openjdk-1.0.2_" + platform + "-x64_bin." + extension;
83-
wireMock.stubFor(head(urlEqualTo("/java/GA/jdk1/99/GPL/" + filename))
84-
.willReturn(aResponse().withStatus(200)));
95+
boolean isOld = version.equals(OLD_JDK_VERSION);
96+
String filename = "openjdk-" + (isOld ? "1" : "12.0.1") + "_" + platform + "-x64_bin." + extension;
8597
final byte[] filebytes;
86-
try (InputStream stream = JdkDownloadPluginIT.class.getResourceAsStream(filename)) {
98+
try (InputStream stream = JdkDownloadPluginIT.class.getResourceAsStream("fake_openjdk_" + platform + "." + extension)) {
8799
filebytes = stream.readAllBytes();
88100
}
89-
wireMock.stubFor(get(urlEqualTo("/java/GA/jdk1/99/GPL/" + filename))
90-
.willReturn(aResponse().withStatus(200).withBody(filebytes)));
101+
String versionPath = isOld ? "jdk1/99" : "jdk12.0.1/123456789123456789123456789abcde/99";
102+
String urlPath = "/java/GA/" + versionPath + "/GPL/" + filename;
103+
wireMock.stubFor(head(urlEqualTo(urlPath)).willReturn(aResponse().withStatus(200)));
104+
wireMock.stubFor(get(urlEqualTo(urlPath)).willReturn(aResponse().withStatus(200).withBody(filebytes)));
91105
wireMock.start();
92106

93107
GradleRunner runner = GradleRunner.create().withProjectDir(getProjectDir("jdk-download"))
94108
.withArguments(taskname,
95109
"-Dlocal.repo.path=" + getLocalTestRepoPath(),
96-
"-Dtests.jdk_version=" + FAKE_JDK_VERSION,
97-
"-Dtests.jdk_repo=" + wireMock.baseUrl())
110+
"-Dtests.jdk_version=" + version,
111+
"-Dtests.jdk_repo=" + wireMock.baseUrl(),
112+
"-i")
98113
.withPluginClasspath();
99114

100115
BuildResult result = runner.build();

0 commit comments

Comments
 (0)