On Tue, 7 Feb 2023 15:41:23 GMT, Conor Cleary <ccle...@openjdk.org> wrote:

> ### Description ###
> Intermittent failures of this test are observed on frequent `HttpClient` test 
> runs. The test checks that the same connection is not used twice for two 
> seperate requests if an Idle Connection Timeout occurs by verifying that the 
> client-side port does not use the same port. It also verifies that when an 
> Idle Connection Timeout does not occur, the same connection is used by 
> verifying that the port used in both requests is the same.
> 
> The issue here is that there is no guarantee that the ports used will not be 
> the same for when an Idle Connection Timeout occurs and so the test will/does 
> fail intermittently.
> 
> ### Summary of Changes & Justification ###
> Instead of comparing the post numbers of the connections used for each 
> request in all test cases, the connections themselves are now compared with 
> calls to `hashCode()` like so. The connection instances themselves are 
> accessed by using a customised `ExchangeSupplier` for the `Http2TestServer`.

test/jdk/java/net/httpclient/http2/IdleConnectionTimeoutTest.java line 179:

> 177:                     int cmp = Integer.compare(firstConnectionHash, 
> secondConnectionHash);
> 178: 
> 179:                     if (cmp < 0 | cmp > 0) {

In other words, `if (cmp != 0)` ? ;-)

It may be simpler and less error prone to save the connection (as an Object) in 
the handler.

        volatile Object previousConnection = null;


Then the condition become:

                if (previousConnection == null) {
                    previousConnection = exch.getTestConnection();
                    exch.sendResponseHeaders(200, 0);
                } else {
                    var secondConnection = exch.getTestConnection();

                    if (previousConnection != secondConnection) {
                        ....

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

PR: https://git.openjdk.org/jdk/pull/12457

Reply via email to