Changes for Checkstyle 8.32
[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-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
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.assertTrue;
26
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;
51
52 @Path("RestTest")
53 public class RestTest {
54     private static final String MERGE_PATCH_PLUS_JSON = "application/merge-patch+json";
55
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;
61
62     private static final String LOCALHOST = "localhost";
63     private static final String BASE = "base";
64
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;
75
76     private static HttpServletServer server;
77
78     /**
79      * Sets server endpoint for the tests.
80      */
81     @BeforeClass
82     public static void setUp() throws Exception {
83
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";
94
95         server = HttpServletServerFactoryInstance.getServerFactory()
96             .build("RestTest", LOCALHOST, port, "/" + BASE, false, true);
97         server.addServletClass("/*", RestTest.class.getName());
98         server.waitedStart(5000);
99
100     }
101
102     /**
103      * Tear down server endpoint for the tests.
104      *
105      * @throws Exception if there is a problem
106      */
107     @AfterClass
108     public static void tearDown() throws Exception {
109         HttpServletServerFactoryInstance.getServerFactory().destroy();
110     }
111
112     @Test(expected = NullPointerException.class)
113     public void testGetUrlNull() {
114         RestManager mgr = new RestManager();
115         mgr.get(null, "user", null, null);
116     }
117
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);
122     }
123
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);
128     }
129
130     @Test(expected = NullPointerException.class)
131     public void testDeleteUrlNull() {
132         RestManager mgr = new RestManager();
133         mgr.delete(null, "user", null, null, null, null);
134     }
135
136     @Test(expected = NullPointerException.class)
137     public void testPatchUrlNull() {
138         RestManager mgr = new RestManager();
139         mgr.patch(null, "user", null, null, PAYLOAD);
140     }
141
142     @Test
143     public void testUsernameNull() {
144         RestManager mgr = new RestManager();
145
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);
151
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);
157
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);
163
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);
169
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);
175
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);
181
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);
187
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);
193
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);
199     }
200
201     @Test
202     public void testUsernameEmpty() {
203         RestManager mgr = new RestManager();
204
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);
210
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);
216
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);
222
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);
228
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);
234
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);
240
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);
246
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);
252     }
253
254     @Test
255     public void testGoodUrl() {
256         RestManager mgr = new RestManager();
257
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);
263
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);
269
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);
275
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);
281
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);
287
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);
293
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);
299
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);
305     }
306
307     @Test
308     public void testNoUrlParamUrl() {
309         RestManager mgr = new RestManager();
310
311         Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/", null, null, null);
312         assertEquals((Integer) 404, result.first);
313
314         result = mgr.delete(baseUri + "RestTest/DeleteHello/", null, null, null, null, null);
315         assertEquals((Integer) 404, result.first);
316
317         result = mgr.put(baseUri + "RestTest/PutHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
318         assertEquals((Integer) 404, result.first);
319
320         result = mgr.post(baseUri + "RestTest/PostHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
321         assertEquals((Integer) 404, result.first);
322
323         result = mgr.patch(baseUri + "RestTest/PatchHello/", null, null, null, PAYLOAD);
324         assertEquals((Integer) 404, result.first);
325     }
326
327     @Test
328     public void testNoQueryParamUrl() {
329         RestManager mgr = new RestManager();
330
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);
336
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);
342
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);
348
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);
355
356         result = mgr.patch(baseUri + "RestTest/PatchHello/" + NAME_PARAM, null, null,
357             null, PAYLOAD);
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);
362     }
363
364     @Test
365     public void testBadUrl() {
366         RestManager mgr = new RestManager();
367
368         Pair<Integer, String> result = mgr.get(baseUri + "NonExistant/URL/", null, null, null);
369         assertEquals((Integer) 404, result.first);
370
371         result = mgr.delete(baseUri + "NonExistant/URL/", null, null, null, null, null);
372         assertEquals((Integer) 404, result.first);
373
374         result = mgr.put(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
375         assertEquals((Integer) 404, result.first);
376
377         result = mgr.post(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
378         assertEquals((Integer) 404, result.first);
379
380         result = mgr.patch(baseUri + "NonExistant/URL/", null, null, null, PAYLOAD);
381         assertEquals((Integer) 404, result.first);
382     }
383
384     @Test
385     public void testWrongUrl() {
386         RestManager mgr = new RestManager();
387
388         Pair<Integer, String> result = mgr.get(deleteUri, null, null, null);
389         assertEquals((Integer) 405, result.first);
390
391         result = mgr.delete(getUri, null, null, null, null, null);
392         assertEquals((Integer) 405, result.first);
393
394         result = mgr.delete(getUri, null, null, null);
395         assertEquals((Integer) 405, result.first);
396
397         result = mgr.put(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
398         assertEquals((Integer) 405, result.first);
399
400         result = mgr.post(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
401         assertEquals((Integer) 405, result.first);
402
403         result = mgr.patch(getUri, null, null, null, PAYLOAD);
404         assertEquals((Integer) 405, result.first);
405     }
406
407     @GET
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;
412     }
413
414     @DELETE
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;
419     }
420
421     @PUT
422     @Path("/PutHello/{name}")
423     @Consumes(MediaType.TEXT_PLAIN)
424     @Produces(MediaType.TEXT_PLAIN)
425     public String putBlank(
426         String payload,
427         @PathParam("name") String name,
428         @DefaultValue("90") @QueryParam("age") String age) {
429
430         return "PUT: " + payload + RETURN_STRING + name + " aged " + age;
431     }
432
433     @PUT
434     @Path("/PutBlank")
435     @Produces(MediaType.TEXT_PLAIN)
436     public String putIt(String payload) {
437         return "PUT: " + payload + RETURN_STRING;
438     }
439
440     @POST
441     @Path("/PostHello/{name}")
442     @Consumes(MediaType.TEXT_PLAIN)
443     @Produces(MediaType.TEXT_PLAIN)
444     public String postIt(
445         String payload,
446         @PathParam("name") String name,
447         @DefaultValue("90") @QueryParam("age") String age) {
448
449         return "POST: " + payload + RETURN_STRING + name + " aged " + age;
450     }
451
452     @POST
453     @Path("/PostBlank")
454     @Produces(MediaType.TEXT_PLAIN)
455     public String postBlank(String payload) {
456         return "POST: " + payload + RETURN_STRING;
457     }
458
459     @Target({ElementType.METHOD})
460     @Retention(RetentionPolicy.RUNTIME)
461     @HttpMethod("PATCH")
462     @Documented
463     public static @interface Patch {
464     }
465
466     @Patch
467     @Path("/PatchHello/{name}")
468     @Consumes(MERGE_PATCH_PLUS_JSON)
469     @Produces(MERGE_PATCH_PLUS_JSON)
470     public String patchIt(
471         String payload,
472         @PathParam("name") String name,
473         @DefaultValue("90") @QueryParam("age") String age) {
474
475         return "PATCH: " + payload + RETURN_STRING + name + " aged " + age;
476     }
477
478     @Patch
479     @Path("/PatchBlank")
480     @Produces(MERGE_PATCH_PLUS_JSON)
481     public String patchBlank(String payload) {
482         return "PATCH: " + payload + RETURN_STRING;
483     }
484 }