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