aboutsummaryrefslogtreecommitdiffstats
path: root/ECOMP-PAP-REST/src/test/java/org/openecomp/policy/pap/xacml/rest/XACMLPapServletTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'ECOMP-PAP-REST/src/test/java/org/openecomp/policy/pap/xacml/rest/XACMLPapServletTest.java')
-rw-r--r--ECOMP-PAP-REST/src/test/java/org/openecomp/policy/pap/xacml/rest/XACMLPapServletTest.java368
1 files changed, 368 insertions, 0 deletions
diff --git a/ECOMP-PAP-REST/src/test/java/org/openecomp/policy/pap/xacml/rest/XACMLPapServletTest.java b/ECOMP-PAP-REST/src/test/java/org/openecomp/policy/pap/xacml/rest/XACMLPapServletTest.java
new file mode 100644
index 000000000..da11d72ce
--- /dev/null
+++ b/ECOMP-PAP-REST/src/test/java/org/openecomp/policy/pap/xacml/rest/XACMLPapServletTest.java
@@ -0,0 +1,368 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ECOMP-PAP-REST
+ * ================================================================================
+ * Copyright (C) 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=========================================================
+ */
+
+package org.openecomp.policy.pap.xacml.rest;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.openecomp.policy.pap.xacml.rest.XACMLPapServlet;
+import org.openecomp.policy.rest.XACMLRestProperties;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.mock.web.MockServletConfig;
+
+import org.openecomp.policy.common.ia.IntegrityAudit;
+import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
+import org.openecomp.policy.common.logging.flexlogger.Logger;
+
+public class XACMLPapServletTest extends TestCase{
+ private static Logger logger = FlexLogger.getLogger(XACMLPapServletTest.class);
+
+ private List<String> headers = new ArrayList<String>();
+
+ private HttpServletRequest httpServletRequest;
+ private HttpServletResponse httpServletResponse;
+ private ServletOutputStream mockOutput;
+ private ServletConfig servletConfig;
+ private XACMLPapServlet papServlet;
+
+
+ @Before
+
+ public void setUp() throws IOException {
+ httpServletRequest = Mockito.mock(HttpServletRequest.class);
+ Mockito.when(httpServletRequest.getMethod()).thenReturn("POST");
+ Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn(null);
+ Mockito.when(httpServletRequest.getHeaderNames()).thenReturn(Collections.enumeration(headers));
+ Mockito.when(httpServletRequest.getAttributeNames()).thenReturn(Collections.enumeration(headers));
+
+
+ mockOutput = Mockito.mock(ServletOutputStream.class);
+
+ //when(httpServletRequest.getPathInfo()).thenReturn("/lineup/world.xml");
+ //HttpServletResponse httpResponse = new HttpServletResponse();
+ httpServletResponse = Mockito.mock(MockHttpServletResponse.class);
+
+ Mockito.when(httpServletResponse.getOutputStream()).thenReturn(mockOutput);
+
+
+ //when(httpServletResponse.getOutputStream()).thenReturn(servletOutputStream);
+ servletConfig = Mockito.mock(MockServletConfig.class);
+ //Mockito.when(servletConfig.getInitParameterNames()).thenReturn(Collections.enumeration(headers));
+ //servletConfig
+ Mockito.when(servletConfig.getInitParameterNames()).thenReturn(Collections.enumeration(headers));
+ papServlet = new XACMLPapServlet();
+
+ Mockito.when(servletConfig.getInitParameter("XACML_PROPERTIES_NAME")).thenReturn("xacml.pap.test.properties");
+
+ System.setProperty("xacml.PAP.papEngineFactory", "org.openecomp.policy.xacml.std.pap.StdEngineFactory");
+ System.setProperty("xacml.pap.pdps", "pdps");
+ System.setProperty("xacml.rest.pap.url", "http://localhost:8070/pap/");
+ System.setProperty("xacml.rest.pap.initiate.pdp", "false");
+ System.setProperty("xacml.rest.pdp.idfile", "testpdp.properties");
+ System.setProperty("xacml.rest.pep.idfile", "client.properties");
+ System.setProperty("javax.persistence.jdbc.driver", "org.h2.Driver");
+ System.setProperty("javax.persistence.jdbc.url", "jdbc:h2:file:./sql/xacmlTest");
+ System.setProperty("javax.persistence.jdbc.user", "sa");
+ System.setProperty("javax.persistence.jdbc.password", "");
+ System.setProperty("xacml.rest.pap.jmx.url", "service:jmx:rmi:///jndi/rmi://localhost:9990/jmxrmi");
+ System.setProperty("xacml.rest.pap.resource.name", "site_1.pap_1");
+ System.setProperty("fp_monitor_interval", "30");
+ System.setProperty("failed_counter_threshold", "3");
+ System.setProperty("test_trans_interval", "10");
+ System.setProperty("write_fpc_interval", "5");
+ System.setProperty("com.sun.management.jmxremote.port", "9999");
+ System.setProperty("dependency_groups", "site_1.logparser_1;site_1.adminconsole_1;site_1.elk_1");
+ System.setProperty("site_name", "site_1");
+ System.setProperty("node_type", "pap");
+ }
+
+ /*
+ * This method initializes and cleans the DB so the XACMLPapServlet will be able to instantiate an
+ * IntegrityAudit object which will use the DB.
+ */
+ public void initializeDb(){
+ logger.debug("initializeDb: enter");
+ Properties cleanProperties = new Properties();
+ cleanProperties.put(XACMLRestProperties.PROP_PAP_DB_DRIVER,"org.h2.Driver");
+ cleanProperties.put(XACMLRestProperties.PROP_PAP_DB_URL, "jdbc:h2:file:./sql/xacmlTest");
+ cleanProperties.put(XACMLRestProperties.PROP_PAP_DB_USER, "sa");
+ cleanProperties.put(XACMLRestProperties.PROP_PAP_DB_PASSWORD, "");
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory("testPapPU", cleanProperties);
+
+ EntityManager em = emf.createEntityManager();
+ // Start a transaction
+ EntityTransaction et = em.getTransaction();
+
+ et.begin();
+
+ // Clean up the DB
+ em.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
+
+ // commit transaction
+ et.commit();
+ em.close();
+ logger.debug("initializeDb: exit");
+ }
+
+ @Test
+ public void testInit() throws Exception{
+ System.setProperty("integrity_audit_period_seconds", "0");
+ initializeDb();
+ try {
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ if(ia.isThreadInitialized()){
+ assertTrue(true);
+ }else{
+ fail();
+ }
+ ia.stopAuditThread();
+ // Allow time for the thread to stop
+ Thread.sleep(1000);
+ if(!ia.isThreadInitialized()){
+ assertTrue(true);
+ }else{
+ fail();
+ }
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ fail();
+ }
+ }
+
+/* public void testDoGetPapTest(){
+ try{
+ Mockito.when(httpServletRequest.getRequestURI()).thenReturn("/pap/test");
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doGet(httpServletRequest, httpServletResponse);
+ logger.info(httpServletResponse.getStatus());
+
+ //Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK);
+ }catch (Exception e){
+ logger.info("testDoGetPapTest failed with message: " + e.getMessage());
+ fail();
+ }
+ assertTrue(true);
+ }*/
+
+/*
+ * Need to figure a way to get it to match any message string
+ * public void testDoGetPapTestFpcFailure(){
+ try{
+ Mockito.when(httpServletRequest.getRequestURI()).thenReturn("/pap/test");
+ Mockito.when(httpServletRequest.getHeader("THIS-IS-A-TEST")).thenReturn("FPC");
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doGet(httpServletRequest, httpServletResponse);
+ Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, Mockito.anyString());
+ }catch (Exception e){
+ logger.info("testDoGetPapTestFpcFailure failed with message: " + e.getMessage());
+ fail();
+ }
+ assertTrue(true);
+ }*/
+
+ public void testDoGetLocal(){
+ try{
+ Mockito.when(httpServletRequest.getRemoteHost()).thenReturn("localhost");
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doGet(httpServletRequest, httpServletResponse);
+
+ logger.info(httpServletResponse.getStatus());
+ Mockito.verify(httpServletResponse).setHeader("content-type", "application/json");
+ Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK);
+ }catch (Exception e){
+ fail();
+ }
+
+ assertTrue(true);
+ }
+
+ public void testDoGetNonLocal(){
+ //return non-local host remote address, which is invalid
+ Mockito.when(httpServletRequest.getRemoteHost()).thenReturn("0.0.0.0");
+ try{
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doGet(httpServletRequest, httpServletResponse);
+ logger.info(httpServletResponse.getStatus());
+ String message = "Unknown PDP: from 0.0.0.0 us: null";
+
+ Mockito.verify(httpServletResponse).sendError(401, message);
+
+ }catch (Exception e){
+ fail();
+ }
+ }
+
+ public void testDoGetWithGroup() throws Exception{
+ Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn("default");
+ //Mockito.when(httpServletRequest.getHeader("X-XACML-PDP-ID")).thenReturn("default");
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doGet(httpServletRequest, httpServletResponse);
+ Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK);
+ }
+
+ public void testDoPostWithGroup(){
+ Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn("default");
+ Mockito.when(httpServletRequest.getParameter("policyId")).thenReturn("default");
+ try{
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doPost(httpServletRequest, httpServletResponse);
+ //Mockito.verify(httpServletResponse).sendError(500, "Policy 'default' not copied to group 'default': java.lang.NullPointerException");
+ //Mockito.verify(httpServletResponse).sendError(500, "Policy 'default' not copied to group 'default': javax.persistence.PersistenceException: Group policy is being added to does not exist with id default");
+
+ }catch (Exception e){
+ fail();
+ }
+ }
+ //why is this test trying to send no pdp id and expecting a 200 response?
+ /*
+ public void testDoPost(){
+ final ByteArrayOutputStream os = new ByteArrayOutputStream ();
+ ByteArrayOutputStream multiPartResponse = new ByteArrayOutputStream();
+ Mockito.when(httpServletRequest.getHeader("X-XACML-PDP-JMX-PORT")).thenReturn("0");
+
+ try{
+ multiPartResponse.writeTo(os);
+ final ByteArrayInputStream is = new ByteArrayInputStream (os.toByteArray ());
+ Mockito.when(httpServletRequest.getInputStream()).thenReturn(new ServletInputStream() {
+ @Override
+ public int read() throws IOException {
+ return is.read();
+ }
+ });
+
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doPost(httpServletRequest, httpServletResponse);
+ Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK);
+ }catch (Exception e){
+ fail();
+ }
+ }
+ */
+
+ public void testDoPostPDPId(){
+ String groupId = "newPDP";
+ Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn(groupId);
+ Mockito.when(httpServletRequest.getHeader("X-XACML-PDP-ID")).thenReturn(groupId);
+ try{
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doPut(httpServletRequest, httpServletResponse);
+ Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_NOT_FOUND, "Unknown groupId '" + groupId +"'");
+ }catch(Exception e){
+ fail();
+ }
+ }
+
+ public void testDoPutInvalidAdminConsoleURL(){
+ Mockito.when(httpServletRequest.getParameter("adminConsoleURL")).thenReturn("wwww.adminConsole.com");
+ //204
+ try{
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doPut(httpServletRequest, httpServletResponse);
+ Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_NO_CONTENT);
+ }catch (Exception e){
+ fail();
+ }
+ }
+
+ public void testDoPutWithGroupIdAndUnimplimentedPipId(){
+ Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn("default");
+ Mockito.when(httpServletRequest.getParameter("pipId")).thenReturn("default");
+ try{
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doPut(httpServletRequest, httpServletResponse);
+ Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED");
+ }catch (Exception e){
+ fail();
+ }
+ }
+
+ public void testDoDeleteNoGroup(){
+ Mockito.when(httpServletRequest.getParameter("groupdId")).thenReturn(null);
+
+ try{
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doDelete(httpServletRequest, httpServletResponse);
+ Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_BAD_REQUEST, "Request does not have groupId");
+ }catch (Exception e){
+ fail();
+ }
+ }
+
+ public void testDoDeleteWithDefaultGroup(){
+ Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn("default");
+
+ try{
+ papServlet.init(servletConfig);
+ IntegrityAudit ia = papServlet.getIa();
+ ia.stopAuditThread();
+ papServlet.doDelete(httpServletRequest, httpServletResponse);
+ Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"You cannot delete the default group.");
+ }catch(Exception e){
+ fail();
+ }
+ }
+}