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=========================================================
19 * Modifications copyright (c) 2019 Nokia
20 * ================================================================================
22 package org.openecomp.sdc.be.components.impl;
24 import fj.data.Either;
25 import org.junit.After;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.ArgumentCaptor;
30 import org.mockito.InjectMocks;
31 import org.mockito.Mock;
32 import org.mockito.junit.MockitoJUnitRunner;
33 import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
34 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
35 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
36 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
37 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
38 import org.openecomp.sdc.be.components.validation.UserValidations;
39 import org.openecomp.sdc.be.config.ConfigurationManager;
40 import org.openecomp.sdc.be.dao.api.ActionStatus;
41 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
42 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
43 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
44 import org.openecomp.sdc.be.impl.ComponentsUtils;
45 import org.openecomp.sdc.be.model.ComponentParametersView;
46 import org.openecomp.sdc.be.model.LifecycleStateEnum;
47 import org.openecomp.sdc.be.model.PolicyDefinition;
48 import org.openecomp.sdc.be.model.PropertyDefinition;
49 import org.openecomp.sdc.be.model.Resource;
50 import org.openecomp.sdc.be.model.User;
51 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
52 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
53 import org.openecomp.sdc.common.impl.ExternalConfiguration;
54 import org.openecomp.sdc.common.impl.FSConfigurationSource;
55 import org.openecomp.sdc.exception.ResponseFormat;
57 import javax.ws.rs.core.Response;
58 import java.util.List;
60 import static org.assertj.core.api.Assertions.assertThat;
61 import static org.mockito.ArgumentMatchers.eq;
62 import static org.mockito.Mockito.verify;
63 import static org.mockito.Mockito.when;
65 @RunWith(MockitoJUnitRunner.class)
66 public class PolicyPropertiesBusinessLogicTest {
68 private static final String POLICY_ID = "policy1";
69 private static final String RESOURCE_ID = "resourceId";
70 private static final String USER_ID = "userId";
71 public static final String NO_PROPS_POLICY = "policy2";
73 private PolicyBusinessLogic testInstance;
76 private UserValidations userValidations;
79 private JanusGraphDao janusGraphDao;
82 private ToscaOperationFacade toscaOperationFacade;
85 private ComponentsUtils componentsUtils;
87 private final ComponentTypeEnum COMPONENT_TYPE = ComponentTypeEnum.RESOURCE;
89 private ComponentParametersView componentFilter;
90 private Resource resource;
91 private PropertyDefinition prop1, prop2;
94 public void setUp() throws Exception {
95 testInstance.setUserValidations(userValidations);
96 testInstance.setJanusGraphDao(janusGraphDao);
97 testInstance.setToscaOperationFacade(toscaOperationFacade);
98 testInstance.setComponentsUtils(componentsUtils);
100 componentFilter = new ComponentParametersView(true);
101 componentFilter.setIgnorePolicies(false);
102 componentFilter.setIgnoreUsers(false);
104 prop1 = new PropertyDataDefinitionBuilder().setUniqueId("prop1").build();
105 prop2 = new PropertyDataDefinitionBuilder().setUniqueId("prop1").build();
107 PolicyDefinition policy1 = PolicyDefinitionBuilder.create()
108 .setUniqueId(POLICY_ID)
109 .setProperties(prop1, prop2)
112 PolicyDefinition policy2 = PolicyDefinitionBuilder.create()
113 .setUniqueId(NO_PROPS_POLICY)
115 resource = new ResourceBuilder()
116 .setUniqueId(RESOURCE_ID)
117 .setComponentType(COMPONENT_TYPE)
118 .setLifeCycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT)
119 .setLastUpdaterUserId(USER_ID)
123 new ConfigurationManager(new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be"));
127 public void tearDown() {
128 verify(janusGraphDao).commit();
132 public void getPolicyProperties_userIdIsNull() {
133 String userId = null;
134 ComponentException forbiddenException = new ByActionStatusComponentException(ActionStatus.AUTH_FAILED);
135 when(userValidations.validateUserExists(eq(userId))).thenThrow(forbiddenException);
137 testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, null);
138 } catch(ByActionStatusComponentException e){
139 assertThat(e.getActionStatus()).isEqualTo(ActionStatus.AUTH_FAILED);
143 @Test(expected = ComponentException.class)
144 public void getPolicyProperties_componentNotFound() {
145 when(userValidations.validateUserExists(eq(USER_ID))).thenReturn(new User());
146 ArgumentCaptor<ComponentParametersView> filterCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
147 when(toscaOperationFacade.getToscaElement(eq(RESOURCE_ID), filterCaptor.capture())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
148 when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND, ComponentTypeEnum.RESOURCE)).thenCallRealMethod();
149 ResponseFormat notFoundResponse = new ResponseFormat(Response.Status.NOT_FOUND.getStatusCode());
150 testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, USER_ID);
153 @Test(expected = ComponentException.class)
154 public void getPolicyProperties_policyNotExist() {
155 doPolicyValidations();
156 ResponseFormat notFoundResponse = new ResponseFormat(Response.Status.NOT_FOUND.getStatusCode());
157 testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, "nonExistingPolicy", USER_ID);
161 public void getPolicyProperties_noPropertiesOnPolicy() {
162 doPolicyValidations();
163 List<PropertyDataDefinition> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, NO_PROPS_POLICY, USER_ID);
164 assertThat(policyProperties).isNull();
168 public void getPolicyProperties() {
169 doPolicyValidations();
170 List<PropertyDataDefinition> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, USER_ID);
171 assertThat(policyProperties)
172 .usingElementComparatorOnFields("uniqueId")
173 .containsExactly(prop1, prop2);
176 private void doPolicyValidations() {
177 when(userValidations.validateUserExists(eq(USER_ID))).thenReturn(new User());
178 ArgumentCaptor<ComponentParametersView> filterCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
179 when(toscaOperationFacade.getToscaElement(eq(RESOURCE_ID), filterCaptor.capture())).thenReturn(Either.left(resource));