1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.support;
29
30 import static org.hamcrest.MatcherAssert.assertThat;
31 import static org.junit.jupiter.api.Assertions.assertEquals;
32
33 import org.apache.hc.core5.http.HeaderMatcher;
34 import org.apache.hc.core5.http.HeadersMatcher;
35 import org.apache.hc.core5.http.HttpRequest;
36 import org.apache.hc.core5.http.HttpResponse;
37 import org.apache.hc.core5.http.HttpVersion;
38 import org.apache.hc.core5.http.Method;
39 import org.apache.hc.core5.http.message.BasicHeader;
40 import org.apache.hc.core5.http.message.BasicHttpRequest;
41 import org.apache.hc.core5.http.message.BasicHttpResponse;
42 import org.apache.hc.core5.http.message.BasicNameValuePair;
43 import org.apache.hc.core5.net.URIAuthority;
44 import org.junit.jupiter.api.Assertions;
45 import org.junit.jupiter.api.Test;
46
47 import java.net.URI;
48 import java.nio.charset.StandardCharsets;
49 import java.util.Arrays;
50
51
52
53
54 public class TestBasicMessageBuilders {
55
56 @Test
57 public void testResponseBasics() throws Exception {
58 final BasicResponseBuilder builder = BasicResponseBuilder.create(200);
59 Assertions.assertEquals(200, builder.getStatus());
60 Assertions.assertNull(builder.getHeaders());
61 Assertions.assertNull(builder.getVersion());
62
63 final BasicHttpResponse r1 = builder.build();
64 Assertions.assertNotNull(r1);
65 Assertions.assertEquals(200, r1.getCode());
66 Assertions.assertNull(r1.getVersion());
67
68 builder.setStatus(500);
69 builder.setVersion(HttpVersion.HTTP_1_0);
70 Assertions.assertEquals(500, builder.getStatus());
71 Assertions.assertEquals(HttpVersion.HTTP_1_0, builder.getVersion());
72
73 final BasicHttpResponse r2 = builder.build();
74 Assertions.assertEquals(500, r2.getCode());
75 Assertions.assertEquals(HttpVersion.HTTP_1_0, r2.getVersion());
76
77 builder.addHeader("h1", "v1");
78 builder.addHeader("h1", "v2");
79 builder.addHeader("h2", "v2");
80 assertThat(builder.getHeaders(), HeadersMatcher.same(
81 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
82 assertThat(builder.getHeaders("h1"), HeadersMatcher.same(
83 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2")));
84 assertThat(builder.getFirstHeader("h1"), HeaderMatcher.same("h1", "v1"));
85 assertThat(builder.getLastHeader("h1"), HeaderMatcher.same("h1", "v2"));
86
87 final BasicHttpResponse r3 = builder.build();
88 assertThat(r3.getHeaders(), HeadersMatcher.same(
89 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
90 assertThat(r3.getHeaders("h1"), HeadersMatcher.same(
91 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2")));
92 assertThat(r3.getFirstHeader("h1"), HeaderMatcher.same("h1", "v1"));
93 assertThat(r3.getLastHeader("h1"), HeaderMatcher.same("h1", "v2"));
94
95 builder.removeHeader(new BasicHeader("h1", "v2"));
96 assertThat(builder.getHeaders("h1"), HeadersMatcher.same(new BasicHeader("h1", "v1")));
97 assertThat(builder.getHeaders(), HeadersMatcher.same(
98 new BasicHeader("h1", "v1"), new BasicHeader("h2", "v2")));
99
100 final BasicHttpResponse r4 = builder.build();
101 assertThat(r4.getHeaders("h1"), HeadersMatcher.same(new BasicHeader("h1", "v1")));
102 assertThat(r4.getHeaders(), HeadersMatcher.same(
103 new BasicHeader("h1", "v1"), new BasicHeader("h2", "v2")));
104
105 builder.removeHeaders("h1");
106 assertThat(builder.getHeaders("h1"), HeadersMatcher.same());
107 assertThat(builder.getHeaders(), HeadersMatcher.same(new BasicHeader("h2", "v2")));
108
109 final BasicHttpResponse r5 = builder.build();
110 assertThat(r5.getHeaders("h1"), HeadersMatcher.same());
111 assertThat(r5.getHeaders(), HeadersMatcher.same(new BasicHeader("h2", "v2")));
112 }
113
114 @Test
115 public void testRequestBasics() throws Exception {
116 final BasicRequestBuilder builder = BasicRequestBuilder.get();
117 Assertions.assertEquals(URI.create("/"), builder.getUri());
118 Assertions.assertEquals("GET", builder.getMethod());
119 Assertions.assertNull(builder.getScheme());
120 Assertions.assertNull(builder.getAuthority());
121 Assertions.assertNull(builder.getPath());
122 Assertions.assertNull(builder.getHeaders());
123 Assertions.assertNull(builder.getVersion());
124 Assertions.assertNull(builder.getCharset());
125 Assertions.assertNull(builder.getParameters());
126
127 final BasicHttpRequest r1 = builder.build();
128 Assertions.assertNotNull(r1);
129 Assertions.assertEquals("GET", r1.getMethod());
130 Assertions.assertNull(r1.getScheme());
131 Assertions.assertNull(r1.getAuthority());
132 Assertions.assertNull(r1.getPath());
133 Assertions.assertEquals(URI.create("/"), r1.getUri());
134 Assertions.assertNull(r1.getVersion());
135
136 builder.setUri(URI.create("http://host:1234/blah?param=value"));
137 builder.setVersion(HttpVersion.HTTP_1_1);
138 Assertions.assertEquals("http", builder.getScheme());
139 Assertions.assertEquals(new URIAuthority("host", 1234), builder.getAuthority());
140 Assertions.assertEquals("/blah?param=value", builder.getPath());
141 Assertions.assertEquals(URI.create("http://host:1234/blah?param=value"), builder.getUri());
142 Assertions.assertEquals(HttpVersion.HTTP_1_1, builder.getVersion());
143
144 final BasicHttpRequest r2 = builder.build();
145 Assertions.assertEquals("GET", r2.getMethod());
146 Assertions.assertEquals("http", r2.getScheme());
147 Assertions.assertEquals(new URIAuthority("host", 1234), r2.getAuthority());
148 Assertions.assertEquals("/blah?param=value", r2.getPath());
149 Assertions.assertEquals(URI.create("http://host:1234/blah?param=value"), r2.getUri());
150 Assertions.assertEquals(HttpVersion.HTTP_1_1, builder.getVersion());
151
152 builder.setCharset(StandardCharsets.US_ASCII);
153 builder.addParameter("param1", "value1");
154 builder.addParameter("param2", null);
155 builder.addParameters(new BasicNameValuePair("param3", "value3"), new BasicNameValuePair("param4", null));
156
157 Assertions.assertEquals(builder.getParameters(), Arrays.asList(
158 new BasicNameValuePair("param1", "value1"), new BasicNameValuePair("param2", null),
159 new BasicNameValuePair("param3", "value3"), new BasicNameValuePair("param4", null)
160 ));
161 Assertions.assertEquals(URI.create("http://host:1234/blah?param=value"), builder.getUri());
162
163 final BasicHttpRequest r3 = builder.build();
164 Assertions.assertEquals("GET", r3.getMethod());
165 Assertions.assertEquals("http", r3.getScheme());
166 Assertions.assertEquals(new URIAuthority("host", 1234), r3.getAuthority());
167 Assertions.assertEquals("/blah?param=value¶m1=value1¶m2¶m3=value3¶m4", r3.getPath());
168 Assertions.assertEquals(URI.create("http://host:1234/blah?param=value¶m1=value1¶m2¶m3=value3¶m4"),
169 r3.getUri());
170
171 builder.addHeader("h1", "v1");
172 builder.addHeader("h1", "v2");
173 builder.addHeader("h2", "v2");
174 assertThat(builder.getHeaders(), HeadersMatcher.same(
175 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
176 assertThat(builder.getHeaders("h1"), HeadersMatcher.same(
177 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2")));
178 assertThat(builder.getFirstHeader("h1"), HeaderMatcher.same("h1", "v1"));
179 assertThat(builder.getLastHeader("h1"), HeaderMatcher.same("h1", "v2"));
180
181 final BasicHttpRequest r4 = builder.build();
182 assertThat(r4.getHeaders(), HeadersMatcher.same(
183 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
184 assertThat(r4.getHeaders("h1"), HeadersMatcher.same(
185 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2")));
186 assertThat(r4.getFirstHeader("h1"), HeaderMatcher.same("h1", "v1"));
187 assertThat(r4.getLastHeader("h1"), HeaderMatcher.same("h1", "v2"));
188
189 builder.removeHeader(new BasicHeader("h1", "v2"));
190 assertThat(builder.getHeaders("h1"), HeadersMatcher.same(new BasicHeader("h1", "v1")));
191 assertThat(builder.getHeaders(), HeadersMatcher.same(
192 new BasicHeader("h1", "v1"), new BasicHeader("h2", "v2")));
193
194 final BasicHttpRequest r5 = builder.build();
195 assertThat(r5.getHeaders("h1"), HeadersMatcher.same(new BasicHeader("h1", "v1")));
196 assertThat(r5.getHeaders(), HeadersMatcher.same(
197 new BasicHeader("h1", "v1"), new BasicHeader("h2", "v2")));
198
199 builder.removeHeaders("h1");
200 assertThat(builder.getHeaders("h1"), HeadersMatcher.same());
201 assertThat(builder.getHeaders(), HeadersMatcher.same(new BasicHeader("h2", "v2")));
202
203 final BasicHttpRequest r6 = builder.build();
204 assertThat(r6.getHeaders("h1"), HeadersMatcher.same());
205 assertThat(r6.getHeaders(), HeadersMatcher.same(new BasicHeader("h2", "v2")));
206 }
207
208 @Test
209 public void testResponseCopy() throws Exception {
210 final HttpResponse response = new BasicHttpResponse(400);
211 response.addHeader("h1", "v1");
212 response.addHeader("h1", "v2");
213 response.addHeader("h2", "v2");
214 response.setVersion(HttpVersion.HTTP_2);
215
216 final BasicResponseBuilder builder = BasicResponseBuilder.copy(response);
217 Assertions.assertEquals(400, builder.getStatus());
218 Assertions.assertEquals(HttpVersion.HTTP_2, builder.getVersion());
219 assertThat(builder.getHeaders(), HeadersMatcher.same(
220 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
221 }
222
223 @Test
224 public void testRequestCopy() throws Exception {
225 final HttpRequest request = new BasicHttpRequest(Method.GET, URI.create("https://host:3456/stuff?blah")) ;
226 request.addHeader("h1", "v1");
227 request.addHeader("h1", "v2");
228 request.addHeader("h2", "v2");
229 request.setVersion(HttpVersion.HTTP_2);
230
231 final BasicRequestBuilder builder = BasicRequestBuilder.copy(request);
232 Assertions.assertEquals("GET", builder.getMethod());
233 Assertions.assertEquals("https", builder.getScheme());
234 Assertions.assertEquals(new URIAuthority("host", 3456), builder.getAuthority());
235 Assertions.assertEquals("/stuff?blah", builder.getPath());
236 Assertions.assertEquals(HttpVersion.HTTP_2, builder.getVersion());
237 assertThat(builder.getHeaders(), HeadersMatcher.same(
238 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
239 }
240
241 @Test
242 void testIDNIntegration() {
243 final String url = "http://müller.example.com:8080/path";
244 final HttpRequest request = new BasicHttpRequest(Method.GET, URI.create(url));
245 assertEquals(new URIAuthority("xn--mller-kva.example.com",8080), request.getAuthority());
246 }
247
248 }