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.message;
29
30 import java.net.URI;
31
32 import org.apache.hc.core5.http.HttpHost;
33 import org.apache.hc.core5.http.HttpRequest;
34 import org.apache.hc.core5.http.HttpResponse;
35 import org.apache.hc.core5.http.HttpStatus;
36 import org.apache.hc.core5.http.Method;
37 import org.apache.hc.core5.net.URIAuthority;
38 import org.apache.hc.core5.net.URIBuilder;
39 import org.junit.jupiter.api.Assertions;
40 import org.junit.jupiter.api.Test;
41
42
43
44
45
46 public class TestBasicMessages {
47
48 @Test
49 public void testDefaultResponseConstructors() {
50 final HttpResponse response1 = new BasicHttpResponse(HttpStatus.SC_BAD_REQUEST, "Bad Request");
51 Assertions.assertEquals(HttpStatus.SC_BAD_REQUEST, response1.getCode());
52
53 final HttpResponse response2 = new BasicHttpResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, "whatever");
54 Assertions.assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response2.getCode());
55 Assertions.assertEquals("whatever", response2.getReasonPhrase());
56 }
57
58 @Test
59 public void testSetResponseStatus() {
60 final HttpResponse response1 = new BasicHttpResponse(200, "OK");
61 Assertions.assertNotNull(response1.getCode());
62 Assertions.assertEquals(200, response1.getCode());
63
64 final HttpResponse response2 = new BasicHttpResponse(HttpStatus.SC_BAD_REQUEST, "Bad Request");
65 Assertions.assertEquals(HttpStatus.SC_BAD_REQUEST, response2.getCode());
66
67 final HttpResponse response3 = new BasicHttpResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, "whatever");
68 Assertions.assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response3.getCode());
69 Assertions.assertEquals("whatever", response3.getReasonPhrase());
70
71 final HttpResponse response4 = new BasicHttpResponse(HttpStatus.SC_OK, "OK");
72 Assertions.assertThrows(IllegalArgumentException.class, () -> response4.setCode(-23));
73 }
74
75 @Test
76 public void testDefaultRequestConstructors() {
77 final HttpRequest request1 = new BasicHttpRequest("WHATEVER", "/");
78 Assertions.assertEquals("WHATEVER", request1.getMethod());
79 Assertions.assertEquals("/", request1.getPath());
80
81 final HttpRequest request2 = new BasicHttpRequest(Method.GET, "/");
82 Assertions.assertEquals(Method.GET.name(), request2.getMethod());
83 Assertions.assertEquals("/", request2.getPath());
84
85 Assertions.assertThrows(NullPointerException.class, () ->
86 new BasicHttpRequest(Method.GET, (URI) null));
87 }
88
89 @Test
90 public void testResponseBasics() {
91 final BasicHttpResponse response = new BasicHttpResponse(200, "OK");
92 Assertions.assertEquals(200, response.getCode());
93 Assertions.assertEquals("OK", response.getReasonPhrase());
94 }
95
96 @Test
97 public void testResponseStatusLineMutation() {
98 final BasicHttpResponse response = new BasicHttpResponse(200, "OK");
99 Assertions.assertEquals(200, response.getCode());
100 Assertions.assertEquals("OK", response.getReasonPhrase());
101 response.setReasonPhrase("Kind of OK");
102 Assertions.assertEquals(200, response.getCode());
103 Assertions.assertEquals("Kind of OK", response.getReasonPhrase());
104 response.setCode(299);
105 Assertions.assertEquals(299, response.getCode());
106 Assertions.assertNull(response.getReasonPhrase());
107 }
108
109 @Test
110 public void testResponseInvalidStatusCode() {
111 Assertions.assertThrows(IllegalArgumentException.class, () -> new BasicHttpResponse(-200, "OK"));
112 final BasicHttpResponse response = new BasicHttpResponse(200, "OK");
113 Assertions.assertThrows(IllegalArgumentException.class, () -> response.setCode(-1));
114 }
115
116 @Test
117 public void testRequestBasics() throws Exception {
118 final HttpRequest request = new BasicHttpRequest(Method.GET, "/stuff");
119 Assertions.assertEquals(Method.GET.name(), request.getMethod());
120 Assertions.assertEquals("/stuff", request.getPath());
121 Assertions.assertNull(request.getAuthority());
122 Assertions.assertEquals(new URI("/stuff"), request.getUri());
123 }
124
125 @Test
126 public void testRequestWithRelativeURI() throws Exception {
127 final HttpRequest request = new BasicHttpRequest(Method.GET, new URI("/stuff"));
128 Assertions.assertEquals(Method.GET.name(), request.getMethod());
129 Assertions.assertEquals("/stuff", request.getPath());
130 Assertions.assertNull(request.getAuthority());
131 Assertions.assertEquals(new URI("/stuff"), request.getUri());
132 }
133
134 @Test
135 public void testRequestWithAbsoluteURI() throws Exception {
136 final HttpRequest request = new BasicHttpRequest(Method.GET, new URI("https://host:9443/stuff?param=value"));
137 Assertions.assertEquals(Method.GET.name(), request.getMethod());
138 Assertions.assertEquals("/stuff?param=value", request.getPath());
139 Assertions.assertEquals(new URIAuthority("host", 9443), request.getAuthority());
140 Assertions.assertEquals("https", request.getScheme());
141 Assertions.assertEquals(new URI("https://host:9443/stuff?param=value"), request.getUri());
142 }
143
144 @Test
145 public void testRequestWithAbsoluteURIAsPath() throws Exception {
146 final HttpRequest request = new BasicHttpRequest(Method.GET, "https://host:9443/stuff?param=value");
147 Assertions.assertEquals(Method.GET.name(), request.getMethod());
148 Assertions.assertEquals("/stuff?param=value", request.getPath());
149 Assertions.assertEquals(new URIAuthority("host", 9443), request.getAuthority());
150 Assertions.assertEquals("https", request.getScheme());
151 Assertions.assertEquals(new URI("https://host:9443/stuff?param=value"), request.getUri());
152 }
153
154 @Test
155 public void testRequestWithNoPath() throws Exception {
156 final HttpRequest request = new BasicHttpRequest(Method.GET, new URI("http://host"));
157 Assertions.assertEquals(Method.GET.name(), request.getMethod());
158 Assertions.assertEquals("/", request.getPath());
159 Assertions.assertEquals(new URIAuthority("host"), request.getAuthority());
160 Assertions.assertEquals("http", request.getScheme());
161 Assertions.assertEquals(new URI("http://host/"), request.getUri());
162 }
163
164 @Test
165 public void testRequestWithUserInfo() throws Exception {
166 final HttpRequest request = new BasicHttpRequest(Method.GET, new URI("https://user:pwd@host:9443/stuff?param=value"));
167 Assertions.assertEquals(Method.GET.name(), request.getMethod());
168 Assertions.assertEquals("/stuff?param=value", request.getPath());
169 Assertions.assertEquals(new URIAuthority("user:pwd", "host", 9443), request.getAuthority());
170 Assertions.assertEquals("https", request.getScheme());
171 Assertions.assertEquals(new URI("https://host:9443/stuff?param=value"), request.getUri());
172 }
173
174 @Test
175 public void testRequestWithAuthority() throws Exception {
176 final HttpRequest request = new BasicHttpRequest(Method.GET, new HttpHost("http", "somehost", -1), "/stuff");
177 Assertions.assertEquals(Method.GET.name(), request.getMethod());
178 Assertions.assertEquals("/stuff", request.getPath());
179 Assertions.assertEquals(new URIAuthority("somehost"), request.getAuthority());
180 Assertions.assertEquals(new URI("http://somehost/stuff"), request.getUri());
181 }
182
183 @Test
184 public void testRequestWithAuthorityRelativePath() throws Exception {
185 final HttpRequest request = new BasicHttpRequest(Method.GET, new HttpHost("http", "somehost", -1), "stuff");
186 Assertions.assertEquals(Method.GET.name(), request.getMethod());
187 Assertions.assertEquals("stuff", request.getPath());
188 Assertions.assertEquals(new URIAuthority("somehost"), request.getAuthority());
189 Assertions.assertEquals(new URI("http://somehost/stuff"), request.getUri());
190 }
191
192 @Test
193 public void testRequestHostWithReservedChars() throws Exception {
194 final HttpRequest request = new BasicHttpRequest(Method.GET, URI.create("http://someuser%21@%21example%21.com/stuff"));
195 Assertions.assertEquals(Method.GET.name(), request.getMethod());
196 Assertions.assertEquals("/stuff", request.getPath());
197 Assertions.assertEquals(new URIAuthority("someuser%21", "%21example%21.com", -1), request.getAuthority());
198 Assertions.assertEquals(new URI("http://%21example%21.com/stuff"), request.getUri());
199 }
200
201 @Test
202 public void testRequestPathWithMultipleLeadingSlashes() throws Exception {
203 Assertions.assertThrows(IllegalArgumentException.class, () ->
204 new BasicHttpRequest(Method.GET, URI.create("http://host//stuff")));
205 }
206
207 @Test
208 public void testRequestAbsoluteRequestUri() throws Exception {
209 final BasicHttpRequest request = new BasicHttpRequest(Method.GET, new HttpHost("http", "somehost", -1), "stuff");
210 Assertions.assertEquals("stuff", request.getRequestUri());
211 request.setAbsoluteRequestUri(true);
212 Assertions.assertEquals("http://somehost/stuff", request.getRequestUri());
213 }
214
215 @Test
216 public void testModifyingExistingRequest() throws Exception {
217 final URI uri = URI.create("https://example.org");
218 final HttpRequest request = new BasicHttpRequest(Method.GET, uri);
219
220 final URI newUri = new URIBuilder(request.getUri())
221 .addParameter("name", "value")
222 .build();
223
224 request.setUri(newUri);
225 Assertions.assertEquals(newUri, request.getUri());
226 }
227
228 }
229