View Javadoc
1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
25   *
26   */
27  
28  package org.apache.hc.core5.http.io.support;
29  
30  import static org.junit.jupiter.api.Assertions.assertAll;
31  import static org.junit.jupiter.api.Assertions.assertEquals;
32  import static org.junit.jupiter.api.Assertions.assertNotNull;
33  
34  import java.net.URISyntaxException;
35  import java.net.UnknownHostException;
36  import java.nio.charset.StandardCharsets;
37  
38  import org.apache.hc.core5.http.ClassicHttpRequest;
39  import org.apache.hc.core5.http.ContentType;
40  import org.apache.hc.core5.http.Header;
41  import org.apache.hc.core5.http.HttpHost;
42  import org.apache.hc.core5.http.HttpVersion;
43  import org.apache.hc.core5.http.Method;
44  import org.apache.hc.core5.http.io.entity.ByteArrayEntity;
45  import org.apache.hc.core5.http.io.entity.StringEntity;
46  import org.apache.hc.core5.http.message.BasicHeader;
47  import org.apache.hc.core5.http.message.BasicNameValuePair;
48  import org.apache.hc.core5.net.URIAuthority;
49  import org.apache.hc.core5.net.URIBuilder;
50  import org.junit.jupiter.api.Assertions;
51  import org.junit.jupiter.api.Test;
52  
53  class ClassicRequestBuilderTest {
54  
55      @Test
56      void constructor() throws UnknownHostException, URISyntaxException {
57          final ClassicRequestBuilder classicRequestBuilder = new ClassicRequestBuilder(Method.HEAD);
58          assertEquals(Method.HEAD.name(), classicRequestBuilder.getMethod());
59  
60          final ClassicRequestBuilder classicRequestBuilder2 = new ClassicRequestBuilder(Method.HEAD.name());
61          assertEquals(Method.HEAD.name(), classicRequestBuilder2.getMethod());
62  
63          final ClassicRequestBuilder classicRequestBuilder3 = new ClassicRequestBuilder(Method.HEAD.name(), URIBuilder.localhost().build());
64          assertEquals(Method.HEAD.name(), classicRequestBuilder3.getMethod());
65          assertEquals(URIBuilder.localhost().getHost(), classicRequestBuilder3.getAuthority().getHostName());
66  
67          final ClassicRequestBuilder classicRequestBuilder4 = new ClassicRequestBuilder(Method.HEAD, URIBuilder.localhost().build());
68          assertEquals(Method.HEAD.name(), classicRequestBuilder4.getMethod());
69          assertEquals(URIBuilder.localhost().getHost(), classicRequestBuilder4.getAuthority().getHostName());
70  
71          final ClassicRequestBuilder classicRequestBuilder5 = new ClassicRequestBuilder(Method.HEAD, "/localhost");
72          assertEquals(Method.HEAD.name(), classicRequestBuilder5.getMethod());
73          assertEquals("/localhost", classicRequestBuilder5.getPath());
74  
75          final ClassicRequestBuilder classicRequestBuilder6 = new ClassicRequestBuilder(Method.HEAD.name(), "/localhost");
76          assertEquals(Method.HEAD.name(), classicRequestBuilder6.getMethod());
77          assertEquals("/localhost", classicRequestBuilder6.getPath());
78      }
79  
80      @Test
81      public void create() {
82          final ClassicHttpRequest classicHttpRequest = ClassicRequestBuilder.create(Method.HEAD.name()).build();
83          assertEquals(Method.HEAD.name(), classicHttpRequest.getMethod());
84      }
85  
86      @Test
87      public void get() throws UnknownHostException, URISyntaxException {
88          final ClassicRequestBuilder classicRequestBuilder = ClassicRequestBuilder.get();
89          assertEquals(Method.GET.name(), classicRequestBuilder.getMethod());
90  
91          final ClassicRequestBuilder classicRequestBuilder1 = ClassicRequestBuilder.get(URIBuilder.localhost().build());
92          assertEquals(Method.GET.name(), classicRequestBuilder1.getMethod());
93  
94          final ClassicRequestBuilder classicRequestBuilder3 = ClassicRequestBuilder.get("/localhost");
95          assertEquals(Method.GET.name(), classicRequestBuilder3.getMethod());
96          assertEquals("/localhost", classicRequestBuilder3.getPath());
97      }
98  
99      @Test
100     public void head() throws UnknownHostException, URISyntaxException {
101         final ClassicRequestBuilder classicRequestBuilder = ClassicRequestBuilder.head();
102         assertEquals(Method.HEAD.name(), classicRequestBuilder.getMethod());
103 
104         final ClassicRequestBuilder classicRequestBuilder1 = ClassicRequestBuilder.head(URIBuilder.localhost().build());
105         assertEquals(Method.HEAD.name(), classicRequestBuilder1.getMethod());
106 
107         final ClassicRequestBuilder classicRequestBuilder3 = ClassicRequestBuilder.head("/localhost");
108         assertEquals(Method.HEAD.name(), classicRequestBuilder3.getMethod());
109         assertEquals("/localhost", classicRequestBuilder3.getPath());
110     }
111 
112     @Test
113     public void patch() throws UnknownHostException, URISyntaxException {
114         final ClassicRequestBuilder classicRequestBuilder = ClassicRequestBuilder.patch();
115         assertEquals(Method.PATCH.name(), classicRequestBuilder.getMethod());
116 
117         final ClassicRequestBuilder classicRequestBuilder1 = ClassicRequestBuilder.patch(URIBuilder.localhost().build());
118         assertEquals(Method.PATCH.name(), classicRequestBuilder1.getMethod());
119 
120         final ClassicRequestBuilder classicRequestBuilder3 = ClassicRequestBuilder.patch("/localhost");
121         assertEquals(Method.PATCH.name(), classicRequestBuilder3.getMethod());
122         assertEquals("/localhost", classicRequestBuilder3.getPath());
123     }
124 
125     @Test
126     public void post() throws UnknownHostException, URISyntaxException {
127         final ClassicRequestBuilder classicRequestBuilder = ClassicRequestBuilder.post();
128         assertEquals(Method.POST.name(), classicRequestBuilder.getMethod());
129 
130         final ClassicRequestBuilder classicRequestBuilder1 = ClassicRequestBuilder.post(URIBuilder.localhost().build());
131         assertEquals(Method.POST.name(), classicRequestBuilder1.getMethod());
132 
133         final ClassicRequestBuilder classicRequestBuilder3 = ClassicRequestBuilder.post("/localhost");
134         assertEquals(Method.POST.name(), classicRequestBuilder3.getMethod());
135         assertEquals("/localhost", classicRequestBuilder3.getPath());
136     }
137 
138     @Test
139     public void put() throws UnknownHostException, URISyntaxException {
140         final ClassicRequestBuilder classicRequestBuilder = ClassicRequestBuilder.put();
141         assertEquals(Method.PUT.name(), classicRequestBuilder.getMethod());
142 
143         final ClassicRequestBuilder classicRequestBuilder1 = ClassicRequestBuilder.put(URIBuilder.localhost().build());
144         assertEquals(Method.PUT.name(), classicRequestBuilder1.getMethod());
145 
146         final ClassicRequestBuilder classicRequestBuilder3 = ClassicRequestBuilder.put("/localhost");
147         assertEquals(Method.PUT.name(), classicRequestBuilder3.getMethod());
148         assertEquals("/localhost", classicRequestBuilder3.getPath());
149     }
150 
151     @Test
152     public void delete() throws UnknownHostException, URISyntaxException {
153         final ClassicRequestBuilder classicRequestBuilder = ClassicRequestBuilder.delete();
154         assertEquals(Method.DELETE.name(), classicRequestBuilder.getMethod());
155 
156         final ClassicRequestBuilder classicRequestBuilder1 = ClassicRequestBuilder.delete(URIBuilder.localhost().build());
157         assertEquals(Method.DELETE.name(), classicRequestBuilder1.getMethod());
158 
159         final ClassicRequestBuilder classicRequestBuilder3 = ClassicRequestBuilder.delete("/localhost");
160         assertEquals(Method.DELETE.name(), classicRequestBuilder3.getMethod());
161         assertEquals("/localhost", classicRequestBuilder3.getPath());
162     }
163 
164     @Test
165     public void trace() throws UnknownHostException, URISyntaxException {
166         final ClassicRequestBuilder classicRequestBuilder = ClassicRequestBuilder.trace();
167         assertEquals(Method.TRACE.name(), classicRequestBuilder.getMethod());
168 
169         final ClassicRequestBuilder classicRequestBuilder1 = ClassicRequestBuilder.trace(URIBuilder.localhost().build());
170         assertEquals(Method.TRACE.name(), classicRequestBuilder1.getMethod());
171 
172         final ClassicRequestBuilder classicRequestBuilder3 = ClassicRequestBuilder.trace("/localhost");
173         assertEquals(Method.TRACE.name(), classicRequestBuilder3.getMethod());
174         assertEquals("/localhost", classicRequestBuilder3.getPath());
175     }
176 
177     @Test
178     public void option() throws UnknownHostException, URISyntaxException {
179         final ClassicRequestBuilder classicRequestBuilder = ClassicRequestBuilder.options();
180         assertEquals(Method.OPTIONS.name(), classicRequestBuilder.getMethod());
181 
182         final ClassicRequestBuilder classicRequestBuilder1 = ClassicRequestBuilder.options(URIBuilder.localhost().build());
183         assertEquals(Method.OPTIONS.name(), classicRequestBuilder1.getMethod());
184 
185         final ClassicRequestBuilder classicRequestBuilder3 = ClassicRequestBuilder.options("/localhost");
186         assertEquals(Method.OPTIONS.name(), classicRequestBuilder3.getMethod());
187         assertEquals("/localhost", classicRequestBuilder3.getPath());
188     }
189 
190     @Test
191     public void builder() {
192         final Header header = new BasicHeader("header2", "blah");
193         final ClassicHttpRequest classicHttpRequest = ClassicRequestBuilder.get()
194                 .setVersion(HttpVersion.HTTP_1_1)
195                 .setCharset(StandardCharsets.US_ASCII)
196                 .setAuthority(new URIAuthority("host"))
197                 .setEntity("<html><body><h1>Access denied</h1></body></html>", ContentType.TEXT_HTML)
198                 .setHeader(new BasicHeader("header2", "blah"))
199                 .setHeader("X-Test-Filter", "active")
200                 .setHeader(header)
201                 .setPath("path/")
202                 .setScheme("http")
203                 .addHeader(header)
204                 .addHeader("header", ".addHeader(header)")
205                 .addParameter(new BasicHeader("header2", "blah"))
206                 .addParameter("param1", "value1")
207                 .addParameters(new BasicNameValuePair("param3", "value3"), new BasicNameValuePair("param4", null))
208                 .setAbsoluteRequestUri(true)
209                 .setEntity(new StringEntity("requestBody"))
210                 .setEntity(new ByteArrayEntity(new byte[10240], ContentType.TEXT_PLAIN))
211                 .setEntity(new byte[10240], ContentType.TEXT_HTML)
212                 .setEntity("requestBody")
213                 .setUri("theUri")
214                 .setHttpHost(new HttpHost("httpbin.org"))
215                 .build();
216 
217         assertAll("Should return address of Oracle's headquarter",
218                 () -> assertNotNull(classicHttpRequest.getEntity()),
219                 () -> assertEquals(Method.GET.name(), classicHttpRequest.getMethod()),
220                 () -> assertEquals("http", classicHttpRequest.getScheme()),
221                 () -> assertEquals("httpbin.org", classicHttpRequest.getAuthority().getHostName()),
222                 () -> assertEquals(HttpVersion.HTTP_1_1, classicHttpRequest.getVersion()),
223                 () -> assertEquals(4, classicHttpRequest.getHeaders().length),
224                 () -> assertNotNull(ClassicRequestBuilder.get().toString()),
225                 () -> assertEquals("http://httpbin.org/theUri?header2=blah&param1=value1&param3=value3&param4", new String(classicHttpRequest.getRequestUri().getBytes()))
226         );
227     }
228 
229 
230     @Test
231     public void builderTraceThrowsIllegalStateException() {
232         Assertions.assertThrows(IllegalStateException.class, () ->
233                 ClassicRequestBuilder.trace()
234                         .setVersion(HttpVersion.HTTP_1_1)
235                         .setEntity(new ByteArrayEntity(new byte[10240], ContentType.TEXT_PLAIN))
236                         .build());
237     }
238 
239 }