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 FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isAddressAuthEnabled", "true", true);
277 routeServlet.doPut(request, response);
278 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
282 public void Given_Request_Is_HTTP_PUT_And_Contains_Bad_URL() throws Exception {
283 RouteServlet routeServlet = new RouteServlet() {
284 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
288 routeServlet.doPut(request, response);
289 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
294 public void Given_Request_Is_HTTP_POST_And_Is_Not_Authorized() throws Exception {
295 FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isAddressAuthEnabled", "true", true);
296 routeServlet.doPost(request, response);
297 verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
301 public void Given_Request_Is_HTTP_POST_And_Ingress_Path_Starts_With_Ingress_And_Contains_Invalid_Arguments() throws Exception {
302 when(request.getPathInfo()).thenReturn("/ingress/");
303 when(request.getRemoteAddr()).thenReturn("stub_addr");
304 when(request.getParameter("feed")).thenReturn("3");
305 when(request.getParameter("user")).thenReturn(null);
306 when(request.getParameter("subnet")).thenReturn(null);
307 when(request.getParameter("nodepatt")).thenReturn(null);
308 when(request.getParameter("seq")).thenReturn(null);
309 RouteServlet routeServlet = new RouteServlet() {
310 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
314 routeServlet.doPost(request, response);
315 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
319 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Egress_And_EgressRoute_Already_Exists() throws Exception {
320 when(request.getPathInfo()).thenReturn("/egress/");
321 when(request.getRemoteAddr()).thenReturn("stub_addr");
322 when(request.getParameter("sub")).thenReturn("3");
323 EgressRoute e = mock(EgressRoute.class);
324 PowerMockito.when(EgressRoute.getEgressRoute(anyInt())).thenReturn(e);
325 RouteServlet routeServlet = new RouteServlet() {
326 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
330 routeServlet.doPost(request, response);
331 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
335 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Egress_And_Contains_Invalid_Arguments() throws Exception {
336 when(request.getPathInfo()).thenReturn("/egress/");
337 when(request.getRemoteAddr()).thenReturn("stub_addr");
338 when(request.getParameter("sub")).thenReturn("3");
339 RouteServlet routeServlet = new RouteServlet() {
340 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
344 routeServlet.doPost(request, response);
345 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
349 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Network_And_Is_Missing_Arguments() throws Exception {
350 when(request.getPathInfo()).thenReturn("/network/");
351 when(request.getRemoteAddr()).thenReturn("stub_addr");
352 RouteServlet routeServlet = new RouteServlet() {
353 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
357 routeServlet.doPost(request, response);
358 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
362 public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Network_And_Route_Already_Exists() throws Exception {
363 when(request.getPathInfo()).thenReturn("/network/");
364 when(request.getRemoteAddr()).thenReturn("stub_addr");
365 when(request.getParameter("from")).thenReturn("stub_from");
366 when(request.getParameter("to")).thenReturn("stub_to");
367 when(request.getParameter("via")).thenReturn("stub_via");
368 PowerMockito.mockStatic(NodeClass.class);
369 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
370 SortedSet<NetworkRoute> networkSet = new TreeSet();
371 networkSet.add(mock(NetworkRoute.class));
372 PowerMockito.when(NetworkRoute.getAllNetworkRoutes()).thenReturn(networkSet);
373 RouteServlet routeServlet = new RouteServlet() {
374 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
378 routeServlet.doPost(request, response);
379 verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
383 public void Given_Request_Is_HTTP_POST_And_Path_URL_Is_Null() throws Exception {
384 when(request.getPathInfo()).thenReturn("/route/");
385 when(request.getRemoteAddr()).thenReturn("stub_addr");
386 when(request.getParameter("from")).thenReturn("stub_from");
387 when(request.getParameter("to")).thenReturn("stub_to");
388 when(request.getParameter("via")).thenReturn("stub_via");
389 PowerMockito.mockStatic(NodeClass.class);
390 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
391 RouteServlet routeServlet = new RouteServlet() {
392 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
396 routeServlet.doPost(request, response);
397 verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
401 public void Given_Request_Is_HTTP_POST_And_Fails() throws Exception {
402 when(request.getPathInfo()).thenReturn("/network/");
403 when(request.getRemoteAddr()).thenReturn("stub_addr");
404 when(request.getParameter("from")).thenReturn("stub_from");
405 when(request.getParameter("to")).thenReturn("stub_to");
406 when(request.getParameter("via")).thenReturn("stub_via");
407 PowerMockito.mockStatic(NodeClass.class);
408 PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
409 RouteServlet routeServlet = new RouteServlet() {
410 protected boolean isAuthorizedForInternal(HttpServletRequest req) {
415 protected boolean doInsert(Insertable bean) {
419 routeServlet.doPost(request, response);
420 verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
423 private void setRouteToReturnValid() throws IllegalAccessException {
424 PowerMockito.mockStatic(IngressRoute.class);
425 PowerMockito.when(IngressRoute.getIngressRoute(anyInt(), anyString(), anyString())).thenReturn(null);
426 SortedSet<IngressRoute> ingressSet = new TreeSet();
427 IngressRoute ingressRoute = mock(IngressRoute.class);
428 JSONObject joIngress = mock(JSONObject.class);
429 when(joIngress.toString()).thenReturn("{}");
430 when(ingressRoute.asJSONObject()).thenReturn(joIngress);
431 ingressSet.add(ingressRoute);
432 PowerMockito.when(IngressRoute.getAllIngressRoutes()).thenReturn(ingressSet);
434 PowerMockito.mockStatic(EgressRoute.class);
435 PowerMockito.when(EgressRoute.getEgressRoute(anyInt())).thenReturn(null);
436 SortedSet<EgressRoute> egressSet = new TreeSet();
437 EgressRoute egressRoute = mock(EgressRoute.class);
438 JSONObject joEgress = mock(JSONObject.class);
439 when(joEgress.toString()).thenReturn("{}");
440 when(egressRoute.asJSONObject()).thenReturn(joEgress);
441 egressSet.add(egressRoute);
442 PowerMockito.when(EgressRoute.getAllEgressRoutes()).thenReturn(egressSet);
444 PowerMockito.mockStatic(NetworkRoute.class);
445 SortedSet<NetworkRoute> networkSet = new TreeSet();
446 PowerMockito.when(NetworkRoute.getAllNetworkRoutes()).thenReturn(networkSet);
450 private void setPokerToNotCreateTimersWhenDeleteFeedIsCalled() throws Exception {
451 Poker poker = mock(Poker.class);
452 FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);