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