package org.openecomp.sdc.be.servlets;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+import static org.openecomp.sdc.common.api.Constants.GET_POLICY;
+
import com.fasterxml.jackson.databind.DeserializationFeature;
import fj.data.Either;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Objects;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
import org.glassfish.grizzly.http.util.HttpStatus;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
import org.glassfish.jersey.server.ResourceConfig;
+import org.json.simple.JSONObject;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.openecomp.sdc.be.components.impl.BaseBusinessLogic;
import org.openecomp.sdc.be.components.impl.PolicyBusinessLogic;
+import org.openecomp.sdc.be.components.property.PropertyDeclarationOrchestrator;
import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.impl.ServletUtils;
+import org.openecomp.sdc.be.model.ComponentInstInputsMap;
+import org.openecomp.sdc.be.model.ComponentInstancePropInput;
import org.openecomp.sdc.be.model.PolicyDefinition;
import org.openecomp.sdc.be.model.PolicyTargetDTO;
import org.openecomp.sdc.be.model.PropertyDefinition;
+import org.openecomp.sdc.be.model.Service;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
+import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.common.api.Constants;
import org.openecomp.sdc.exception.ResponseFormat;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.Invocation;
-import javax.ws.rs.core.GenericType;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.when;
-
+@RunWith(MockitoJUnitRunner.class)
public class PolicyServletTest extends JerseySpringBaseTest{
private final static String USER_ID = "jh0003";
private static PolicyBusinessLogic businessLogic;
private static ComponentsUtils componentsUtils;
private static ServletUtils servletUtils;
+ private static PropertyDeclarationOrchestrator propertyDeclarationOrchestrator;
+ private static ToscaOperationFacade toscaOperationFacade;
private static ResponseFormat responseFormat;
+ @Captor
+ private static ArgumentCaptor<PolicyDefinition> policyCaptor;
+ @Spy
+ private static BaseBusinessLogic baseBusinessLogic;
private static String validComponentType = "resources";
private static String unsupportedComponentType = "unsupported";
private static String policyTypeName = "policyTypeName";
private static final String PROPS_URL = "/v1/catalog/{componentType}/{serviceId}/policies/{policyId}/properties";
+ private static final String DECLARE_URL = "v1/catalog/{componentType}/{serviceId}/create/policies";
+ private static final String DELETE_URL = "v1/catalog/{containerComponentType}/{componentId}/policies/{policyId}";
private static final String SERVICE_ID = "serviceId";
private static final String POLICY_ID = "policyId";
+ private static final String PROP_1 = "prop1";
private static final String UPDATE_TARGETS_URL = "/v1/catalog/{componentType}/{componentId}/policies/{policyId}/targets";
Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(new PolicyDefinition());
when(businessLogic.getPolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), eq(POLICY_ID), eq(USER_ID))).thenReturn(successResponse);
when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200.getStatusCode());
- when(componentsUtils.getResponseFormat(ActionStatus.OK)).thenReturn(responseFormat);
Response response = target()
.path(path)
.request(MediaType.APPLICATION_JSON)
Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(policy);
when(businessLogic.updatePolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), any(PolicyDefinition.class), eq(USER_ID), eq(true))).thenReturn(successResponse);
when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200.getStatusCode());
- when(componentsUtils.getResponseFormat(ActionStatus.OK)).thenReturn(responseFormat);
Response response = target()
.path(path)
.request(MediaType.APPLICATION_JSON)
String path = "/v1/catalog/" + validComponentType + "/" + componentId + "/policies/" + POLICY_ID;
Either<PolicyDefinition, ResponseFormat> successResponse = Either.left(new PolicyDefinition());
when(businessLogic.deletePolicy(eq(ComponentTypeEnum.RESOURCE), eq(componentId), eq(POLICY_ID), eq(USER_ID), eq(true))).thenReturn(successResponse);
- when(responseFormat.getStatus()).thenReturn(HttpStatus.NO_CONTENT_204.getStatusCode());
- when(componentsUtils.getResponseFormat(ActionStatus.NO_CONTENT)).thenReturn(responseFormat);
+ when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200.getStatusCode());
Response response = target()
.path(path)
.request(MediaType.APPLICATION_JSON)
.header("USER_ID", USER_ID)
.delete(Response.class);
- assertEquals(response.getStatus(), HttpStatus.NO_CONTENT_204.getStatusCode());
+ assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
}
@Test
assertEquals(HttpStatus.NOT_FOUND_404.getStatusCode(), policyProps.getStatus());
}
+ @Test
+ public void testDeclarePropertyToPolicySuccess() {
+ Service service = new Service();
+ service.setUniqueId(SERVICE_ID);
+ service.addProperty(new PropertyDataDefinitionBuilder().setUniqueId(PROP_1).build());
+
+ PolicyDefinition policyDefinition = new PolicyDefinition();
+ policyDefinition.setUniqueId(UniqueIdBuilder.buildPolicyUniqueId(SERVICE_ID, PROP_1));
+
+ setMocksForPropertyDeclaration(policyDefinition);
+
+ when(componentsUtils.getResponseFormat(eq(ActionStatus.OK))).thenReturn(new ResponseFormat(HttpStatus.OK_200.getStatusCode()));
+
+ Response declareResponse = buildDeclarePropertiesRequest(PROP_1).invoke();
+ assertEquals(HttpStatus.OK_200.getStatusCode(), declareResponse.getStatus());
+ }
+
+ @Test
+ public void testUndeclarePolicySuccess() {
+ Service service = new Service();
+ service.setUniqueId(SERVICE_ID);
+ PropertyDefinition origProperty = new PropertyDataDefinitionBuilder().setUniqueId(PROP_1).build();
+
+ service.addProperty(origProperty);
+
+ PolicyDefinition policyDefinition = new PolicyDefinition();
+ policyDefinition.setUniqueId(UniqueIdBuilder.buildPolicyUniqueId(SERVICE_ID, PROP_1));
+ service.addPolicy(policyDefinition);
+
+ addGetPolicyValueToProperty(origProperty, policyDefinition);
+
+ when(businessLogic.deletePolicy(eq(ComponentTypeEnum.SERVICE), eq(SERVICE_ID), eq(policyDefinition.getUniqueId()), eq(USER_ID), eq(true))).thenReturn(Either.left(policyDefinition));
+
+ Response deleteResponse = buildDeletePolicyRequest(policyDefinition).invoke();
+ assertEquals(HttpStatus.OK_200.getStatusCode(), deleteResponse.getStatus());
+ }
+
+ private void addGetPolicyValueToProperty(PropertyDefinition propertyDefinition,
+ PolicyDefinition policyDefinition) {
+ JSONObject jobject = new JSONObject();
+ String origValue = Objects.isNull(propertyDefinition.getValue()) ? propertyDefinition.getDefaultValue() : propertyDefinition.getValue();
+ jobject.put(GET_POLICY, null);
+ propertyDefinition.setValue(jobject.toJSONString());
+
+ GetPolicyValueDataDefinition getPolicyValueDataDefinition = new GetPolicyValueDataDefinition();
+ getPolicyValueDataDefinition.setPolicyId(policyDefinition.getUniqueId());
+ getPolicyValueDataDefinition.setPropertyName(propertyDefinition.getName());
+
+ getPolicyValueDataDefinition.setOrigPropertyValue(origValue);
+
+ propertyDefinition.setGetPolicyValues(Collections.singletonList(getPolicyValueDataDefinition));
+ }
+
+ private void setMocksForPropertyDeclaration(PolicyDefinition policyDefinition) {
+ when(request.getSession()).thenReturn(session);
+ when(session.getServletContext()).thenReturn(context);
+ when(context.getAttribute(eq(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR))).thenReturn(contextWrapper);
+ when(contextWrapper.getWebAppContext(any())).thenReturn(applicationContext);
+ when(applicationContext.getBean(eq(PolicyBusinessLogic.class))).thenReturn(businessLogic);
+ when(businessLogic.declareProperties(eq(USER_ID), eq(SERVICE_ID), any(), any())).thenReturn(
+ Either.left(Collections.singletonList(policyDefinition)));
+ when(componentsUtils
+ .convertJsonToObjectUsingObjectMapper(any(), any(), eq(ComponentInstInputsMap.class), eq(
+ AuditingActionEnum.CREATE_RESOURCE), eq(ComponentTypeEnum.SERVICE)))
+ .thenReturn(Either.left(getDeclarationBodyForProperty(PROP_1)));
+ }
+
private List<PropertyDataDefinition> getPropertiesList() {
PropertyDefinition prop1 = new PropertyDataDefinitionBuilder()
.setUniqueId("prop1")
.request(MediaType.APPLICATION_JSON)
.header(Constants.USER_ID_HEADER, USER_ID);
}
+
+ private Invocation buildDeletePolicyRequest(PolicyDefinition policyDefinition) {
+ return target(DELETE_URL)
+ .resolveTemplate("containerComponentType", "services")
+ .resolveTemplate("componentId", SERVICE_ID)
+ .resolveTemplate("policyId", policyDefinition.getUniqueId())
+ .request(MediaType.APPLICATION_JSON)
+ .header(Constants.USER_ID_HEADER, USER_ID)
+ .buildDelete();
+ }
+
+ private Invocation buildDeclarePropertiesRequest(String propertyId) {
+ return target(DECLARE_URL)
+ .resolveTemplate("componentType", "services")
+ .resolveTemplate("serviceId", SERVICE_ID)
+ .request(MediaType.APPLICATION_JSON)
+ .header(Constants.USER_ID_HEADER, USER_ID)
+ .buildPost(Entity.entity(getDeclarationBodyForProperty(propertyId), MediaType.APPLICATION_JSON));
+ }
+
+ private ComponentInstInputsMap getDeclarationBodyForProperty(String propertyId) {
+ ComponentInstInputsMap componentInstInputsMap = new ComponentInstInputsMap();
+ ComponentInstancePropInput propInput = new ComponentInstancePropInput();
+ PropertyDefinition propertyDefinition = new PropertyDefinition();
+
+ propertyDefinition.setType("string");
+ propertyDefinition.setUniqueId(SERVICE_ID + "." + propertyId);
+ propInput.setInput(propertyDefinition);
+ propInput.setPropertiesName(propertyId);
+
+ componentInstInputsMap.setComponentInstancePropertiesToPolicies(new HashMap<>());
+ componentInstInputsMap.getComponentInstancePropertiesToPolicies().put("componentInstancePropertiesToPolicies", Collections.singletonList(propInput));
+
+ return componentInstInputsMap;
+ }
@Override
protected ResourceConfig configure() {
}
private static void createMocks() {
+ propertyDeclarationOrchestrator = Mockito.mock(PropertyDeclarationOrchestrator.class);
+ toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
businessLogic = Mockito.mock(PolicyBusinessLogic.class);
+ businessLogic.setPropertyDeclarationOrchestrator(propertyDeclarationOrchestrator);
+ businessLogic.setToscaOperationFacade(toscaOperationFacade);
+
+ baseBusinessLogic = Mockito.spy(BaseBusinessLogic.class);
+ baseBusinessLogic.setToscaOperationFacade(toscaOperationFacade);
+
componentsUtils = Mockito.mock(ComponentsUtils.class);
servletUtils = Mockito.mock(ServletUtils.class);
responseFormat = Mockito.mock(ResponseFormat.class);