aboutsummaryrefslogtreecommitdiffstats
path: root/datarouter-prov/src/test/java/org/onap
diff options
context:
space:
mode:
Diffstat (limited to 'datarouter-prov/src/test/java/org/onap')
-rwxr-xr-x[-rw-r--r--]datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java133
-rw-r--r--datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServletTest.java369
-rw-r--r--datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DrServletTestBase.java3
-rwxr-xr-x[-rw-r--r--]datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java163
-rw-r--r--[-rwxr-xr-x]datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/GroupServletTest.java5
-rw-r--r--datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/InternalServletTest.java405
-rwxr-xr-xdatarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/LogServletTest.java226
-rwxr-xr-xdatarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/PublishServletTest.java214
-rwxr-xr-xdatarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/RouteServletTest.java450
-rw-r--r--datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscribeServletTest.java333
-rw-r--r--datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java484
11 files changed, 2772 insertions, 13 deletions
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java
index 757852aa..61d030d9 100644..100755
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java
@@ -28,18 +28,27 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
+import org.onap.dmaap.datarouter.provisioning.beans.Feed;
+import org.onap.dmaap.datarouter.provisioning.beans.FeedAuthorization;
+import org.onap.dmaap.datarouter.provisioning.beans.Group;
+import org.onap.dmaap.datarouter.provisioning.beans.Subscription;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
import javax.servlet.http.HttpServletRequest;
import java.util.HashSet;
import java.util.Set;
-
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-@RunWith(MockitoJUnitRunner.class)
+@RunWith(PowerMockRunner.class)
+@SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.provisioning.beans.Feed",
+ "org.onap.dmaap.datarouter.provisioning.beans.Subscription",
+ "org.onap.dmaap.datarouter.provisioning.beans.Group"})
public class BaseServletTest extends DrServletTestBase {
private BaseServlet baseServlet;
@@ -69,14 +78,118 @@ public class BaseServletTest extends DrServletTestBase {
}
@Test
- public void Given_Request_Path_Info_Is_Not_Valid_Then_Minus_One_Is() throws Exception {
+ public void Given_Remote_Address_Is_Known_And_RequireCerts_Is_True() throws Exception {
when(request.isSecure()).thenReturn(true);
Set<String> authAddressesAndNetworks = new HashSet<String>();
authAddressesAndNetworks.add(("127.0.0.1"));
- FieldUtils
- .writeDeclaredStaticField(BaseServlet.class, "authorizedAddressesAndNetworks", authAddressesAndNetworks,
- true);
- FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", false, true);
- assertThat(baseServlet.isAuthorizedForProvisioning(request), is(nullValue()));
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authorizedAddressesAndNetworks", authAddressesAndNetworks, true);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", true, true);
+ assertThat(baseServlet.isAuthorizedForProvisioning(request), is("Client certificate is missing."));
+ }
+
+ @Test
+ public void Given_Request_Is_GetFeedOwner_And_Feed_Exists() throws Exception {
+ PowerMockito.mockStatic(Feed.class);
+ Feed feed = mock(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(feed);
+ when(feed.getPublisher()).thenReturn("stub_publisher");
+ assertThat(baseServlet.getFeedOwner("3"), is("stub_publisher"));
+ }
+
+ @Test
+ public void Given_Request_Is_GetFeedOwner_And_Feed_Does_Not_Exist() throws Exception {
+ PowerMockito.mockStatic(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(null);
+ assertThat(baseServlet.getFeedOwner("3"), is(nullValue()));
+ }
+
+ @Test
+ public void Given_Request_Is_GetFeedClassification_And_Feed_Exists() throws Exception {
+ PowerMockito.mockStatic(Feed.class);
+ Feed feed = mock(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(feed);
+ FeedAuthorization fAuth = mock(FeedAuthorization.class);
+ when(feed.getAuthorization()).thenReturn(fAuth);
+ when(fAuth.getClassification()).thenReturn("stub_classification");
+ assertThat(baseServlet.getFeedClassification("3"), is("stub_classification"));
+ }
+
+ @Test
+ public void Given_Request_Is_GetFeedClassification_And_Feed_Does_Not_Exist() throws Exception {
+ PowerMockito.mockStatic(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(null);
+ assertThat(baseServlet.getFeedClassification("3"), is(nullValue()));
+ }
+
+ @Test
+ public void Given_Request_Is_GetSubscriptionOwner_And_Subscription_Exists() throws Exception {
+ PowerMockito.mockStatic(Subscription.class);
+ Subscription subscription = mock(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(subscription);
+ when(subscription.getSubscriber()).thenReturn("stub_subscriber");
+ assertThat(baseServlet.getSubscriptionOwner("3"), is("stub_subscriber"));
+ }
+
+ @Test
+ public void Given_Request_Is_GetSubscriptionOwner_And_Subscription_Does_Not_Exist() throws Exception {
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(null);
+ assertThat(baseServlet.getSubscriptionOwner("3"), is(nullValue()));
+ }
+
+ @Test
+ public void Given_Request_Is_GetGroupByFeedGroupId_And_User_Is_A_Member_Of_Group() throws Exception {
+ PowerMockito.mockStatic(Feed.class);
+ Feed feed = mock(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(feed);
+ when(feed.getGroupid()).thenReturn(3);
+ PowerMockito.mockStatic(Group.class);
+ Group group = mock(Group.class);
+ when(group.getMembers()).thenReturn("{id: stub_user}");
+ PowerMockito.when(Group.getGroupById(anyInt())).thenReturn(group);
+ when(group.getAuthid()).thenReturn("stub_authID");
+ assertThat(baseServlet.getGroupByFeedGroupId("stub_user", "3"), is("stub_authID"));
+ }
+
+ @Test
+ public void Given_Request_Is_GetGroupByFeedGroupId_And_User_Is_Not_A_Member_Of_Group() throws Exception {
+ PowerMockito.mockStatic(Feed.class);
+ Feed feed = mock(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(feed);
+ when(feed.getGroupid()).thenReturn(3);
+ PowerMockito.mockStatic(Group.class);
+ Group group = mock(Group.class);
+ when(group.getMembers()).thenReturn("{id: stub_otherUser}");
+ PowerMockito.when(Group.getGroupById(anyInt())).thenReturn(group);
+ when(group.getAuthid()).thenReturn("stub_authID");
+ assertThat(baseServlet.getGroupByFeedGroupId("stub_user", "3"), is(nullValue()));
+ }
+
+ @Test
+ public void Given_Request_Is_GetGroupBySubGroupId_And_User_Is_A_Member_Of_Group() throws Exception {
+ PowerMockito.mockStatic(Subscription.class);
+ Subscription subscription = mock(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(subscription);
+ when(subscription.getGroupid()).thenReturn(3);
+ PowerMockito.mockStatic(Group.class);
+ Group group = mock(Group.class);
+ when(group.getMembers()).thenReturn("{id: stub_user}");
+ PowerMockito.when(Group.getGroupById(anyInt())).thenReturn(group);
+ when(group.getAuthid()).thenReturn("stub_authID");
+ assertThat(baseServlet.getGroupBySubGroupId("stub_user", "3"), is("stub_authID"));
+ }
+
+ @Test
+ public void Given_Request_Is_GetGroupBySubGroupId_And_User_Is_Not_A_Member_Of_Group() throws Exception {
+ PowerMockito.mockStatic(Subscription.class);
+ Subscription subscription = mock(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(subscription);
+ when(subscription.getGroupid()).thenReturn(3);
+ PowerMockito.mockStatic(Group.class);
+ Group group = mock(Group.class);
+ when(group.getMembers()).thenReturn("{id: stub_otherUser}");
+ PowerMockito.when(Group.getGroupById(anyInt())).thenReturn(group);
+ when(group.getAuthid()).thenReturn("stub_authID");
+ assertThat(baseServlet.getGroupBySubGroupId("stub_user", "3"), is(nullValue()));
}
}
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServletTest.java
new file mode 100644
index 00000000..35bc85d8
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServletTest.java
@@ -0,0 +1,369 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.dmaap.datarouter.provisioning;
+
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.jetbrains.annotations.NotNull;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.onap.dmaap.datarouter.authz.AuthorizationResponse;
+import org.onap.dmaap.datarouter.authz.Authorizer;
+import org.onap.dmaap.datarouter.provisioning.beans.Feed;
+import org.onap.dmaap.datarouter.provisioning.beans.Insertable;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Mockito.*;
+import static org.onap.dmaap.datarouter.provisioning.BaseServlet.BEHALF_HEADER;
+
+
+@RunWith(PowerMockRunner.class)
+@SuppressStaticInitializationFor("org.onap.dmaap.datarouter.provisioning.beans.Feed")
+public class DRFeedsServletTest extends DrServletTestBase {
+ private static DRFeedsServlet drfeedsServlet;
+
+ @Mock
+ private HttpServletRequest request;
+ @Mock
+ private HttpServletResponse response;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ drfeedsServlet = new DRFeedsServlet();
+ setAuthoriserToReturnRequestIsAuthorized();
+ setPokerToNotCreateTimersWhenDeleteFeedIsCalled();
+ setupValidAuthorisedRequest();
+ setUpValidSecurityOnHttpRequest();
+ setUpValidContentHeadersAndJSONOnHttpRequest();
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_SC_METHOD_NOT_ALLOWED_Response_Is_Generated() throws Exception {
+ drfeedsServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_METHOD_NOT_ALLOWED), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Is_Not_Secure_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ drfeedsServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_BEHALF_HEADER_Is_Not_Set_In_Request_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ setBehalfHeader(null);
+ drfeedsServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_URL_Path_Not_Valid_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getRequestURI()).thenReturn("/123");
+ drfeedsServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ setAuthoriserToReturnRequestNotAuthorized();
+ drfeedsServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_Fails_With_Valid_Name_And_Version() throws Exception {
+ when(request.getParameter("name")).thenReturn("stub_name");
+ when(request.getParameter("version")).thenReturn("stub_version");
+ drfeedsServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_Succeeds_With_Valid_Name_And_Version() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ when(request.getParameter("name")).thenReturn("stub_name");
+ when(request.getParameter("version")).thenReturn("stub_version");
+ PowerMockito.mockStatic(Feed.class);
+ Feed feed = mock(Feed.class);
+ PowerMockito.when(Feed.getFeedByNameVersion(anyString(), anyString())).thenReturn(feed);
+ when(feed.asJSONObject(true)).thenReturn(mock(JSONObject.class));
+ drfeedsServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_Succeeds_With_Invalid_Name_And_Version() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ drfeedsServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_SC_METHOD_NOT_ALLOWED_Response_Is_Generated() throws Exception {
+ drfeedsServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_METHOD_NOT_ALLOWED), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Is_Not_Secure_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_BEHALF_HEADER_Is_Not_Set_In_Request_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ setBehalfHeader(null);
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_URL_Path_Not_Valid_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getRequestURI()).thenReturn("/123");
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Content_Header_Is_Not_Supported_Type_Then_Unsupported_Media_Type_Response_Is_Generated() throws Exception {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.feed; version=1.1");
+ when(request.getContentType()).thenReturn("stub_contentType");
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ setAuthoriserToReturnRequestNotAuthorized();
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Request_Contains_Badly_Formed_JSON_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Active_Feeds_Equals_Max_Feeds_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "maxFeeds", 0, true);
+ DRFeedsServlet drfeedsServlet = new DRFeedsServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ return new JSONObject();
+ }
+ };
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_CONFLICT), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Feed_Is_Not_Valid_Object_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn(null);
+ JSONObject JSObject = buildRequestJsonObject();
+
+ DRFeedsServlet drfeedsServlet = new DRFeedsServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ return jo;
+ }
+ };
+
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Feed_Already_Exists_Bad_Request_Response_Is_Generated() throws Exception {
+ setFeedToReturnInvalidFeedIdSupplied();
+ JSONObject JSObject = buildRequestJsonObject();
+ DRFeedsServlet drfeedsServlet = new DRFeedsServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "not_stub_name");
+ jo.put("version", "1.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+ };
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_POST_Fails_Bad_Request_Response_Is_Generated() throws Exception {
+ JSONObject JSObject = buildRequestJsonObject();
+ DRFeedsServlet drfeedsServlet = new DRFeedsServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+
+ @Override
+ protected boolean doInsert(Insertable bean) {
+ return false;
+ }
+ };
+ drfeedsServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Change_On_Feeds_Succeeds_A_STATUS_OK_Response_Is_Generated() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ JSONObject JSObject = buildRequestJsonObject();
+ DRFeedsServlet drfeedsServlet = new DRFeedsServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "1.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+
+ @Override
+ protected boolean doInsert(Insertable bean) {
+ return true;
+ }
+ };
+ drfeedsServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_CREATED));
+ }
+
+ @NotNull
+ private JSONObject buildRequestJsonObject() {
+ JSONObject JSObject = new JSONObject();
+ JSONArray endpointIDs = new JSONArray();
+ JSONObject JOEndpointIDs = new JSONObject();
+ JOEndpointIDs.put("id", "stub_endpoint_id");
+ JOEndpointIDs.put("password", "stub_endpoint_password");
+ endpointIDs.put(JOEndpointIDs);
+
+ JSONArray endpointAddresses = new JSONArray();
+ endpointAddresses.put("127.0.0.1");
+
+ JSObject.put("classification", "stub_classification");
+ JSObject.put("endpoint_ids", endpointIDs);
+ JSObject.put("endpoint_addrs", endpointAddresses);
+ return JSObject;
+ }
+
+ private void setUpValidSecurityOnHttpRequest() throws Exception {
+ when(request.isSecure()).thenReturn(true);
+ Set<String> authAddressesAndNetworks = new HashSet<String>();
+ authAddressesAndNetworks.add(("127.0.0.1"));
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authorizedAddressesAndNetworks", authAddressesAndNetworks, true);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", false, true);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "maxFeeds", 100, true);
+ }
+
+ private void setBehalfHeader(String headerValue) {
+ when(request.getHeader(BEHALF_HEADER)).thenReturn(headerValue);
+ }
+
+ private void setValidPathInfoInHttpHeader() {
+ when(request.getPathInfo()).thenReturn("/123");
+ }
+
+ private void setFeedToReturnInvalidFeedIdSupplied() {
+ PowerMockito.mockStatic(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(null);
+ when(Feed.getFeedByNameVersion(anyString(), anyString())).thenReturn(mock(Feed.class));
+ }
+
+ private void setFeedToReturnValidFeedForSuppliedId() {
+ PowerMockito.mockStatic(Feed.class);
+ Feed feed = mock(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(feed);
+ when(feed.isDeleted()).thenReturn(false);
+ when(feed.asJSONObject(true)).thenReturn(mock(JSONObject.class));
+ when(feed.getPublisher()).thenReturn("Stub_Value");
+ when(feed.getName()).thenReturn("stub_name");
+ when(feed.getVersion()).thenReturn("1.0");
+ when(feed.asLimitedJSONObject()).thenReturn(mock(JSONObject.class));
+ PowerMockito.when(feed.getFeedByNameVersion(anyString(), anyString())).thenReturn(null);
+ }
+
+ private void setAuthoriserToReturnRequestNotAuthorized() throws IllegalAccessException {
+ AuthorizationResponse authResponse = mock(AuthorizationResponse.class);
+ Authorizer authorizer = mock(Authorizer.class);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authz", authorizer, true);
+ when(authorizer.decide(request)).thenReturn(authResponse);
+ when(authResponse.isAuthorized()).thenReturn(false);
+ }
+
+ private void setAuthoriserToReturnRequestIsAuthorized() throws IllegalAccessException {
+ AuthorizationResponse authResponse = mock(AuthorizationResponse.class);
+ Authorizer authorizer = mock(Authorizer.class);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authz", authorizer, true);
+ when(authorizer.decide(request)).thenReturn(authResponse);
+ when(authResponse.isAuthorized()).thenReturn(true);
+ }
+
+ private void setPokerToNotCreateTimersWhenDeleteFeedIsCalled() throws Exception {
+ Poker poker = mock(Poker.class);
+ FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);
+ }
+
+ private void setupValidAuthorisedRequest() throws Exception {
+ setUpValidSecurityOnHttpRequest();
+ setBehalfHeader("Stub_Value");
+ setValidPathInfoInHttpHeader();
+ setFeedToReturnValidFeedForSuppliedId();
+ }
+
+ private void setUpValidContentHeadersAndJSONOnHttpRequest() {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.feed; version=1.0");
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn("stub_subjectGroup");
+
+ }
+}
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DrServletTestBase.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DrServletTestBase.java
index cf035121..414fc185 100644
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DrServletTestBase.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DrServletTestBase.java
@@ -38,6 +38,9 @@ public class DrServletTestBase {
public void setUp() throws Exception {
Properties props = new Properties();
props.setProperty("org.onap.dmaap.datarouter.provserver.isaddressauthenabled", "false");
+ props.setProperty("org.onap.dmaap.datarouter.provserver.accesslog.dir", "datarouter-prov/unit-test-logs");
+ props.setProperty("org.onap.dmaap.datarouter.provserver.spooldir", "resources/spooldir");
+ props.setProperty("org.onap.dmaap.datarouter.provserver.https.relaxation", "false");
FieldUtils.writeDeclaredStaticField(DB.class, "props", props, true);
FieldUtils.writeDeclaredStaticField(BaseServlet.class, "startmsgFlag", false, true);
SynchronizerTask synchronizerTask = mock(SynchronizerTask.class);
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java
index d65b1f97..f5302cb9 100644..100755
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java
@@ -23,6 +23,8 @@
package org.onap.dmaap.datarouter.provisioning;
import org.apache.commons.lang3.reflect.FieldUtils;
+import org.jetbrains.annotations.NotNull;
+import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
@@ -67,6 +69,7 @@ public class FeedServletTest extends DrServletTestBase {
setPokerToNotCreateTimersWhenDeleteFeedIsCalled();
setUpValidAuthorisedRequest();
setUpValidSecurityOnHttpRequest();
+ setUpValidContentHeadersAndJSONOnHttpRequest();
}
@Test
@@ -230,6 +233,7 @@ public class FeedServletTest extends DrServletTestBase {
@Test
public void Given_Request_Is_HTTP_PUT_And_Content_Header_Is_Not_Supported_Type_Then_Unsupported_Media_Type_Response_Is_Generated()
throws Exception {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.feed-fail; version=2.0");
when(request.getContentType()).thenReturn("stub_contentType");
feedServlet.doPut(request, response);
verify(response)
@@ -239,13 +243,161 @@ public class FeedServletTest extends DrServletTestBase {
@Test
public void Given_Request_Is_HTTP_PUT_And_Request_Contains_Badly_Formed_JSON_Then_Bad_Request_Response_Is_Generated()
throws Exception {
- when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.feed; version=1.0");
ServletInputStream inStream = mock(ServletInputStream.class);
when(request.getInputStream()).thenReturn(inStream);
feedServlet.doPut(request, response);
verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
}
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Request_Contains_Invalid_JSON_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ FeedServlet feedServlet = new FeedServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ return new JSONObject();
+ }
+ };
+ feedServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Feed_Change_Is_Not_Publisher_Who_Requested_Feed_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn(null);
+ JSONObject JSObject = buildRequestJsonObject();
+ FeedServlet feedServlet = new FeedServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "1.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+ };
+
+ feedServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Feed_Name_Change_is_Requested_Bad_Request_Response_Is_Generated() throws Exception {
+ JSONObject JSObject = buildRequestJsonObject();
+ FeedServlet feedServlet = new FeedServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "not_stub_name");
+ jo.put("version", "1.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+ };
+ feedServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Feed_Version_Change_is_Requested_Bad_Request_Response_Is_Generated() throws Exception {
+ JSONObject JSObject = buildRequestJsonObject();
+ FeedServlet feedServlet = new FeedServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+ };
+ feedServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ JSONObject JSObject = buildRequestJsonObject();
+ FeedServlet feedServlet = new FeedServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "1.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+ };
+ setAuthoriserToReturnRequestNotAuthorized();
+ feedServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Change_On_Feeds_Fails_A_STATUS_OK_Response_Is_Generated() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+
+ JSONObject JSObject = buildRequestJsonObject();
+ FeedServlet feedServlet = new FeedServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "1.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+
+ @Override
+ protected boolean doUpdate(Updateable bean) {
+ return false;
+ }
+ };
+ feedServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Change_On_Feeds_Suceeds_A_STATUS_OK_Response_Is_Generated() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ JSONObject JSObject = buildRequestJsonObject();
+ FeedServlet feedServlet = new FeedServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "1.0");
+ jo.put("authorization", JSObject);
+ return jo;
+ }
+
+ @Override
+ protected boolean doUpdate(Updateable bean) {
+ return true;
+ }
+ };
+ feedServlet.doPut(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_SC_METHOD_NOT_ALLOWED_Response_Is_Generated() throws Exception {
+ feedServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_METHOD_NOT_ALLOWED), argThat(notNullValue(String.class)));
+ }
+
+ @NotNull
+ private JSONObject buildRequestJsonObject() {
+ JSONObject JSObject = new JSONObject();
+ JSONArray endpointIDs = new JSONArray();
+ JSONObject JOEndpointIDs = new JSONObject();
+ JOEndpointIDs.put("id", "stub_endpoint_id");
+ JOEndpointIDs.put("password", "stub_endpoint_password");
+ endpointIDs.put(JOEndpointIDs);
+
+ JSONArray endpointAddresses = new JSONArray();
+ endpointAddresses.put("127.0.0.1");
+
+ JSObject.put("classification", "stub_classification");
+ JSObject.put("endpoint_ids", endpointIDs);
+ JSObject.put("endpoint_addrs", endpointAddresses);
+ return JSObject;
+ }
+
private void setUpValidSecurityOnHttpRequest() throws Exception {
when(request.isSecure()).thenReturn(true);
Set<String> authAddressesAndNetworks = new HashSet<String>();
@@ -275,6 +427,10 @@ public class FeedServletTest extends DrServletTestBase {
PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(feed);
when(feed.isDeleted()).thenReturn(false);
when(feed.asJSONObject(true)).thenReturn(mock(JSONObject.class));
+ when(feed.getPublisher()).thenReturn("Stub_Value");
+ when(feed.getName()).thenReturn("stub_name");
+ when(feed.getVersion()).thenReturn("1.0");
+ when(feed.asLimitedJSONObject()).thenReturn(mock(JSONObject.class));
}
private void setAuthoriserToReturnRequestNotAuthorized() throws IllegalAccessException {
@@ -304,4 +460,9 @@ public class FeedServletTest extends DrServletTestBase {
setValidPathInfoInHttpHeader();
setFeedToReturnValidFeedForSuppliedId();
}
+
+ private void setUpValidContentHeadersAndJSONOnHttpRequest() {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.feed; version=1.0");
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn("stub_subjectGroup");
+ }
} \ No newline at end of file
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/GroupServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/GroupServletTest.java
index ed0e2572..a0831b73 100755..100644
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/GroupServletTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/GroupServletTest.java
@@ -55,6 +55,7 @@ import static org.onap.dmaap.datarouter.provisioning.BaseServlet.BEHALF_HEADER;
@RunWith(PowerMockRunner.class)
@SuppressStaticInitializationFor("org.onap.dmaap.datarouter.provisioning.beans.Group")
public class GroupServletTest extends DrServletTestBase {
+
private GroupServlet groupServlet;
@Mock
@@ -68,7 +69,7 @@ public class GroupServletTest extends DrServletTestBase {
super.setUp();
groupServlet = new GroupServlet();
setAuthoriserToReturnRequestIsAuthorized();
- setPokerToNotCreateTimersWhenDeleteFeedIsCalled();
+ setPokerToNotCreateTimers();
setUpValidAuthorisedRequest();
}
@@ -250,7 +251,7 @@ public class GroupServletTest extends DrServletTestBase {
when(authResponse.isAuthorized()).thenReturn(true);
}
- private void setPokerToNotCreateTimersWhenDeleteFeedIsCalled() throws Exception {
+ private void setPokerToNotCreateTimers() throws Exception {
Poker poker = mock(Poker.class);
FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);
}
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/InternalServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/InternalServletTest.java
new file mode 100644
index 00000000..104d137a
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/InternalServletTest.java
@@ -0,0 +1,405 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.dmaap.datarouter.provisioning;
+
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.onap.dmaap.datarouter.authz.AuthorizationResponse;
+import org.onap.dmaap.datarouter.authz.Authorizer;
+import org.onap.dmaap.datarouter.provisioning.beans.*;
+import org.onap.dmaap.datarouter.provisioning.utils.LogfileLoader;
+import org.onap.dmaap.datarouter.provisioning.utils.RLEBitSet;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.net.InetAddress;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.onap.dmaap.datarouter.provisioning.BaseServlet.BEHALF_HEADER;
+
+@RunWith(PowerMockRunner.class)
+@SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.provisioning.beans.Feed", "org.onap.dmaap.datarouter.provisioning.beans.Parameters", "org.onap.dmaap.datarouter.provisioning.beans.NodeClass",
+ "org.onap.dmaap.datarouter.provisioning.beans.Subscription", "org.onap.dmaap.datarouter.provisioning.utils.LogfileLoader"})
+public class InternalServletTest extends DrServletTestBase {
+ private InternalServlet internalServlet;
+
+ @Mock
+ private HttpServletRequest request;
+
+ @Mock
+ private HttpServletResponse response;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ internalServlet = new InternalServlet();
+ setAuthoriserToReturnRequestIsAuthorized();
+ setUpValidAuthorisedRequest();
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Address_Not_Authorized_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.getRemoteAddr()).thenReturn("127.100.0.3");
+ internalServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_With_Halt_In_Endpoint_But_Not_Sent_From_Localhost_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn("/halt");
+ when(request.isSecure()).thenReturn(false);
+ when(request.getRemoteAddr()).thenReturn("127.100.0.3");
+ internalServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_FORBIDDEN));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_With_Halt_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/halt");
+ when(request.isSecure()).thenReturn(false);
+ when(request.getRemoteAddr()).thenReturn("127.0.0.1");
+ internalServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_With_FetchProv_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/fetchProv");
+ when(request.isSecure()).thenReturn(false);
+ internalServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_With_Prov_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/prov");
+ when(request.getQueryString()).thenReturn(null);
+ setPokerToNotCreateTimers();
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ internalServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_With_Logs_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/logs/");
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ internalServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_Starts_With_Logs_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/logs/TestFile");
+ internalServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NO_CONTENT), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_With_Api_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/api/Key");
+ setParametersToNotContactDb(false);
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ internalServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_With_Drlogs_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/drlogs/");
+ PowerMockito.mockStatic(LogfileLoader.class);
+ LogfileLoader logfileLoader = mock(LogfileLoader.class);
+ when(logfileLoader.getBitSet()).thenReturn(new RLEBitSet());
+ PowerMockito.when(LogfileLoader.getLoader()).thenReturn(logfileLoader);
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ internalServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_Incorrect_Endpoint_Then_No_Content_Response_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn("/incorrect/");
+ internalServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Address_Not_Authorized_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.getRemoteAddr()).thenReturn("127.100.0.3");
+ internalServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_With_Api_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/api/Key");
+ setParametersToNotContactDb(false);
+ String[] values = {"V", "a", "l", "u", "e", "s"};
+ when(request.getParameterValues(anyString())).thenReturn(values);
+ internalServlet = internalServerSuccess();
+ setPokerToNotCreateTimers();
+ mockProvisioningParametersChanged();
+ internalServlet.doPut(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_With_Api_In_Endpoint_And_Update_Fails_Then_Internal_Server_Error_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn("/api/Key");
+ setParametersToNotContactDb(false);
+ String[] values = {"V", "a", "l", "u", "e", "s"};
+ when(request.getParameterValues(anyString())).thenReturn(values);
+ internalServlet = internalServerFailure();
+ internalServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_With_Incorrect_Endpoint_Then_Not_Found_Error_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn("/incorrect");
+ internalServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Address_Not_Authorized_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.getRemoteAddr()).thenReturn("127.100.0.3");
+ internalServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_With_Api_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/api/Key");
+ setParametersToNotContactDb(false);
+ String[] values = {"V", "a", "l", "u", "e", "s"};
+ when(request.getParameterValues(anyString())).thenReturn(values);
+ internalServlet = internalServerSuccess();
+ setPokerToNotCreateTimers();
+ mockProvisioningParametersChanged();
+ internalServlet.doDelete(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_With_Api_In_Endpoint_And_Delete_Fails_Then_Internal_Server_Error_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn("/api/Key");
+ setParametersToNotContactDb(false);
+ String[] values = {"V", "a", "l", "u", "e", "s"};
+ when(request.getParameterValues(anyString())).thenReturn(values);
+ internalServlet = internalServerFailure();
+ internalServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_With_Incorrect_Endpoint_Then_Not_Found_Error_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn("/incorrect");
+ internalServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Address_Not_Authorized_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.getRemoteAddr()).thenReturn("127.100.0.3");
+ internalServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_With_Api_In_Endpoint_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/api/Key");
+ setParametersToNotContactDb(true);
+ String[] values = {"V", "a", "l", "u", "e", "s"};
+ when(request.getParameterValues(anyString())).thenReturn(values);
+ internalServlet = internalServerSuccess();
+ setPokerToNotCreateTimers();
+ mockProvisioningParametersChanged();
+ internalServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_With_Api_In_Endpoint_And_Insert_Fails_Then_Internal_Server_Error_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn("/api/Key");
+ setParametersToNotContactDb(true);
+ String[] values = {"V", "a", "l", "u", "e", "s"};
+ when(request.getParameterValues(anyString())).thenReturn(values);
+ internalServlet = internalServerFailure();
+ internalServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_To_Logs_And_Content_Header_Is_Not_Supported_Type_Then_Unsupported_Media_Type_Response_Is_Generated() throws Exception {
+ when(request.getHeader("Content-Type")).thenReturn("stub_contentType");
+ when(request.getPathInfo()).thenReturn("/logs/");
+ internalServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_To_Logs_And_Content_Encoding_Is_Not_Supported_Type_Then_Unsupported_Media_Type_Response_Is_Generated() throws Exception {
+ when(request.getHeader("Content-Encoding")).thenReturn("not-supported");
+ when(request.getPathInfo()).thenReturn("/logs/");
+ internalServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_To_Drlogs_And_Then_Unsupported_Media_Type_Response_Is_Generated() throws Exception {
+ when(request.getHeader("Content-Type")).thenReturn("stub_contentType");
+ when(request.getPathInfo()).thenReturn("/drlogs/");
+ internalServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_To_Drlogs_And_Request_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/drlogs/");
+ ServletInputStream inStream = mock(ServletInputStream.class);
+ when(inStream.read()).thenReturn(1, -1);
+ when(request.getInputStream()).thenReturn(inStream);
+ internalServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_With_Incorrect_Endpoint_Then_Not_Found_Error_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn("/incorrect/");
+ internalServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ private void setAuthoriserToReturnRequestIsAuthorized() throws IllegalAccessException {
+ AuthorizationResponse authResponse = mock(AuthorizationResponse.class);
+ Authorizer authorizer = mock(Authorizer.class);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authz", authorizer, true);
+ when(authorizer.decide(request)).thenReturn(authResponse);
+ when(authResponse.isAuthorized()).thenReturn(true);
+ }
+
+ private void setUpValidAuthorisedRequest() throws Exception {
+ setUpValidSecurityOnHttpRequest();
+ setBehalfHeader("Stub_Value");
+ setValidPathInfoInHttpHeader();
+ when(request.getHeader("Content-Type")).thenReturn("text/plain");
+ when(request.getHeader("Content-Encoding")).thenReturn("gzip");
+ }
+
+ private void setUpValidSecurityOnHttpRequest() throws Exception {
+ when(request.isSecure()).thenReturn(true);
+ when(request.getRemoteAddr()).thenReturn(InetAddress.getLocalHost().getHostAddress());
+ InetAddress[] nodeAddresses = new InetAddress[1];
+ nodeAddresses[0] = InetAddress.getLocalHost();
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "nodeAddresses", nodeAddresses, true);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", false, true);
+ }
+
+ private void setBehalfHeader(String headerValue) {
+ when(request.getHeader(BEHALF_HEADER)).thenReturn(headerValue);
+ }
+
+ private void setValidPathInfoInHttpHeader() {
+ when(request.getPathInfo()).thenReturn("/123");
+ }
+
+ private void setPokerToNotCreateTimers() throws Exception {
+ Poker poker = mock(Poker.class);
+ FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);
+ }
+
+ private void setParametersToNotContactDb(boolean isPost) {
+ PowerMockito.mockStatic(Parameters.class);
+ Parameters parameters = mock(Parameters.class);
+ if (isPost) {
+ PowerMockito.when(Parameters.getParameter(anyString())).thenReturn(null);
+ } else {
+ PowerMockito.when(Parameters.getParameter(anyString())).thenReturn(parameters);
+ }
+ }
+
+ private InternalServlet internalServerSuccess() {
+ InternalServlet internalServlet = new InternalServlet() {
+
+ protected boolean doUpdate(Updateable bean) {
+ return true;
+ }
+
+ protected boolean doDelete(Deleteable bean) {
+ return true;
+ }
+
+ protected boolean doInsert(Insertable bean) {
+ return true;
+ }
+ };
+ return internalServlet;
+ }
+
+ private InternalServlet internalServerFailure() {
+ InternalServlet internalServlet = new InternalServlet() {
+
+ protected boolean doUpdate(Updateable bean) {
+ return false;
+ }
+
+ protected boolean doDelete(Deleteable bean) {
+ return false;
+ }
+
+ protected boolean doInsert(Insertable bean) {
+ return false;
+ }
+ };
+ return internalServlet;
+ }
+
+ private void mockProvisioningParametersChanged() throws IllegalAccessException{
+ PowerMockito.mockStatic(Feed.class);
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Feed.countActiveFeeds()).thenReturn(0);
+ PowerMockito.when(Subscription.countActiveSubscriptions()).thenReturn(0);
+ Map<String, Integer> map = new HashMap<>();
+ FieldUtils.writeDeclaredStaticField(NodeClass.class, "map", map, true);
+ }
+}
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/LogServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/LogServletTest.java
new file mode 100755
index 00000000..9a550593
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/LogServletTest.java
@@ -0,0 +1,226 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.dmaap.datarouter.provisioning;
+
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.onap.dmaap.datarouter.provisioning.beans.Subscription;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.powermock.api.mockito.PowerMockito.when;
+
+@RunWith(PowerMockRunner.class)
+@SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.provisioning.beans.Subscription"})
+public class LogServletTest extends DrServletTestBase {
+
+ private static LogServlet logServlet;
+
+ @Mock
+ private HttpServletRequest request;
+ @Mock
+ private HttpServletResponse response;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ logServlet = new LogServlet(true);
+ setUpValidParameterValuesForMap();
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Is_Not_Allowed_Then_Forbidden_Response_Is_Generated()
+ throws Exception {
+ logServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_METHOD_NOT_ALLOWED), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_FeedID_Is_Invalid_Then_Bad_Request_Response_Is_Generated()
+ throws Exception {
+ when(request.getPathInfo()).thenReturn(null);
+ logServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Has_Bad_Type()
+ throws Exception {
+ when(request.getParameter("type")).thenReturn("bad_type");
+ logServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Has_Bad_PublishID()
+ throws Exception {
+ when(request.getParameter("publishId")).thenReturn("bad_PublishID'");
+ logServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Has_Bad_StatusCode()
+ throws Exception {
+ when(request.getParameter("statusCode")).thenReturn("1'");
+ logServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Has_Bad_ExpiryReason()
+ throws Exception {
+ when(request.getParameter("expiryReason")).thenReturn("bad_ExpiryReason");
+ logServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Has_Bad_Start()
+ throws Exception {
+ when(request.getParameter("start")).thenReturn("bad_startTime");
+ logServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Has_Bad_End()
+ throws Exception {
+ when(request.getParameter("end")).thenReturn("bad_endTime");
+ logServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Is_FeedLog()
+ throws Exception {
+ logServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Is_Not_FeedLog()
+ throws Exception {
+ LogServlet logServletNotFeedlog = new LogServlet(false);
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(mock(Subscription.class));
+ logServletNotFeedlog.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Is_Not_Allowed_Then_Forbidden_Response_Is_Generated()
+ throws Exception {
+ logServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_METHOD_NOT_ALLOWED), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Is_Not_Allowed_Then_Forbidden_Response_Is_Generated()
+ throws Exception {
+ logServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_METHOD_NOT_ALLOWED), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_GetPublishRecordsForFeed_And_Type_Is_Publish()
+ throws Exception {
+ when(request.getParameter("type")).thenReturn("pub");
+ when(request.getParameter("expiryReason")).thenReturn(null);
+ logServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_getDeliveryRecordsForFeed_And_Type_Is_Delivery()
+ throws Exception {
+ when(request.getParameter("type")).thenReturn("del");
+ when(request.getParameter("expiryReason")).thenReturn(null);
+ logServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_getExpiryRecordsForFeed_And_Type_Is_Expire()
+ throws Exception {
+ when(request.getParameter("type")).thenReturn("exp");
+ when(request.getParameter("statusCode")).thenReturn(null);
+ when(request.getParameter("expiryReason")).thenReturn(null);
+ ServletOutputStream s = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(s);
+ logServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_getDeliveryRecordsForSubscription_And_Type_Is_Delivery()
+ throws Exception {
+ LogServlet logServletNotFeedlog = new LogServlet(false);
+ when(request.getParameter("type")).thenReturn("del");
+ when(request.getParameter("statusCode")).thenReturn(null);
+ when(request.getParameter("expiryReason")).thenReturn(null);
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(mock(Subscription.class));
+ logServletNotFeedlog.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_getExpiryRecordsForSubscription_And_Type_Is_Expiry()
+ throws Exception {
+ LogServlet logServletNotFeedlog = new LogServlet(false);
+ when(request.getParameter("type")).thenReturn("exp");
+ when(request.getParameter("statusCode")).thenReturn(null);
+ when(request.getParameter("expiryReason")).thenReturn(null);
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(mock(Subscription.class));
+ logServletNotFeedlog.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ private void setUpValidParameterValuesForMap() throws Exception {
+ when(request.getPathInfo()).thenReturn("123");
+ when(request.getParameter("type")).thenReturn("exp");
+ when(request.getParameter("publishId")).thenReturn("bad_PublishID");
+ when(request.getParameter("statusCode")).thenReturn("-1");
+ when(request.getParameter("expiryReason")).thenReturn("other");
+ when(request.getParameter("start")).thenReturn(null);
+ when(request.getParameter("end")).thenReturn(null);
+ ServletOutputStream s = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(s);
+ }
+} \ No newline at end of file
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/PublishServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/PublishServletTest.java
new file mode 100755
index 00000000..92403ac8
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/PublishServletTest.java
@@ -0,0 +1,214 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+
+package org.onap.dmaap.datarouter.provisioning;
+
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Matchers;
+import org.mockito.Mock;
+import org.onap.dmaap.datarouter.authz.AuthorizationResponse;
+import org.onap.dmaap.datarouter.authz.Authorizer;
+import org.onap.dmaap.datarouter.provisioning.beans.*;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.onap.dmaap.datarouter.provisioning.BaseServlet.BEHALF_HEADER;
+
+/**
+ * Created by ezcoxem on 21/08/2018.
+ */
+
+@RunWith(PowerMockRunner.class)
+@SuppressStaticInitializationFor("org.onap.dmaap.datarouter.provisioning.beans.Feed")
+public class PublishServletTest extends DrServletTestBase {
+ private PublishServlet publishServlet;
+
+ private static String START_JSON_STRING = "{";
+ private static String END_JSON_STRING = "}";
+ private static String START_JSON_ARRAY = "[";
+ private static String END_JSON_ARRAY = "]";
+ private static String COMMA = ",";
+
+ @Mock
+ private HttpServletRequest request;
+
+ @Mock
+ private HttpServletResponse response;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ publishServlet = new PublishServlet();
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_There_Are_No_Nodes_Then_Service_Unavailable_Error_Is_Returned()
+ throws Exception {
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "nodes", new String[0], true);
+ publishServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Path_Is_Null_Then_Not_Found_Error_Is_Returned()
+ throws Exception {
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "nodes", new String[1], true);
+ publishServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Ix_Is_Null_Then_Not_Found_Error_Is_Returned()
+ throws Exception {
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "nodes", new String[1], true);
+ when(request.getPathInfo()).thenReturn("/123/");
+ publishServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Feed_Is_Not_Valid_Then_Not_Found_Error_Is_Returned()
+ throws Exception {
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "nodes", new String[1], true);
+ when(request.getPathInfo()).thenReturn("/123/fileName.txt");
+ PowerMockito.mockStatic(Feed.class);
+ PowerMockito.when(Feed.isFeedValid(anyInt())).thenReturn(false);
+ publishServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Feed_Is_Not_A_Number_Then_Not_Found_Error_Is_Returned()
+ throws Exception {
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "nodes", new String[1], true);
+ when(request.getPathInfo()).thenReturn("/abc/fileName.txt");
+ PowerMockito.mockStatic(Feed.class);
+ PowerMockito.when(Feed.isFeedValid(anyInt())).thenReturn(false);
+ publishServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_All_Ok_Then_Request_succeeds()
+ throws Exception {
+ setConditionsForPositiveSuccessFlow();
+ when(request.getHeader(anyString())).thenReturn("Basic dXNlcg==");
+ publishServlet.doDelete(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_MOVED_PERMANENTLY));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Request_succeeds()
+ throws Exception {
+ setConditionsForPositiveSuccessFlow();
+
+ publishServlet.doPut(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_MOVED_PERMANENTLY));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Request_succeeds()
+ throws Exception {
+ setConditionsForPositiveSuccessFlow();
+
+ publishServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_MOVED_PERMANENTLY));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_succeeds()
+ throws Exception {
+ setConditionsForPositiveSuccessFlow();
+
+ publishServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_MOVED_PERMANENTLY));
+ }
+
+ private void setConditionsForPositiveSuccessFlow() throws Exception {
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "nodes", new String[1], true);
+ FieldUtils.writeDeclaredField(publishServlet, "next_node", 0, true);
+ FieldUtils.writeDeclaredField(publishServlet, "provstring", "", true);
+ FieldUtils.writeDeclaredField(publishServlet, "irt", new ArrayList<IngressRoute>(), true);
+ FieldUtils.writeDeclaredStaticField(NodeClass.class, "map", new HashMap<String,String>(), true);
+ when(request.getPathInfo()).thenReturn("/123/fileName.txt");
+ PowerMockito.mockStatic(Feed.class);
+ PowerMockito.when(Feed.isFeedValid(anyInt())).thenReturn(true);
+ setPokerToNotCreateTimersWhenDeleteFeedIsCalled();
+ }
+
+ private void setPokerToNotCreateTimersWhenDeleteFeedIsCalled() throws Exception {
+ Poker poker = mock(Poker.class);
+ FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);
+ when(poker.getProvisioningString()).thenReturn(buildProvisioningString());
+ }
+
+
+ private String buildProvisioningString(){
+ StringBuffer provisionString = new StringBuffer();
+ provisionString.append(START_JSON_STRING);
+ provisionString.append("'ingress':");
+ provisionString.append(START_JSON_ARRAY);
+ provisionString.append(buildIngressRoute());
+ provisionString.append(END_JSON_ARRAY);
+ provisionString.append(END_JSON_STRING);
+ return provisionString.toString();
+ }
+
+ private StringBuffer buildIngressRoute(){
+ StringBuffer provisionString = new StringBuffer();
+ provisionString.append(START_JSON_STRING);
+ provisionString.append("'seq':1");
+ provisionString.append(COMMA);
+ provisionString.append("'feedid':123");
+ provisionString.append(COMMA);
+ provisionString.append("'user':'user'");
+ provisionString.append(COMMA);
+ provisionString.append("'subnet':'127.0.0.1'");
+ provisionString.append(COMMA);
+ provisionString.append("'nodelist':-1");
+ provisionString.append(COMMA);
+ provisionString.append("'node':['1','2']");
+ provisionString.append(END_JSON_STRING);
+ return provisionString;
+ }
+
+
+}
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/RouteServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/RouteServletTest.java
new file mode 100755
index 00000000..63715804
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/RouteServletTest.java
@@ -0,0 +1,450 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+
+package org.onap.dmaap.datarouter.provisioning;
+
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.onap.dmaap.datarouter.provisioning.beans.*;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(PowerMockRunner.class)
+@SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.provisioning.beans.IngressRoute",
+ "org.onap.dmaap.datarouter.provisioning.beans.EgressRoute",
+ "org.onap.dmaap.datarouter.provisioning.beans.NodeClass",
+ "org.onap.dmaap.datarouter.provisioning.beans.NetworkRoute"})
+public class RouteServletTest extends DrServletTestBase
+{
+ private RouteServlet routeServlet;
+
+ @Mock
+ private HttpServletRequest request;
+
+ @Mock
+ private HttpServletResponse response;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ setPokerToNotCreateTimersWhenDeleteFeedIsCalled();
+ setRouteToReturnValid();
+ routeServlet = new RouteServlet();
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Is_Not_Authorized() throws Exception {
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Ingress_Route_Does_Not_Exist_In_Path() throws Exception {
+ when(request.getPathInfo()).thenReturn("/ingress/3/internal/route/");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_FeedID() throws Exception {
+ when(request.getPathInfo()).thenReturn("/ingress/feedID/internal/route/");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_Sequence_Number() throws Exception {
+ when(request.getPathInfo()).thenReturn("/ingress/feedID/");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Ingress_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
+ when(request.getPathInfo()).thenReturn("/ingress/");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Egress_Route_Does_Not_Exist_In_Path() throws Exception {
+ when(request.getPathInfo()).thenReturn("/egress/3");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Egress_Path_Contains_Invalid_SubID() throws Exception {
+ when(request.getPathInfo()).thenReturn("/egress/subID");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Egress_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
+ when(request.getPathInfo()).thenReturn("/egress/");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Network_Path_Contains_Invalid_Number_Of_Arguments() throws Exception {
+ when(request.getPathInfo()).thenReturn("/network/");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Deletable_Is_Null() throws Exception {
+ when(request.getPathInfo()).thenReturn("/route/");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+
+ @Override
+ protected boolean doDelete(Deleteable bean) {
+ return true;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Fails() throws Exception {
+ when(request.getPathInfo()).thenReturn("/network/subID/route");
+ PowerMockito.mockStatic(NodeClass.class);
+ PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+
+ @Override
+ protected boolean doDelete(Deleteable bean) {
+ return false;
+ }
+ };
+ routeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Is_Not_Authorized() throws Exception {
+ routeServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Path_Does_Not_Start_With_Valid_Route() throws Exception {
+ when(request.getPathInfo()).thenReturn("/route/");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Path_Equals_Ingress_And_Get_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/ingress/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Path_Equals_Egress_And_Get_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/egress/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Ingress_Path_Equals_Network_And_Get_Succeeds() throws Exception {
+ when(request.getPathInfo()).thenReturn("/network/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Is_Not_Authorized() throws Exception {
+ routeServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Contains_Bad_URL() throws Exception {
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Is_Not_Authorized() throws Exception {
+ routeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Ingress_Path_Starts_With_Ingress_And_Contains_Invalid_Arguments() throws Exception {
+ when(request.getPathInfo()).thenReturn("/ingress/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ when(request.getParameter("feed")).thenReturn("3");
+ when(request.getParameter("user")).thenReturn(null);
+ when(request.getParameter("subnet")).thenReturn(null);
+ when(request.getParameter("nodepatt")).thenReturn(null);
+ when(request.getParameter("seq")).thenReturn(null);
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Egress_And_EgressRoute_Already_Exists() throws Exception {
+ when(request.getPathInfo()).thenReturn("/egress/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ when(request.getParameter("sub")).thenReturn("3");
+ EgressRoute e = mock(EgressRoute.class);
+ PowerMockito.when(EgressRoute.getEgressRoute(anyInt())).thenReturn(e);
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Egress_And_Contains_Invalid_Arguments() throws Exception {
+ when(request.getPathInfo()).thenReturn("/egress/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ when(request.getParameter("sub")).thenReturn("3");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Network_And_Is_Missing_Arguments() throws Exception {
+ when(request.getPathInfo()).thenReturn("/network/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Path_Starts_With_Network_And_Route_Already_Exists() throws Exception {
+ when(request.getPathInfo()).thenReturn("/network/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ when(request.getParameter("from")).thenReturn("stub_from");
+ when(request.getParameter("to")).thenReturn("stub_to");
+ when(request.getParameter("via")).thenReturn("stub_via");
+ PowerMockito.mockStatic(NodeClass.class);
+ PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
+ SortedSet<NetworkRoute> networkSet = new TreeSet();
+ networkSet.add(mock(NetworkRoute.class));
+ PowerMockito.when(NetworkRoute.getAllNetworkRoutes()).thenReturn(networkSet);
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Path_URL_Is_Null() throws Exception {
+ when(request.getPathInfo()).thenReturn("/route/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ when(request.getParameter("from")).thenReturn("stub_from");
+ when(request.getParameter("to")).thenReturn("stub_to");
+ when(request.getParameter("via")).thenReturn("stub_via");
+ PowerMockito.mockStatic(NodeClass.class);
+ PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+ };
+ routeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Fails() throws Exception {
+ when(request.getPathInfo()).thenReturn("/network/");
+ when(request.getRemoteAddr()).thenReturn("stub_addr");
+ when(request.getParameter("from")).thenReturn("stub_from");
+ when(request.getParameter("to")).thenReturn("stub_to");
+ when(request.getParameter("via")).thenReturn("stub_via");
+ PowerMockito.mockStatic(NodeClass.class);
+ PowerMockito.when(NodeClass.normalizeNodename(anyString())).thenReturn("stub_val");
+ RouteServlet routeServlet = new RouteServlet() {
+ protected boolean isAuthorizedForInternal(HttpServletRequest req) {
+ return true;
+ }
+
+ @Override
+ protected boolean doInsert(Insertable bean) {
+ return false;
+ }
+ };
+ routeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+ private void setRouteToReturnValid() throws IllegalAccessException {
+ PowerMockito.mockStatic(IngressRoute.class);
+ PowerMockito.when(IngressRoute.getIngressRoute(anyInt(), anyString(), anyString())).thenReturn(null);
+ SortedSet<IngressRoute> ingressSet = new TreeSet();
+ IngressRoute ingressRoute = mock(IngressRoute.class);
+ JSONObject joIngress = mock(JSONObject.class);
+ when(joIngress.toString()).thenReturn("{}");
+ when(ingressRoute.asJSONObject()).thenReturn(joIngress);
+ ingressSet.add(ingressRoute);
+ PowerMockito.when(IngressRoute.getAllIngressRoutes()).thenReturn(ingressSet);
+
+ PowerMockito.mockStatic(EgressRoute.class);
+ PowerMockito.when(EgressRoute.getEgressRoute(anyInt())).thenReturn(null);
+ SortedSet<EgressRoute> egressSet = new TreeSet();
+ EgressRoute egressRoute = mock(EgressRoute.class);
+ JSONObject joEgress = mock(JSONObject.class);
+ when(joEgress.toString()).thenReturn("{}");
+ when(egressRoute.asJSONObject()).thenReturn(joEgress);
+ egressSet.add(egressRoute);
+ PowerMockito.when(EgressRoute.getAllEgressRoutes()).thenReturn(egressSet);
+
+ PowerMockito.mockStatic(NetworkRoute.class);
+ SortedSet<NetworkRoute> networkSet = new TreeSet();
+ PowerMockito.when(NetworkRoute.getAllNetworkRoutes()).thenReturn(networkSet);
+
+ }
+
+ private void setPokerToNotCreateTimersWhenDeleteFeedIsCalled() throws Exception {
+ Poker poker = mock(Poker.class);
+ FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);
+ }
+}
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscribeServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscribeServletTest.java
new file mode 100644
index 00000000..c663451b
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscribeServletTest.java
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.dmaap.datarouter.provisioning;
+
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.jetbrains.annotations.NotNull;
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.onap.dmaap.datarouter.authz.AuthorizationResponse;
+import org.onap.dmaap.datarouter.authz.Authorizer;
+import org.onap.dmaap.datarouter.provisioning.beans.Feed;
+import org.onap.dmaap.datarouter.provisioning.beans.Insertable;
+import org.onap.dmaap.datarouter.provisioning.beans.Subscription;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Mockito.*;
+import static org.onap.dmaap.datarouter.provisioning.BaseServlet.BEHALF_HEADER;
+
+
+@RunWith(PowerMockRunner.class)
+@SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.provisioning.beans.Feed", "org.onap.dmaap.datarouter.provisioning.beans.Subscription"})
+public class SubscribeServletTest extends DrServletTestBase {
+ private static SubscribeServlet subscribeServlet;
+
+ @Mock
+ private HttpServletRequest request;
+ @Mock
+ private HttpServletResponse response;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ subscribeServlet = new SubscribeServlet();
+ setAuthoriserToReturnRequestIsAuthorized();
+ setPokerToNotCreateTimersWhenDeleteFeedIsCalled();
+ setupValidAuthorisedRequest();
+ setUpValidSecurityOnHttpRequest();
+ setUpValidContentHeadersAndJSONOnHttpRequest();
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_SC_METHOD_NOT_ALLOWED_Response_Is_Generated() throws Exception {
+ subscribeServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_METHOD_NOT_ALLOWED), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Is_Not_Secure_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ subscribeServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_BEHALF_HEADER_Is_Not_Set_In_Request_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ setBehalfHeader(null);
+ subscribeServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Path_Header_Is_Not_Set_In_Request_With_Valid_Path_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn(null);
+ subscribeServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Feed_Id_Is_Invalid_Then_Not_Found_Response_Is_Generated() throws Exception {
+ setFeedToReturnInvalidFeedIdSupplied();
+ subscribeServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ setAuthoriserToReturnRequestNotAuthorized();
+ subscribeServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_Succeeds() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ PowerMockito.mockStatic(Subscription.class);
+ List<String> list = new ArrayList<String>();
+ list.add("{}");
+ PowerMockito.when(Subscription.getSubscriptionUrlList(anyInt())).thenReturn(list);
+ subscribeServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_SC_METHOD_NOT_ALLOWED_Response_Is_Generated() throws Exception {
+ subscribeServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_METHOD_NOT_ALLOWED), argThat(notNullValue(String.class)));
+ }
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Is_Not_Secure_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_BEHALF_HEADER_Is_Not_Set_In_Request_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ setBehalfHeader(null);
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Path_Header_Is_Not_Set_In_Request_With_Valid_Path_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn(null);
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Feed_Id_Is_Invalid_Then_Not_Found_Response_Is_Generated() throws Exception {
+ setFeedToReturnInvalidFeedIdSupplied();
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ setAuthoriserToReturnRequestNotAuthorized();
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Content_Header_Is_Not_Supported_Type_Then_Unsupported_Media_Type_Response_Is_Generated() throws Exception {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.feed; version=1.1");
+ when(request.getContentType()).thenReturn("stub_contentType");
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Request_Contains_Badly_Formed_JSON_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Active_Feeds_Equals_Max_Feeds_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "maxSubs", 0, true);
+ SubscribeServlet subscribeServlet = new SubscribeServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ return new JSONObject();
+ }
+ };
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_CONFLICT), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_POST_Fails_Bad_Request_Response_Is_Generated() throws Exception {
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionMatching(mock(Subscription.class))).thenReturn(null);
+ JSONObject JSObject = buildRequestJsonObject();
+ SubscribeServlet subscribeServlet = new SubscribeServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("metadataOnly", true);
+ jo.put("suspend", true);
+ jo.put("delivery", JSObject);
+ jo.put("sync", false);
+ return jo;
+ }
+
+ @Override
+ protected boolean doInsert(Insertable bean) {
+ return false;
+ }
+ };
+ subscribeServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Change_On_Feeds_Succeeds_A_STATUS_OK_Response_Is_Generated() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionMatching(mock(Subscription.class))).thenReturn(null);
+ JSONObject JSObject = buildRequestJsonObject();
+ SubscribeServlet subscribeServlet = new SubscribeServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("metadataOnly", true);
+ jo.put("suspend", true);
+ jo.put("delivery", JSObject);
+ jo.put("sync", true);
+ return jo;
+ }
+
+ @Override
+ protected boolean doInsert(Insertable bean) {
+ return true;
+ }
+ };
+ subscribeServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_CREATED));
+ }
+
+
+ @NotNull
+ private JSONObject buildRequestJsonObject() {
+ JSONObject JSObject = new JSONObject();
+ JSObject.put("url", "https://stub_address");
+ JSObject.put("use100", "true");
+ JSObject.put("password", "stub_password");
+ JSObject.put("user", "stub_user");
+ return JSObject;
+ }
+
+ private void setUpValidSecurityOnHttpRequest() throws Exception {
+ when(request.isSecure()).thenReturn(true);
+ Set<String> authAddressesAndNetworks = new HashSet<String>();
+ authAddressesAndNetworks.add(("127.0.0.1"));
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authorizedAddressesAndNetworks", authAddressesAndNetworks, true);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", false, true);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "maxSubs", 1, true);
+ }
+
+ private void setBehalfHeader(String headerValue) {
+ when(request.getHeader(BEHALF_HEADER)).thenReturn(headerValue);
+ }
+
+ private void setValidPathInfoInHttpHeader() {
+ when(request.getPathInfo()).thenReturn("/123");
+ }
+
+ private void setFeedToReturnInvalidFeedIdSupplied() {
+ PowerMockito.mockStatic(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(null);
+ }
+
+ private void setFeedToReturnValidFeedForSuppliedId() {
+ PowerMockito.mockStatic(Feed.class);
+ Feed feed = mock(Feed.class);
+ PowerMockito.when(Feed.getFeedById(anyInt())).thenReturn(feed);
+ when(feed.isDeleted()).thenReturn(false);
+ when(feed.asJSONObject(true)).thenReturn(mock(JSONObject.class));
+ when(feed.getPublisher()).thenReturn("Stub_Value");
+ when(feed.getName()).thenReturn("stub_name");
+ when(feed.getVersion()).thenReturn("1.0");
+ when(feed.asLimitedJSONObject()).thenReturn(mock(JSONObject.class));
+ }
+
+ private void setAuthoriserToReturnRequestNotAuthorized() throws IllegalAccessException {
+ AuthorizationResponse authResponse = mock(AuthorizationResponse.class);
+ Authorizer authorizer = mock(Authorizer.class);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authz", authorizer, true);
+ when(authorizer.decide(request)).thenReturn(authResponse);
+ when(authResponse.isAuthorized()).thenReturn(false);
+ }
+
+ private void setAuthoriserToReturnRequestIsAuthorized() throws IllegalAccessException {
+ AuthorizationResponse authResponse = mock(AuthorizationResponse.class);
+ Authorizer authorizer = mock(Authorizer.class);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authz", authorizer, true);
+ when(authorizer.decide(request)).thenReturn(authResponse);
+ when(authResponse.isAuthorized()).thenReturn(true);
+ }
+
+ private void setPokerToNotCreateTimersWhenDeleteFeedIsCalled() throws Exception {
+ Poker poker = mock(Poker.class);
+ FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);
+ }
+
+ private void setupValidAuthorisedRequest() throws Exception {
+ setUpValidSecurityOnHttpRequest();
+ setBehalfHeader("Stub_Value");
+ setValidPathInfoInHttpHeader();
+ setFeedToReturnValidFeedForSuppliedId();
+ }
+
+ private void setUpValidContentHeadersAndJSONOnHttpRequest() {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription; version=1.0");
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn("stub_subjectGroup");
+
+ }
+}
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java
new file mode 100644
index 00000000..b42e3a76
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java
@@ -0,0 +1,484 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.dmaap.datarouter.provisioning;
+
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.jetbrains.annotations.NotNull;
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.onap.dmaap.datarouter.authz.AuthorizationResponse;
+import org.onap.dmaap.datarouter.authz.Authorizer;
+import org.onap.dmaap.datarouter.provisioning.beans.Deleteable;
+import org.onap.dmaap.datarouter.provisioning.beans.Subscription;
+import org.onap.dmaap.datarouter.provisioning.beans.Updateable;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Mockito.*;
+import static org.onap.dmaap.datarouter.provisioning.BaseServlet.BEHALF_HEADER;
+
+
+@RunWith(PowerMockRunner.class)
+@SuppressStaticInitializationFor("org.onap.dmaap.datarouter.provisioning.beans.Subscription")
+public class SubscriptionServletTest extends DrServletTestBase {
+ private SubscriptionServlet subscriptionServlet;
+
+ @Mock
+ private HttpServletRequest request;
+ @Mock
+ private HttpServletResponse response;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ subscriptionServlet = new SubscriptionServlet();
+ setAuthoriserToReturnRequestIsAuthorized();
+ setPokerToNotCreateTimersWhenDeleteSubscriptionIsCalled();
+ setupValidAuthorisedRequest();
+ setUpValidSecurityOnHttpRequest();
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_SC_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ subscriptionServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_BEHALF_HEADER_Is_Not_Set_In_Request_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ setBehalfHeader(null);
+ subscriptionServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Path_Header_Is_Not_Set_In_Request_With_Valid_Path_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn(null);
+ subscriptionServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Subscription_Id_Is_Invalid_Then_Not_Found_Response_Is_Generated() throws Exception {
+ setSubscriptionToReturnInvalidSubscriptionIdSupplied();
+ subscriptionServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ setAuthoriserToReturnRequestNotAuthorized();
+ subscriptionServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Delete_On_Database_Fails_An_Internal_Server_Error_Is_Reported() throws Exception {
+ SubscriptionServlet subscriptionServlet = new SubscriptionServlet(){
+ public boolean doDelete(Deleteable deletable){
+ return false;
+ }
+ };
+ subscriptionServlet.doDelete(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_DELETE_And_Delete_On_Database_Succeeds_A_NO_CONTENT_Response_Is_Generated() throws Exception {
+ SubscriptionServlet subscriptionServlet = new SubscriptionServlet(){
+ public boolean doDelete(Deleteable deletable){
+ return true;
+ }
+ };
+ subscriptionServlet.doDelete(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_NO_CONTENT));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Is_Not_Secure_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ subscriptionServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_BEHALF_HEADER_Is_Not_Set_In_Request_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ setBehalfHeader(null);
+ subscriptionServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Path_Header_Is_Not_Set_In_Request_With_Valid_Path_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn(null);
+ subscriptionServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Subscription_Id_Is_Invalid_Then_Not_Found_Response_Is_Generated() throws Exception {
+ setSubscriptionToReturnInvalidSubscriptionIdSupplied();
+ subscriptionServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ setAuthoriserToReturnRequestNotAuthorized();
+ subscriptionServlet.doGet(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_GET_And_Request_Succeeds() throws Exception {
+ JSONObject JSObject = buildRequestJsonObject();
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("metadataOnly", true);
+ jo.put("suspend", true);
+ jo.put("delivery", JSObject);
+ jo.put("sync", true);
+ Subscription sub = new Subscription(jo);
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(sub);
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ subscriptionServlet.doGet(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Is_Not_Secure_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_BEHALF_HEADER_Is_Not_Set_In_Request_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ setBehalfHeader(null);
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Path_Header_Is_Not_Set_In_Request_With_Valid_Path_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn(null);
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Subscription_Id_Is_Invalid_Then_Not_Found_Response_Is_Generated() throws Exception {
+ setSubscriptionToReturnInvalidSubscriptionIdSupplied();
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ setAuthoriserToReturnRequestNotAuthorized();
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Content_Header_Is_Not_Supported_Type_Then_Unsupported_Media_Type_Response_Is_Generated() throws Exception {
+ when(request.getContentType()).thenReturn("stub_ContentType");
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Request_Contains_Badly_Formed_JSON_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription; version=1.0");
+ ServletInputStream inStream = mock(ServletInputStream.class);
+ when(request.getInputStream()).thenReturn(inStream);
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Subscription_Object_Is_Invalid_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription; version=1.0");
+ SubscriptionServlet subscriptionServlet = new SubscriptionServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ return jo;
+ }
+ };
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Subscriber_Modified_By_Different_Creator() throws Exception {
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn(null);
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription; version=1.0");
+ JSONObject JSObject = buildRequestJsonObject();
+ SubscriptionServlet subscriptionServlet = new SubscriptionServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("metadataOnly", true);
+ jo.put("suspend", true);
+ jo.put("delivery", JSObject);
+ jo.put("sync", true);
+ return jo;
+ }
+ };
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Update_Fails() throws Exception {
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn("stub_subjectGroup");
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription; version=1.0");
+ JSONObject JSObject = buildRequestJsonObject();
+ SubscriptionServlet subscriptionServlet = new SubscriptionServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("metadataOnly", true);
+ jo.put("suspend", true);
+ jo.put("delivery", JSObject);
+ jo.put("sync", true);
+ return jo;
+ }
+
+ @Override
+ protected boolean doUpdate(Updateable bean) {
+ return false;
+ }
+ };
+ subscriptionServlet.doPut(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_PUT_And_Update_Succeeds() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn("stub_subjectGroup");
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription; version=1.0");
+ JSONObject JSObject = buildRequestJsonObject();
+ SubscriptionServlet subscriptionServlet = new SubscriptionServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("metadataOnly", true);
+ jo.put("suspend", true);
+ jo.put("delivery", JSObject);
+ jo.put("sync", true);
+ return jo;
+ }
+
+ @Override
+ protected boolean doUpdate(Updateable bean) {
+ return true;
+ }
+ };
+ subscriptionServlet.doPut(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_OK));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Is_Not_Secure_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.isSecure()).thenReturn(false);
+ subscriptionServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_BEHALF_HEADER_Is_Not_Set_In_Request_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ setBehalfHeader(null);
+ subscriptionServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Path_Header_Is_Not_Set_In_Request_With_Valid_Path_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getPathInfo()).thenReturn(null);
+ subscriptionServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Subscription_Id_Is_Invalid_Then_Not_Found_Response_Is_Generated() throws Exception {
+ setSubscriptionToReturnInvalidSubscriptionIdSupplied();
+ subscriptionServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Content_Header_Is_Not_Supported_Type_Then_Unsupported_Media_Type_Response_Is_Generated() throws Exception {
+ when(request.getContentType()).thenReturn("stub_ContentType");
+ subscriptionServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception {
+ when(request.getHeader(anyString())).thenReturn("application/vnd.att-dr.subscription-control");
+ setAuthoriserToReturnRequestNotAuthorized();
+ subscriptionServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Request_Contains_Badly_Formed_JSON_Then_Bad_Request_Response_Is_Generated() throws Exception {
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription-control; version=1.0");
+ ServletInputStream inStream = mock(ServletInputStream.class);
+ when(request.getInputStream()).thenReturn(inStream);
+ subscriptionServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Post_Fails() throws Exception {
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn("stub_subjectGroup");
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription-control; version=1.0");
+ JSONObject JSObject = buildRequestJsonObject();
+ SubscriptionServlet subscriptionServlet = new SubscriptionServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("metadataOnly", true);
+ jo.put("suspend", true);
+ jo.put("delivery", JSObject);
+ return jo;
+ }
+ };
+ subscriptionServlet.doPost(request, response);
+ verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class)));
+ }
+
+ @Test
+ public void Given_Request_Is_HTTP_POST_And_Post_Succeeds() throws Exception {
+ ServletOutputStream outStream = mock(ServletOutputStream.class);
+ when(response.getOutputStream()).thenReturn(outStream);
+ when(request.getHeader("X-ATT-DR-ON-BEHALF-OF-GROUP")).thenReturn("stub_subjectGroup");
+ when(request.getHeader("Content-Type")).thenReturn("application/vnd.att-dr.subscription-control; version=1.0");
+ JSONObject JSObject = buildRequestJsonObject();
+ SubscriptionServlet subscriptionServlet = new SubscriptionServlet() {
+ protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject jo = new JSONObject();
+ jo.put("name", "stub_name");
+ jo.put("version", "2.0");
+ jo.put("metadataOnly", true);
+ jo.put("suspend", true);
+ jo.put("delivery", JSObject);
+ jo.put("failed", false);
+ return jo;
+ }
+ };
+ subscriptionServlet.doPost(request, response);
+ verify(response).setStatus(eq(HttpServletResponse.SC_ACCEPTED));
+ }
+
+ @NotNull
+ private JSONObject buildRequestJsonObject() {
+ JSONObject JSObject = new JSONObject();
+ JSObject.put("url", "https://stub_address");
+ JSObject.put("use100", "true");
+ JSObject.put("password", "stub_password");
+ JSObject.put("user", "stub_user");
+ return JSObject;
+ }
+
+ private void setUpValidSecurityOnHttpRequest() throws Exception {
+ when(request.isSecure()).thenReturn(true);
+ Set<String> authAddressesAndNetworks = new HashSet<String>();
+ authAddressesAndNetworks.add(("127.0.0.1"));
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authorizedAddressesAndNetworks", authAddressesAndNetworks, true);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", false, true);
+ }
+
+ private void setBehalfHeader(String headerValue) {
+ when(request.getHeader(BEHALF_HEADER)).thenReturn(headerValue);
+ }
+
+ private void setValidPathInfoInHttpHeader() {
+ when(request.getPathInfo()).thenReturn("/123");
+ }
+
+ private void setSubscriptionToReturnInvalidSubscriptionIdSupplied() {
+ PowerMockito.mockStatic(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(null);
+ }
+
+ private void setSubscriptionToReturnValidSubscriptionForSuppliedId() {
+ PowerMockito.mockStatic(Subscription.class);
+ Subscription subscription = mock(Subscription.class);
+ PowerMockito.when(Subscription.getSubscriptionById(anyInt())).thenReturn(subscription);
+ when(subscription.getSubscriber()).thenReturn("Stub_Value");
+ when(subscription.asJSONObject()).thenReturn(mock(JSONObject.class));
+ }
+
+ private void setAuthoriserToReturnRequestNotAuthorized() throws IllegalAccessException {
+ AuthorizationResponse authResponse = mock(AuthorizationResponse.class);
+ Authorizer authorizer = mock(Authorizer.class);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authz", authorizer, true);
+ when(authorizer.decide(request)).thenReturn(authResponse);
+ when(authResponse.isAuthorized()).thenReturn(false);
+ }
+
+ private void setAuthoriserToReturnRequestIsAuthorized() throws IllegalAccessException {
+ AuthorizationResponse authResponse = mock(AuthorizationResponse.class);
+ Authorizer authorizer = mock(Authorizer.class);
+ FieldUtils.writeDeclaredStaticField(BaseServlet.class, "authz", authorizer, true);
+ when(authorizer.decide(request)).thenReturn(authResponse);
+ when(authResponse.isAuthorized()).thenReturn(true);
+ }
+
+ private void setPokerToNotCreateTimersWhenDeleteSubscriptionIsCalled() throws Exception {
+ Poker poker = mock(Poker.class);
+ FieldUtils.writeDeclaredStaticField(Poker.class, "poker", poker, true);
+ }
+
+ private void setupValidAuthorisedRequest() throws Exception {
+ setUpValidSecurityOnHttpRequest();
+ setBehalfHeader("Stub_Value");
+ setValidPathInfoInHttpHeader();
+ setSubscriptionToReturnValidSubscriptionForSuppliedId();
+ }
+} \ No newline at end of file