Changes in preparation for the m2 model
[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
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.junit.AfterClass;
46 import org.junit.BeforeClass;
47 import org.junit.Test;
48 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
49 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
50 import org.onap.policy.common.utils.network.NetworkUtil;
51 import org.onap.policy.rest.RestManager.Pair;
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         assertEquals((Integer)200, result.first);
149         assertTrue(result.second != null);
150         assertTrue(result.second.length() > 0);
151         assertEquals("GOT: " + EXPECT_STRING, result.second);
152
153         result = mgr.delete(deleteUri, null, null, null, null, null);
154         assertEquals((Integer)200, result.first);
155         assertTrue(result.second != null);
156         assertTrue(result.second.length() > 0);
157         assertEquals("DELETE: " + EXPECT_STRING, result.second);
158
159         result = mgr.delete(deleteUri, null, null, null);
160         assertEquals((Integer)200, result.first);
161         assertTrue(result.second != null);
162         assertTrue(result.second.length() > 0);
163         assertEquals("DELETE: " + EXPECT_STRING, result.second);
164
165         result = mgr.put(putUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
166         assertEquals((Integer)200, result.first);
167         assertTrue(result.second != null);
168         assertTrue(result.second.length() > 0);
169         assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.second);
170
171         result = mgr.put(putUriBlank, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
172         assertEquals((Integer)200, result.first);
173         assertTrue(result.second != null);
174         assertTrue(result.second.length() > 0);
175         assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.second);
176
177         result = mgr.post(postUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
178         assertEquals((Integer)200, result.first);
179         assertTrue(result.second != null);
180         assertTrue(result.second.length() > 0);
181         assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.second);
182
183         result = mgr.post(postUriBlank, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
184         assertEquals((Integer)200, result.first);
185         assertTrue(result.second != null);
186         assertTrue(result.second.length() > 0);
187         assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
188
189         result = mgr.patch(patchUri, null, null, null, PAYLOAD);
190         assertEquals((Integer)200, result.first);
191         assertTrue(result.second != null);
192         assertTrue(result.second.length() > 0);
193         assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
194
195         result = mgr.patch(patchUriBlank, null, null, null, PAYLOAD);
196         assertEquals((Integer)200, result.first);
197         assertTrue(result.second != null);
198         assertTrue(result.second.length() > 0);
199         assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
200     }
201
202     @Test
203     public void testUsernameEmpty() {
204         RestManager mgr = new RestManager();
205
206         Pair<Integer, String> result = mgr.get(getUri, "", null, null);
207         assertEquals((Integer)200, result.first);
208         assertTrue(result.second != null);
209         assertTrue(result.second.length() > 0);
210         assertEquals("GOT: " + EXPECT_STRING, result.second);
211
212         result = mgr.delete(deleteUri, "", null, null, null, null);
213         assertEquals((Integer)200, result.first);
214         assertTrue(result.second != null);
215         assertTrue(result.second.length() > 0);
216         assertEquals("DELETE: " + EXPECT_STRING, result.second);
217
218         result = mgr.put(putUri, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
219         assertEquals((Integer)200, result.first);
220         assertTrue(result.second != null);
221         assertTrue(result.second.length() > 0);
222         assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.second);
223
224         result = mgr.put(putUriBlank, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
225         assertEquals((Integer)200, result.first);
226         assertTrue(result.second != null);
227         assertTrue(result.second.length() > 0);
228         assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.second);
229
230         result = mgr.post(postUri, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
231         assertEquals((Integer)200, result.first);
232         assertTrue(result.second != null);
233         assertTrue(result.second.length() > 0);
234         assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.second);
235
236         result = mgr.post(postUriBlank, "", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
237         assertEquals((Integer)200, result.first);
238         assertTrue(result.second != null);
239         assertTrue(result.second.length() > 0);
240         assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
241
242         result = mgr.patch(patchUri, "", null, null, PAYLOAD);
243         assertEquals((Integer)200, result.first);
244         assertTrue(result.second != null);
245         assertTrue(result.second.length() > 0);
246         assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
247
248         result = mgr.patch(patchUriBlank, "", null, null, PAYLOAD);
249         assertEquals((Integer)200, result.first);
250         assertTrue(result.second != null);
251         assertTrue(result.second.length() > 0);
252         assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
253     }
254
255     @Test
256     public void testGoodUrl() {
257         RestManager mgr = new RestManager();
258
259         Pair<Integer, String> result = mgr.get(getUri, "user", null, null);
260         assertEquals((Integer)200, result.first);
261         assertTrue(result.second != null);
262         assertTrue(result.second.length() > 0);
263         assertEquals("GOT: " + EXPECT_STRING, result.second);
264
265         result = mgr.delete(deleteUri, "user", null, null, null, null);
266         assertEquals((Integer)200, result.first);
267         assertTrue(result.second != null);
268         assertTrue(result.second.length() > 0);
269         assertEquals("DELETE: " + EXPECT_STRING, result.second);
270
271         result = mgr.put(putUri, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
272         assertEquals((Integer)200, result.first);
273         assertTrue(result.second != null);
274         assertTrue(result.second.length() > 0);
275         assertEquals("PUT: " + PAYLOAD + EXPECT_STRING, result.second);
276
277         result = mgr.put(putUriBlank, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
278         assertEquals((Integer)200, result.first);
279         assertTrue(result.second != null);
280         assertTrue(result.second.length() > 0);
281         assertEquals("PUT: " + PAYLOAD + RETURN_STRING, result.second);
282
283         result = mgr.post(postUri, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
284         assertEquals((Integer)200, result.first);
285         assertTrue(result.second != null);
286         assertTrue(result.second.length() > 0);
287         assertEquals("POST: " + PAYLOAD + EXPECT_STRING, result.second);
288
289         result = mgr.post(postUriBlank, "user", null, null, MediaType.TEXT_PLAIN, PAYLOAD);
290         assertEquals((Integer)200, result.first);
291         assertTrue(result.second != null);
292         assertTrue(result.second.length() > 0);
293         assertEquals("POST: " + PAYLOAD + RETURN_STRING, result.second);
294
295         result = mgr.patch(patchUri, "user", null, null, PAYLOAD);
296         assertEquals((Integer)200, result.first);
297         assertTrue(result.second != null);
298         assertTrue(result.second.length() > 0);
299         assertEquals("PATCH: " + PAYLOAD + EXPECT_STRING, result.second);
300
301         result = mgr.patch(patchUriBlank, "user", null, null, PAYLOAD);
302         assertEquals((Integer)200, result.first);
303         assertTrue(result.second != null);
304         assertTrue(result.second.length() > 0);
305         assertEquals("PATCH: " + PAYLOAD + RETURN_STRING, result.second);
306     }
307
308     @Test
309     public void testNoUrlParamUrl() {
310         RestManager mgr = new RestManager();
311
312         Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/", null, null, null);
313         assertEquals((Integer)404, result.first);
314
315         result = mgr.delete(baseUri + "RestTest/DeleteHello/", null, null, null, null, null);
316         assertEquals((Integer)404, result.first);
317
318         result = mgr.put(baseUri + "RestTest/PutHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
319         assertEquals((Integer)404, result.first);
320
321         result = mgr.post(baseUri + "RestTest/PostHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
322         assertEquals((Integer)404, result.first);
323
324         result = mgr.patch(baseUri + "RestTest/PatchHello/", null, null, null, PAYLOAD);
325         assertEquals((Integer)404, result.first);
326     }
327
328     @Test
329     public void testNoQueryParamUrl() {
330         RestManager mgr = new RestManager();
331
332         Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/" + NAME_PARAM, null, null, null);
333         assertEquals((Integer)200, result.first);
334         assertTrue(result.second != null);
335         assertTrue(result.second.length() > 0);
336         assertEquals("GOT: " + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
337
338         result = mgr.delete(baseUri + "RestTest/DeleteHello/" + NAME_PARAM, null, null, null, null, null);
339         assertEquals((Integer)200, result.first);
340         assertTrue(result.second != null);
341         assertTrue(result.second.length() > 0);
342         assertEquals("DELETE: " + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
343
344         result = mgr.put(baseUri + "RestTest/PutHello/" + NAME_PARAM, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
345         assertEquals((Integer)200, result.first);
346         assertTrue(result.second != null);
347         assertTrue(result.second.length() > 0);
348         assertEquals("PUT: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
349
350         result = mgr.post(baseUri + "RestTest/PostHello/" + NAME_PARAM, null, null,
351             null, MediaType.TEXT_PLAIN, PAYLOAD);
352         assertEquals((Integer)200, result.first);
353         assertTrue(result.second != null);
354         assertTrue(result.second.length() > 0);
355         assertEquals("POST: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
356
357         result = mgr.patch(baseUri + "RestTest/PatchHello/" + NAME_PARAM, null, null,
358             null, PAYLOAD);
359         assertEquals((Integer)200, result.first);
360         assertTrue(result.second != null);
361         assertTrue(result.second.length() > 0);
362         assertEquals("PATCH: " + PAYLOAD + RETURN_STRING + NAME_PARAM + " aged 90", result.second);
363     }
364
365     @Test
366     public void testBadUrl() {
367         RestManager mgr = new RestManager();
368
369         Pair<Integer, String> result = mgr.get(baseUri + "NonExistant/URL/", null, null, null);
370         assertEquals((Integer)404, result.first);
371
372         result = mgr.delete(baseUri + "NonExistant/URL/", null, null, null, null, null);
373         assertEquals((Integer)404, result.first);
374
375         result = mgr.put(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
376         assertEquals((Integer)404, result.first);
377
378         result = mgr.post(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
379         assertEquals((Integer)404, result.first);
380
381         result = mgr.patch(baseUri + "NonExistant/URL/", null, null, null, PAYLOAD);
382         assertEquals((Integer)404, result.first);
383     }
384
385     @Test
386     public void testWrongUrl() {
387         RestManager mgr = new RestManager();
388
389         Pair<Integer, String> result = mgr.get(deleteUri, null, null, null);
390         assertEquals((Integer)405, result.first);
391
392         result = mgr.delete(getUri, null, null, null, null, null);
393         assertEquals((Integer)405, result.first);
394
395         result = mgr.delete(getUri, null, null, null);
396         assertEquals((Integer)405, result.first);
397
398         result = mgr.put(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
399         assertEquals((Integer)405, result.first);
400
401         result = mgr.post(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
402         assertEquals((Integer)405, result.first);
403
404         result = mgr.patch(getUri, null, null, null, PAYLOAD);
405         assertEquals((Integer)405, result.first);
406     }
407
408     @GET
409     @Path("/GetHello/{name}")
410     @Produces(MediaType.TEXT_PLAIN)
411     public String getIt( @PathParam("name") String name, @DefaultValue("90") @QueryParam("age") String age) {
412         return "GOT: " + RETURN_STRING + name + " aged " + age;
413     }
414
415     @DELETE
416     @Path("/DeleteHello/{name}")
417     @Produces(MediaType.TEXT_PLAIN)
418     public String deleteIt( @PathParam("name") String name, @DefaultValue("90") @QueryParam("age") String age) {
419         return "DELETE: " + RETURN_STRING + name + " aged " + age;
420     }
421
422     @PUT
423     @Path("/PutHello/{name}")
424     @Consumes(MediaType.TEXT_PLAIN)
425     @Produces(MediaType.TEXT_PLAIN)
426     public String putBlank(
427         String payload,
428         @PathParam("name") String name,
429         @DefaultValue("90") @QueryParam("age") String age) {
430
431         return "PUT: " + payload + RETURN_STRING + name + " aged " + age;
432     }
433
434     @PUT
435     @Path("/PutBlank")
436     @Produces(MediaType.TEXT_PLAIN)
437     public String putIt( String payload) {
438         return "PUT: " + payload + RETURN_STRING;
439     }
440
441     @POST
442     @Path("/PostHello/{name}")
443     @Consumes(MediaType.TEXT_PLAIN)
444     @Produces(MediaType.TEXT_PLAIN)
445     public String postIt(
446         String payload,
447         @PathParam("name") String name,
448         @DefaultValue("90") @QueryParam("age") String age) {
449
450         return "POST: " + payload + RETURN_STRING + name + " aged " + age;
451     }
452
453     @POST
454     @Path("/PostBlank")
455     @Produces(MediaType.TEXT_PLAIN)
456     public String postBlank( String payload) {
457         return "POST: " + payload + RETURN_STRING;
458     }
459
460     @Target({ElementType.METHOD})
461     @Retention(RetentionPolicy.RUNTIME)
462     @HttpMethod("PATCH")
463     @Documented
464     public static @interface Patch {
465     }
466
467     @Patch
468     @Path("/PatchHello/{name}")
469     @Consumes(MERGE_PATCH_PLUS_JSON)
470     @Produces(MERGE_PATCH_PLUS_JSON)
471     public String patchIt(
472         String payload,
473         @PathParam("name") String name,
474         @DefaultValue("90") @QueryParam("age") String age) {
475
476         return "PATCH: " + payload + RETURN_STRING + name + " aged " + age;
477     }
478
479     @Patch
480     @Path("/PatchBlank")
481     @Produces(MERGE_PATCH_PLUS_JSON)
482     public String patchBlank( String payload) {
483         return "PATCH: " + payload + RETURN_STRING;
484     }
485 }