Fix some sonars in policy-models
[policy/models.git] / models-interactions / model-impl / rest / src / test / java / org / onap / policy / rest / RestTest.java
1 /*
2  * ============LICENSE_START=======================================================
3  * rest
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
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  */
21
22 package org.onap.policy.rest;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27
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;
52
53 @Path("RestTest")
54 public class RestTest {
55     private static final String MERGE_PATCH_PLUS_JSON = "application/merge-patch+json";
56
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;
62
63     private static final String LOCALHOST = "localhost";
64     private static final String BASE = "base";
65
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;
76
77     private static HttpServletServer server;
78
79     /**
80      * Sets server endpoint for the tests.
81      */
82     @BeforeClass
83     public static void setUp() throws Exception {
84
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";
95
96         server = HttpServletServerFactoryInstance.getServerFactory()
97             .build("RestTest", LOCALHOST, port, "/" + BASE, false, true);
98         server.addServletClass("/*", RestTest.class.getName());
99         server.waitedStart(5000);
100
101     }
102
103     /**
104      * Tear down server endpoint for the tests.
105      *
106      * @throws Exception if there is a problem
107      */
108     @AfterClass
109     public static void tearDown() throws Exception {
110         HttpServletServerFactoryInstance.getServerFactory().destroy();
111     }
112
113     @Test(expected = NullPointerException.class)
114     public void testGetUrlNull() {
115         RestManager mgr = new RestManager();
116         mgr.get(null, "user", null, null);
117     }
118
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);
123     }
124
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);
129     }
130
131     @Test(expected = NullPointerException.class)
132     public void testDeleteUrlNull() {
133         RestManager mgr = new RestManager();
134         mgr.delete(null, "user", null, null, null, null);
135     }
136
137     @Test(expected = NullPointerException.class)
138     public void testPatchUrlNull() {
139         RestManager mgr = new RestManager();
140         mgr.patch(null, "user", null, null, PAYLOAD);
141     }
142
143     @Test
144     public void testUsernameNull() {
145         RestManager mgr = new RestManager();
146
147         Pair<Integer, String> result = mgr.get(getUri, null, null, null);
148
149         assertEquals((Integer) 200, result.getLeft());
150         assertNotNull(result.getRight());
151         assertTrue(result.getRight().length() > 0);
152         assertEquals("GOT: " + EXPECT_STRING, result.getRight());
153
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());
159
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());
165
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());
171
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());
177
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());
183
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());
189
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());
195
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());
201
202     }
203
204     @Test
205     public void testUsernameEmpty() {
206         RestManager mgr = new RestManager();
207
208         Pair<Integer, String> result = mgr.get(getUri, "", null, null);
209
210         assertEquals((Integer) 200, result.getLeft());
211         assertNotNull(result.getRight());
212         assertTrue(result.getRight().length() > 0);
213         assertEquals("GOT: " + EXPECT_STRING, result.getRight());
214
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());
220
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());
226
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());
232
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());
238
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());
244
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());
250
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());
256
257     }
258
259     @Test
260     public void testGoodUrl() {
261         RestManager mgr = new RestManager();
262
263         Pair<Integer, String> result = mgr.get(getUri, "user", null, null);
264
265         assertEquals((Integer) 200, result.getLeft());
266         assertNotNull(result.getRight());
267         assertTrue(result.getRight().length() > 0);
268         assertEquals("GOT: " + EXPECT_STRING, result.getRight());
269
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());
275
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());
281
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());
287
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());
293
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());
299
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());
305
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());
311
312     }
313
314     @Test
315     public void testNoUrlParamUrl() {
316         RestManager mgr = new RestManager();
317
318         Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/", null, null, null);
319
320         assertEquals((Integer) 404, result.getLeft());
321
322         result = mgr.delete(baseUri + "RestTest/DeleteHello/", null, null, null, null, null);
323         assertEquals((Integer) 404, result.getLeft());
324
325         result = mgr.put(baseUri + "RestTest/PutHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
326         assertEquals((Integer) 404, result.getLeft());
327
328         result = mgr.post(baseUri + "RestTest/PostHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
329         assertEquals((Integer) 404, result.getLeft());
330
331         result = mgr.patch(baseUri + "RestTest/PatchHello/", null, null, null, PAYLOAD);
332         assertEquals((Integer) 404, result.getLeft());
333
334     }
335
336     @Test
337     public void testNoQueryParamUrl() {
338         RestManager mgr = new RestManager();
339
340         Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/" + NAME_PARAM, null, null, null);
341
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());
346
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());
352
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());
358
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());
365
366         result = mgr.patch(baseUri + "RestTest/PatchHello/" + NAME_PARAM, null, null,
367             null, PAYLOAD);
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());
372
373     }
374
375     @Test
376     public void testBadUrl() {
377         RestManager mgr = new RestManager();
378
379         Pair<Integer, String> result = mgr.get(baseUri + "NonExistant/URL/", null, null, null);
380
381         assertEquals((Integer) 404, result.getLeft());
382
383         result = mgr.delete(baseUri + "NonExistant/URL/", null, null, null, null, null);
384         assertEquals((Integer) 404, result.getLeft());
385
386         result = mgr.put(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
387         assertEquals((Integer) 404, result.getLeft());
388
389         result = mgr.post(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
390         assertEquals((Integer) 404, result.getLeft());
391
392         result = mgr.patch(baseUri + "NonExistant/URL/", null, null, null, PAYLOAD);
393         assertEquals((Integer) 404, result.getLeft());
394
395     }
396
397     @Test
398     public void testWrongUrl() {
399         RestManager mgr = new RestManager();
400
401         Pair<Integer, String> result = mgr.get(deleteUri, null, null, null);
402
403         assertEquals((Integer) 405, result.getLeft());
404
405         result = mgr.delete(getUri, null, null, null, null, null);
406         assertEquals((Integer) 405, result.getLeft());
407
408         result = mgr.delete(getUri, null, null, null);
409         assertEquals((Integer) 405, result.getLeft());
410
411         result = mgr.put(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
412         assertEquals((Integer) 405, result.getLeft());
413
414         result = mgr.post(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
415         assertEquals((Integer) 405, result.getLeft());
416
417         result = mgr.patch(getUri, null, null, null, PAYLOAD);
418         assertEquals((Integer) 405, result.getLeft());
419
420     }
421
422     @GET
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;
427     }
428
429     @DELETE
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;
434     }
435
436     @PUT
437     @Path("/PutHello/{name}")
438     @Consumes(MediaType.TEXT_PLAIN)
439     @Produces(MediaType.TEXT_PLAIN)
440     public String putBlank(
441         String payload,
442         @PathParam("name") String name,
443         @DefaultValue("90") @QueryParam("age") String age) {
444
445         return "PUT: " + payload + RETURN_STRING + name + " aged " + age;
446     }
447
448     @PUT
449     @Path("/PutBlank")
450     @Produces(MediaType.TEXT_PLAIN)
451     public String putIt(String payload) {
452         return "PUT: " + payload + RETURN_STRING;
453     }
454
455     @POST
456     @Path("/PostHello/{name}")
457     @Consumes(MediaType.TEXT_PLAIN)
458     @Produces(MediaType.TEXT_PLAIN)
459     public String postIt(
460         String payload,
461         @PathParam("name") String name,
462         @DefaultValue("90") @QueryParam("age") String age) {
463
464         return "POST: " + payload + RETURN_STRING + name + " aged " + age;
465     }
466
467     @POST
468     @Path("/PostBlank")
469     @Produces(MediaType.TEXT_PLAIN)
470     public String postBlank(String payload) {
471         return "POST: " + payload + RETURN_STRING;
472     }
473
474     @Target({ElementType.METHOD})
475     @Retention(RetentionPolicy.RUNTIME)
476     @HttpMethod("PATCH")
477     @Documented
478     public static @interface Patch {
479     }
480
481     @Patch
482     @Path("/PatchHello/{name}")
483     @Consumes(MERGE_PATCH_PLUS_JSON)
484     @Produces(MERGE_PATCH_PLUS_JSON)
485     public String patchIt(
486         String payload,
487         @PathParam("name") String name,
488         @DefaultValue("90") @QueryParam("age") String age) {
489
490         return "PATCH: " + payload + RETURN_STRING + name + " aged " + age;
491     }
492
493     @Patch
494     @Path("/PatchBlank")
495     @Produces(MERGE_PATCH_PLUS_JSON)
496     public String patchBlank(String payload) {
497         return "PATCH: " + payload + RETURN_STRING;
498     }
499 }