Few JUnit additions for PAP-REST
[policy/engine.git] / ONAP-PAP-REST / src / test / java / org / onap / policy / pap / xacml / rest / handler / DeleteHandlerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP-PAP-REST
4  * ================================================================================
5  * Copyright (C) 2018-2019 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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20
21 package org.onap.policy.pap.xacml.rest.handler;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.mockito.Matchers.any;
28 import static org.mockito.Matchers.eq;
29 import static org.mockito.Mockito.when;
30
31 import com.mockrunner.mock.web.MockHttpServletRequest;
32 import com.mockrunner.mock.web.MockHttpServletResponse;
33 import java.io.IOException;
34 import java.util.ArrayList;
35 import java.util.Collections;
36 import java.util.List;
37 import org.hibernate.Session;
38 import org.hibernate.SessionFactory;
39 import org.hibernate.Transaction;
40 import org.junit.Before;
41 import org.junit.Test;
42 import org.junit.runner.RunWith;
43 import org.mockito.Mockito;
44 import org.onap.policy.common.logging.OnapLoggingContext;
45 import org.onap.policy.pap.xacml.rest.XACMLPapServlet;
46 import org.onap.policy.pap.xacml.rest.daoimpl.CommonClassDaoImpl;
47 import org.onap.policy.pap.xacml.rest.elk.client.PolicyElasticSearchController;
48 import org.onap.policy.rest.dao.CommonClassDao;
49 import org.onap.policy.rest.jpa.PolicyEntity;
50 import org.onap.policy.rest.jpa.PolicyVersion;
51 import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
52 import org.onap.policy.xacml.std.pap.StdEngine;
53 import org.powermock.api.mockito.PowerMockito;
54 import org.powermock.core.classloader.annotations.PrepareForTest;
55 import org.powermock.modules.junit4.PowerMockRunner;
56
57 @RunWith(PowerMockRunner.class)
58 public class DeleteHandlerTest {
59     @Before
60     public void setUp() {
61         SessionFactory mockedSessionFactory = Mockito.mock(SessionFactory.class);
62         Session mockedSession = Mockito.mock(Session.class);
63         Transaction mockedTransaction = Mockito.mock(Transaction.class);
64         Mockito.when(mockedSessionFactory.openSession()).thenReturn(mockedSession);
65         Mockito.when(mockedSession.beginTransaction()).thenReturn(mockedTransaction);
66         CommonClassDaoImpl.setSessionfactory(mockedSessionFactory);
67         new DeleteHandler(new CommonClassDaoImpl());
68     }
69
70     @Test
71     public void testGets() {
72         DeleteHandler handler = new DeleteHandler();
73         assertNotNull(handler);
74         assertEquals(handler.preSafetyCheck(null), true);
75         assertNull(handler.getDeletedGroup());
76     }
77
78     @Test
79     public void testGetInstance() {
80         DeleteHandler handler = DeleteHandler.getInstance();
81         assertNotNull(handler);
82     }
83
84     @PrepareForTest({DeleteHandler.class, XACMLPapServlet.class})
85     @Test
86     public void testDeletes() throws Exception {
87         // Mock request
88         DeleteHandler handler = new DeleteHandler();
89         MockHttpServletRequest request = new MockHttpServletRequest();
90         request.setBodyContent("{\n\"PAPPolicyType\": \"StdPAPPolicy\"\n}\n");
91
92         // Mock servlet
93         PAPPolicyEngine engine = Mockito.mock(StdEngine.class);
94         PowerMockito.mockStatic(XACMLPapServlet.class);
95         when(XACMLPapServlet.getPAPEngine()).thenReturn(engine);
96         when(engine.getGroup(any())).thenReturn(null);
97
98         // Mock elastic search
99         PolicyElasticSearchController controller = Mockito.mock(PolicyElasticSearchController.class);
100         PowerMockito.whenNew(PolicyElasticSearchController.class).withNoArguments().thenReturn(controller);
101
102         // Test deletion from PAP
103         MockHttpServletResponse response = new MockHttpServletResponse();
104         handler.doApiDeleteFromPap(request, response);
105
106         // Test deletion from PDP
107         OnapLoggingContext loggingContext = Mockito.mock(OnapLoggingContext.class);
108         handler.doApiDeleteFromPdp(request, response, loggingContext);
109
110         // Test delete entity
111         PolicyEntity policyEntity = new PolicyEntity();
112         policyEntity.setPolicyName("testVal");
113         String result = DeleteHandler.deletePolicyEntityData(policyEntity);
114         assertEquals(result, "success");
115
116         // Test check entity
117         List<?> peResult = Collections.emptyList();
118         assertEquals(DeleteHandler.checkPolicyGroupEntity(peResult), false);
119     }
120
121     @Test
122     public void testDoDeletePap() throws IOException {
123         CommonClassDao dao = Mockito.mock(CommonClassDao.class);
124         DeleteHandler handler = new DeleteHandler(dao);
125
126         // Request #1
127         MockHttpServletRequest request = new MockHttpServletRequest();
128         request.setBodyContent(
129             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Config_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
130         MockHttpServletResponse response = new MockHttpServletResponse();
131         handler.doApiDeleteFromPap(request, response);
132         assertTrue(response.containsHeader("error"));
133
134         // Request #2
135         request.setBodyContent(
136             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Action_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
137         handler.doApiDeleteFromPap(request, response);
138         assertTrue(response.containsHeader("error"));
139
140         // Request #3
141         request.setBodyContent(
142             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Decision_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
143         handler.doApiDeleteFromPap(request, response);
144         assertTrue(response.containsHeader("error"));
145
146         // Request #4
147         request.setBodyContent(
148             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Bar_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
149         handler.doApiDeleteFromPap(request, response);
150         assertTrue(response.containsHeader("error"));
151
152         // Request #5
153         request.setBodyContent(
154             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Config_name.1.xml\", \"deleteCondition\": \"Current Version\"\n}\n");
155         handler.doApiDeleteFromPap(request, response);
156         assertTrue(response.containsHeader("error"));
157
158         // Request #6
159         request.setBodyContent(
160             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Action_name.1.xml\", \"deleteCondition\": \"Current Version\"\n}\n");
161         handler.doApiDeleteFromPap(request, response);
162         assertTrue(response.containsHeader("error"));
163
164         // Request #7
165         request.setBodyContent(
166             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Decision_name.1.xml\", \"deleteCondition\": \"Current Version\"\n}\n");
167         handler.doApiDeleteFromPap(request, response);
168         assertTrue(response.containsHeader("error"));
169
170         // Mock dao
171         List<PolicyVersion> pePVs = new ArrayList<PolicyVersion>();
172         PolicyVersion pv = new PolicyVersion();
173         pePVs.add(pv);
174         List<Object> peObjs = new ArrayList<Object>(pePVs);
175         List<PolicyEntity> peEnts = new ArrayList<PolicyEntity>();
176         PolicyEntity peEnt = new PolicyEntity();
177         peEnts.add(peEnt);
178         List<Object> peEntObjs = new ArrayList<Object>(peEnts);
179         Mockito.when(dao.getDataByQuery(eq("Select p from PolicyVersion p where p.policyName=:pname"), any()))
180             .thenReturn(peObjs);
181         Mockito.when(
182             dao.getDataByQuery(eq("SELECT p FROM PolicyEntity p WHERE p.policyName=:pName and p.scope=:pScope"), any()))
183             .thenReturn(peEntObjs);
184
185         // Request #8
186         request.setBodyContent(
187             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Decision_name.1.xml\", \"deleteCondition\": \"Current Version\"\n}\n");
188         handler.doApiDeleteFromPap(request, response);
189         assertTrue(response.containsHeader("error"));
190
191         // Request #9
192         request.setBodyContent(
193             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Decision_name.1.xml\", \"deleteCondition\": \"Current Version\"\n, \"deleteCondition\": \"All Versions\"}\n");
194         handler.doApiDeleteFromPap(request, response);
195         assertTrue(response.containsHeader("error"));
196     }
197
198     @Test(expected = NullPointerException.class)
199     public void testDoDeletePdp() throws IOException {
200         CommonClassDao dao = Mockito.mock(CommonClassDao.class);
201         DeleteHandler handler = new DeleteHandler(dao);
202         OnapLoggingContext loggingContext = new OnapLoggingContext();
203
204         // Mock request
205         MockHttpServletRequest request = new MockHttpServletRequest();
206         request.setBodyContent(
207             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Config_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
208         MockHttpServletResponse response = new MockHttpServletResponse();
209
210         handler.doApiDeleteFromPdp(request, response, loggingContext);
211     }
212 }