RFR: 7903953: Use scratch directory for JUnit's TempDir annotation

Jaikiran Pai jpai at openjdk.org
Mon Feb 24 09:42:07 UTC 2025


On Mon, 24 Feb 2025 08:20:41 GMT, Christian Stein <cstein at openjdk.org> wrote:

> Please review this change to use `jtreg`'s scratch directory for JUnit's `@TempDir` annotation.
> 
> Prior to this change, the standard implementation of JUnit Jupiter using the system default temporary directory is active, effectively decoupling the location of "interesting on failure" files from `jtreg`:
>> When `jtreg` executes a test, the current directory for the test is set to a scratch directory so that the test can easily write any temporary files.
> 
> Find more details about `jtreg`'s scratch directory at https://openjdk.org/jtreg/faq.html#scratch-directory
> 
> In addition to use the current working directory for `@TempDir` annotated paths, this change also switches off JUnit's built-in cleanup of temporary files - leaving it to `jtreg` to care about it, see for example the help message for  the `-retain` command-line option:
> 
> 
>     -retain | -retain:<pass,fail,error,all,file-pattern>,...
>                     Specify files to be retained after each test completes
>                     executing. If -retain is not specified, only the files from
>                     the last test executed will be retained. If -retain is
>                     specified with no argument, all files will be retained.
>                     Otherwise, the files may be described by one or more of the
>                     following values:
>         none            Do not retain any of the files generated by each test
>         pass            Retain files generated by tests that pass
>         fail            Retain files generated by tests that fail
>         error           Retain files generated by tests that caused an error
>         all             Retain all files generated by each test
>         file-pattern    Retain files that match a specific filename. The name
>                         may contain '*' to match any sequence of characters. For
>                         example, result.* or *.err.

test/junitTrace/JupiterTempDir.java line 39:

> 37: class JupiterTempDir {
> 38:     @Test
> 39:     @EnabledIfSystemProperty(named = "test.name", matches = "JupiterTempDir.java")

Hello Christian, why is this needed in this test?

test/junitTrace/JupiterTempDir.java line 44:

> 42:         var expected = currentWorkingDirectory.toAbsolutePath().toString();
> 43:         var actual = temporary.getParent().toAbsolutePath().toString();
> 44:         Assertions.assertEquals(expected, actual, "Unexpected root for temporary files");

Would `Files.isSameFile(currentWorkingDirectory, temporary.getParent())` be more appropriate here?

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

PR Review Comment: https://git.openjdk.org/jtreg/pull/248#discussion_r1967288708
PR Review Comment: https://git.openjdk.org/jtreg/pull/248#discussion_r1967290426


More information about the jtreg-dev mailing list