On Fri, 13 Nov 2020 16:45:31 GMT, Patrick Concannon <pconcan...@openjdk.org> 
wrote:

>> Hi,
>> 
>> Could someone please review our code for JDK-8252304: 'Seed an 
>> HttpRequest.Builder from an existing HttpRequest'?
>> 
>> This RFR proposes a new factory method for creating a new `HttpRequest` 
>> builder from an existing `HttpRequest`.
>> This method can be used to build a new request equivalent to the given 
>> request, but with different attributes. For instance, it will allow the user 
>> to take an existing request and add or change a particular header, provide a 
>> new `URI`, etc.
>> 
>> 
>> Kind regards,
>> Patrick & Chris
>
> Patrick Concannon has updated the pull request with a new target base due to 
> a merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains 12 additional 
> commits since the last revision:
> 
>  - 8252304: BiPredicate parameter added to newBuilder
>  - Merge remote-tracking branch 'origin/master' into JDK-8252304
>  - Merge remote-tracking branch 'origin/master' into JDK-8252304
>  - Merge remote-tracking branch 'origin/master' into JDK-8252304
>  - Merge remote-tracking branch 'origin/master' into JDK-8252304
>  - Merge remote-tracking branch 'origin/master' into JDK-8252304
>  - 8252304: Removed catch block from newBuilder(HttpRequest)
>  - 8252304: assertBodyPublisherEqual added to test; added comment to 
> newBuilder
>  - Merge remote-tracking branch 'origin/master' into JDK-8252304
>  - Merge remote-tracking branch 'origin/master' into JDK-8252304
>  - ... and 2 more: 
> https://git.openjdk.java.net/jdk/compare/74f1b7e7...fd6cc9e7

I would like to see more tests that tests all possible usages of the `filter`. 
In particular, all usages documented in the `@apiNote` should be tested to 
prove that they work as expected. And then a non trivial usage that remove two 
non-contiguous values in a multi-valued header that has e.g. 5 or 7 values. 
Possibly also testing removing the first, removing the last, removing neither 
the first nor the last, etc...

test/jdk/java/net/httpclient/HttpRequestNewBuilderTest.java line 171:

> 169:         while (iter1.hasNext() && iter2.hasNext())
> 170:             assertEquals(iter1.next(), iter2.next());
> 171:     }

This code doesn't seem to be correct. It won't work if the `BiPredicate` vetoes 
only 1 value for a multi-valued request. This lets me think that this scenario 
is not tested, or if it is tested, then it's not tested with this method.
A simpler implementation would be to rely on map equality. That should work as 
both map are case insensitive.
That is something like:
(r1.headers().map(), HttpHeaders.of(r2.headers().map(), filter));```
assuming r1 is the request in which headers have been removed according to 
`filter`.

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

Changes requested by dfuchs (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/1059

Reply via email to