RFR: 8287873: Add test for using -XX:+AutoCreateSharedArchive with different JDK versions [v9]

Ioi Lam iklam at openjdk.org
Wed Jan 18 04:44:29 UTC 2023


On Fri, 13 Jan 2023 17:05:10 GMT, Matias Saavedra Silva <matsaave at openjdk.org> wrote:

>> This is an enhancement of the test case in [JDK-8296754](https://bugs.openjdk.org/browse/JDK-8296754), which tests against an archive created by the "boot JDK", which is usually set as the previous official JDK release when building the JDK repo.
>> 
>> If it's able to acquire previous valid JDK releases:
>>      - Download and install previous JDK versions (19 through N)
>>         where N == java.lang.Runtime.version​().major() - 1
>>      - Test the interaction of the current JDK versus each of the previous releases
>> 
>> If it's not able to find the previous releases revert to the existing logic in TestAutoCreateSharedArchiveUpgrade.java (use the test.boot.jdk or test.previous.jdk properties). Verified with tier1-4 tests.
>
> Matias Saavedra Silva has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Added exceptions instead of default jdk

Changes requested by iklam (Reviewer).

test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/TestAutoCreateSharedArchiveUpgrade.java line 104:

> 102:         newJVM = TEST_JDK + FS + "bin" + FS + "java";
> 103: 
> 104:         // Example path: bundles/linux-x64/jdk-19_linux-x64_bin.tar.gz/jdk-19/bin/java

It's not cleat what this comment refers to. I think it can be deleted.

test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/TestAutoCreateSharedArchiveUpgrade.java line 172:

> 170: 
> 171:     // Fetch JDK artifact depending on platform
> 172:     // If the artifact cannot be found, default to the test.boot.jdk property

This comment about test.boot.jdk is no longer valid. If the artifact cannot be found, RuntimeException is thrown.

test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/TestAutoCreateSharedArchiveUpgrade.java line 199:

> 197:             architecture = "x";
> 198:         } else if (Platform.isAArch64()) {
> 199:             architecture = "aarch";

It's better to use "x64" and "aarch64" here. The comments below should be fixed, too.

test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/TestAutoCreateSharedArchiveUpgrade.java line 207:

> 205:         // Ex: bundles/linux-x64/jdk-19_linux-x64_bin.tar.gz
> 206:         if (Platform.isWindows()) {
> 207:             jdkArtifactMap.put("file", "bundles/windows-x64/jdk-" + version + "_windows-x64_bin.zip");

Instead of hard-coding "x64", `architecture` should be used.

test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/TestAutoCreateSharedArchiveUpgrade.java line 225:

> 223:         try {
> 224:             path = ArtifactResolver.resolve("jdk", jdkArtifactMap, true) + "/jdk-" + version;
> 225:             System.out.println("Boot JDK path: " + path);

`String path` should be declared inside this `try` block and its value should be returned here. That way you don't need to read all the catch block below to find out what value is actually returned.

test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/TestAutoCreateSharedArchiveUpgrade.java line 230:

> 228:             if (cause == null) {
> 229:                 System.out.println("Cannot resolve artifact, "
> 230:                         + "please check if JIB jar is present in classpath.");

If we come to here, the function would end up returning null. We shold always throw the RuntimeException  when we come into this `catch` block.

Also, I am not sure if we should assume that `e.getCause() == null` has any specific meaning. There could be multiple implementations of `ArtifactResolver.resolve()` and we can't predict what the `e.getCause()` would be.

-------------

PR: https://git.openjdk.org/jdk/pull/11852



More information about the build-dev mailing list