2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2019-2020 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.assertNotNull;
26 import static org.junit.Assert.assertTrue;
28 import java.lang.annotation.Documented;
29 import java.lang.annotation.ElementType;
30 import java.lang.annotation.Retention;
31 import java.lang.annotation.RetentionPolicy;
32 import java.lang.annotation.Target;
33 import javax.ws.rs.Consumes;
34 import javax.ws.rs.DELETE;
35 import javax.ws.rs.DefaultValue;
36 import javax.ws.rs.GET;
37 import javax.ws.rs.HttpMethod;
38 import javax.ws.rs.POST;
39 import javax.ws.rs.PUT;
40 import javax.ws.rs.Path;
41 import javax.ws.rs.PathParam;
42 import javax.ws.rs.Produces;
43 import javax.ws.rs.QueryParam;
44 import javax.ws.rs.core.MediaType;
45 import org.apache.commons.lang3.tuple.Pair;
46 import org.junit.AfterClass;
47 import org.junit.BeforeClass;
48 import org.junit.Test;
49 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
50 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
51 import org.onap.policy.common.utils.network.NetworkUtil;
54 public class RestTest {
55 private static final String MERGE_PATCH_PLUS_JSON = "application/merge-patch+json";
57 private static final String NAME_PARAM = "Bob";
58 private static final String AGE_PARAM = "10";
59 private static final String PAYLOAD = "At last! ";
60 private static final String RETURN_STRING = "Hello There ";
61 private static final String EXPECT_STRING = RETURN_STRING + NAME_PARAM + " aged " + AGE_PARAM;
63 private static final String LOCALHOST = "localhost";
64 private static final String BASE = "base";
66 private static int port;
67 private static String baseUri;
68 private static String getUri;
69 private static String deleteUri;
70 private static String putUri;
71 private static String putUriBlank;
72 private static String postUri;
73 private static String postUriBlank;
74 private static String patchUri;
75 private static String patchUriBlank;
77 private static HttpServletServer server;
80 * Sets server endpoint for the tests.
83 public static void setUp() throws Exception {
85 port = NetworkUtil.allocPort();
86 baseUri = "http://" + LOCALHOST + ":" + port + "/" + BASE + "/";
87 getUri = baseUri + "RestTest/GetHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
88 deleteUri = baseUri + "RestTest/DeleteHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
89 putUri = baseUri + "RestTest/PutHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
90 putUriBlank = baseUri + "RestTest/PutBlank";
91 postUri = baseUri + "RestTest/PostHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
92 postUriBlank = baseUri + "RestTest/PostBlank";
93 patchUri = baseUri + "RestTest/PatchHello/" + NAME_PARAM + "?age=" + AGE_PARAM;
94 patchUriBlank = baseUri + "RestTest/PatchBlank";
96 server = HttpServletServerFactoryInstance.getServerFactory()
97 .build("RestTest", LOCALHOST, port, "/" + BASE, false, true);
98 server.addServletClass("/*", RestTest.class.getName());
99 server.waitedStart(5000);
104 * Tear down server endpoint for the tests.
106 * @throws Exception if there is a problem
109 public static void tearDown() throws Exception {
110 HttpServletServerFactoryInstance.getServerFactory().destroy();
113 @Test(expected = NullPointerException.class)
114 public void testGetUrlNull() {
115 RestManager mgr = new RestManager();
116 mgr.get(null, "user", null, null);
119 @Test(expected = NullPointerException.class)
120 public void testPutUrlNull() {
121 RestManager mgr = new RestManager();
122 mgr.put(null, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
125 @Test(expected = NullPointerException.class)
126 public void testPostUrlNull() {
127 RestManager mgr = new RestManager();
128 mgr.post(null, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
131 @Test(expected = NullPointerException.class)
132 public void testDeleteUrlNull() {
133 RestManager mgr = new RestManager();
134 mgr.delete(null, "user", null, null, null, null);
137 @Test(expected = NullPointerException.class)
138 public void testPatchUrlNull() {
139 RestManager mgr = new RestManager();
140 mgr.patch(null, "user", null, null, PAYLOAD);
144 public void testUsernameNull() {
145 RestManager mgr = new RestManager();
147 Pair<Integer, String> result = mgr.get(getUri, null, null, null);
149 assertEquals((Integer) 200, result.getLeft());
150 assertNotNull(result.getRight());
151 assertTrue(result.getRight().length() > 0);
152 assertEquals("GOT: " + EXPECT_STRING, result.getRight());
154 result = mgr.delete(deleteUri, null, null, null, null, null);
155 assertEquals((Integer) 200, result.getLeft());
156 assertNotNull(result.getRight());
157 assertTrue(result.getRight().length() > 0);
158 assertEquals("DELETE: " + EXPECT_STRING, result.getRight());
160 result = mgr.delete(deleteUri, null, null, null);
161 assertEquals((Integer) 200, result.getLeft());
162 assertNotNull(result.getRight());
163 assertTrue(result.getRight().length() > 0);
164 assertEquals("DELETE: " + EXPECT_STRING, result.getRight());
166 result = mgr.put(putUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
167 assertEquals((Integer) 200, result.getLeft());
168 assertNotNull(result.getRight());
169 assertTrue(result.getRight().length() > 0);
170 assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.getRight());
172 result = mgr.put(putUriBlank, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
173 assertEquals((Integer) 200, result.getLeft());
174 assertNotNull(result.getRight());
175 assertTrue(result.getRight().length() > 0);
176 assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.getRight());
178 result = mgr.post(postUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
179 assertEquals((Integer) 200, result.getLeft());
180 assertNotNull(result.getRight());
181 assertTrue(result.getRight().length() > 0);
182 assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.getRight());
184 result = mgr.post(postUriBlank, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
185 assertEquals((Integer) 200, result.getLeft());
186 assertNotNull(result.getRight());
187 assertTrue(result.getRight().length() > 0);
188 assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.getRight());
190 result = mgr.patch(patchUri, null, null, null, PAYLOAD);
191 assertEquals((Integer) 200, result.getLeft());
192 assertNotNull(result.getRight());
193 assertTrue(result.getRight().length() > 0);
194 assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.getRight());
196 result = mgr.patch(patchUriBlank, null, null, null, PAYLOAD);
197 assertEquals((Integer) 200, result.getLeft());
198 assertNotNull(result.getRight());
199 assertTrue(result.getRight().length() > 0);
200 assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.getRight());
205 public void testUsernameEmpty() {
206 RestManager mgr = new RestManager();
208 Pair<Integer, String> result = mgr.get(getUri, "", null, null);
210 assertEquals((Integer) 200, result.getLeft());
211 assertNotNull(result.getRight());
212 assertTrue(result.getRight().length() > 0);
213 assertEquals("GOT: " + EXPECT_STRING, result.getRight());
215 result = mgr.delete(deleteUri, "", null, null, null, null);
216 assertEquals((Integer) 200, result.getLeft());
217 assertNotNull(result.getRight());
218 assertTrue(result.getRight().length() > 0);
219 assertEquals("DELETE: " + EXPECT_STRING, result.getRight());
221 result = mgr.put(putUri, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
222 assertEquals((Integer) 200, result.getLeft());
223 assertNotNull(result.getRight());
224 assertTrue(result.getRight().length() > 0);
225 assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.getRight());
227 result = mgr.put(putUriBlank, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
228 assertEquals((Integer) 200, result.getLeft());
229 assertNotNull(result.getRight());
230 assertTrue(result.getRight().length() > 0);
231 assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.getRight());
233 result = mgr.post(postUri, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
234 assertEquals((Integer) 200, result.getLeft());
235 assertNotNull(result.getRight());
236 assertTrue(result.getRight().length() > 0);
237 assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.getRight());
239 result = mgr.post(postUriBlank, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
240 assertEquals((Integer) 200, result.getLeft());
241 assertNotNull(result.getRight());
242 assertTrue(result.getRight().length() > 0);
243 assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.getRight());
245 result = mgr.patch(patchUri, "", null, null, PAYLOAD);
246 assertEquals((Integer) 200, result.getLeft());
247 assertNotNull(result.getRight());
248 assertTrue(result.getRight().length() > 0);
249 assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.getRight());
251 result = mgr.patch(patchUriBlank, "", null, null, PAYLOAD);
252 assertEquals((Integer) 200, result.getLeft());
253 assertNotNull(result.getRight());
254 assertTrue(result.getRight().length() > 0);
255 assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.getRight());
260 public void testGoodUrl() {
261 RestManager mgr = new RestManager();
263 Pair<Integer, String> result = mgr.get(getUri, "user", null, null);
265 assertEquals((Integer) 200, result.getLeft());
266 assertNotNull(result.getRight());
267 assertTrue(result.getRight().length() > 0);
268 assertEquals("GOT: " + EXPECT_STRING, result.getRight());
270 result = mgr.delete(deleteUri, "user", null, null, null, null);
271 assertEquals((Integer) 200, result.getLeft());
272 assertNotNull(result.getRight());
273 assertTrue(result.getRight().length() > 0);
274 assertEquals("DELETE: " + EXPECT_STRING, result.getRight());
276 result = mgr.put(putUri, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
277 assertEquals((Integer) 200, result.getLeft());
278 assertNotNull(result.getRight());
279 assertTrue(result.getRight().length() > 0);
280 assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.getRight());
282 result = mgr.put(putUriBlank, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
283 assertEquals((Integer) 200, result.getLeft());
284 assertNotNull(result.getRight());
285 assertTrue(result.getRight().length() > 0);
286 assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.getRight());
288 result = mgr.post(postUri, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
289 assertEquals((Integer) 200, result.getLeft());
290 assertNotNull(result.getRight());
291 assertTrue(result.getRight().length() > 0);
292 assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.getRight());
294 result = mgr.post(postUriBlank, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
295 assertEquals((Integer) 200, result.getLeft());
296 assertNotNull(result.getRight());
297 assertTrue(result.getRight().length() > 0);
298 assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.getRight());
300 result = mgr.patch(patchUri, "user", null, null, PAYLOAD);
301 assertEquals((Integer) 200, result.getLeft());
302 assertNotNull(result.getRight());
303 assertTrue(result.getRight().length() > 0);
304 assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.getRight());
306 result = mgr.patch(patchUriBlank, "user", null, null, PAYLOAD);
307 assertEquals((Integer) 200, result.getLeft());
308 assertNotNull(result.getRight());
309 assertTrue(result.getRight().length() > 0);
310 assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.getRight());
315 public void testNoUrlParamUrl() {
316 RestManager mgr = new RestManager();
318 Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/", null, null, null);
320 assertEquals((Integer) 404, result.getLeft());
322 result = mgr.delete(baseUri + "RestTest/DeleteHello/", null, null, null, null, null);
323 assertEquals((Integer) 404, result.getLeft());
325 result = mgr.put(baseUri + "RestTest/PutHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
326 assertEquals((Integer) 404, result.getLeft());
328 result = mgr.post(baseUri + "RestTest/PostHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
329 assertEquals((Integer) 404, result.getLeft());
331 result = mgr.patch(baseUri + "RestTest/PatchHello/", null, null, null, PAYLOAD);
332 assertEquals((Integer) 404, result.getLeft());
337 public void testNoQueryParamUrl() {
338 RestManager mgr = new RestManager();
340 Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/" + NAME_PARAM, null, null, null);
342 assertEquals((Integer) 200, result.getLeft());
343 assertNotNull(result.getRight());
344 assertTrue(result.getRight().length() > 0);
345 assertEquals("GOT: " + RETURN_STRING + NAME_PARAM + " aged 90", result.getRight());
347 result = mgr.delete(baseUri + "RestTest/DeleteHello/" + NAME_PARAM, null, null, null, null, null);
348 assertEquals((Integer) 200, result.getLeft());
349 assertNotNull(result.getRight());
350 assertTrue(result.getRight().length() > 0);
351 assertEquals("DELETE: " + RETURN_STRING + NAME_PARAM + " aged 90", result.getRight());
353 result = mgr.put(baseUri + "RestTest/PutHello/" + NAME_PARAM, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
354 assertEquals((Integer) 200, result.getLeft());
355 assertNotNull(result.getRight());
356 assertTrue(result.getRight().length() > 0);
357 assertEquals("PUT: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.getRight());
359 result = mgr.post(baseUri + "RestTest/PostHello/" + NAME_PARAM, null, null,
360 null, MediaType.TEXT_PLAIN, PAYLOAD);
361 assertEquals((Integer) 200, result.getLeft());
362 assertNotNull(result.getRight());
363 assertTrue(result.getRight().length() > 0);
364 assertEquals("POST: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.getRight());
366 result = mgr.patch(baseUri + "RestTest/PatchHello/" + NAME_PARAM, null, null,
368 assertEquals((Integer) 200, result.getLeft());
369 assertNotNull(result.getRight());
370 assertTrue(result.getRight().length() > 0);
371 assertEquals("PATCH: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.getRight());
376 public void testBadUrl() {
377 RestManager mgr = new RestManager();
379 Pair<Integer, String> result = mgr.get(baseUri + "NonExistant/URL/", null, null, null);
381 assertEquals((Integer) 404, result.getLeft());
383 result = mgr.delete(baseUri + "NonExistant/URL/", null, null, null, null, null);
384 assertEquals((Integer) 404, result.getLeft());
386 result = mgr.put(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
387 assertEquals((Integer) 404, result.getLeft());
389 result = mgr.post(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
390 assertEquals((Integer) 404, result.getLeft());
392 result = mgr.patch(baseUri + "NonExistant/URL/", null, null, null, PAYLOAD);
393 assertEquals((Integer) 404, result.getLeft());
398 public void testWrongUrl() {
399 RestManager mgr = new RestManager();
401 Pair<Integer, String> result = mgr.get(deleteUri, null, null, null);
403 assertEquals((Integer) 405, result.getLeft());
405 result = mgr.delete(getUri, null, null, null, null, null);
406 assertEquals((Integer) 405, result.getLeft());
408 result = mgr.delete(getUri, null, null, null);
409 assertEquals((Integer) 405, result.getLeft());
411 result = mgr.put(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
412 assertEquals((Integer) 405, result.getLeft());
414 result = mgr.post(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
415 assertEquals((Integer) 405, result.getLeft());
417 result = mgr.patch(getUri, null, null, null, PAYLOAD);
418 assertEquals((Integer) 405, result.getLeft());
423 @Path("/GetHello/{name}")
424 @Produces(MediaType.TEXT_PLAIN)
425 public String getIt(@PathParam("name") String name, @DefaultValue("90") @QueryParam("age") String age) {
426 return "GOT: " + RETURN_STRING + name + " aged " + age;
430 @Path("/DeleteHello/{name}")
431 @Produces(MediaType.TEXT_PLAIN)
432 public String deleteIt(@PathParam("name") String name, @DefaultValue("90") @QueryParam("age") String age) {
433 return "DELETE: " + RETURN_STRING + name + " aged " + age;
437 @Path("/PutHello/{name}")
438 @Consumes(MediaType.TEXT_PLAIN)
439 @Produces(MediaType.TEXT_PLAIN)
440 public String putBlank(
442 @PathParam("name") String name,
443 @DefaultValue("90") @QueryParam("age") String age) {
445 return "PUT: " + payload + RETURN_STRING + name + " aged " + age;
450 @Produces(MediaType.TEXT_PLAIN)
451 public String putIt(String payload) {
452 return "PUT: " + payload + RETURN_STRING;
456 @Path("/PostHello/{name}")
457 @Consumes(MediaType.TEXT_PLAIN)
458 @Produces(MediaType.TEXT_PLAIN)
459 public String postIt(
461 @PathParam("name") String name,
462 @DefaultValue("90") @QueryParam("age") String age) {
464 return "POST: " + payload + RETURN_STRING + name + " aged " + age;
469 @Produces(MediaType.TEXT_PLAIN)
470 public String postBlank(String payload) {
471 return "POST: " + payload + RETURN_STRING;
474 @Target({ElementType.METHOD})
475 @Retention(RetentionPolicy.RUNTIME)
478 public static @interface Patch {
482 @Path("/PatchHello/{name}")
483 @Consumes(MERGE_PATCH_PLUS_JSON)
484 @Produces(MERGE_PATCH_PLUS_JSON)
485 public String patchIt(
487 @PathParam("name") String name,
488 @DefaultValue("90") @QueryParam("age") String age) {
490 return "PATCH: " + payload + RETURN_STRING + name + " aged " + age;
495 @Produces(MERGE_PATCH_PLUS_JSON)
496 public String patchBlank(String payload) {
497 return "PATCH: " + payload + RETURN_STRING;