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.sdc.be.components.lifecycle;
23 import fj.data.Either;
24 import org.junit.jupiter.api.BeforeAll;
25 import org.mockito.InjectMocks;
26 import org.mockito.Mockito;
27 import org.mockito.invocation.InvocationOnMock;
28 import org.mockito.stubbing.Answer;
29 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
30 import org.openecomp.sdc.be.components.distribution.engine.IDistributionEngine;
31 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
32 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
33 import org.openecomp.sdc.be.components.impl.ResponseFormatManager;
34 import org.openecomp.sdc.be.components.impl.version.VesionUpdateHandler;
35 import org.openecomp.sdc.be.components.path.ForwardingPathValidator;
36 import org.openecomp.sdc.be.components.utils.ComponentBusinessLogicMock;
37 import org.openecomp.sdc.be.components.validation.NodeFilterValidator;
38 import org.openecomp.sdc.be.components.validation.ServiceDistributionValidation;
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.datamodel.utils.UiComponentDataConverter;
43 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
44 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
45 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
46 import org.openecomp.sdc.be.impl.ComponentsUtils;
47 import org.openecomp.sdc.be.impl.WebAppContextWrapper;
48 import org.openecomp.sdc.be.model.ArtifactDefinition;
49 import org.openecomp.sdc.be.model.Component;
50 import org.openecomp.sdc.be.model.ComponentMetadataDefinition;
51 import org.openecomp.sdc.be.model.LifecycleStateEnum;
52 import org.openecomp.sdc.be.model.Resource;
53 import org.openecomp.sdc.be.model.Service;
54 import org.openecomp.sdc.be.model.User;
55 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElement;
56 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElementTypeEnum;
57 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeFilterOperation;
58 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaElementLifecycleOperation;
59 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
60 import org.openecomp.sdc.be.model.jsonjanusgraph.utils.ModelConverter;
61 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
62 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
63 import org.openecomp.sdc.be.user.Role;
64 import org.openecomp.sdc.be.user.UserBusinessLogic;
65 import org.openecomp.sdc.common.api.Constants;
66 import org.openecomp.sdc.common.impl.ExternalConfiguration;
67 import org.openecomp.sdc.common.impl.FSConfigurationSource;
68 import org.openecomp.sdc.exception.ResponseFormat;
69 import org.slf4j.Logger;
70 import org.slf4j.LoggerFactory;
71 import org.springframework.web.context.WebApplicationContext;
73 import javax.servlet.ServletContext;
74 import java.util.ArrayList;
75 import java.util.List;
77 import static org.assertj.core.api.Assertions.assertThat;
78 import static org.mockito.Mockito.when;
80 public class LifecycleTestBase extends ComponentBusinessLogicMock {
81 private static final Logger log = LoggerFactory.getLogger(LifecycleTestBase.class);
83 protected final ServletContext servletContext = Mockito.mock(ServletContext.class);
84 protected UserBusinessLogic mockUserAdmin = Mockito.mock(UserBusinessLogic.class);
85 protected WebAppContextWrapper webAppContextWrapper = Mockito.mock(WebAppContextWrapper.class);
86 protected WebApplicationContext webAppContext = Mockito.mock(WebApplicationContext.class);
87 protected ToscaElementLifecycleOperation toscaElementLifecycleOperation = Mockito.mock(ToscaElementLifecycleOperation.class);
88 protected VesionUpdateHandler vesionUpdateHandler = Mockito.mock(VesionUpdateHandler.class);
89 protected ArtifactsBusinessLogic artifactsManager = Mockito.mock(ArtifactsBusinessLogic.class);
91 protected User user = null;
92 protected Resource resourceResponse;
93 protected Service serviceResponse;
94 protected ResponseFormatManager responseManager = null;
95 protected JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
96 protected ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
97 protected static ComponentsUtils componentsUtils;
98 protected final IDistributionEngine distributionEngine = Mockito.mock(IDistributionEngine.class);
99 protected final ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
100 protected final ServiceDistributionValidation serviceDistributionValidation = Mockito.mock(ServiceDistributionValidation.class);
101 protected final ForwardingPathValidator forwardingPathValidator = Mockito.mock(ForwardingPathValidator.class);
102 protected final UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
103 protected final NodeFilterOperation serviceFilterOperation = Mockito.mock(NodeFilterOperation.class);
104 protected final NodeFilterValidator serviceFilterValidator = Mockito.mock(NodeFilterValidator.class);
107 public static void setupClass() {
108 ExternalConfiguration.setAppName("catalog-be");
109 new ConfigurationManager(new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be"));
110 componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
113 public void setup() {
115 // User data and management
117 user.setUserId("jh003");
118 user.setFirstName("Jimmi");
119 user.setLastName("Hendrix");
120 user.setRole(Role.ADMIN.name());
122 when(mockUserAdmin.getUser("jh003", false)).thenReturn(user);
123 // Servlet Context attributes
124 when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
125 when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
126 when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webAppContext);
127 when(webAppContext.getBean(ToscaElementLifecycleOperation.class)).thenReturn(toscaElementLifecycleOperation);
128 when(webAppContext.getBean(ArtifactsBusinessLogic.class)).thenReturn(artifactsManager);
130 // Resource Operation mock methods
134 resourceResponse = createResourceObject();
135 Either<ToscaElement, StorageOperationStatus> eitherComponent = Either.left(ModelConverter.convertToToscaElement(resourceResponse));
136 when(toscaElementLifecycleOperation.checkoutToscaElement(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class)))
137 .thenAnswer(createAnswer(eitherComponent));
139 when(toscaElementLifecycleOperation.checkinToscaELement(Mockito.any(LifecycleStateEnum.class), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class)))
140 .thenAnswer(createAnswer(eitherComponent));
142 Either<User, StorageOperationStatus> getOwnerResult = Either.left(user);
143 when(toscaElementLifecycleOperation.getToscaElementOwner(Mockito.anyString())).thenReturn(getOwnerResult);
145 Either<Component, StorageOperationStatus> eitherlatestDerived = Either.right(StorageOperationStatus.OK);
146 when(toscaOperationFacade.shouldUpgradeToLatestDerived(Mockito.any(Resource.class))).thenReturn(eitherlatestDerived);
148 responseManager = ResponseFormatManager.getInstance();
152 public static <T> Answer<T> createAnswer(final T value) {
153 return new Answer<T>() {
155 public T answer(InvocationOnMock invocation) throws Throwable {
162 protected Resource createResourceObject() {
163 return createResourceObject(ComponentTypeEnum.RESOURCE, "uid");
166 protected Resource createResourceObject(String uid) {
167 return createResourceObject(ComponentTypeEnum.RESOURCE, uid);
170 protected Resource createResourceObject(ComponentTypeEnum componentType, String uid) {
171 Resource resource = new Resource();
172 resource.setUniqueId(uid);
173 resource.setComponentType(componentType);
174 resource.setName("MyResourceName");
175 resource.addCategory("VoIP", "INfra");
176 resource.setDescription("My short description");
177 List<String> tgs = new ArrayList<>();
179 resource.setTags(tgs);
180 List<String> template = new ArrayList<>();
181 template.add("Root");
182 resource.setDerivedFrom(template);
183 resource.setVendorName("Motorola");
184 resource.setVendorRelease("1.0.0");
185 resource.setContactId("yavivi");
186 resource.setIcon("MyIcon.jpg");
187 resource.setToscaType(ToscaElementTypeEnum.TOPOLOGY_TEMPLATE.getValue());
192 protected Resource createResourceVFCMTObject() {
193 ResourceMetadataDataDefinition rMetadataDataDefinition = new ResourceMetadataDataDefinition();
194 rMetadataDataDefinition.setResourceType(ResourceTypeEnum.VFCMT);
195 ComponentMetadataDefinition cMetadataDataDefinition = new ComponentMetadataDefinition(rMetadataDataDefinition);
197 Resource resource = new Resource(cMetadataDataDefinition);
198 resource.setUniqueId("rid");
199 resource.setName("MyResourceVFCMTName");
200 resource.addCategory("VoIP", "INfra");
201 resource.setDescription("My short description");
202 List<String> tgs = new ArrayList<>();
204 resource.setTags(tgs);
205 List<String> template = new ArrayList<>();
206 template.add("Root");
207 resource.setDerivedFrom(template);
208 resource.setVendorName("Motorola");
209 resource.setVendorRelease("1.0.0");
210 resource.setContactId("yavivi");
211 resource.setIcon("MyIcon.jpg");
212 resource.setToscaType(ToscaElementTypeEnum.NODE_TYPE.getValue());
217 protected Service createServiceObject() {
218 return createServiceObject("sid");
221 protected Service createServiceObject(String uid) {
222 Service service = new Service();
223 service.setName("MyServiceName");
224 service.setUniqueId(uid);
225 service.addCategory("VoIP", null);
226 service.setDescription("My short description");
227 List<String> tgs = new ArrayList<>();
229 service.setTags(tgs);
230 List<String> template = new ArrayList<>();
231 template.add("Root");
232 service.setContactId("aa0001");
233 service.setIcon("MyIcon.jpg");
238 protected void assertResponse(Either<? extends Component, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
239 ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
240 ResponseFormat actualResponse = createResponse.right().value();
241 assertThat(expectedResponse.getMessageId()).isEqualTo(actualResponse.getMessageId());
244 protected void assertServiceResponse(Either<Service, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
245 ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
246 ResponseFormat actualResponse = createResponse.right().value();
247 assertThat(expectedResponse.getMessageId()).isEqualTo(actualResponse.getMessageId());
250 protected static ArtifactDefinition getArtifactPlaceHolder(String resourceId, String logicalName) {
251 ArtifactDefinition artifact = new ArtifactDefinition();
253 artifact.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, logicalName.toLowerCase()));
254 artifact.setArtifactLabel(logicalName.toLowerCase());