RFR: 8344908: URLClassPath should not propagate IllegalArgumentException when finding resources in classpath URLs [v3]

Jaikiran Pai jpai at openjdk.org
Tue Nov 26 06:56:28 UTC 2024


On Mon, 25 Nov 2024 13:55:30 GMT, Eirik Bjørsnøs <eirbjo at openjdk.org> wrote:

>> Jaikiran Pai has updated the pull request incrementally with two additional commits since the last revision:
>> 
>>  - Alan's review - rename variable and drop final from test
>>  - Alan's review - no need for throws in method signature
>
> test/jdk/jdk/internal/loader/URLClassPath/ClassPathUnusableURLs.java line 71:
> 
>> 69:             // if we can't create a directory with an emoji in its path name,
>> 70:             // then skip the entire test
>> 71:             assumeTrue(false, "Skipping test since emoji directory couldn't be created: "
> 
> Perhaps `Assumptions.abort(message)` would be more clear here.

Hello Eirik, it looks like this is a new API introduced in 5.9 of jupiter API. Looking at jtreg 7.4 that's used in JDK mainline, the jupiter API we use is 5.10.x. So yes, `abort()` would be more appropriate here. I've updated accordingly.

> test/jdk/jdk/internal/loader/URLClassPath/ClassPathUnusableURLs.java line 78:
> 
>> 76: 
>> 77:         ASCII_DIR = Files.createTempDirectory(SCRATCH_DIR, "test-urlclasspath");
>> 78:         Files.writeString(ASCII_DIR.resolve(RESOURCE_NAME), "hello");
> 
> The contents of the resources seems not to matter for the test currently.
> 
> Consider using just `Files::createFile` here, or make unique content for each resource such that you can verify the correct content was found in the tests.

Done - I've updated the test to use `Files.createFile` instead of `writeString()`.

> test/jdk/jdk/internal/loader/URLClassPath/ClassPathUnusableURLs.java line 174:
> 
>> 172:     }
>> 173: 
>> 174:     private static String[] getClassPathElements() {
> 
> This could perhaps be `addClassPathElemements(URLClassPath)` instead for cleaner call sites? 
> 
> Or perhaps even `URLClassPath makeClassPath()` since both tests seem to have identical class paths?

I prefer keeping the classpath construction through `URLClassPath.addFile()` closer to the test code itself. So I've left this part as-is.

> test/jdk/jdk/internal/loader/URLClassPath/ClassPathUnusableURLs.java line 180:
> 
>> 178:         return new String[]{
>> 179:                 // non-existent dir
>> 180:                 ASCII_DIR.resolve("non-existent").toString(),
> 
> Just an observation: This will not be recognized as a directory, so this will not create a `FileLoader`, but a `JarLoader` (which will throw a `FileNotFoundException`).
> 
> For good measure, you could consider adding an actual non-existing directory URL, but I think you'd need to use `URLClassPath::addURL` for that instead of `addFile`.
> 
> PS: It's rather weird that a non-exisiting `FileLoader` is added to the class path, while a non-existing JarLoader is ignored. Thorny code indeed.

The use of the "non-existent" path was intentional to trigger the exceptional code path. But I agree that the code comment which said `non-existent dir` was inaccurate. So I've updated that comment to say "non-existent path"

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

PR Review Comment: https://git.openjdk.org/jdk/pull/22351#discussion_r1857894000
PR Review Comment: https://git.openjdk.org/jdk/pull/22351#discussion_r1857898071
PR Review Comment: https://git.openjdk.org/jdk/pull/22351#discussion_r1857897288
PR Review Comment: https://git.openjdk.org/jdk/pull/22351#discussion_r1857895549


More information about the core-libs-dev mailing list