1 /*******************************************************************************
2 * ============LICENSE_START==================================================
4 * * ===========================================================================
5 * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * * ===========================================================================
7 * * Licensed under the Apache License, Version 2.0 (the "License");
8 * * you may not use this file except in compliance with the License.
9 * * You may obtain a copy of the License at
11 * * http://www.apache.org/licenses/LICENSE-2.0
13 * * Unless required by applicable law or agreed to in writing, software
14 * * distributed under the License is distributed on an "AS IS" BASIS,
15 * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * * See the License for the specific language governing permissions and
17 * * limitations under the License.
18 * * ============LICENSE_END====================================================
20 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 ******************************************************************************/
24 package org.onap.dmaap.datarouter.provisioning;
26 import org.apache.commons.lang3.reflect.FieldUtils;
27 import org.json.JSONObject;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.mockito.Mock;
32 import org.onap.dmaap.datarouter.provisioning.beans.*;
33 import org.powermock.api.mockito.PowerMockito;
34 import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
35 import org.powermock.modules.junit4.PowerMockRunner;
36 import javax.servlet.ServletOutputStream;
37 import javax.servlet.http.HttpServletRequest;
38 import javax.servlet.http.HttpServletResponse;
39 import java.util.SortedSet;
40 import java.util.TreeSet;
41 import static org.hamcrest.Matchers.notNullValue;
42 import static org.mockito.Matchers.*;
43 import static org.mockito.Mockito.mock;
44 import static org.mockito.Mockito.verify;
45 import static org.mockito.Mockito.when;
47 @RunWith(PowerMockRunner.class)
48 @SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.provisioning.beans.IngressRoute",
49 "org.onap.dmaap.datarouter.provisioning.beans.EgressRoute",
50 "org.onap.dmaap.datarouter.provisioning.beans.NodeClass",
51 "org.onap.dmaap.datarouter.provisioning.beans.NetworkRoute"})
52 public class RouteServletTest extends DrServletTestBase
54 private RouteServlet routeServlet;
57 private HttpServletRequest request;
60 private HttpServletResponse response;
63 public void setUp() throws Exception {
65 setPokerToNotCreateTimersWhenDeleteFeedIsCalled();
66 setRouteToReturnValid();
67 routeServlet = new RouteServlet();
71 public void Given_Request_Is_HTTP_DELETE_And_Is_Not_Authorized() throws Exception {
72 routeServlet.doDelete(request, response);
73 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
77 public void Given_Request_Is_HTTP_DELETE_And_Ingress_Route_Does_Not_Exist_In_Path() throws Exception {
78 when(request.getPathInfo()).thenReturn("/ingress/3/internal/route/");
79 RouteServlet routeServlet = new RouteServlet() {
80 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
84 routeServlet.doDelete(request, response);
85 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
89 public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_FeedID() throws Exception {
90 when(request.getPathInfo()).thenReturn("/ingress/feedID/internal/route/");
91 RouteServlet routeServlet = new RouteServlet() {
92 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
96 routeServlet.doDelete(request, response);
97 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
101 public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_Sequence_Number() throws Exception {
102 when(request.getPathInfo()).thenReturn("/ingress/feedID/");
103 RouteServlet routeServlet = new RouteServlet() {
104 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
108 routeServlet.doDelete(request, response);
109 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
113 public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
114 when(request.getPathInfo()).thenReturn("/ingress/");
115 RouteServlet routeServlet = new RouteServlet() {
116 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
120 routeServlet.doDelete(request, response);
121 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
125 public void Given_Request_Is_HTTP_DELETE_And_Egress_Route_Does_Not_Exist_In_Path() throws Exception {
126 when(request.getPathInfo()).thenReturn("/egress/3");
127 RouteServlet routeServlet = new RouteServlet() {
128 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
132 routeServlet.doDelete(request, response);
133 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
137 public void Given_Request_Is_HTTP_DELETE_And_Egress_Path_Contains_Invalid_SubID() throws Exception {
138 when(request.getPathInfo()).thenReturn("/egress/subID");
139 RouteServlet routeServlet = new RouteServlet() {
140 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
144 routeServlet.doDelete(request, response);
145 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
149 public void Given_Request_Is_HTTP_DELETE_And_Egress_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
150 when(request.getPathInfo()).thenReturn("/egress/");
151 RouteServlet routeServlet = new RouteServlet() {
152 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
156 routeServlet.doDelete(request, response);
157 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
161 public void Given_Request_Is_HTTP_DELETE_And_Network_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
162 when(request.getPathInfo()).thenReturn("/network/");
163 RouteServlet routeServlet = new RouteServlet() {
164 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
168 routeServlet.doDelete(request, response);
169 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
173 public void Given_Request_Is_HTTP_DELETE_And_Deletable_Is_Null() throws Exception {
174 when(request.getPathInfo()).thenReturn("/route/");
175 RouteServlet routeServlet = new RouteServlet() {
176 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
181 protected boolean doDelete(Deleteable bean) {
185 routeServlet.doDelete(request, response);
186 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
190 public void Given_Request_Is_HTTP_DELETE_And_Fails() throws Exception {
191 when(request.getPathInfo()).thenReturn("/network/subID/route");
192 PowerMockito.mockStatic(NodeClass.class);
193 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
194 RouteServlet routeServlet = new RouteServlet() {
195 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
200 protected boolean doDelete(Deleteable bean) {
204 routeServlet.doDelete(request, response);
205 verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
209 public void Given_Request_Is_HTTP_GET_And_Is_Not_Authorized() throws Exception {
210 routeServlet.doGet(request, response);
211 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
215 public void Given_Request_Is_HTTP_GET_And_Path_Does_Not_Start_With_Valid_Route() throws Exception {
216 when(request.getPathInfo()).thenReturn("/route/");
217 RouteServlet routeServlet = new RouteServlet() {
218 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
222 routeServlet.doGet(request, response);
223 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
228 public void Given_Request_Is_HTTP_GET_And_Path_Equals_Ingress_And_Get_Succeeds() throws Exception {
229 when(request.getPathInfo()).thenReturn("/ingress/");
230 when(request.getRemoteAddr()).thenReturn("stub_addr");
231 ServletOutputStream outStream = mock(ServletOutputStream.class);
232 when(response.getOutputStream()).thenReturn(outStream);
233 RouteServlet routeServlet = new RouteServlet() {
234 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
238 routeServlet.doGet(request, response);
239 verify(response).setStatus(eq(HttpServletResponse.SC_OK));
243 public void Given_Request_Is_HTTP_GET_And_Path_Equals_Egress_And_Get_Succeeds() throws Exception {
244 when(request.getPathInfo()).thenReturn("/egress/");
245 when(request.getRemoteAddr()).thenReturn("stub_addr");
246 ServletOutputStream outStream = mock(ServletOutputStream.class);
247 when(response.getOutputStream()).thenReturn(outStream);
248 RouteServlet routeServlet = new RouteServlet() {
249 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
253 routeServlet.doGet(request, response);
254 verify(response).setStatus(eq(HttpServletResponse.SC_OK));
258 public void Given_Request_Is_HTTP_GET_And_Ingress_Path_Equals_Network_And_Get_Succeeds() throws Exception {
259 when(request.getPathInfo()).thenReturn("/network/");
260 when(request.getRemoteAddr()).thenReturn("stub_addr");
261 ServletOutputStream outStream = mock(ServletOutputStream.class);
262 when(response.getOutputStream()).thenReturn(outStream);
263 RouteServlet routeServlet = new RouteServlet() {
264 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
268 routeServlet.doGet(request, response);
269 verify(response).setStatus(eq(HttpServletResponse.SC_OK));
273 public void Given_Request_Is_HTTP_PUT_And_Is_Not_Authorized() throws Exception {
274 routeServlet.doPut(request, response);
275 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
279 public void Given_Request_Is_HTTP_PUT_And_Contains_Bad_URL() throws Exception {
280 RouteServlet routeServlet = new RouteServlet() {
281 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
285 routeServlet.doPut(request, response);
286 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
291 public void Given_Request_Is_HTTP_POST_And_Is_Not_Authorized() throws Exception {
292 routeServlet.doPost(request, response);
293 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
297 public void Given_Request_Is_HTTP_POST_And_Ingress_Path_Starts_With_Ingress_And_Contains_Invalid_Arguments() throws Exception {
298 when(request.getPathInfo()).thenReturn("/ingress/");
299 when(request.getRemoteAddr()).thenReturn("stub_addr");
300 when(request.getParameter("feed")).thenReturn("3");
301 when(request.getParameter("user")).thenReturn(null);
302 when(request.getParameter("subnet")).thenReturn(null);
303 when(request.getParameter("nodepatt")).thenReturn(null);
304 when(request.getParameter("seq")).thenReturn(null);
305 RouteServlet routeServlet = new RouteServlet() {
306 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
310 routeServlet.doPost(request, response);
311 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
315 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Egress_And_EgressRoute_Already_Exists() throws Exception {
316 when(request.getPathInfo()).thenReturn("/egress/");
317 when(request.getRemoteAddr()).thenReturn("stub_addr");
318 when(request.getParameter("sub")).thenReturn("3");
319 EgressRoute e = mock(EgressRoute.class);
320 PowerMockito.when(EgressRoute.getEgressRoute(anyInt())).thenReturn(e);
321 RouteServlet routeServlet = new RouteServlet() {
322 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
326 routeServlet.doPost(request, response);
327 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
331 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Egress_And_Contains_Invalid_Arguments() throws Exception {
332 when(request.getPathInfo()).thenReturn("/egress/");
333 when(request.getRemoteAddr()).thenReturn("stub_addr");
334 when(request.getParameter("sub")).thenReturn("3");
335 RouteServlet routeServlet = new RouteServlet() {
336 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
340 routeServlet.doPost(request, response);
341 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
345 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Network_And_Is_Missing_Arguments() throws Exception {
346 when(request.getPathInfo()).thenReturn("/network/");
347 when(request.getRemoteAddr()).thenReturn("stub_addr");
348 RouteServlet routeServlet = new RouteServlet() {
349 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
353 routeServlet.doPost(request, response);
354 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
358 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Network_And_Route_Already_Exists() throws Exception {
359 when(request.getPathInfo()).thenReturn("/network/");
360 when(request.getRemoteAddr()).thenReturn("stub_addr");
361 when(request.getParameter("from")).thenReturn("stub_from");
362 when(request.getParameter("to")).thenReturn("stub_to");
363 when(request.getParameter("via")).thenReturn("stub_via");
364 PowerMockito.mockStatic(NodeClass.class);
365 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
366 SortedSet<NetworkRoute> networkSet = new TreeSet();
367 networkSet.add(mock(NetworkRoute.class));
368 PowerMockito.when(NetworkRoute.getAllNetworkRoutes()).thenReturn(networkSet);
369 RouteServlet routeServlet = new RouteServlet() {
370 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
374 routeServlet.doPost(request, response);
375 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
379 public void Given_Request_Is_HTTP_POST_And_Path_URL_Is_Null() throws Exception {
380 when(request.getPathInfo()).thenReturn("/route/");
381 when(request.getRemoteAddr()).thenReturn("stub_addr");
382 when(request.getParameter("from")).thenReturn("stub_from");
383 when(request.getParameter("to")).thenReturn("stub_to");
384 when(request.getParameter("via")).thenReturn("stub_via");
385 PowerMockito.mockStatic(NodeClass.class);
386 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
387 RouteServlet routeServlet = new RouteServlet() {
388 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
392 routeServlet.doPost(request, response);
393 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
397 public void Given_Request_Is_HTTP_POST_And_Fails() throws Exception {
398 when(request.getPathInfo()).thenReturn("/network/");
399 when(request.getRemoteAddr()).thenReturn("stub_addr");
400 when(request.getParameter("from")).thenReturn("stub_from");
401 when(request.getParameter("to")).thenReturn("stub_to");
402 when(request.getParameter("via")).thenReturn("stub_via");
403 PowerMockito.mockStatic(NodeClass.class);
404 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
405 RouteServlet routeServlet = new RouteServlet() {
406 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
411 protected boolean doInsert(Insertable bean) {
415 routeServlet.doPost(request, response);
416 verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
419 private void setRouteToReturnValid() throws IllegalAccessException {
420 PowerMockito.mockStatic(IngressRoute.class);
421 PowerMockito.when(IngressRoute.getIngressRoute(anyInt(), anyString(), anyString())).thenReturn(null);
422 SortedSet<IngressRoute> ingressSet = new TreeSet();
423 IngressRoute ingressRoute = mock(IngressRoute.class);
424 JSONObject joIngress = mock(JSONObject.class);
425 when(joIngress.toString()).thenReturn("{}");
426 when(ingressRoute.asJSONObject()).thenReturn(joIngress);
427 ingressSet.add(ingressRoute);
428 PowerMockito.when(IngressRoute.getAllIngressRoutes()).thenReturn(ingressSet);
430 PowerMockito.mockStatic(EgressRoute.class);
431 PowerMockito.when(EgressRoute.getEgressRoute(anyInt())).thenReturn(null);
432 SortedSet<EgressRoute> egressSet = new TreeSet();
433 EgressRoute egressRoute = mock(EgressRoute.class);
434 JSONObject joEgress = mock(JSONObject.class);
435 when(joEgress.toString()).thenReturn("{}");
436 when(egressRoute.asJSONObject()).thenReturn(joEgress);
437 egressSet.add(egressRoute);
438 PowerMockito.when(EgressRoute.getAllEgressRoutes()).thenReturn(egressSet);
440 PowerMockito.mockStatic(NetworkRoute.class);
441 SortedSet<NetworkRoute> networkSet = new TreeSet();
442 PowerMockito.when(NetworkRoute.getAllNetworkRoutes()).thenReturn(networkSet);
446 private void setPokerToNotCreateTimersWhenDeleteFeedIsCalled() throws Exception {
447 Poker poker = mock(Poker.class);
448 FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);