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;
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;
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);
148 assertEquals((Integer)200, result.first);
149 assertTrue(result.second != null);
150 assertTrue(result.second.length() > 0);
151 assertEquals("GOT: " + EXPECT_STRING, result.second);
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);
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);
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);
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);
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);
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);
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);
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);
203 public void testUsernameEmpty() {
204 RestManager mgr = new RestManager();
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);
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);
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);
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);
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);
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);
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);
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);
256 public void testGoodUrl() {
257 RestManager mgr = new RestManager();
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);
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);
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);
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);
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);
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);
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);
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);
309 public void testNoUrlParamUrl() {
310 RestManager mgr = new RestManager();
312 Pair<Integer, String> result = mgr.get(baseUri + "RestTest/GetHello/", null, null, null);
313 assertEquals((Integer)404, result.first);
315 result = mgr.delete(baseUri + "RestTest/DeleteHello/", null, null, null, null, null);
316 assertEquals((Integer)404, result.first);
318 result = mgr.put(baseUri + "RestTest/PutHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
319 assertEquals((Integer)404, result.first);
321 result = mgr.post(baseUri + "RestTest/PostHello/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
322 assertEquals((Integer)404, result.first);
324 result = mgr.patch(baseUri + "RestTest/PatchHello/", null, null, null, PAYLOAD);
325 assertEquals((Integer)404, result.first);
329 public void testNoQueryParamUrl() {
330 RestManager mgr = new RestManager();
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);
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);
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);
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);
357 result = mgr.patch(baseUri + "RestTest/PatchHello/" + NAME_PARAM, null, null,
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);
366 public void testBadUrl() {
367 RestManager mgr = new RestManager();
369 Pair<Integer, String> result = mgr.get(baseUri + "NonExistant/URL/", null, null, null);
370 assertEquals((Integer)404, result.first);
372 result = mgr.delete(baseUri + "NonExistant/URL/", null, null, null, null, null);
373 assertEquals((Integer)404, result.first);
375 result = mgr.put(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
376 assertEquals((Integer)404, result.first);
378 result = mgr.post(baseUri + "NonExistant/URL/", null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
379 assertEquals((Integer)404, result.first);
381 result = mgr.patch(baseUri + "NonExistant/URL/", null, null, null, PAYLOAD);
382 assertEquals((Integer)404, result.first);
386 public void testWrongUrl() {
387 RestManager mgr = new RestManager();
389 Pair<Integer, String> result = mgr.get(deleteUri, null, null, null);
390 assertEquals((Integer)405, result.first);
392 result = mgr.delete(getUri, null, null, null, null, null);
393 assertEquals((Integer)405, result.first);
395 result = mgr.delete(getUri, null, null, null);
396 assertEquals((Integer)405, result.first);
398 result = mgr.put(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
399 assertEquals((Integer)405, result.first);
401 result = mgr.post(getUri, null, null, null, MediaType.TEXT_PLAIN, PAYLOAD);
402 assertEquals((Integer)405, result.first);
404 result = mgr.patch(getUri, null, null, null, PAYLOAD);
405 assertEquals((Integer)405, result.first);
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;
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;
423 @Path("/PutHello/{name}")
424 @Consumes(MediaType.TEXT_PLAIN)
425 @Produces(MediaType.TEXT_PLAIN)
426 public String putBlank(
428 @PathParam("name") String name,
429 @DefaultValue("90") @QueryParam("age") String age) {
431 return "PUT: " + payload + RETURN_STRING + name + " aged " + age;
436 @Produces(MediaType.TEXT_PLAIN)
437 public String putIt( String payload) {
438 return "PUT: " + payload + RETURN_STRING;
442 @Path("/PostHello/{name}")
443 @Consumes(MediaType.TEXT_PLAIN)
444 @Produces(MediaType.TEXT_PLAIN)
445 public String postIt(
447 @PathParam("name") String name,
448 @DefaultValue("90") @QueryParam("age") String age) {
450 return "POST: " + payload + RETURN_STRING + name + " aged " + age;
455 @Produces(MediaType.TEXT_PLAIN)
456 public String postBlank( String payload) {
457 return "POST: " + payload + RETURN_STRING;
460 @Target({ElementType.METHOD})
461 @Retention(RetentionPolicy.RUNTIME)
464 public static @interface Patch {
468 @Path("/PatchHello/{name}")
469 @Consumes(MERGE_PATCH_PLUS_JSON)
470 @Produces(MERGE_PATCH_PLUS_JSON)
471 public String patchIt(
473 @PathParam("name") String name,
474 @DefaultValue("90") @QueryParam("age") String age) {
476 return "PATCH: " + payload + RETURN_STRING + name + " aged " + age;
481 @Produces(MERGE_PATCH_PLUS_JSON)
482 public String patchBlank( String payload) {
483 return "PATCH: " + payload + RETURN_STRING;