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 FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isAddressAuthEnabled", "true", true);
73 routeServlet.doDelete(request, response);
74 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
78 public void Given_Request_Is_HTTP_DELETE_And_Ingress_Route_Does_Not_Exist_In_Path() throws Exception {
79 when(request.getPathInfo()).thenReturn("/ingress/3/internal/route/");
80 RouteServlet routeServlet = new RouteServlet() {
81 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
85 routeServlet.doDelete(request, response);
86 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
90 public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_FeedID() throws Exception {
91 when(request.getPathInfo()).thenReturn("/ingress/feedID/internal/route/");
92 RouteServlet routeServlet = new RouteServlet() {
93 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
97 routeServlet.doDelete(request, response);
98 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
102 public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_Sequence_Number() throws Exception {
103 when(request.getPathInfo()).thenReturn("/ingress/feedID/");
104 RouteServlet routeServlet = new RouteServlet() {
105 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
109 routeServlet.doDelete(request, response);
110 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
114 public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
115 when(request.getPathInfo()).thenReturn("/ingress/");
116 RouteServlet routeServlet = new RouteServlet() {
117 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
121 routeServlet.doDelete(request, response);
122 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
126 public void Given_Request_Is_HTTP_DELETE_And_Egress_Route_Does_Not_Exist_In_Path() throws Exception {
127 when(request.getPathInfo()).thenReturn("/egress/3");
128 RouteServlet routeServlet = new RouteServlet() {
129 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
133 routeServlet.doDelete(request, response);
134 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
138 public void Given_Request_Is_HTTP_DELETE_And_Egress_Path_Contains_Invalid_SubID() throws Exception {
139 when(request.getPathInfo()).thenReturn("/egress/subID");
140 RouteServlet routeServlet = new RouteServlet() {
141 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
145 routeServlet.doDelete(request, response);
146 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
150 public void Given_Request_Is_HTTP_DELETE_And_Egress_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
151 when(request.getPathInfo()).thenReturn("/egress/");
152 RouteServlet routeServlet = new RouteServlet() {
153 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
157 routeServlet.doDelete(request, response);
158 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
162 public void Given_Request_Is_HTTP_DELETE_And_Network_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
163 when(request.getPathInfo()).thenReturn("/network/");
164 RouteServlet routeServlet = new RouteServlet() {
165 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
169 routeServlet.doDelete(request, response);
170 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
174 public void Given_Request_Is_HTTP_DELETE_And_Deletable_Is_Null() throws Exception {
175 when(request.getPathInfo()).thenReturn("/route/");
176 RouteServlet routeServlet = new RouteServlet() {
177 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
182 protected boolean doDelete(Deleteable bean) {
186 routeServlet.doDelete(request, response);
187 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
191 public void Given_Request_Is_HTTP_DELETE_And_Fails() throws Exception {
192 when(request.getPathInfo()).thenReturn("/network/subID/route");
193 PowerMockito.mockStatic(NodeClass.class);
194 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
195 RouteServlet routeServlet = new RouteServlet() {
196 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
201 protected boolean doDelete(Deleteable bean) {
205 routeServlet.doDelete(request, response);
206 verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
210 public void Given_Request_Is_HTTP_GET_And_Is_Not_Authorized() throws Exception {
211 FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isAddressAuthEnabled", "true", true);
212 routeServlet.doGet(request, response);
213 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
217 public void Given_Request_Is_HTTP_GET_And_Path_Does_Not_Start_With_Valid_Route() throws Exception {
218 when(request.getPathInfo()).thenReturn("/route/");
219 RouteServlet routeServlet = new RouteServlet() {
220 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
224 routeServlet.doGet(request, response);
225 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
230 public void Given_Request_Is_HTTP_GET_And_Path_Equals_Ingress_And_Get_Succeeds() throws Exception {
231 when(request.getPathInfo()).thenReturn("/ingress/");
232 when(request.getRemoteAddr()).thenReturn("stub_addr");
233 ServletOutputStream outStream = mock(ServletOutputStream.class);
234 when(response.getOutputStream()).thenReturn(outStream);
235 RouteServlet routeServlet = new RouteServlet() {
236 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
240 routeServlet.doGet(request, response);
241 verify(response).setStatus(eq(HttpServletResponse.SC_OK));
245 public void Given_Request_Is_HTTP_GET_And_Path_Equals_Egress_And_Get_Succeeds() throws Exception {
246 when(request.getPathInfo()).thenReturn("/egress/");
247 when(request.getRemoteAddr()).thenReturn("stub_addr");
248 ServletOutputStream outStream = mock(ServletOutputStream.class);
249 when(response.getOutputStream()).thenReturn(outStream);
250 RouteServlet routeServlet = new RouteServlet() {
251 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
255 routeServlet.doGet(request, response);
256 verify(response).setStatus(eq(HttpServletResponse.SC_OK));
260 public void Given_Request_Is_HTTP_GET_And_Ingress_Path_Equals_Network_And_Get_Succeeds() throws Exception {
261 when(request.getPathInfo()).thenReturn("/network/");
262 when(request.getRemoteAddr()).thenReturn("stub_addr");
263 ServletOutputStream outStream = mock(ServletOutputStream.class);
264 when(response.getOutputStream()).thenReturn(outStream);
265 RouteServlet routeServlet = new RouteServlet() {
266 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
270 routeServlet.doGet(request, response);
271 verify(response).setStatus(eq(HttpServletResponse.SC_OK));
275 public void Given_Request_Is_HTTP_PUT_And_Is_Not_Authorized() throws Exception {
276 routeServlet.doPut(request, response);
277 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
281 public void Given_Request_Is_HTTP_PUT_And_Contains_Bad_URL() throws Exception {
282 RouteServlet routeServlet = new RouteServlet() {
283 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
287 routeServlet.doPut(request, response);
288 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
293 public void Given_Request_Is_HTTP_POST_And_Is_Not_Authorized() throws Exception {
294 routeServlet.doPost(request, response);
295 FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isAddressAuthEnabled", "true", true);
296 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
300 public void Given_Request_Is_HTTP_POST_And_Ingress_Path_Starts_With_Ingress_And_Contains_Invalid_Arguments() throws Exception {
301 when(request.getPathInfo()).thenReturn("/ingress/");
302 when(request.getRemoteAddr()).thenReturn("stub_addr");
303 when(request.getParameter("feed")).thenReturn("3");
304 when(request.getParameter("user")).thenReturn(null);
305 when(request.getParameter("subnet")).thenReturn(null);
306 when(request.getParameter("nodepatt")).thenReturn(null);
307 when(request.getParameter("seq")).thenReturn(null);
308 RouteServlet routeServlet = new RouteServlet() {
309 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
313 routeServlet.doPost(request, response);
314 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
318 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Egress_And_EgressRoute_Already_Exists() throws Exception {
319 when(request.getPathInfo()).thenReturn("/egress/");
320 when(request.getRemoteAddr()).thenReturn("stub_addr");
321 when(request.getParameter("sub")).thenReturn("3");
322 EgressRoute e = mock(EgressRoute.class);
323 PowerMockito.when(EgressRoute.getEgressRoute(anyInt())).thenReturn(e);
324 RouteServlet routeServlet = new RouteServlet() {
325 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
329 routeServlet.doPost(request, response);
330 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
334 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Egress_And_Contains_Invalid_Arguments() throws Exception {
335 when(request.getPathInfo()).thenReturn("/egress/");
336 when(request.getRemoteAddr()).thenReturn("stub_addr");
337 when(request.getParameter("sub")).thenReturn("3");
338 RouteServlet routeServlet = new RouteServlet() {
339 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
343 routeServlet.doPost(request, response);
344 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
348 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Network_And_Is_Missing_Arguments() throws Exception {
349 when(request.getPathInfo()).thenReturn("/network/");
350 when(request.getRemoteAddr()).thenReturn("stub_addr");
351 RouteServlet routeServlet = new RouteServlet() {
352 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
356 routeServlet.doPost(request, response);
357 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
361 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Network_And_Route_Already_Exists() throws Exception {
362 when(request.getPathInfo()).thenReturn("/network/");
363 when(request.getRemoteAddr()).thenReturn("stub_addr");
364 when(request.getParameter("from")).thenReturn("stub_from");
365 when(request.getParameter("to")).thenReturn("stub_to");
366 when(request.getParameter("via")).thenReturn("stub_via");
367 PowerMockito.mockStatic(NodeClass.class);
368 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
369 SortedSet<NetworkRoute> networkSet = new TreeSet();
370 networkSet.add(mock(NetworkRoute.class));
371 PowerMockito.when(NetworkRoute.getAllNetworkRoutes()).thenReturn(networkSet);
372 RouteServlet routeServlet = new RouteServlet() {
373 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
377 routeServlet.doPost(request, response);
378 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
382 public void Given_Request_Is_HTTP_POST_And_Path_URL_Is_Null() throws Exception {
383 when(request.getPathInfo()).thenReturn("/route/");
384 when(request.getRemoteAddr()).thenReturn("stub_addr");
385 when(request.getParameter("from")).thenReturn("stub_from");
386 when(request.getParameter("to")).thenReturn("stub_to");
387 when(request.getParameter("via")).thenReturn("stub_via");
388 PowerMockito.mockStatic(NodeClass.class);
389 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
390 RouteServlet routeServlet = new RouteServlet() {
391 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
395 routeServlet.doPost(request, response);
396 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
400 public void Given_Request_Is_HTTP_POST_And_Fails() throws Exception {
401 when(request.getPathInfo()).thenReturn("/network/");
402 when(request.getRemoteAddr()).thenReturn("stub_addr");
403 when(request.getParameter("from")).thenReturn("stub_from");
404 when(request.getParameter("to")).thenReturn("stub_to");
405 when(request.getParameter("via")).thenReturn("stub_via");
406 PowerMockito.mockStatic(NodeClass.class);
407 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
408 RouteServlet routeServlet = new RouteServlet() {
409 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
414 protected boolean doInsert(Insertable bean) {
418 routeServlet.doPost(request, response);
419 verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
422 private void setRouteToReturnValid() throws IllegalAccessException {
423 PowerMockito.mockStatic(IngressRoute.class);
424 PowerMockito.when(IngressRoute.getIngressRoute(anyInt(), anyString(), anyString())).thenReturn(null);
425 SortedSet<IngressRoute> ingressSet = new TreeSet();
426 IngressRoute ingressRoute = mock(IngressRoute.class);
427 JSONObject joIngress = mock(JSONObject.class);
428 when(joIngress.toString()).thenReturn("{}");
429 when(ingressRoute.asJSONObject()).thenReturn(joIngress);
430 ingressSet.add(ingressRoute);
431 PowerMockito.when(IngressRoute.getAllIngressRoutes()).thenReturn(ingressSet);
433 PowerMockito.mockStatic(EgressRoute.class);
434 PowerMockito.when(EgressRoute.getEgressRoute(anyInt())).thenReturn(null);
435 SortedSet<EgressRoute> egressSet = new TreeSet();
436 EgressRoute egressRoute = mock(EgressRoute.class);
437 JSONObject joEgress = mock(JSONObject.class);
438 when(joEgress.toString()).thenReturn("{}");
439 when(egressRoute.asJSONObject()).thenReturn(joEgress);
440 egressSet.add(egressRoute);
441 PowerMockito.when(EgressRoute.getAllEgressRoutes()).thenReturn(egressSet);
443 PowerMockito.mockStatic(NetworkRoute.class);
444 SortedSet<NetworkRoute> networkSet = new TreeSet();
445 PowerMockito.when(NetworkRoute.getAllNetworkRoutes()).thenReturn(networkSet);
449 private void setPokerToNotCreateTimersWhenDeleteFeedIsCalled() throws Exception {
450 Poker poker = mock(Poker.class);
451 FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);