RFR: 8219585: [TESTBUG] sun/management/jmxremote/bootstrap/JMXInterfaceBindingTest.java passes trivially when it shouldn't

Daniel Fuchs daniel.fuchs at oracle.com
Fri Feb 22 18:31:28 UTC 2019


Hi Severin,

Did you manage to make the test pass locally?

This test has had a long history of failing, and I've come
to suspect that it might be flawed.

First - it has /timeout=5. I believe that's much too short.
It immediately failed the first time I ran it locally on my machine.

Then it uses well known ports. That's bad. There's no guarantee
that these ports will be free.

Then - it only use addresses configured for "localhost".

Can there ever be more than one such address? If there is more
than one, I suspect the test will fail: I believe the subprocess
started by the test would need the additional
    -Djava.rmi.server.hostname=<adddress>
on the command line.
And even with that - it might still fail if those two addresses
can't be bound simultaneously on the same port.

Then why are loopback addresses filtered out? Because of two
things I guess:

    - if several loopback are defined, I'm not sure you can
      bind them on the same port (and it might be difficult to
      figure that out)

    - if you bind to the loopback address, then you most probably
      need to start the subprocess with
       -Djava.rmi.server.hostname=<loopback-adddress>

If we don't see this test failing, I suspect this is because
it is either never selected, or always passes trivially.
If we start selecting it - or have a configuration where it
doesn't trivially pass, I suspect it will fail.

best regards,

-- daniel




On 22/02/2019 15:04, Severin Gehwolf wrote:
> Hi!
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8219585
> 
> Could somebody please review this trivial testbug. For a config like
> [1] the logic prior JDK-8145982 returned this list for
> getAddressesForLocalHost():
> 
> [localhost/127.0.0.1, localhost/192.168.1.18, localhost/0:0:0:0:0:0:0:1]
> 
> Post JDK-8145982, getAddressesForLocalHost() returns:
> 
> [localhost/192.168.1.18]
> 
> The fix is trivial. Just adjust the condition for as to when the test
> should actually trivially pass:
> 
> diff --git a/test/jdk/sun/management/jmxremote/bootstrap/JMXInterfaceBindingTest.java b/test/jdk/sun/management/jmxremote/bootstrap/JMXInterfaceBindingTest.java
> --- a/test/jdk/sun/management/jmxremote/bootstrap/JMXInterfaceBindingTest.java
> +++ b/test/jdk/sun/management/jmxremote/bootstrap/JMXInterfaceBindingTest.java
> @@ -176,8 +176,8 @@
>       }
>   
>       public static void main(String[] args) {
> -        List<InetAddress> addrs = getAddressesForLocalHost();
> -        if (addrs.size() < 2) {
> +        List<InetAddress> addrs = getNonLoopbackAddressesForLocalHost();
> +        if (addrs.size() < 1) {
>               System.out.println("Ignoring manual test since no more than one IPs are configured for 'localhost'");
>               return;
>           }
> @@ -186,7 +186,7 @@
>           System.out.println("All tests PASSED.");
>       }
>   
> -    private static List<InetAddress> getAddressesForLocalHost() {
> +    private static List<InetAddress> getNonLoopbackAddressesForLocalHost() {
>   
>           try {
>               return NetworkInterface.networkInterfaces()
> 
> 
> Testing: Manual testing on local setup. jdk/submit (currently running)
> 
> Thanks,
> Severin
> 
> 
> [1] $ grep localhost /etc/hosts | grep -v '::'
> 127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
> 192.168.1.18 localhost
> 



More information about the serviceability-dev mailing list