1 package org.openecomp.sdc.be.servlets;
3 import com.fasterxml.jackson.databind.DeserializationFeature;
5 import org.glassfish.grizzly.http.util.HttpStatus;
6 import org.glassfish.jersey.client.ClientConfig;
7 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
8 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
9 import org.glassfish.jersey.server.ResourceConfig;
10 import org.junit.Before;
11 import org.junit.BeforeClass;
12 import org.junit.Test;
13 import org.mockito.Mockito;
14 import org.openecomp.sdc.be.components.impl.PolicyBusinessLogic;
15 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
16 import org.openecomp.sdc.be.dao.api.ActionStatus;
17 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
18 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
19 import org.openecomp.sdc.be.impl.ComponentsUtils;
20 import org.openecomp.sdc.be.impl.ServletUtils;
21 import org.openecomp.sdc.be.model.PolicyDefinition;
22 import org.openecomp.sdc.be.model.PolicyTargetDTO;
23 import org.openecomp.sdc.be.model.PropertyDefinition;
24 import org.openecomp.sdc.common.api.Constants;
25 import org.openecomp.sdc.exception.ResponseFormat;
27 import javax.ws.rs.client.ClientBuilder;
28 import javax.ws.rs.client.Entity;
29 import javax.ws.rs.client.Invocation;
30 import javax.ws.rs.core.GenericType;
31 import javax.ws.rs.core.MediaType;
32 import javax.ws.rs.core.Response;
33 import java.util.Arrays;
34 import java.util.Collections;
35 import java.util.List;
37 import static org.assertj.core.api.Assertions.assertThat;
38 import static org.junit.Assert.assertEquals;
39 import static org.junit.Assert.assertTrue;
40 import static org.mockito.ArgumentMatchers.*;
41 import static org.mockito.Mockito.when;
43 public class PolicyServletTest extends JerseySpringBaseTest{
45 private final static String USER_ID = "jh0003";
46 private static final String COMPONENT_ID = "componentId";
47 private static PolicyBusinessLogic businessLogic;
48 private static ComponentsUtils componentsUtils;
49 private static ServletUtils servletUtils;
50 private static ResponseFormat responseFormat;
52 private static String validComponentType = "resources";
53 private static String unsupportedComponentType = "unsupported";
54 private static String componentId = "componentId";
55 private static String policyTypeName = "policyTypeName";
57 private static final String PROPS_URL = "/v1/catalog/{componentType}/{serviceId}/policies/{policyId}/properties";
58 private static final String SERVICE_ID = "serviceId";
59 private static final String POLICY_ID = "policyId";
61 private static final String UPDATE_TARGETS_URL = "/v1/catalog/{componentType}/{componentId}/policies/{policyId}/targets";
64 public static void initClass() {
66 when(servletUtils.getComponentsUtils()).thenReturn(componentsUtils);
70 public void beforeMethod() {
71 final JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
72 setClient(ClientBuilder.newClient(new ClientConfig(jacksonJsonProvider)));
76 public void testGetPolicySuccess(){
77 String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + POLICY_ID;
78 Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(new PolicyDefinition());
79 when(businessLogic.getPolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), eq(POLICY_ID), eq(USER_ID))).thenReturn(successResponse);
80 when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200.getStatusCode());
81 when(componentsUtils.getResponseFormat(ActionStatus.OK)).thenReturn(responseFormat);
82 Response response = target()
84 .request(MediaType.APPLICATION_JSON)
85 .header("USER_ID", USER_ID)
88 assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
92 public void testGetPolicyFailure(){
93 String path = "/v1/catalog/" + unsupportedComponentType + "/" + componentId + "/policies/" + POLICY_ID;
94 when(responseFormat.getStatus()).thenReturn(HttpStatus.BAD_REQUEST_400.getStatusCode());
95 when(componentsUtils.getResponseFormat(eq(ActionStatus.UNSUPPORTED_ERROR), eq(unsupportedComponentType))).thenReturn(responseFormat);
96 Response response = target()
98 .request(MediaType.APPLICATION_JSON)
99 .header("USER_ID", USER_ID)
100 .get(Response.class);
102 assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400.getStatusCode());
106 public void testPostPolicySuccess(){
107 String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + policyTypeName;
108 PolicyDefinition policy = new PolicyDefinition();
109 Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(policy);
110 when(businessLogic.createPolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), eq(policyTypeName), eq(USER_ID), eq(true))).thenReturn(successResponse);
111 when(responseFormat.getStatus()).thenReturn(HttpStatus.CREATED_201.getStatusCode());
112 when(componentsUtils.getResponseFormat(ActionStatus.CREATED)).thenReturn(responseFormat);
113 Response response = target()
115 .request(MediaType.APPLICATION_JSON)
116 .header("USER_ID", USER_ID)
117 .post(Entity.entity(policy, MediaType.APPLICATION_JSON),Response.class);
119 assertEquals(response.getStatus(), HttpStatus.CREATED_201.getStatusCode());
123 public void testPostPolicyFailure(){
124 String path = "/v1/catalog/" + unsupportedComponentType + "/" + componentId + "/policies/" + policyTypeName;
125 PolicyDefinition policy = new PolicyDefinition();
126 when(responseFormat.getStatus()).thenReturn(HttpStatus.BAD_REQUEST_400.getStatusCode());
127 when(componentsUtils.getResponseFormat(eq(ActionStatus.UNSUPPORTED_ERROR), eq(unsupportedComponentType))).thenReturn(responseFormat);
128 Response response = target()
130 .request(MediaType.APPLICATION_JSON)
131 .header("USER_ID", USER_ID)
132 .post(Entity.entity(policy, MediaType.APPLICATION_JSON),Response.class);
134 assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400.getStatusCode());
138 public void testPutPolicySuccess(){
139 String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + POLICY_ID;
140 PolicyDefinition policy = new PolicyDefinition();
141 policy.setUniqueId(POLICY_ID);
142 Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(policy);
143 when(businessLogic.updatePolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), any(PolicyDefinition.class), eq(USER_ID), eq(true))).thenReturn(successResponse);
144 when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200.getStatusCode());
145 when(componentsUtils.getResponseFormat(ActionStatus.OK)).thenReturn(responseFormat);
146 Response response = target()
148 .request(MediaType.APPLICATION_JSON)
149 .header("USER_ID", USER_ID)
150 .put(Entity.entity(policy, MediaType.APPLICATION_JSON),Response.class);
152 assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
156 public void testPutPolicyFailure(){
157 String path = "/v1/catalog/" + unsupportedComponentType + "/" + componentId + "/policies/" + POLICY_ID;
158 PolicyDefinition policy = new PolicyDefinition();
159 when(responseFormat.getStatus()).thenReturn(HttpStatus.BAD_REQUEST_400.getStatusCode());
160 when(componentsUtils.getResponseFormat(eq(ActionStatus.UNSUPPORTED_ERROR), eq(unsupportedComponentType))).thenReturn(responseFormat);
161 Response response = target()
163 .request(MediaType.APPLICATION_JSON)
164 .header("USER_ID", USER_ID)
165 .put(Entity.entity(policy, MediaType.APPLICATION_JSON),Response.class);
167 assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400.getStatusCode());
171 public void testDeletePolicySuccess(){
172 String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + POLICY_ID;
173 Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(new PolicyDefinition());
174 when(businessLogic.deletePolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), eq(POLICY_ID), eq(USER_ID), eq(true))).thenReturn(successResponse);
175 when(responseFormat.getStatus()).thenReturn(HttpStatus.NO_CONTENT_204.getStatusCode());
176 when(componentsUtils.getResponseFormat(ActionStatus.NO_CONTENT)).thenReturn(responseFormat);
177 Response response = target()
179 .request(MediaType.APPLICATION_JSON)
180 .header("USER_ID", USER_ID)
181 .delete(Response.class);
183 assertEquals(response.getStatus(), HttpStatus.NO_CONTENT_204.getStatusCode());
187 public void testDeletePolicyFailure(){
188 String path = "/v1/catalog/" + unsupportedComponentType + "/" + componentId + "/policies/" + POLICY_ID;
189 when(responseFormat.getStatus()).thenReturn(HttpStatus.BAD_REQUEST_400.getStatusCode());
190 when(componentsUtils.getResponseFormat(eq(ActionStatus.UNSUPPORTED_ERROR), eq(unsupportedComponentType))).thenReturn(responseFormat);
191 Response response = target()
193 .request(MediaType.APPLICATION_JSON)
194 .header("USER_ID", USER_ID)
195 .delete(Response.class);
197 assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400.getStatusCode());
201 public void getPolicyProperties_operationForbidden() {
202 when(businessLogic.getPolicyProperties(ComponentTypeEnum.SERVICE, SERVICE_ID, POLICY_ID, USER_ID)).thenReturn(Either.right(new ResponseFormat(Response.Status.FORBIDDEN.getStatusCode())));
203 Response response = buildGetPropertiesRequest().get();
204 assertThat(response.getStatus()).isEqualTo(Response.Status.FORBIDDEN.getStatusCode());
208 public void getPolicyProperties_unHandledError_returnGeneralError() {
209 when(businessLogic.getPolicyProperties(ComponentTypeEnum.SERVICE, SERVICE_ID, POLICY_ID, USER_ID)).thenThrow(new RuntimeException());
210 Response response = buildGetPropertiesRequest().get();
211 assertThat(response.getStatus()).isEqualTo(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
215 public void getPolicyProperties_wrongComponentType() {
216 Response response = buildGetPropertiesRequest("unknownType").get();
217 assertThat(response.getStatus()).isEqualTo(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
218 //verifyZeroInteractions(businessLogic);
222 public void getPolicyProperties() {
223 List<PropertyDataDefinition> properties = getPropertiesList();
224 when(businessLogic.getPolicyProperties(ComponentTypeEnum.SERVICE, SERVICE_ID, POLICY_ID, USER_ID)).thenReturn(Either.left(properties));
225 List<PropertyDataDefinition> policyProps = buildGetPropertiesRequest().get(new GenericType<List<PropertyDataDefinition>>() {});
226 assertThat(policyProps)
227 .usingElementComparatorOnFields("uniqueId")
228 .containsExactlyInAnyOrder(properties.get(0), properties.get(1));
232 public void updatePolicyPropertiesSuccess() {
233 List<PropertyDataDefinition> properties = getPropertiesList();
234 when(businessLogic.updatePolicyProperties(eq(ComponentTypeEnum.SERVICE), eq(SERVICE_ID), eq(POLICY_ID), any(PropertyDataDefinition[].class), eq(USER_ID), eq(true))).thenReturn(Either.left(properties));
235 List<PropertyDataDefinition> policyProps = buildUpdatePropertiesRequest(ComponentTypeEnum.SERVICE_PARAM_NAME, properties).invoke(new GenericType<List<PropertyDataDefinition>>() {});
236 assertThat(policyProps)
237 .usingElementComparatorOnFields("uniqueId")
238 .containsExactlyInAnyOrder(properties.get(0), properties.get(1));
242 public void updatePolicyTargetsSuccess() {
243 List<PolicyTargetDTO> targets = getTargetDTOList();
244 when(businessLogic.updatePolicyTargets(eq(ComponentTypeEnum.RESOURCE), eq(COMPONENT_ID), eq(POLICY_ID), anyMap(), eq(USER_ID))).thenReturn(Either.left(new PolicyDefinition()));
245 Response policyTargets = buildUpdateTargetsRequest(ComponentTypeEnum.RESOURCE_PARAM_NAME, targets).invoke();
246 assertThat(policyTargets.getStatus()).isEqualTo(200);
250 public void updatePolicyPropertiesFailure() {
251 List<PropertyDataDefinition> properties = getPropertiesList();
252 ResponseFormat notFoundResponse = new ResponseFormat(HttpStatus.NOT_FOUND_404.getStatusCode());
253 when(businessLogic.updatePolicyProperties(eq(ComponentTypeEnum.SERVICE), eq(SERVICE_ID), eq(POLICY_ID), any(PropertyDataDefinition[].class), eq(USER_ID), eq(true))).thenReturn(Either.right(notFoundResponse));
254 Response policyProps = buildUpdatePropertiesRequest(ComponentTypeEnum.SERVICE_PARAM_NAME, properties).invoke();
255 assertEquals(HttpStatus.NOT_FOUND_404.getStatusCode(), policyProps.getStatus());
258 private List<PropertyDataDefinition> getPropertiesList() {
259 PropertyDefinition prop1 = new PropertyDataDefinitionBuilder()
260 .setUniqueId("prop1")
263 PropertyDefinition prop2 = new PropertyDataDefinitionBuilder()
264 .setUniqueId("prop2")
266 return Arrays.asList(prop1, prop2);
269 private List<PolicyTargetDTO> getTargetDTOList() {
270 PolicyTargetDTO target1 = new PolicyTargetDTO();
271 target1.setUniqueIds(Collections.singletonList("uniqueId"));
272 target1.setType("GROUPS");
274 PolicyTargetDTO target2 = new PolicyTargetDTO();
275 target2.setUniqueIds(Collections.singletonList("uniqueId"));
276 target2.setType("component_Instances");
278 return Arrays.asList(target1, target2);
281 private Invocation.Builder buildGetPropertiesRequest(String componentType) {
282 return target(PROPS_URL)
283 .resolveTemplate("componentType", componentType)
284 .resolveTemplate("serviceId", SERVICE_ID)
285 .resolveTemplate("policyId", POLICY_ID)
286 .request(MediaType.APPLICATION_JSON)
287 .header(Constants.USER_ID_HEADER, USER_ID);
291 private Invocation buildUpdatePropertiesRequest(String componentType, List<PropertyDataDefinition> properties) {
292 return target(PROPS_URL)
293 .resolveTemplate("componentType", componentType)
294 .resolveTemplate("serviceId", SERVICE_ID)
295 .resolveTemplate("policyId", POLICY_ID)
296 .request(MediaType.APPLICATION_JSON)
297 .header(Constants.USER_ID_HEADER, USER_ID)
298 .buildPut(Entity.entity(properties, MediaType.APPLICATION_JSON));
301 private Invocation buildUpdateTargetsRequest(String componentType, List<PolicyTargetDTO> targets) {
302 return target(UPDATE_TARGETS_URL)
303 .resolveTemplate("componentType", componentType)
304 .resolveTemplate("componentId", COMPONENT_ID)
305 .resolveTemplate("policyId", POLICY_ID)
306 .request(MediaType.APPLICATION_JSON)
307 .header(Constants.USER_ID_HEADER, USER_ID)
308 .buildPost(Entity.entity(targets, MediaType.APPLICATION_JSON));
311 private Invocation.Builder buildGetPropertiesRequest() {
312 return target(PROPS_URL)
313 .resolveTemplate("componentType", "services")
314 .resolveTemplate("serviceId", SERVICE_ID)
315 .resolveTemplate("policyId", POLICY_ID)
316 .request(MediaType.APPLICATION_JSON)
317 .header(Constants.USER_ID_HEADER, USER_ID);
321 protected ResourceConfig configure() {
322 return super.configure()
323 .register(new PolicyServlet(businessLogic, servletUtils, null, componentsUtils));
326 private static void createMocks() {
327 businessLogic = Mockito.mock(PolicyBusinessLogic.class);
328 componentsUtils = Mockito.mock(ComponentsUtils.class);
329 servletUtils = Mockito.mock(ServletUtils.class);
330 responseFormat = Mockito.mock(ResponseFormat.class);