Skip to content

Commit d699aba

Browse files
committed
8349135: Add tests for HttpRequest.Builder.copy()
Reviewed-by: jpai, dfuchs
1 parent 81126c2 commit d699aba

File tree

1 file changed

+52
-17
lines changed

1 file changed

+52
-17
lines changed

test/jdk/java/net/httpclient/HttpRequestBuilderTest.java

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2016, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,9 @@
2525
import java.net.http.HttpClient;
2626
import java.time.Duration;
2727
import java.util.Arrays;
28+
import java.util.List;
29+
import java.util.Map;
30+
import java.util.Objects;
2831
import java.util.function.BiFunction;
2932
import java.util.function.Function;
3033
import java.util.function.Supplier;
@@ -34,11 +37,12 @@
3437
import static java.net.http.HttpRequest.BodyPublishers.ofString;
3538
import static java.net.http.HttpRequest.BodyPublishers.noBody;
3639

37-
/**
40+
/*
3841
* @test
3942
* @bug 8170064 8276559
40-
* @summary HttpRequest[.Builder] API and behaviour checks
43+
* @summary HttpRequest[.Builder] API and behaviour checks
4144
*/
45+
4246
public class HttpRequestBuilderTest {
4347

4448
static final URI TEST_URI = URI.create("http://www.foo.com/");
@@ -262,13 +266,11 @@ public static void main(String[] args) throws Exception {
262266
// verify that the default HEAD() method implementation in HttpRequest.Builder
263267
// interface works as expected
264268
HttpRequest defaultHeadReq = new NotOverriddenHEADImpl().HEAD().uri(TEST_URI).build();
265-
String actualMethod = defaultHeadReq.method();
266-
if (!actualMethod.equals("HEAD")) {
267-
throw new AssertionError("failed: expected HEAD method but got method: " + actualMethod);
268-
}
269-
if (defaultHeadReq.bodyPublisher().isEmpty()) {
270-
throw new AssertionError("failed: missing bodyPublisher on HEAD request");
271-
}
269+
assertEquals("HEAD", defaultHeadReq.method(), "Method");
270+
assertEquals(false, defaultHeadReq.bodyPublisher().isEmpty(), "Body publisher absence");
271+
272+
verifyCopy();
273+
272274
}
273275

274276
private static boolean shouldFail(Class<? extends Exception> ...exceptions) {
@@ -295,13 +297,7 @@ static void method(String name,
295297
throw new AssertionError("failed: " + name
296298
+ ". Unexpected body processor for GET: "
297299
+ request.bodyPublisher().get());
298-
299-
if (expectedMethod.equals(method)) {
300-
System.out.println("success: " + name);
301-
} else {
302-
throw new AssertionError("failed: " + name
303-
+ ". Expected " + expectedMethod + ", got " + method);
304-
}
300+
assertEquals(expectedMethod, method, "Method");
305301
}
306302

307303
static void test0(String name,
@@ -378,6 +374,45 @@ public static <R,P1, P2> R test2(String name, R receiver, BiFunction<P1, P2, R>
378374
}
379375
}
380376

377+
private static void verifyCopy() {
378+
379+
// Create the request builder
380+
HttpRequest.Builder requestBuilder = HttpRequest
381+
.newBuilder(TEST_URI)
382+
.header("X-Foo", "1")
383+
.method("GET", noBody())
384+
.expectContinue(true)
385+
.timeout(Duration.ofSeconds(0xBEEF))
386+
.version(HttpClient.Version.HTTP_2);
387+
388+
// Create the original and the _copy_ requests
389+
HttpRequest request = requestBuilder.build();
390+
HttpRequest copiedRequest = requestBuilder
391+
.copy()
392+
.header("X-Foo", "2")
393+
.header("X-Bar", "3")
394+
.build();
395+
396+
// Verify copied _references_
397+
assertEquals(request.uri(), copiedRequest.uri(), "URI");
398+
assertEquals(request.method(), copiedRequest.method(), "Method");
399+
assertEquals(request.expectContinue(), copiedRequest.expectContinue(), "Expect continue setting");
400+
assertEquals(request.timeout(), copiedRequest.timeout(), "Timeout");
401+
assertEquals(request.version(), copiedRequest.version(), "Version");
402+
403+
// Verify headers
404+
assertEquals(request.headers().map(), Map.of("X-Foo", List.of("1")), "Request headers");
405+
assertEquals(copiedRequest.headers().map(), Map.of("X-Foo", List.of("1", "2"), "X-Bar", List.of("3")), "Copied request headers");
406+
407+
}
408+
409+
private static void assertEquals(Object expected, Object actual, Object name) {
410+
if (!Objects.equals(expected, actual)) {
411+
String message = String.format("%s mismatch!%nExpected: %s%nActual: %s", name, expected, actual);
412+
throw new AssertionError(message);
413+
}
414+
}
415+
381416
// doesn't override the default HEAD() method
382417
private static final class NotOverriddenHEADImpl implements HttpRequest.Builder {
383418
private final HttpRequest.Builder underlying = HttpRequest.newBuilder();

0 commit comments

Comments
 (0)