On Fri, 15 Oct 2021 14:47:18 GMT, Evan Whelan <ewhe...@openjdk.org> wrote:
>> Hi, >> >> Please review my fix for JDK-8274779 which changes how HttpClient and >> HttpsClient checks for equality when comparing request methods. >> >> When `HttpURLConnection.setRequestMethod` is passed `new String("POST")` >> rather than the "POST" String literal, the old behaviour resulted in broken >> HttpClients being reused from the `KeepAliveCache`. >> >> This is because a call to `HttpClient.available()` was never reachable due >> to identity equality being used instead of logical equality. >> >> The test case uses an injected KeepAliveCache, to which we put a HttpClient >> that is unavailable. By comparing the initial HttpClient's `connectTimeout` >> value to the "cached" client's connectTimeout (1234 vs 4321 respectively) we >> can assert that these values should never be equal as a new HttpClient >> should be created in cases where we can no longer use the cached one. >> >> All CI testing is green for this fix. >> >> Kind regards, >> Evan > > Evan Whelan has updated the pull request incrementally with two additional > commits since the last revision: > > - Extracted both connectTimeouts to variables and added copyright header to > accessor > - Removed reflection in favour of injected accessor for KeepAliveCache test/jdk/sun/net/www/http/RequestMethodCheck/RequestMethodEquality.java line 96: > 94: Field inCache = HttpClient.class.getDeclaredField("inCache"); > 95: inCache.setAccessible(true); > 96: inCache.setBoolean(freshClient, true); // allows the > assertion in HttpClient.New to pass You can use the HttpClientAccess to get and set this field too, since the field is protected in HttpClient. Just add a method: public void setInCache(HttpClient client, boolean inCache) { client.inCache = inCache; } to HttpClientAccess. ------------- PR: https://git.openjdk.java.net/jdk/pull/5964