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.client5.http.async.methods;
29
30 import static org.hamcrest.MatcherAssert.assertThat;
31
32 import java.net.URI;
33 import java.nio.charset.StandardCharsets;
34 import java.util.Arrays;
35
36 import org.apache.hc.client5.http.ContentTypeMatcher;
37 import org.apache.hc.client5.http.HeaderMatcher;
38 import org.apache.hc.client5.http.HeadersMatcher;
39 import org.apache.hc.client5.http.NameValuePairsMatcher;
40 import org.apache.hc.core5.http.ContentType;
41 import org.apache.hc.core5.http.HttpVersion;
42 import org.apache.hc.core5.http.Method;
43 import org.apache.hc.core5.http.message.BasicHeader;
44 import org.apache.hc.core5.http.message.BasicNameValuePair;
45 import org.apache.hc.core5.net.URIAuthority;
46 import org.hamcrest.CoreMatchers;
47 import org.junit.jupiter.api.Assertions;
48 import org.junit.jupiter.api.Test;
49
50
51
52
53 class TestSimpleMessageBuilders {
54
55 @Test
56 void testResponseBasics() {
57 final SimpleResponseBuilder builder = SimpleResponseBuilder.create(200);
58 Assertions.assertEquals(200, builder.getStatus());
59 Assertions.assertNull(builder.getHeaders());
60 Assertions.assertNull(builder.getVersion());
61
62 final SimpleHttpResponse r1 = builder.build();
63 Assertions.assertNotNull(r1);
64 Assertions.assertEquals(200, r1.getCode());
65 Assertions.assertNull(r1.getVersion());
66
67 builder.setStatus(500);
68 builder.setVersion(HttpVersion.HTTP_1_0);
69 Assertions.assertEquals(500, builder.getStatus());
70 Assertions.assertEquals(HttpVersion.HTTP_1_0, builder.getVersion());
71
72 final SimpleHttpResponse r2 = builder.build();
73 Assertions.assertEquals(500, r2.getCode());
74 Assertions.assertEquals(HttpVersion.HTTP_1_0, r2.getVersion());
75
76 builder.addHeader("h1", "v1");
77 builder.addHeader("h1", "v2");
78 builder.addHeader("h2", "v2");
79 assertThat(builder.getHeaders(), HeadersMatcher.same(
80 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
81 assertThat(builder.getHeaders("h1"), HeadersMatcher.same(
82 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2")));
83 assertThat(builder.getFirstHeader("h1"), HeaderMatcher.same("h1", "v1"));
84 assertThat(builder.getLastHeader("h1"), HeaderMatcher.same("h1", "v2"));
85
86 final SimpleHttpResponse r3 = builder.build();
87 assertThat(r3.getHeaders(), HeadersMatcher.same(
88 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
89 assertThat(r3.getHeaders("h1"), HeadersMatcher.same(
90 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2")));
91 assertThat(r3.getFirstHeader("h1"), HeaderMatcher.same("h1", "v1"));
92 assertThat(r3.getLastHeader("h1"), HeaderMatcher.same("h1", "v2"));
93
94 builder.removeHeader(new BasicHeader("h1", "v2"));
95 assertThat(builder.getHeaders("h1"), HeadersMatcher.same(new BasicHeader("h1", "v1")));
96 assertThat(builder.getHeaders(), HeadersMatcher.same(
97 new BasicHeader("h1", "v1"), new BasicHeader("h2", "v2")));
98
99 final SimpleHttpResponse r4 = builder.build();
100 assertThat(r4.getHeaders("h1"), HeadersMatcher.same(new BasicHeader("h1", "v1")));
101 assertThat(r4.getHeaders(), HeadersMatcher.same(
102 new BasicHeader("h1", "v1"), new BasicHeader("h2", "v2")));
103
104 builder.removeHeaders("h1");
105 assertThat(builder.getHeaders("h1"), HeadersMatcher.same());
106 assertThat(builder.getHeaders(), HeadersMatcher.same(new BasicHeader("h2", "v2")));
107
108 final SimpleHttpResponse r5 = builder.build();
109 assertThat(r5.getHeaders("h1"), HeadersMatcher.same());
110 assertThat(r5.getHeaders(), HeadersMatcher.same(new BasicHeader("h2", "v2")));
111 }
112
113 @Test
114 void testRequestBasics() throws Exception {
115 final SimpleRequestBuilder builder = SimpleRequestBuilder.get();
116 Assertions.assertEquals(URI.create("/"), builder.getUri());
117 Assertions.assertEquals("GET", builder.getMethod());
118 Assertions.assertNull(builder.getScheme());
119 Assertions.assertNull(builder.getAuthority());
120 Assertions.assertNull(builder.getPath());
121 Assertions.assertNull(builder.getHeaders());
122 Assertions.assertNull(builder.getVersion());
123 Assertions.assertNull(builder.getCharset());
124 Assertions.assertNull(builder.getParameters());
125
126 final SimpleHttpRequest r1 = builder.build();
127 Assertions.assertNotNull(r1);
128 Assertions.assertEquals("GET", r1.getMethod());
129 Assertions.assertNull(r1.getScheme());
130 Assertions.assertNull(r1.getAuthority());
131 Assertions.assertNull(r1.getPath());
132 Assertions.assertEquals(URI.create("/"), r1.getUri());
133 Assertions.assertNull(r1.getVersion());
134
135 builder.setUri(URI.create("http://host:1234/blah?param=value"));
136 builder.setVersion(HttpVersion.HTTP_1_1);
137 Assertions.assertEquals("http", builder.getScheme());
138 Assertions.assertEquals(new URIAuthority("host", 1234), builder.getAuthority());
139 Assertions.assertEquals("/blah?param=value", builder.getPath());
140 Assertions.assertEquals(URI.create("http://host:1234/blah?param=value"), builder.getUri());
141 Assertions.assertEquals(HttpVersion.HTTP_1_1, builder.getVersion());
142
143 final SimpleHttpRequest r2 = builder.build();
144 Assertions.assertEquals("GET", r2.getMethod());
145 Assertions.assertEquals("http", r2.getScheme());
146 Assertions.assertEquals(new URIAuthority("host", 1234), r2.getAuthority());
147 Assertions.assertEquals("/blah?param=value", r2.getPath());
148 Assertions.assertEquals(URI.create("http://host:1234/blah?param=value"), r2.getUri());
149 Assertions.assertEquals(HttpVersion.HTTP_1_1, builder.getVersion());
150
151 builder.setCharset(StandardCharsets.US_ASCII);
152 builder.addParameter("param1", "value1");
153 builder.addParameter("param2", null);
154 builder.addParameters(new BasicNameValuePair("param3", "value3"), new BasicNameValuePair("param4", null));
155
156 Assertions.assertEquals(builder.getParameters(), Arrays.asList(
157 new BasicNameValuePair("param1", "value1"), new BasicNameValuePair("param2", null),
158 new BasicNameValuePair("param3", "value3"), new BasicNameValuePair("param4", null)
159 ));
160 Assertions.assertEquals(URI.create("http://host:1234/blah?param=value"), builder.getUri());
161
162 final SimpleHttpRequest r3 = builder.build();
163 Assertions.assertEquals("GET", r3.getMethod());
164 Assertions.assertEquals("http", r3.getScheme());
165 Assertions.assertEquals(new URIAuthority("host", 1234), r3.getAuthority());
166 Assertions.assertEquals("/blah?param=value¶m1=value1¶m2¶m3=value3¶m4", r3.getPath());
167 Assertions.assertEquals(URI.create("http://host:1234/blah?param=value¶m1=value1¶m2¶m3=value3¶m4"),
168 r3.getUri());
169
170 builder.addHeader("h1", "v1");
171 builder.addHeader("h1", "v2");
172 builder.addHeader("h2", "v2");
173 assertThat(builder.getHeaders(), HeadersMatcher.same(
174 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
175 assertThat(builder.getHeaders("h1"), HeadersMatcher.same(
176 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2")));
177 assertThat(builder.getFirstHeader("h1"), HeaderMatcher.same("h1", "v1"));
178 assertThat(builder.getLastHeader("h1"), HeaderMatcher.same("h1", "v2"));
179
180 final SimpleHttpRequest r4 = builder.build();
181 assertThat(r4.getHeaders(), HeadersMatcher.same(
182 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
183 assertThat(r4.getHeaders("h1"), HeadersMatcher.same(
184 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2")));
185 assertThat(r4.getFirstHeader("h1"), HeaderMatcher.same("h1", "v1"));
186 assertThat(r4.getLastHeader("h1"), HeaderMatcher.same("h1", "v2"));
187
188 builder.removeHeader(new BasicHeader("h1", "v2"));
189 assertThat(builder.getHeaders("h1"), HeadersMatcher.same(new BasicHeader("h1", "v1")));
190 assertThat(builder.getHeaders(), HeadersMatcher.same(
191 new BasicHeader("h1", "v1"), new BasicHeader("h2", "v2")));
192
193 final SimpleHttpRequest r5 = builder.build();
194 assertThat(r5.getHeaders("h1"), HeadersMatcher.same(new BasicHeader("h1", "v1")));
195 assertThat(r5.getHeaders(), HeadersMatcher.same(
196 new BasicHeader("h1", "v1"), new BasicHeader("h2", "v2")));
197
198 builder.removeHeaders("h1");
199 assertThat(builder.getHeaders("h1"), HeadersMatcher.same());
200 assertThat(builder.getHeaders(), HeadersMatcher.same(new BasicHeader("h2", "v2")));
201
202 final SimpleHttpRequest r6 = builder.build();
203 assertThat(r6.getHeaders("h1"), HeadersMatcher.same());
204 assertThat(r6.getHeaders(), HeadersMatcher.same(new BasicHeader("h2", "v2")));
205 }
206
207 @Test
208 void testResponseCopy() {
209 final SimpleHttpResponse response = SimpleHttpResponse.create(400);
210 response.addHeader("h1", "v1");
211 response.addHeader("h1", "v2");
212 response.addHeader("h2", "v2");
213 response.setVersion(HttpVersion.HTTP_2);
214
215 final SimpleResponseBuilder builder = SimpleResponseBuilder.copy(response);
216 Assertions.assertEquals(400, builder.getStatus());
217 Assertions.assertEquals(HttpVersion.HTTP_2, builder.getVersion());
218 assertThat(builder.getHeaders(), HeadersMatcher.same(
219 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
220 }
221
222 @Test
223 void testRequestCopy() {
224 final SimpleHttpRequest request = SimpleHttpRequest.create(Method.GET, URI.create("https://host:3456/stuff?blah")) ;
225 request.addHeader("h1", "v1");
226 request.addHeader("h1", "v2");
227 request.addHeader("h2", "v2");
228 request.setVersion(HttpVersion.HTTP_2);
229
230 final SimpleRequestBuilder builder = SimpleRequestBuilder.copy(request);
231 Assertions.assertEquals("GET", builder.getMethod());
232 Assertions.assertEquals("https", builder.getScheme());
233 Assertions.assertEquals(new URIAuthority("host", 3456), builder.getAuthority());
234 Assertions.assertEquals("/stuff?blah", builder.getPath());
235 Assertions.assertEquals(HttpVersion.HTTP_2, builder.getVersion());
236 assertThat(builder.getHeaders(), HeadersMatcher.same(
237 new BasicHeader("h1", "v1"), new BasicHeader("h1", "v2"), new BasicHeader("h2", "v2")));
238 }
239
240 @Test
241 void testGetParameters() {
242 final SimpleRequestBuilder builder = SimpleRequestBuilder.get(URI.create("https://host:3456/stuff?p0=p0"));
243 builder.addParameter("p1", "v1");
244 builder.addParameters(new BasicNameValuePair("p2", "v2"), new BasicNameValuePair("p3", "v3"));
245 builder.addParameter(new BasicNameValuePair("p3", "v3.1"));
246 Assertions.assertEquals("GET", builder.getMethod());
247 Assertions.assertEquals("https", builder.getScheme());
248 Assertions.assertEquals(new URIAuthority("host", 3456), builder.getAuthority());
249 Assertions.assertEquals("/stuff?p0=p0", builder.getPath());
250 assertThat(builder.getParameters(), NameValuePairsMatcher.same(
251 new BasicNameValuePair("p1", "v1"), new BasicNameValuePair("p2", "v2"),
252 new BasicNameValuePair("p3", "v3"), new BasicNameValuePair("p3", "v3.1")));
253 final SimpleHttpRequest request = builder.build();
254 assertThat(request.getPath(), CoreMatchers.equalTo("/stuff?p0=p0&p1=v1&p2=v2&p3=v3&p3=v3.1"));
255 Assertions.assertNull(request.getBody());
256 }
257
258 @Test
259 void testPostParameters() {
260 final SimpleRequestBuilder builder = SimpleRequestBuilder.post(URI.create("https://host:3456/stuff?p0=p0"));
261 builder.addParameter("p1", "v1");
262 builder.addParameters(new BasicNameValuePair("p2", "v2"), new BasicNameValuePair("p3", "v3"));
263 builder.addParameter(new BasicNameValuePair("p3", "v3.1"));
264 Assertions.assertEquals("POST", builder.getMethod());
265 Assertions.assertEquals("https", builder.getScheme());
266 Assertions.assertEquals(new URIAuthority("host", 3456), builder.getAuthority());
267 Assertions.assertEquals("/stuff?p0=p0", builder.getPath());
268 assertThat(builder.getParameters(), NameValuePairsMatcher.same(
269 new BasicNameValuePair("p1", "v1"), new BasicNameValuePair("p2", "v2"),
270 new BasicNameValuePair("p3", "v3"), new BasicNameValuePair("p3", "v3.1")));
271 final SimpleHttpRequest request = builder.build();
272 assertThat(request.getPath(), CoreMatchers.equalTo("/stuff?p0=p0"));
273 Assertions.assertNotNull(request.getBody());
274 assertThat(request.getBody().getContentType(),
275 ContentTypeMatcher.sameMimeType(ContentType.APPLICATION_FORM_URLENCODED));
276 assertThat(request.getBody().getBodyText(),
277 CoreMatchers.equalTo("p1=v1&p2=v2&p3=v3&p3=v3.1"));
278 }
279
280 }