2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.policy.pap.xacml.rest;
23 import static org.junit.Assert.assertTrue;
24 import static org.junit.Assert.fail;
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.List;
30 import java.util.Properties;
32 import javax.persistence.EntityManager;
33 import javax.persistence.EntityManagerFactory;
34 import javax.persistence.EntityTransaction;
35 import javax.persistence.Persistence;
36 import javax.servlet.ServletConfig;
37 import javax.servlet.ServletOutputStream;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
41 import junit.framework.TestCase;
43 import org.apache.commons.logging.Log;
44 import org.apache.commons.logging.LogFactory;
46 import org.junit.Before;
47 import org.junit.Test;
48 import org.mockito.Mockito;
49 import org.openecomp.policy.pap.xacml.rest.XACMLPapServlet;
50 import org.openecomp.policy.rest.XACMLRestProperties;
51 import org.springframework.mock.web.MockHttpServletResponse;
52 import org.springframework.mock.web.MockServletConfig;
54 import org.openecomp.policy.common.ia.IntegrityAudit;
55 import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
56 import org.openecomp.policy.common.logging.flexlogger.Logger;
58 public class XACMLPapServletTest extends TestCase{
59 private static Logger logger = FlexLogger.getLogger(XACMLPapServletTest.class);
61 private List<String> headers = new ArrayList<String>();
63 private HttpServletRequest httpServletRequest;
64 private HttpServletResponse httpServletResponse;
65 private ServletOutputStream mockOutput;
66 private ServletConfig servletConfig;
67 private XACMLPapServlet papServlet;
72 public void setUp() throws IOException {
73 httpServletRequest = Mockito.mock(HttpServletRequest.class);
74 Mockito.when(httpServletRequest.getMethod()).thenReturn("POST");
75 Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn(null);
76 Mockito.when(httpServletRequest.getHeaderNames()).thenReturn(Collections.enumeration(headers));
77 Mockito.when(httpServletRequest.getAttributeNames()).thenReturn(Collections.enumeration(headers));
80 mockOutput = Mockito.mock(ServletOutputStream.class);
82 //when(httpServletRequest.getPathInfo()).thenReturn("/lineup/world.xml");
83 //HttpServletResponse httpResponse = new HttpServletResponse();
84 httpServletResponse = Mockito.mock(MockHttpServletResponse.class);
86 Mockito.when(httpServletResponse.getOutputStream()).thenReturn(mockOutput);
89 //when(httpServletResponse.getOutputStream()).thenReturn(servletOutputStream);
90 servletConfig = Mockito.mock(MockServletConfig.class);
91 //Mockito.when(servletConfig.getInitParameterNames()).thenReturn(Collections.enumeration(headers));
93 Mockito.when(servletConfig.getInitParameterNames()).thenReturn(Collections.enumeration(headers));
94 papServlet = new XACMLPapServlet();
96 Mockito.when(servletConfig.getInitParameter("XACML_PROPERTIES_NAME")).thenReturn("xacml.pap.test.properties");
98 System.setProperty("xacml.PAP.papEngineFactory", "org.openecomp.policy.xacml.std.pap.StdEngineFactory");
99 System.setProperty("xacml.pap.pdps", "pdps");
100 System.setProperty("xacml.rest.pap.url", "http://localhost:8070/pap/");
101 System.setProperty("xacml.rest.pap.initiate.pdp", "false");
102 System.setProperty("xacml.rest.pdp.idfile", "testpdp.properties");
103 System.setProperty("xacml.rest.pep.idfile", "client.properties");
104 System.setProperty("javax.persistence.jdbc.driver", "org.h2.Driver");
105 System.setProperty("javax.persistence.jdbc.url", "jdbc:h2:file:./sql/xacmlTest");
106 System.setProperty("javax.persistence.jdbc.user", "sa");
107 System.setProperty("javax.persistence.jdbc.password", "");
108 System.setProperty("xacml.rest.pap.jmx.url", "service:jmx:rmi:///jndi/rmi://localhost:9990/jmxrmi");
109 System.setProperty("xacml.rest.pap.resource.name", "site_1.pap_1");
110 System.setProperty("fp_monitor_interval", "30");
111 System.setProperty("failed_counter_threshold", "3");
112 System.setProperty("test_trans_interval", "10");
113 System.setProperty("write_fpc_interval", "5");
114 System.setProperty("com.sun.management.jmxremote.port", "9999");
115 System.setProperty("dependency_groups", "site_1.logparser_1;site_1.adminconsole_1;site_1.elk_1");
116 System.setProperty("site_name", "site_1");
117 System.setProperty("node_type", "pap");
121 * This method initializes and cleans the DB so the XACMLPapServlet will be able to instantiate an
122 * IntegrityAudit object which will use the DB.
124 public void initializeDb(){
125 logger.debug("initializeDb: enter");
126 Properties cleanProperties = new Properties();
127 cleanProperties.put(XACMLRestProperties.PROP_PAP_DB_DRIVER,"org.h2.Driver");
128 cleanProperties.put(XACMLRestProperties.PROP_PAP_DB_URL, "jdbc:h2:file:./sql/xacmlTest");
129 cleanProperties.put(XACMLRestProperties.PROP_PAP_DB_USER, "sa");
130 cleanProperties.put(XACMLRestProperties.PROP_PAP_DB_PASSWORD, "");
131 EntityManagerFactory emf = Persistence.createEntityManagerFactory("testPapPU", cleanProperties);
133 EntityManager em = emf.createEntityManager();
134 // Start a transaction
135 EntityTransaction et = em.getTransaction();
140 em.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
142 // commit transaction
145 logger.debug("initializeDb: exit");
149 public void testInit() throws Exception{
150 System.setProperty("integrity_audit_period_seconds", "0");
153 papServlet.init(servletConfig);
154 IntegrityAudit ia = papServlet.getIa();
155 if(ia.isThreadInitialized()){
160 ia.stopAuditThread();
161 // Allow time for the thread to stop
163 if(!ia.isThreadInitialized()){
168 } catch (Exception e) {
169 // TODO Auto-generated catch block
174 /* public void testDoGetPapTest(){
176 Mockito.when(httpServletRequest.getRequestURI()).thenReturn("/pap/test");
177 papServlet.init(servletConfig);
178 IntegrityAudit ia = papServlet.getIa();
179 ia.stopAuditThread();
180 papServlet.doGet(httpServletRequest, httpServletResponse);
181 logger.info(httpServletResponse.getStatus());
183 //Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK);
184 }catch (Exception e){
185 logger.info("testDoGetPapTest failed with message: " + e.getMessage());
192 * Need to figure a way to get it to match any message string
193 * public void testDoGetPapTestFpcFailure(){
195 Mockito.when(httpServletRequest.getRequestURI()).thenReturn("/pap/test");
196 Mockito.when(httpServletRequest.getHeader("THIS-IS-A-TEST")).thenReturn("FPC");
197 papServlet.init(servletConfig);
198 IntegrityAudit ia = papServlet.getIa();
199 ia.stopAuditThread();
200 papServlet.doGet(httpServletRequest, httpServletResponse);
201 Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, Mockito.anyString());
202 }catch (Exception e){
203 logger.info("testDoGetPapTestFpcFailure failed with message: " + e.getMessage());
209 public void testDoGetLocal(){
211 Mockito.when(httpServletRequest.getRemoteHost()).thenReturn("localhost");
212 papServlet.init(servletConfig);
213 IntegrityAudit ia = papServlet.getIa();
214 ia.stopAuditThread();
215 papServlet.doGet(httpServletRequest, httpServletResponse);
217 logger.info(httpServletResponse.getStatus());
218 Mockito.verify(httpServletResponse).setHeader("content-type", "application/json");
219 Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK);
220 }catch (Exception e){
227 public void testDoGetNonLocal(){
228 //return non-local host remote address, which is invalid
229 Mockito.when(httpServletRequest.getRemoteHost()).thenReturn("0.0.0.0");
231 papServlet.init(servletConfig);
232 IntegrityAudit ia = papServlet.getIa();
233 ia.stopAuditThread();
234 papServlet.doGet(httpServletRequest, httpServletResponse);
235 logger.info(httpServletResponse.getStatus());
236 String message = "Unknown PDP: from 0.0.0.0 us: null";
238 Mockito.verify(httpServletResponse).sendError(401, message);
240 }catch (Exception e){
245 public void testDoGetWithGroup() throws Exception{
246 Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn("default");
247 //Mockito.when(httpServletRequest.getHeader("X-XACML-PDP-ID")).thenReturn("default");
248 papServlet.init(servletConfig);
249 IntegrityAudit ia = papServlet.getIa();
250 ia.stopAuditThread();
251 papServlet.doGet(httpServletRequest, httpServletResponse);
252 Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK);
255 public void testDoPostWithGroup(){
256 Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn("default");
257 Mockito.when(httpServletRequest.getParameter("policyId")).thenReturn("default");
259 papServlet.init(servletConfig);
260 IntegrityAudit ia = papServlet.getIa();
261 ia.stopAuditThread();
262 papServlet.doPost(httpServletRequest, httpServletResponse);
263 //Mockito.verify(httpServletResponse).sendError(500, "Policy 'default' not copied to group 'default': java.lang.NullPointerException");
264 //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");
266 }catch (Exception e){
270 //why is this test trying to send no pdp id and expecting a 200 response?
272 public void testDoPost(){
273 final ByteArrayOutputStream os = new ByteArrayOutputStream ();
274 ByteArrayOutputStream multiPartResponse = new ByteArrayOutputStream();
275 Mockito.when(httpServletRequest.getHeader("X-XACML-PDP-JMX-PORT")).thenReturn("0");
278 multiPartResponse.writeTo(os);
279 final ByteArrayInputStream is = new ByteArrayInputStream (os.toByteArray ());
280 Mockito.when(httpServletRequest.getInputStream()).thenReturn(new ServletInputStream() {
282 public int read() throws IOException {
287 papServlet.init(servletConfig);
288 IntegrityAudit ia = papServlet.getIa();
289 ia.stopAuditThread();
290 papServlet.doPost(httpServletRequest, httpServletResponse);
291 Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_OK);
292 }catch (Exception e){
298 public void testDoPostPDPId(){
299 String groupId = "newPDP";
300 Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn(groupId);
301 Mockito.when(httpServletRequest.getHeader("X-XACML-PDP-ID")).thenReturn(groupId);
303 papServlet.init(servletConfig);
304 IntegrityAudit ia = papServlet.getIa();
305 ia.stopAuditThread();
306 papServlet.doPut(httpServletRequest, httpServletResponse);
307 Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_NOT_FOUND, "Unknown groupId '" + groupId +"'");
313 public void testDoPutInvalidAdminConsoleURL(){
314 Mockito.when(httpServletRequest.getParameter("adminConsoleURL")).thenReturn("wwww.adminConsole.com");
317 papServlet.init(servletConfig);
318 IntegrityAudit ia = papServlet.getIa();
319 ia.stopAuditThread();
320 papServlet.doPut(httpServletRequest, httpServletResponse);
321 Mockito.verify(httpServletResponse).setStatus(HttpServletResponse.SC_NO_CONTENT);
322 }catch (Exception e){
327 public void testDoPutWithGroupIdAndUnimplimentedPipId(){
328 Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn("default");
329 Mockito.when(httpServletRequest.getParameter("pipId")).thenReturn("default");
331 papServlet.init(servletConfig);
332 IntegrityAudit ia = papServlet.getIa();
333 ia.stopAuditThread();
334 papServlet.doPut(httpServletRequest, httpServletResponse);
335 Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED");
336 }catch (Exception e){
341 public void testDoDeleteNoGroup(){
342 Mockito.when(httpServletRequest.getParameter("groupdId")).thenReturn(null);
345 papServlet.init(servletConfig);
346 IntegrityAudit ia = papServlet.getIa();
347 ia.stopAuditThread();
348 papServlet.doDelete(httpServletRequest, httpServletResponse);
349 Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_BAD_REQUEST, "Request does not have groupId");
350 }catch (Exception e){
355 public void testDoDeleteWithDefaultGroup(){
356 Mockito.when(httpServletRequest.getParameter("groupId")).thenReturn("default");
359 papServlet.init(servletConfig);
360 IntegrityAudit ia = papServlet.getIa();
361 ia.stopAuditThread();
362 papServlet.doDelete(httpServletRequest, httpServletResponse);
363 Mockito.verify(httpServletResponse).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"You cannot delete the default group.");