[teststabilization] RFR: 8223638: Replace wildcard address with loopback or local host in tests - part 6
Aleks Efimov
aleksej.efimov at oracle.com
Tue May 14 11:22:27 UTC 2019
Hi Daniel,
New webrev can be found here:
http://cr.openjdk.java.net/~aefimov/8223638/02/
PerConnectionProxy.java - fixed as suggested.
MultiReleaseJarURLConnection.java:
I've added the toHttpJarURL method with small modifications:
Test now uses the method only for the case with "jar:http". For "http:"
- it's been using only "http:" before the change. With "jar:" appended
and without "!/" it fails with:
Caused by: java.lang.NullPointerException: no !/ in spec
at java.base/sun.net.www.protocol.jar.Handler.parseAbsoluteSpec(Handler.java:168)
at java.base/sun.net.www.protocol.jar.Handler.parseURL(Handler.java:150)
at java.base/java.net.URL.<init>(URL.java:679)
Best Regards,
Aleksei
On 14/05/2019 10:18, Daniel Fuchs wrote:
> Hi Aleksei,
>
> Nit: PerConnectionProxy.java:
>
> 88 InetSocketAddress isa =
> InetSocketAddress.createUnresolved(InetAddress.getLoopbackAddress().getHostAddress(),
> pserver.getPort());
>
> If you had named `serverAddress` `loopback` then you could trivially
> reuse it at the line above and reduce the line length.
> It's better to avoid too long lines as these are harder to review
> with frame diffs and side diffs.
>
> MultiReleaseJarURLConnection.java:
>
> 173 {"http",
> URIBuilder.newBuilder().scheme("jar:http").port(server.getPort()).loopback()
> 174 .path("/multi-release.jar!/").toURL()},
> 175 {"http",
> URIBuilder.newBuilder().scheme("http").port(server.getPort()).loopback()
> 176 .path("/multi-release.jar").toURL()},
>
> There's too much going on on these lines. Can we rewrite this as:
>
> {"http", toHttpJarURL(server.getPort(), "/multi-release.jar", "!/") },
> {"http", toHttpJarURL(server.getPort(), "/multi-release.jar", "") },
>
> with
>
> private static URL toHttpJarURL(int port, String jar, String file)
> throws MalformedURLException, URISyntaxException {
> assert file.isEmpty() || file.startsWith("!");
> URI httpURI = URIBuilder.newBuilder()
> .scheme("http")
> .loopback()
> .port(port)
> .path(jar);
> return new URL("jar:" + httpURI + file);
> }
>
> best regards,
>
> -- daniel
>
> On 13/05/2019 19:45, Aleks Efimov wrote:
>> Hi Daniel,
>>
>> Thanks for all your comments.
>> I've changed all the tests to address the concern about the
>> "localhost" configurations. Plus, I've utilized URIBuilder where
>> possible.
>> Also tried keep the SimpleHttpServer simpler.
>>
>> The new version can be viewed here:
>> http://cr.openjdk.java.net/~aefimov/8223638/01/
>>
>> With Best Regards,
>> Aleksei
>>
>> On 13/05/2019 16:45, Daniel Fuchs wrote:
>>> Hi Aleksei,
>>>
>>> I believe that some configurations in the wild might
>>> return you the external host address when looking up
>>> "localhost". It doesn't matter if the server binds to
>>> the wildcard, but if you change the server to stop using
>>> the wildcard, then you also need to change the client to
>>> use the same address that the server binds too.
>>>
>>> AcceptCauseFileDescriptorLeak.java:
>>>
>>> I believe line
>>> 97 (new Socket("localhost",
>>> ss.getLocalPort())).close();
>>>
>>> should be changed to use the loopback address.
>>>
>>>
>>> UnreferencedSockets.java:
>>>
>>> same remark as above:
>>>
>>> 130 Socket s = new Socket("localhost", svr.localPort());
>>>
>>> PerConnectionProxy.java:
>>>
>>> same remark as above:
>>>
>>> 97 InetSocketAddress isa =
>>> InetSocketAddress.createUnresolved("localhost", pserver.getPort());
>>>
>>> Redirect307Test.java:
>>>
>>> should use URIBuilder here:
>>>
>>> 108 URL url = new URL("http://localhost:" + port);
>>>
>>> RedirectLimit.java:
>>>
>>> 113 URL url = new URL("http://localhost:" + port);
>>>
>>> should use URIBuilder.
>>>
>>> MultiReleaseJarHttpProperties.java:
>>>
>>> 69 new URL("http://localhost:" + server.getPort()
>>> + "/multi-release.jar")
>>>
>>> should use URIBuilder.
>>>
>>> MultiReleaseJarURLConnection.java:
>>>
>>> 171 {"http", new URL("jar:http://localhost:" +
>>> server.getPort() + "/multi-release.jar!/")},
>>> 172 {"http", new URL("http://localhost:" +
>>> server.getPort() + "/multi-release.jar")},
>>>
>>> Should use URIBuilder.
>>>
>>> SimpleHttpServer.java:
>>>
>>> a simpler change that keeps binding happening in
>>> start() would be:
>>>
>>> private final HttpServer server;
>>> + private final InetAddress address;
>>>
>>> public SimpleHttpServer() throws IOException {
>>> - server = HttpServer.create();
>>> + this(null);
>>> + }
>>> +
>>> + public SimpleHttpServer(InetAddress address) throws IOException {
>>> + address = addr;
>>> + server = HttpServer.create();
>>> }
>>>
>>> public void start() throws IOException {
>>> - server.bind(new InetSocketAddress(0), 0);
>>> + server.bind(new InetSocketAddress(address, 0), 0);
>>>
>>> best regards,
>>>
>>> -- daniel
>>>
>>>
>>>
>>> On 13/05/2019 16:07, Aleks Efimov wrote:
>>>> Hi,
>>>>
>>>> Please help to review another part of test fixes to address
>>>> intermittent networking test failures.
>>>>
>>>> Webrev:
>>>> http://cr.openjdk.java.net/~aefimov/8223638/00/index.html
>>>>
>>>> JBS:
>>>> https://bugs.openjdk.java.net/browse/JDK-8223638
>>>>
>>>> With Best Regards,
>>>> Aleksei
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/net-dev/attachments/20190514/e34f1d01/attachment.html>
More information about the net-dev
mailing list