diff options
Diffstat (limited to 'datarouter-node')
3 files changed, 580 insertions, 0 deletions
diff --git a/datarouter-node/pom.xml b/datarouter-node/pom.xml index 6cc396a1..61e95400 100755 --- a/datarouter-node/pom.xml +++ b/datarouter-node/pom.xml @@ -186,6 +186,35 @@ <version>1.2.17</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.10</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>1.10.19</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-module-junit4</artifactId> + <version>1.6.4</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-api-mockito</artifactId> + <version>1.6.4</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>3.0</version> + </dependency> </dependencies> <profiles> <profile> diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigTest.java new file mode 100755 index 00000000..6350e640 --- /dev/null +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigTest.java @@ -0,0 +1,254 @@ +/******************************************************************************* + * ============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.node; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; + +@RunWith(PowerMockRunner.class) +public class NodeConfigTest { + + private static NodeConfig nodeConfig; + + @BeforeClass + public static void setUp() throws IOException{ + ProvData provData = setUpProvData(); + nodeConfig = new NodeConfig(provData, "Name", "spool/dir", 80, "Key"); + } + + @Test + public void Given_Feed_Does_Not_Exist_Then_Is_Publish_Permitted_Returns_Not_Null() { + String permitted = nodeConfig.isPublishPermitted("2", "user", "0.0.0.0"); + Assert.assertEquals("Feed does not exist", permitted); + } + + @Test + public void Given_Feed_But_User_Not_Permitted_Then_Is_Publish_Permitted_Returns_Not_Null() { + String permitted = nodeConfig.isPublishPermitted("1", "user", "0.0.0.0"); + Assert.assertEquals("Publisher not permitted for this feed", permitted); + } + + @Test + public void Given_Feed_But_Ip_Does_Not_Match_Then_Is_Publish_Permitted_Returns_Not_Null() { + String permitted = nodeConfig.isPublishPermitted("1", "Basic dXNlcjE6cGFzc3dvcmQx", "0.0.0.0"); + Assert.assertEquals("Publisher not permitted for this feed", permitted); + } + + @Test + public void Given_Feed_Then_Is_Publish_Permitted_Returns_Null() { + String permitted = nodeConfig.isPublishPermitted("1", "Basic dXNlcjE6cGFzc3dvcmQx", "172.0.0.1"); + Assert.assertNull(permitted); + } + + @Test + public void Given_SubId_Then_Get_Feed_Id_Returns_Correct_Id() { + String feedId = nodeConfig.getFeedId("1"); + Assert.assertEquals("1", feedId); + } + + @Test + public void Given_Incorrect_SubId_Then_Get_Feed_Id_Returns_Null() { + String feedId = nodeConfig.getFeedId("2"); + Assert.assertNull(feedId); + } + + @Test + public void Given_SubId_Then_Get_Spool_Dir_Returns_Correct_Id() { + String spoolDir = nodeConfig.getSpoolDir("1"); + Assert.assertEquals("spool/dir/s/0/1", spoolDir); + } + + @Test + public void Given_Incorrect_SubId_Then_Get_Spool_Dir_Returns_Null() { + String spoolDir = nodeConfig.getSpoolDir("2"); + Assert.assertNull(spoolDir); + } + + @Test + public void Given_Feed_And_Incorrect_Credentials_Then_Get_Auth_User_Returns_Null() { + String authUser = nodeConfig.getAuthUser("1", "incorrect"); + Assert.assertNull(authUser); + } + + @Test + public void Given_Feed_And_Correct_Credentials_Then_Get_Auth_User_Returns_User() { + String authUser = nodeConfig.getAuthUser("1", "Basic dXNlcjE6cGFzc3dvcmQx"); + Assert.assertEquals("user1", authUser); + } + + @Test + public void Given_Correct_Feed_Then_Get_Ingress_Node_Returns_Node() { + String node = nodeConfig.getIngressNode("1", "user1", "172.0.0.1"); + Assert.assertEquals("172.0.0.4", node); + } + + @Test + public void Given_Correct_Feed_Then_Get_Targets_Returns_Correct_Dest_Info() { + Target[] targets = nodeConfig.getTargets("1"); + Assert.assertEquals("1", targets[0].getDestInfo().getSubId()); + Assert.assertEquals("spool/dir/s/0/1", targets[0].getDestInfo().getSpool()); + } + + @Test(expected = ArrayIndexOutOfBoundsException.class) + public void Given_Null_Feed_Then_Get_Targets_Returns_Empty_Array() { + Target[] targets = nodeConfig.getTargets(null); + targets[0].getDestInfo(); + } + + @Test(expected = ArrayIndexOutOfBoundsException.class) + public void Given_Incorrect_Feed_Then_Get_Targets_Returns_Empty_Array() { + Target[] targets = nodeConfig.getTargets("2"); + targets[0].getDestInfo(); + } + + @Test + public void Given_Same_Ip_Then_Is_Another_Node_Returns_False() { + Boolean isAnotherNode = nodeConfig.isAnotherNode("Basic MTcyLjAuMC40OmtCTmhkWVFvbzhXNUphZ2g4T1N4Zmp6Mzl1ND0=", "172.0.0.1"); + Assert.assertFalse(isAnotherNode); + } + + @Test + public void Given_Different_Ip_Then_Is_Another_Node_Returns_True() { + Boolean isAnotherNode = nodeConfig.isAnotherNode("Basic MTcyLjAuMC40OmtCTmhkWVFvbzhXNUphZ2g4T1N4Zmp6Mzl1ND0=", "172.0.0.4"); + Assert.assertTrue(isAnotherNode); + } + + @Test + public void Given_Param_Name_Then_Get_Prov_Param_Returns_Parameter() { + String paramValue = nodeConfig.getProvParam("DELIVERY_MAX_AGE"); + Assert.assertEquals("86400", paramValue); + } + + @Test + public void Validate_Get_All_Dests_Returns_Dest_Info() { + DestInfo[] destInfo = nodeConfig.getAllDests(); + Assert.assertEquals("n:172.0.0.4", destInfo[0].getName()); + } + + @Test + public void Validate_Get_MyAuth_Returns_Correct_Auth() { + String auth = nodeConfig.getMyAuth(); + Assert.assertEquals("Basic TmFtZTp6Z04wMFkyS3gybFppbXltNy94ZDhuMkdEYjA9", auth); + } + + private static ProvData setUpProvData() throws IOException { + JSONObject provData = new JSONObject(); + createValidFeed(provData); + createValidSubscription(provData); + createValidParameters(provData); + createValidIngressValues(provData); + createValidEgressValues(provData); + createValidRoutingValues(provData); + Reader reader = new StringReader(provData.toString()); + return new ProvData(reader); + } + + private static void createValidFeed(JSONObject provData) { + JSONArray feeds = new JSONArray(); + JSONObject feed = new JSONObject(); + JSONObject auth = new JSONObject(); + JSONArray endpointIds = new JSONArray(); + JSONArray endpointAddrs = new JSONArray(); + JSONObject endpointId = new JSONObject(); + feed.put("feedid", "1"); + feed.put("name", "Feed1"); + feed.put("version", "m1.0"); + feed.put("suspend", false); + feed.put("deleted", false); + endpointId.put("id", "user1"); + endpointId.put("password", "password1"); + endpointIds.put(endpointId); + auth.put("endpoint_ids", endpointIds); + endpointAddrs.put("172.0.0.1"); + auth.put("endpoint_addrs", endpointAddrs); + feed.put("authorization", auth); + feeds.put(feed); + provData.put("feeds", feeds); + } + + private static void createValidSubscription(JSONObject provData) { + JSONArray subscriptions = new JSONArray(); + JSONObject subscription = new JSONObject(); + JSONObject delivery = new JSONObject(); + subscription.put("subid", "1"); + subscription.put("feedid", "1"); + subscription.put("suspend", false); + subscription.put("metadataOnly", false); + delivery.put("url", "https://172.0.0.2"); + delivery.put("user", "user1"); + delivery.put("password", "password1"); + delivery.put("use100", true); + subscription.put("delivery", delivery); + subscriptions.put(subscription); + provData.put("subscriptions", subscriptions); + } + + private static void createValidParameters(JSONObject provData) { + JSONObject parameters = new JSONObject(); + JSONArray nodes = new JSONArray(); + parameters.put("PROV_NAME", "prov.datarouternew.com"); + parameters.put("DELIVERY_INIT_RETRY_INTERVAL", "10"); + parameters.put("DELIVERY_MAX_AGE", "86400"); + parameters.put("PROV_DOMAIN", ""); + nodes.put("172.0.0.4"); + parameters.put("NODES", nodes); + provData.put("parameters", parameters); + } + + private static void createValidIngressValues(JSONObject provData) { + JSONArray ingresses = new JSONArray(); + JSONObject ingress = new JSONObject(); + ingress.put("feedid", "1"); + ingress.put("subnet", ""); + ingress.put("user", ""); + ingress.put("node", "172.0.0.4"); + ingresses.put(ingress); + provData.put("ingress", ingresses); + } + + private static void createValidEgressValues(JSONObject provData) { + JSONObject egress = new JSONObject(); + egress.put("subid", "1"); + egress.put("nodeid", "172.0.0.4"); + provData.put("egress", egress); + } + + private static void createValidRoutingValues(JSONObject provData) { + JSONArray routings = new JSONArray(); + JSONObject routing = new JSONObject(); + routing.put("from", "prov.datarouternew.com"); + routing.put("to", "172.0.0.4"); + routing.put("via", "172.100.0.1"); + routings.put(routing); + provData.put("routing", routings); + } +} diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java new file mode 100644 index 00000000..048c44fa --- /dev/null +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java @@ -0,0 +1,297 @@ +/******************************************************************************* + * ============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.node; + +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.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.*; + +import static org.hamcrest.Matchers.notNullValue; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.*; + +@RunWith(PowerMockRunner.class) +@SuppressStaticInitializationFor("org.onap.dmaap.datarouter.node.NodeConfigManager") +public class NodeServletTest { + + private NodeServlet nodeServlet; + + @Mock + private HttpServletRequest request; + + @Mock + private HttpServletResponse response; + + @Before + public void setUp() throws Exception{ + nodeServlet = new NodeServlet(); + setBehalfHeader("Stub_Value"); + when(request.getPathInfo()).thenReturn("2"); + when(request.isSecure()).thenReturn(true); + setUpConfig(); + setUpNodeMainDelivery(); + when(request.getHeader("Authorization")).thenReturn("User1"); + when(request.getHeader("X-ATT-DR-PUBLISH-ID")).thenReturn("User1"); + } + + @Test + public void Given_Request_Is_HTTP_GET_And_Config_Is_Down_Then_Service_Unavailable_Response_Is_Generated() throws Exception { + setNodeConfigManagerIsConfiguredToReturnFalse(); + nodeServlet.doGet(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE)); + } + + @Test + public void Given_Request_Is_HTTP_GET_And_Endpoint_Is_Internal_FetchProv_Then_No_Content_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/internal/fetchProv"); + nodeServlet.doGet(request, response); + verify(response).setStatus(eq(HttpServletResponse.SC_NO_CONTENT)); + } + + @Test + public void Given_Request_Is_HTTP_GET_And_Endpoint_Is_ResetSubscription_Then_No_Content_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/internal/resetSubscription/1"); + nodeServlet.doGet(request, response); + verify(response).setStatus(eq(HttpServletResponse.SC_NO_CONTENT)); + } + + @Test + public void Given_Request_Is_HTTP_GET_And_Endpoint_Is_Internal_Logs_And_File_Does_Not_Exist_Then_Not_Found_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/internal/logs/fileName"); + when(request.getRemoteAddr()).thenReturn("135.207.136.128"); + nodeServlet.doGet(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND)); + } + + @Test + public void Given_Request_Is_HTTP_GET_And_Endpoint_Is_Internal_Rtt_And_Error_Connecting_To_Socket_Occurs_Then_Ok_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/internal/rtt/0.0.0.0"); + when(request.getRemoteAddr()).thenReturn("135.207.136.128"); + ServletOutputStream outStream = mock(ServletOutputStream.class); + when(response.getOutputStream()).thenReturn(outStream); + nodeServlet.doGet(request, response); + verify(response).setStatus(eq(200)); + } + + @Test + public void Given_Request_Is_HTTP_GET_To_Invalid_Endpoint_Then_Not_Found_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/incorrect"); + nodeServlet.doGet(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND)); + } + + @Test + public void Given_Request_Is_HTTP_PUT_And_Config_Is_Down_Then_Service_Unavailable_Response_Is_Generated() throws Exception { + setNodeConfigManagerIsConfiguredToReturnFalse(); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_SERVICE_UNAVAILABLE)); + } + + @Test + public void Given_Request_Is_HTTP_PUT_And_Endpoint_Is_Incorrect_Then_Not_Found_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/incorrect/"); + nodeServlet.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_Secure_Then_Forbidden_Response_Is_Generated() throws Exception { + when(request.isSecure()).thenReturn(false); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class))); + } + + @Test + public void Given_Request_Is_HTTP_PUT_And_File_Id_Is_Null_Then_Not_Found_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn(null); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class))); + } + + @Test + public void Given_Request_Is_HTTP_PUT_And_Authorization_Is_Null_Then_Forbidden_Response_Is_Generated() throws Exception { + when(request.getHeader("Authorization")).thenReturn(null); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class))); + } + + @Test + public void Given_Request_Is_HTTP_PUT_And_Publish_Does_Not_Include_File_Id_Then_Not_Found_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/publish/"); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class))); + } + + @Test + public void Given_Request_Is_HTTP_PUT_And_Publish_Not_Permitted_Then_Forbidden_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/publish/1/fileName"); + setNodeConfigManagerIsPublishPermittedToReturnAReason(); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), argThat(notNullValue(String.class))); + } + + @Test + public void Given_Request_Is_HTTP_PUT_And_Internal_Publish_On_Same_Node_Then_Forbidden_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/internal/publish/1/fileName"); + setNodeConfigManagerIsPublishPermittedToReturnAReason(); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN)); + } + + @Test + public void Given_Request_Is_HTTP_PUT_And_Internal_Publish_But_Invalid_File_Id_Then_Not_Found_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/internal/publish/1/"); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_NOT_FOUND), argThat(notNullValue(String.class))); + } + + @Test + public void Given_Request_Is_HTTP_PUT_On_Publish_And_Ingress_Node_Is_Provided_Then_Request_Is_Redirected() throws Exception { + when(request.getPathInfo()).thenReturn("/publish/1/fileName"); + setNodeConfigManagerToAllowRedirectOnIngressNode(); + nodeServlet.doPut(request, response); + verify(response).sendRedirect(anyString()); + } + + @Test + public void Given_Request_Is_HTTP_PUT_On_Publish_With_Meta_Data_Too_Long_Then_Bad_Request_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/publish/1/fileName"); + setHeadersForValidRequest(true); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class))); + } + + @Test + public void Given_Request_Is_HTTP_PUT_On_Publish_With_Meta_Data_Malformed_Then_Bad_Request_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/publish/1/fileName"); + setHeadersForValidRequest(false); + nodeServlet.doPut(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class))); + } + + @Test + public void Given_Request_Is_HTTP_DELETE_On_Publish_With_Meta_Data_Malformed_Then_Bad_Request_Response_Is_Generated() throws Exception { + when(request.getPathInfo()).thenReturn("/publish/1/fileName"); + setHeadersForValidRequest(false); + nodeServlet.doDelete(request, response); + verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), argThat(notNullValue(String.class))); + } + + + private void setBehalfHeader(String headerValue) { + when(request.getHeader("X-ATT-DR-ON-BEHALF-OF")).thenReturn(headerValue); + } + + private void setUpConfig() throws IllegalAccessException{ + NodeConfigManager config = mock(NodeConfigManager.class); + PowerMockito.mockStatic(NodeConfigManager.class); + when(config.isShutdown()).thenReturn(false); + when(config.isConfigured()).thenReturn(true); + when(config.getSpoolDir()).thenReturn("spool/dir"); + when(config.getLogDir()).thenReturn("log/dir"); + when(config.getPublishId()).thenReturn("User1"); + when(config.isAnotherNode(anyString(), anyString())).thenReturn(true); + when(config.getEventLogInterval()).thenReturn("40"); + FieldUtils.writeDeclaredStaticField(NodeServlet.class, "config", config, true); + FieldUtils.writeDeclaredStaticField(NodeMain.class, "nodeConfigManager", config, true); + PowerMockito.when(NodeConfigManager.getInstance()).thenReturn(config); + } + + + private void setUpNodeMainDelivery() throws IllegalAccessException{ + Delivery delivery = mock(Delivery.class); + doNothing().when(delivery).resetQueue(anyObject()); + FieldUtils.writeDeclaredStaticField(NodeMain.class, "delivery", delivery, true); + } + + private void setNodeConfigManagerIsConfiguredToReturnFalse() throws IllegalAccessException{ + NodeConfigManager config = mock(NodeConfigManager.class); + when(config.isConfigured()).thenReturn(false); + FieldUtils.writeDeclaredStaticField(NodeServlet.class, "config", config, true); + } + + private void setNodeConfigManagerIsPublishPermittedToReturnAReason() throws IllegalAccessException{ + NodeConfigManager config = mock(NodeConfigManager.class); + when(config.isShutdown()).thenReturn(false); + when(config.isConfigured()).thenReturn(true); + when(config.getSpoolDir()).thenReturn("spool/dir"); + when(config.getLogDir()).thenReturn("log/dir"); + when(config.isPublishPermitted(anyString(), anyString(), anyString())).thenReturn("Not Permitted"); + when(config.isAnotherNode(anyString(), anyString())).thenReturn(false); + FieldUtils.writeDeclaredStaticField(NodeServlet.class, "config", config, true); + } + + private void setNodeConfigManagerToAllowRedirectOnIngressNode() throws IllegalAccessException{ + NodeConfigManager config = mock(NodeConfigManager.class); + when(config.isShutdown()).thenReturn(false); + when(config.isConfigured()).thenReturn(true); + when(config.getSpoolDir()).thenReturn("spool/dir"); + when(config.getLogDir()).thenReturn("log/dir"); + when(config.getPublishId()).thenReturn("User1"); + when(config.isAnotherNode(anyString(), anyString())).thenReturn(true); + when(config.getAuthUser(anyString(), anyString())).thenReturn("User1"); + when(config.getIngressNode(anyString(), anyString(), anyString())).thenReturn("NewNode"); + when(config.getExtHttpsPort()).thenReturn(8080); + FieldUtils.writeDeclaredStaticField(NodeServlet.class, "config", config, true); + } + + private String createLargeMetaDataString() { + StringBuilder myString = new StringBuilder("meta"); + for (int i = 0; i <= 4098; ++i) { + myString.append('x'); + } + return myString.toString(); + } + + private void setHeadersForValidRequest(boolean isMetaTooLong) { + String metaDataString; + if (isMetaTooLong) { + metaDataString = createLargeMetaDataString(); + } else { + metaDataString = "?#@><"; + } + List<String> headers = new ArrayList<>(); + headers.add("Content-Type"); + headers.add("X-ATT-DR-ON-BEHALF-OF"); + headers.add("X-ATT-DR-META"); + Enumeration<String> headerNames = Collections.enumeration(headers); + when(request.getHeaderNames()).thenReturn(headerNames); + Enumeration<String> contentTypeHeader = Collections.enumeration(Arrays.asList("text/plain")); + Enumeration<String> behalfHeader = Collections.enumeration(Arrays.asList("User1")); + Enumeration<String> metaDataHeader = Collections.enumeration(Arrays.asList(metaDataString)); + when(request.getHeaders("Content-Type")).thenReturn(contentTypeHeader); + when(request.getHeaders("X-ATT-DR-ON-BEHALF-OF")).thenReturn(behalfHeader); + when(request.getHeaders("X-ATT-DR-META")).thenReturn(metaDataHeader); + } +} |