2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2019 Nordix Foundation.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.rest;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
27 import java.lang.annotation.Documented;
28 import java.lang.annotation.ElementType;
29 import java.lang.annotation.Retention;
30 import java.lang.annotation.RetentionPolicy;
31 import java.lang.annotation.Target;
32 import javax.ws.rs.Consumes;
33 import javax.ws.rs.DELETE;
34 import javax.ws.rs.DefaultValue;
35 import javax.ws.rs.GET;
36 import javax.ws.rs.HttpMethod;
37 import javax.ws.rs.POST;
38 import javax.ws.rs.PUT;
39 import javax.ws.rs.Path;
40 import javax.ws.rs.PathParam;
41 import javax.ws.rs.Produces;
42 import javax.ws.rs.QueryParam;
43 import javax.ws.rs.core.MediaType;
44 import org.junit.AfterClass;
45 import org.junit.BeforeClass;
46 import org.junit.Test;
47 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
48 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
49 import org.onap.policy.common.utils.network.NetworkUtil;
50 import org.onap.policy.rest.RestManager.Pair;
53 public class RestTest {
54 private static final String MERGE_PATCH_PLUS_JSON = "application/merge-patch+json";
56 private static final String NAME_PARAM = "Bob";
57 private static final String AGE_PARAM = "10";
58 private static final String PAYLOAD = "At last! ";
59 private static final String RETURN_STRING = "Hello There ";
60 private static final String EXPECT_STRING = RETURN_STRING + NAME_PARAM + " aged " + AGE_PARAM;
62 private static final String LOCALHOST = "localhost";
63 private static final String BASE = "base";
65 private static int port;
66 private static String baseUri;
67 private static String getUri;
68 private static String deleteUri;
69 private static String putUri;
70 private static String putUriBlank;
71 private static String postUri;
72 private static String postUriBlank;
73 private static String patchUri;
74 private static String patchUriBlank;
76 private static HttpServletServer server;
79 * Sets server endpoint for the tests.
82 public static void setUp() throws Exception {
84 port = NetworkUtil.allocPort();
85 baseUri = "http://" + LOCALHOST + ":" + port + "/" + BASE + "/";
86 getUri = baseUri + "RestTest/GetHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
87 deleteUri = baseUri + "RestTest/DeleteHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
88 putUri = baseUri + "RestTest/PutHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
89 putUriBlank = baseUri + "RestTest/PutBlank";
90 postUri = baseUri + "RestTest/PostHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
91 postUriBlank = baseUri + "RestTest/PostBlank";
92 patchUri = baseUri + "RestTest/PatchHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
93 patchUriBlank = baseUri + "RestTest/PatchBlank";
95 server = HttpServletServerFactoryInstance.getServerFactory()
96 .build("RestTest", LOCALHOST, port, "/" + BASE, false, true);
97 server.addServletClass("/*", RestTest.class.getName());
98 server.waitedStart(5000);
103 * Tear down server endpoint for the tests.
105 * @throws Exception if there is a problem
108 public static void tearDown() throws Exception {
109 HttpServletServerFactoryInstance.getServerFactory().destroy();
112 @Test(expected = NullPointerException.class)
113 public void testGetUrlNull() {
114 RestManager mgr = new RestManager();
115 mgr.get(null, "user", null, null);
118 @Test(expected = NullPointerException.class)
119 public void testPutUrlNull() {
120 RestManager mgr = new RestManager();
121 mgr.put(null, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
124 @Test(expected = NullPointerException.class)
125 public void testPostUrlNull() {
126 RestManager mgr = new RestManager();
127 mgr.post(null, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
130 @Test(expected = NullPointerException.class)
131 public void testDeleteUrlNull() {
132 RestManager mgr = new RestManager();
133 mgr.delete(null, "user", null, null, null, null);
136 @Test(expected = NullPointerException.class)
137 public void testPatchUrlNull() {
138 RestManager mgr = new RestManager();
139 mgr.patch(null, "user", null, null, PAYLOAD);
143 public void testUsernameNull() {
144 RestManager mgr = new RestManager();
146 Pair<Integer, String> result = mgr.get(getUri, null, null, null);
147 assertEquals((Integer) 200, result.first);
148 assertTrue(result.second != null);
149 assertTrue(result.second.length() > 0);
150 assertEquals("GOT: " + EXPECT_STRING, result.second);
152 result = mgr.delete(deleteUri, null, null, null, null, null);
153 assertEquals((Integer) 200, result.first);
154 assertTrue(result.second != null);
155 assertTrue(result.second.length() > 0);
156 assertEquals("DELETE: " + EXPECT_STRING, result.second);
158 result = mgr.delete(deleteUri, null, null, null);
159 assertEquals((Integer) 200, result.first);
160 assertTrue(result.second != null);
161 assertTrue(result.second.length() > 0);
162 assertEquals("DELETE: " + EXPECT_STRING, result.second);
164 result = mgr.put(putUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
165 assertEquals((Integer) 200, result.first);
166 assertTrue(result.second != null);
167 assertTrue(result.second.length() > 0);
168 assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.second);
170 result = mgr.put(putUriBlank, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
171 assertEquals((Integer) 200, result.first);
172 assertTrue(result.second != null);
173 assertTrue(result.second.length() > 0);
174 assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.second);
176 result = mgr.post(postUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
177 assertEquals((Integer) 200, result.first);
178 assertTrue(result.second != null);
179 assertTrue(result.second.length() > 0);
180 assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.second);
182 result = mgr.post(postUriBlank, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
183 assertEquals((Integer) 200, result.first);
184 assertTrue(result.second != null);
185 assertTrue(result.second.length() > 0);
186 assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
188 result = mgr.patch(patchUri, null, null, null, PAYLOAD);
189 assertEquals((Integer) 200, result.first);
190 assertTrue(result.second != null);
191 assertTrue(result.second.length() > 0);
192 assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
194 result = mgr.patch(patchUriBlank, null, null, null, PAYLOAD);
195 assertEquals((Integer) 200, result.first);
196 assertTrue(result.second != null);
197 assertTrue(result.second.length() > 0);
198 assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
202 public void testUsernameEmpty() {
203 RestManager mgr = new RestManager();
205 Pair<Integer, String> result = mgr.get(getUri, "", null, null);
206 assertEquals((Integer) 200, result.first);
207 assertTrue(result.second != null);
208 assertTrue(result.second.length() > 0);
209 assertEquals("GOT: " + EXPECT_STRING, result.second);
211 result = mgr.delete(deleteUri, "", null, null, null, null);
212 assertEquals((Integer) 200, result.first);
213 assertTrue(result.second != null);
214 assertTrue(result.second.length() > 0);
215 assertEquals("DELETE: " + EXPECT_STRING, result.second);
217 result = mgr.put(putUri, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
218 assertEquals((Integer) 200, result.first);
219 assertTrue(result.second != null);
220 assertTrue(result.second.length() > 0);
221 assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.second);
223 result = mgr.put(putUriBlank, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
224 assertEquals((Integer) 200, result.first);
225 assertTrue(result.second != null);
226 assertTrue(result.second.length() > 0);
227 assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.second);
229 result = mgr.post(postUri, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
230 assertEquals((Integer) 200, result.first);
231 assertTrue(result.second != null);
232 assertTrue(result.second.length() > 0);
233 assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.second);
235 result = mgr.post(postUriBlank, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
236 assertEquals((Integer) 200, result.first);
237 assertTrue(result.second != null);
238 assertTrue(result.second.length() > 0);
239 assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
241 result = mgr.patch(patchUri, "", null, null, PAYLOAD);
242 assertEquals((Integer) 200, result.first);
243 assertTrue(result.second != null);
244 assertTrue(result.second.length() > 0);
245 assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
247 result = mgr.patch(patchUriBlank, "", null, null, PAYLOAD);
248 assertEquals((Integer) 200, result.first);
249 assertTrue(result.second != null);
250 assertTrue(result.second.length() > 0);
251 assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
255 public void testGoodUrl() {
256 RestManager mgr = new RestManager();
258 Pair<Integer, String> result = mgr.get(getUri, "user", null, null);
259 assertEquals((Integer) 200, result.first);
260 assertTrue(result.second != null);
261 assertTrue(result.second.length() > 0);
262 assertEquals("GOT: " + EXPECT_STRING, result.second);
264 result = mgr.delete(deleteUri, "user", null, null, null, null);
265 assertEquals((Integer) 200, result.first);
266 assertTrue(result.second != null);
267 assertTrue(result.second.length() > 0);
268 assertEquals("DELETE: " + EXPECT_STRING, result.second);
270 result = mgr.put(putUri, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
271 assertEquals((Integer) 200, result.first);
272 assertTrue(result.second != null);
273 assertTrue(result.second.length() > 0);
274 assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.second);
276 result = mgr.put(putUriBlank, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
277 assertEquals((Integer) 200, result.first);
278 assertTrue(result.second != null);
279 assertTrue(result.second.length() > 0);
280 assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.second);
282 result = mgr.post(postUri, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
283 assertEquals((Integer) 200, result.first);
284 assertTrue(result.second != null);
285 assertTrue(result.second.length() > 0);
286 assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.second);
288 result = mgr.post(postUriBlank, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
289 assertEquals((Integer) 200, result.first);
290 assertTrue(result.second != null);
291 assertTrue(result.second.length() > 0);
292 assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
294 result = mgr.patch(patchUri, "user", null, null, PAYLOAD);
295 assertEquals((Integer) 200, result.first);
296 assertTrue(result.second != null);
297 assertTrue(result.second.length() > 0);
298 assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
300 result = mgr.patch(patchUriBlank, "user", null, null, PAYLOAD);
301 assertEquals((Integer) 200, result.first);
302 assertTrue(result.second != null);
303 assertTrue(result.second.length() > 0);
304 assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
308 public void testNoUrlParamUrl() {
309 RestManager mgr = new RestManager();
311 Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/", null, null, null);
312 assertEquals((Integer) 404, result.first);
314 result = mgr.delete(baseUri + "RestTest/DeleteHello/", null, null, null, null, null);
315 assertEquals((Integer) 404, result.first);
317 result = mgr.put(baseUri + "RestTest/PutHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
318 assertEquals((Integer) 404, result.first);
320 result = mgr.post(baseUri + "RestTest/PostHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
321 assertEquals((Integer) 404, result.first);
323 result = mgr.patch(baseUri + "RestTest/PatchHello/", null, null, null, PAYLOAD);
324 assertEquals((Integer) 404, result.first);
328 public void testNoQueryParamUrl() {
329 RestManager mgr = new RestManager();
331 Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/" + NAME_PARAM, null, null, null);
332 assertEquals((Integer) 200, result.first);
333 assertTrue(result.second != null);
334 assertTrue(result.second.length() > 0);
335 assertEquals("GOT: " + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
337 result = mgr.delete(baseUri + "RestTest/DeleteHello/" + NAME_PARAM, null, null, null, null, null);
338 assertEquals((Integer) 200, result.first);
339 assertTrue(result.second != null);
340 assertTrue(result.second.length() > 0);
341 assertEquals("DELETE: " + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
343 result = mgr.put(baseUri + "RestTest/PutHello/" + NAME_PARAM, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
344 assertEquals((Integer) 200, result.first);
345 assertTrue(result.second != null);
346 assertTrue(result.second.length() > 0);
347 assertEquals("PUT: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
349 result = mgr.post(baseUri + "RestTest/PostHello/" + NAME_PARAM, null, null,
350 null, MediaType.TEXT_PLAIN, PAYLOAD);
351 assertEquals((Integer) 200, result.first);
352 assertTrue(result.second != null);
353 assertTrue(result.second.length() > 0);
354 assertEquals("POST: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
356 result = mgr.patch(baseUri + "RestTest/PatchHello/" + NAME_PARAM, null, null,
358 assertEquals((Integer) 200, result.first);
359 assertTrue(result.second != null);
360 assertTrue(result.second.length() > 0);
361 assertEquals("PATCH: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
365 public void testBadUrl() {
366 RestManager mgr = new RestManager();
368 Pair<Integer, String> result = mgr.get(baseUri + "NonExistant/URL/", null, null, null);
369 assertEquals((Integer) 404, result.first);
371 result = mgr.delete(baseUri + "NonExistant/URL/", null, null, null, null, null);
372 assertEquals((Integer) 404, result.first);
374 result = mgr.put(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
375 assertEquals((Integer) 404, result.first);
377 result = mgr.post(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
378 assertEquals((Integer) 404, result.first);
380 result = mgr.patch(baseUri + "NonExistant/URL/", null, null, null, PAYLOAD);
381 assertEquals((Integer) 404, result.first);
385 public void testWrongUrl() {
386 RestManager mgr = new RestManager();
388 Pair<Integer, String> result = mgr.get(deleteUri, null, null, null);
389 assertEquals((Integer) 405, result.first);
391 result = mgr.delete(getUri, null, null, null, null, null);
392 assertEquals((Integer) 405, result.first);
394 result = mgr.delete(getUri, null, null, null);
395 assertEquals((Integer) 405, result.first);
397 result = mgr.put(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
398 assertEquals((Integer) 405, result.first);
400 result = mgr.post(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
401 assertEquals((Integer) 405, result.first);
403 result = mgr.patch(getUri, null, null, null, PAYLOAD);
404 assertEquals((Integer) 405, result.first);
408 @Path("/GetHello/{name}")
409 @Produces(MediaType.TEXT_PLAIN)
410 public String getIt(@PathParam("name") String name, @DefaultValue("90") @QueryParam("age") String age) {
411 return "GOT: " + RETURN_STRING + name + " aged " + age;
415 @Path("/DeleteHello/{name}")
416 @Produces(MediaType.TEXT_PLAIN)
417 public String deleteIt(@PathParam("name") String name, @DefaultValue("90") @QueryParam("age") String age) {
418 return "DELETE: " + RETURN_STRING + name + " aged " + age;
422 @Path("/PutHello/{name}")
423 @Consumes(MediaType.TEXT_PLAIN)
424 @Produces(MediaType.TEXT_PLAIN)
425 public String putBlank(
427 @PathParam("name") String name,
428 @DefaultValue("90") @QueryParam("age") String age) {
430 return "PUT: " + payload + RETURN_STRING + name + " aged " + age;
435 @Produces(MediaType.TEXT_PLAIN)
436 public String putIt(String payload) {
437 return "PUT: " + payload + RETURN_STRING;
441 @Path("/PostHello/{name}")
442 @Consumes(MediaType.TEXT_PLAIN)
443 @Produces(MediaType.TEXT_PLAIN)
444 public String postIt(
446 @PathParam("name") String name,
447 @DefaultValue("90") @QueryParam("age") String age) {
449 return "POST: " + payload + RETURN_STRING + name + " aged " + age;
454 @Produces(MediaType.TEXT_PLAIN)
455 public String postBlank(String payload) {
456 return "POST: " + payload + RETURN_STRING;
459 @Target({ElementType.METHOD})
460 @Retention(RetentionPolicy.RUNTIME)
463 public static @interface Patch {
467 @Path("/PatchHello/{name}")
468 @Consumes(MERGE_PATCH_PLUS_JSON)
469 @Produces(MERGE_PATCH_PLUS_JSON)
470 public String patchIt(
472 @PathParam("name") String name,
473 @DefaultValue("90") @QueryParam("age") String age) {
475 return "PATCH: " + payload + RETURN_STRING + name + " aged " + age;
480 @Produces(MERGE_PATCH_PLUS_JSON)
481 public String patchBlank(String payload) {
482 return "PATCH: " + payload + RETURN_STRING;