1
1
/*
2
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2018, 2021 Oracle and/or its affiliates. All rights reserved.
3
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
4
*
5
5
* This code is free software; you can redistribute it and/or modify it
23
23
24
24
/*
25
25
* @test
26
- * @bug 8203433
26
+ * @bug 8203433 8276559
27
27
* @summary (httpclient) Add tests for HEAD and 304 responses.
28
28
* @modules java.base/sun.net.www.http
29
29
* java.net.http/jdk.internal.net.http.common
48
48
import org .testng .annotations .DataProvider ;
49
49
import org .testng .annotations .Test ;
50
50
51
- import javax .net .ServerSocketFactory ;
52
51
import javax .net .ssl .SSLContext ;
53
52
import java .io .IOException ;
54
53
import java .io .InputStream ;
55
- import java .io .OutputStream ;
56
- import java .io .OutputStreamWriter ;
57
- import java .io .PrintWriter ;
58
- import java .io .Writer ;
59
54
import java .net .InetAddress ;
60
55
import java .net .InetSocketAddress ;
61
- import java .net .ServerSocket ;
62
- import java .net .Socket ;
63
56
import java .net .URI ;
64
57
import java .net .http .HttpClient ;
65
58
import java .net .http .HttpClient .Redirect ;
66
59
import java .net .http .HttpRequest ;
67
60
import java .net .http .HttpResponse ;
68
61
import java .net .http .HttpResponse .BodyHandlers ;
69
- import java .util .ArrayList ;
70
- import java .util .Arrays ;
71
- import java .util .Collections ;
72
- import java .util .HashMap ;
73
- import java .util .List ;
74
- import java .util .Locale ;
75
- import java .util .Map ;
76
- import java .util .StringTokenizer ;
77
- import java .util .concurrent .ConcurrentHashMap ;
78
- import java .util .concurrent .ConcurrentLinkedQueue ;
79
- import java .util .concurrent .atomic .AtomicLong ;
80
- import java .util .stream .Collectors ;
81
- import java .util .stream .Stream ;
82
62
83
63
import static java .lang .System .out ;
84
- import static java .nio .charset .StandardCharsets .UTF_8 ;
85
- import static java .net .HttpURLConnection .HTTP_OK ;
86
64
import static org .testng .Assert .assertEquals ;
87
- import static org .testng .Assert .assertTrue ;
88
65
89
66
public class HeadTest implements HttpServerAdapters {
90
67
@@ -98,8 +75,6 @@ public class HeadTest implements HttpServerAdapters {
98
75
String http2URI ;
99
76
String https2URI ;
100
77
101
- static final String MESSAGE = "Basic HeadTest message body" ;
102
- static final int ITERATIONS = 3 ;
103
78
static final String CONTENT_LEN = "300" ;
104
79
105
80
/*
@@ -133,27 +108,38 @@ public Object[][] positive() {
133
108
};
134
109
}
135
110
136
- static final AtomicLong requestCounter = new AtomicLong ();
137
-
138
111
@ Test (dataProvider = "positive" )
139
112
void test (String uriString , String method ,
140
113
int expResp , HttpClient .Version version ) throws Exception {
141
114
out .printf ("%n---- starting (%s) ----%n" , uriString );
142
- HttpClient client = HttpClient .newBuilder ()
143
- .followRedirects (Redirect .ALWAYS )
144
- .sslContext (sslContext )
145
- .build ();
146
-
147
115
URI uri = URI .create (uriString );
148
-
149
116
HttpRequest .Builder requestBuilder = HttpRequest
150
117
.newBuilder (uri )
151
118
.method (method , HttpRequest .BodyPublishers .noBody ());
152
-
153
119
if (version != null ) {
154
120
requestBuilder .version (version );
155
121
}
156
- HttpRequest request = requestBuilder .build ();
122
+ doTest (requestBuilder .build (), expResp );
123
+ // repeat the test this time by building the request using convenience
124
+ // GET and HEAD methods
125
+ requestBuilder = HttpRequest .newBuilder (uri );
126
+ if (version != null ) {
127
+ requestBuilder .version (version );
128
+ }
129
+ switch (method ) {
130
+ case "GET" -> requestBuilder .GET ();
131
+ case "HEAD" -> requestBuilder .HEAD ();
132
+ default -> throw new IllegalArgumentException ("Unexpected method " + method );
133
+ }
134
+ doTest (requestBuilder .build (), expResp );
135
+ }
136
+
137
+ // issue a request with no body and verify the response code is the expected response code
138
+ private void doTest (HttpRequest request , int expResp ) throws Exception {
139
+ HttpClient client = HttpClient .newBuilder ()
140
+ .followRedirects (Redirect .ALWAYS )
141
+ .sslContext (sslContext )
142
+ .build ();
157
143
out .println ("Initial request: " + request .uri ());
158
144
159
145
HttpResponse <String > response = client .send (request , BodyHandlers .ofString ());
0 commit comments