I had a detailed look at these failures. The majority of them were due to the tearDown() in these tests no longer able to delete the test generated read-only files. That would then cause subsequent tests to fail because they weren't expecting a read-only file to be present. I fixed that issue through this commit into Ant's repo https://github.com/apache/ant/commit/54350f7e967f965169a07f65ec925b621cef231d. It's a test-only fix and what it does is, on Windows, before doing the tearDown(), it (re)sets the permissions on these test generated files to "writable" and then does the delete. That way the tearDown() can delete the input/output directories generated by the tests.

Once that was committed almost all tests started passing expect for a few in copy-test.xml and move-test.xml https://ci-builds.apache.org/job/Ant/job/Ant%20Master%20Windows%20(latest%20EA%20JDK)/77/#showFailuresLink. Looking at those tests what they do is, they use the copy or move tasks with the "force=true" property. These tests fail because even with "force=true", the Copy/Move task can no longer delete (and then update) a pre-existing read-only file on Windows. This is a functional issue, i.e. it means that the copy/move tasks' force=true is no longer functional in this specific scenario on Windows. In order to address this change in behaviour, I pushed a commit to Ant's repo https://github.com/apache/ant/commit/fe3727ee48b5ff89f65de52dea91c1bc757e4705. Like I note, this is a change in the production source of Ant in FileUtils.tryHardToDelete(). In this change, on Windows, the implementation now sets the file to writable if it was read-only and File.delete() had failed. It then retries the File.delete(). After this change, the remaining test failures on Windows disappear (against Java 25 EA).

The test results are now back to normal for both Linux and Windows against Java 25 EA:

https://ci-builds.apache.org/job/Ant/job/Ant%20Master%20Windows%20(latest%20EA%20JDK)/79/

https://ci-builds.apache.org/job/Ant/job/Ant%20Master%20Linux%20(latest%20EA%20JDK)/59/

Please take a look at those 2 commits and I would like to hear if those look OK or would need to be handled differently. The newly proposed JDK property isn't used in these changes and we don't need to set it at least for the current tests.

-Jaikiran

On 27/06/25 7:55 pm, Jaikiran Pai wrote:
Hello Stefan,

On 26/06/25 5:16 pm, Stefan Bodewig wrote:
> On 2025-06-26, Jaikiran Pai wrote:
>
>> However on Windows we are seeing a large number of test failures. I
>> looked into those failures and those all relate to the "heads up"
>> section in your mail about
>> https://jdk.java.net/25/release-notes#JDK-8355954. In the Ant
>> testsuite there are several tests which attempt a
>> java.io.File.delete() on a read-only file. Until Java 25, that call
>> would delete the file.
>
>> As noted in the linked change, that's no longer the case by default in
>> Java 25. I manually updated the Ant testsuite to set the newly
>> introduced -Djdk.io.File.allowDeleteReadOnlyFiles system property to
>> true and that got all those tests to pass on Windows too.
>
> Maybe we should change the tests, rather than set the system property?

Yes, that's an option too. For reference, this is the run against Windows which shows these failures https://ci-builds.apache.org/job/Ant/job/Ant%20Master%20Windows%20(latest%20EA%20JDK)/74/

That failure number is exaggerated by the fact that several of these failures are due to a side effect of few tests creating a read-only file then failing to delete it. Subsequent tests then use that same file (through the "touch" task) and check whether it's writable and notice that it isn't and that causes a lot of those tests to fail.

> Is the file read-only on non-Windows platforms as well?

In our tests, yes.

> To me the description of the change doesn't say what the behavior is on other
> platforms. Is Windows the only one that now will not delete read-only
> files - or is it the only one where read-only files would have been
> removed prior to Java 25?

On *nix platforms a File.delete() completes successfully (and returns true) for a read-only file, because the underlying *nix platform allows that. So it's only on Windows where the File.delete() will no longer succeed (and will returns false) against these read-only files. Previously, before https://bugs.openjdk.org/browse/JDK-8355954 got fixed recently, (only) on Windows the internal implementation of the JDK was removing the read-only attribute from the file before doing the delete, which is why the delete would succeed and we didn't notice this issue.

> Also we could modify FileUtils.tryHardToDelete to remove the read-only
> flag if we feel this is something that may hit Ant's users. After all it
> has bitten our own testsuite.

I haven't given it a deeper thought. I think once we take care of these antunit test failures in the testsuite, then it might give us a better picture if there are actual scenarios where some code intentionally wants to detail a read-only file. If there exists such a use case, then since the JDK is already providing a way to delete such files (through the use of this system property), then we would need to evaluate if we still want to add some code in FileUtils.tryHardToDelete or advice users to use that system property instead.

In the next few days I will go over these tests to see how we can address these issues and if the usage of the new system property can be avoided.

-Jaikiran



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to