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