On Wed, 24 Feb 2021 10:24:06 GMT, Conor Cleary <ccle...@openjdk.org> wrote:

> A number of net tests use a 
> **[HostsFileNameService](https://github.com/openjdk/jdk/blob/382e38dd246596ec94a1f1ce0e0f9e87f53366c7/src/java.base/share/classes/java/net/InetAddress.java#L955)**
>  to verify either the functionality of this type of Name Service or as a 
> complement to other tests (such as Caching, Address Format etc.).
> 
> Intermittent failures of these tests can be caused by tools used during JVM 
> start-up accessing/initialising classes sooner than may be expected which can 
> cause unexpected behaviour. Most commonly, this unexpected behaviour takes 
> the form of the 
> **[PlatformNameService](https://github.com/openjdk/jdk/blob/382e38dd246596ec94a1f1ce0e0f9e87f53366c7/src/java.base/share/classes/java/net/InetAddress.java#L927)**
>  being used despite a call to `System.setProperty("jdk.net.hosts.file", ...)` 
> in the test file. Due to the fact that **InetAddress** initialises it's 
> Implementation and Name Service fields in a static class initialiser ([see 
> L1132 of 
> InetAddress.java](https://github.com/openjdk/jdk/blob/382e38dd246596ec94a1f1ce0e0f9e87f53366c7/src/java.base/share/classes/java/net/InetAddress.java#L1132))
>  and that the default mode is to use the **Platform Name Service**, setting a 
> system property in the main method to specify the use of 
> **HostsFileNameService** (with the jdk.net.hosts.file property) 
 has no affect if the class has been previously accessed during JVM start-up 
and **InetAddress** will default to the **PlatformNameService** which is 
unsuitable for this test. This explains the intermittent failures caused by the 
use of `System.setProperty("jdk.net.hosts.file", ...)`.
> 
> This fix improves the robustness of this test by specifying the use of the 
> **HostsFileNameService** in the `@run` tag for this test via the previously 
> mentioned system property. This gives certainty that the property will be 
> properly set in time for the actual run of this test after the JVM has 
> booted. An example of one the fixes...
>  * @run main/othervm -Djdk.net.hosts.file=TestToNumericFormatHosts 
> textToNumericFormat

Thanks for cleaning-up tests, Conor. 
NIT: You also update/add the modification year in test headers.

test/jdk/java/net/InetAddress/InternalNameServiceTest.java line 30:

> 28:  *          a file name that contains address host mappings, similar to 
> those in
> 29:  *          /etc/hosts file.
> 30:  * @run main/othervm -Djdk.net.hosts.file=${test.src}/TestHosts 
> -Dsun.net.inetaddr.ttl=0

Maybe the `TestHosts` file can be removed from the repository, and 
`-Djdk.net.hosts.file` value can be changed to `TestHosts` file:  
With such change the test host file will be generated in `scratch` directory, 
and in case of test failures it won't modify the file stored in repository.

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

PR: https://git.openjdk.java.net/jdk/pull/2703

Reply via email to