Daniel,

On 13/03/2019 18:22, Daniel Fuchs wrote:
Hi Chris,

On 13/03/2019 17:32, Chris Hegarty wrote:
I think that is most cases
it should be possible to just replace the use of `getHostAddress` with
`getHostName`. This defers the actual lookup to the system configured
name service ( rather than trying to encode IPv6 addresses in the
test )
I think I'd prefer to use getHostAddress() and one of the multi
arg constructors for  URI/URL instead, as it makes it more explicit
that you're using the same address on both side of the connection.

Are we otherwise sure that the hostname would resolve to the
exact same address?

For instance:

jshell> InetAddress.getLoopbackAddress().getHostName()
$7 ==> "localhost"

jshell> InetAddress.getAllByName("localhost");
$8 ==> InetAddress[3] {
           localhost/127.0.0.1,
           localhost/0:0:0:0:0:0:0:1,
           localhost/fe80:0:0:0:0:0:0:1%1
        }

Good point.

Many test ( that don't explicitly test binding or particulars of
encoding of the address in the URI / URL ), simply don't care about this
detail. They're likely testing something in the internal implementation
of the protocol handler, or something.  But you do raise a good point,
which relates to test stability; the client and server sides of the
tests need to be using the same interface / address ).

While testing, I have observed some URIs similar to
http://[0:0:0:0:0:0:0:1]:46009/zero/xxyy, in the log files. It's
comforting to know the exact address that is in use.

What I dislike about such an approach is its verbosity in the test code,
e.g.

    static URL urlFor(int port, String path) throws Exception {
        return new URI("http",
                       null,
                       loopbackAddress.getHostAddress(),
                       port,
                       path,
                       null,
                       null).toURL();
    }

This is a typical example of usage in tests, where the protocol being
tested is `http`. The host address here will be correctly enclosed by
square brackets if needed.

Alternative ( shorter, hack ):

    String host = loopbackAddress.getHostAddress();
    if (host.contains(":"))
        host = "[" + host + "]";

Regardless of the outcome, the use of a test library function will
likely not help much, as it adds jtreg tag verbosity and build
complexity that is probably more verbose than either of the above.

-Chris.

Reply via email to