On Fri, 15 Oct 2021 14:47:18 GMT, Evan Whelan <[email protected]> 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