RFR: 8252304: Seed an HttpRequest.Builder from an existing HttpRequest [v8]
Daniel Fuchs
dfuchs at openjdk.java.net
Mon Nov 16 17:41:14 UTC 2020
On Mon, 16 Nov 2020 15:54:18 GMT, Patrick Concannon <pconcannon at 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 15 additional commits since the last revision:
>
> - 8252304: Added more test cases to check header filter
> - Merge remote-tracking branch 'origin/master' into JDK-8252304
> - Merge remote-tracking branch 'origin/master' into JDK-8252304
> - 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)
> - ... and 5 more: https://git.openjdk.java.net/jdk/compare/bb344550...03b13e7a
Changes requested by dfuchs (Reviewer).
test/jdk/java/net/httpclient/HttpRequestNewBuilderTest.java line 323:
> 321:
> 322: var r = HttpRequest.newBuilder(request, filter).build();
> 323: assertFalse(r.headers().map().containsKey("testName1"));
You could also additionally:
assertTrue(r.headers().firstValue("testName1").isEmpty());
test/jdk/java/net/httpclient/HttpRequestNewBuilderTest.java line 320:
> 318: @Test(dataProvider = "testRequests")
> 319: public void testRemoveHeader(HttpRequest request) {
> 320: BiPredicate<String, String> filter = (n, v) -> !n.equalsIgnoreCase("testName1");
This assumes that there is at least one `request` such that `request.headers().firstValue("testName1").isPresent()` otherwise the test will trivially pass.
I wonder if we need a specific dataProvider here, so that we can assert:
assertTrue(request.headers().firstValue("testName1").isPresent());
first thing in the test? That - or have an AtomicInteger that counts how many time the original request has the conf we want to remove, and then assert that the counter > 0 in an `@AfterClass` method?
test/jdk/java/net/httpclient/HttpRequestNewBuilderTest.java line 330:
> 328: public void testRemoveSingleHeaderValue(HttpRequest request) {
> 329: BiPredicate<String, String> filter = (n, v) ->
> 330: n.equalsIgnoreCase("testName1") && !v.equalsIgnoreCase("testValue1");
Well same comment here - we need some kind of guarantee that at least one request has that config.
test/jdk/java/net/httpclient/HttpRequestNewBuilderTest.java line 341:
> 339: BiPredicate<String, String> filter = (n, v) ->
> 340: !(((n.equalsIgnoreCase("testName1") && v.equalsIgnoreCase("testValue1")))
> 341: || ((n.equalsIgnoreCase("testName2") && v.equalsIgnoreCase("testValue2"))));
It would probably be much clearer if you used `BiPredicate.negate` and `BiPredicate.or` here to combine the two BiPredicates.
-------------
PR: https://git.openjdk.java.net/jdk/pull/1059
More information about the net-dev
mailing list