Catalog alignment
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / lifecycle / LifecycleTestBase.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
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.openecomp.sdc.be.components.lifecycle;
22
23 import fj.data.Either;
24 import org.junit.BeforeClass;
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.jsongraph.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.ConfigurationSource;
66 import org.openecomp.sdc.common.api.Constants;
67 import org.openecomp.sdc.common.impl.ExternalConfiguration;
68 import org.openecomp.sdc.common.impl.FSConfigurationSource;
69 import org.openecomp.sdc.exception.ResponseFormat;
70 import org.slf4j.Logger;
71 import org.slf4j.LoggerFactory;
72 import org.springframework.web.context.WebApplicationContext;
73
74 import javax.servlet.ServletContext;
75 import java.util.ArrayList;
76 import java.util.List;
77
78 import static org.assertj.core.api.Assertions.assertThat;
79 import static org.mockito.Mockito.when;
80
81 public class LifecycleTestBase extends ComponentBusinessLogicMock {
82     private static final Logger log = LoggerFactory.getLogger(LifecycleTestBase.class);
83     @InjectMocks
84     protected final ServletContext servletContext = Mockito.mock(ServletContext.class);
85     protected UserBusinessLogic mockUserAdmin = Mockito.mock(UserBusinessLogic.class);
86     protected WebAppContextWrapper webAppContextWrapper = Mockito.mock(WebAppContextWrapper.class);
87     protected WebApplicationContext webAppContext = Mockito.mock(WebApplicationContext.class);
88     protected ToscaElementLifecycleOperation toscaElementLifecycleOperation = Mockito.mock(ToscaElementLifecycleOperation.class);
89     protected VesionUpdateHandler vesionUpdateHandler = Mockito.mock(VesionUpdateHandler.class);
90     protected ArtifactsBusinessLogic artifactsManager = Mockito.mock(ArtifactsBusinessLogic.class);;
91     protected User user = null;
92     protected Resource resourceResponse;
93     protected Service serviceResponse;
94     protected static ConfigurationManager configurationManager = null;
95     protected ResponseFormatManager responseManager = null;
96     protected JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
97     protected ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
98     protected static ComponentsUtils componentsUtils;
99     protected final IDistributionEngine distributionEngine = Mockito.mock(IDistributionEngine.class);
100     protected final ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
101     protected final ServiceDistributionValidation serviceDistributionValidation = Mockito.mock(ServiceDistributionValidation.class);
102     protected final ForwardingPathValidator forwardingPathValidator = Mockito.mock(ForwardingPathValidator.class);
103     protected final UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
104     protected final NodeFilterOperation serviceFilterOperation = Mockito.mock(NodeFilterOperation.class);
105     protected final NodeFilterValidator serviceFilterValidator = Mockito.mock(NodeFilterValidator.class);
106
107     @BeforeClass
108     public static void setupClass() {
109         ExternalConfiguration.setAppName("catalog-be");
110
111         // init Configuration
112         String appConfigDir = "src/test/resources/config/catalog-be";
113         ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
114         configurationManager = new ConfigurationManager(configurationSource);
115
116         componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
117     }
118
119     public void setup() {
120
121 //        ExternalConfiguration.setAppName("catalog-be");
122 //
123 //        // init Configuration
124 //        String appConfigDir = "src/test/resources/config/catalog-be";
125 //        ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
126 //        configurationManager = new ConfigurationManager(configurationSource);
127
128
129         // User data and management
130         user = new User();
131         user.setUserId("jh003");
132         user.setFirstName("Jimmi");
133         user.setLastName("Hendrix");
134         user.setRole(Role.ADMIN.name());
135
136         when(mockUserAdmin.getUser("jh003", false)).thenReturn(user);
137         // Servlet Context attributes
138         when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
139         when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
140         when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webAppContext);
141         when(webAppContext.getBean(ToscaElementLifecycleOperation.class)).thenReturn(toscaElementLifecycleOperation);
142         when(webAppContext.getBean(ArtifactsBusinessLogic.class)).thenReturn(artifactsManager);
143
144         // Resource Operation mock methods
145         // getCount
146
147         // createResource
148         resourceResponse = createResourceObject();
149         Either<ToscaElement, StorageOperationStatus> eitherComponent = Either.left(ModelConverter.convertToToscaElement(resourceResponse));
150         when(toscaElementLifecycleOperation.checkoutToscaElement(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class)))
151                 .thenAnswer(createAnswer(eitherComponent));
152
153         when(toscaElementLifecycleOperation.checkinToscaELement(Mockito.any(LifecycleStateEnum.class), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class)))
154                 .thenAnswer(createAnswer(eitherComponent));
155
156         Either<User, StorageOperationStatus> getOwnerResult = Either.left(user);
157         when(toscaElementLifecycleOperation.getToscaElementOwner(Mockito.anyString())).thenReturn(getOwnerResult);
158
159         Either<Component, StorageOperationStatus> eitherlatestDerived = Either.right(StorageOperationStatus.OK);
160         when(toscaOperationFacade.shouldUpgradeToLatestDerived(Mockito.any(Resource.class))).thenReturn(eitherlatestDerived);
161
162         responseManager = ResponseFormatManager.getInstance();
163
164     }
165
166     public static <T> Answer<T> createAnswer(final T value) {
167         return new Answer<T>() {
168             @Override
169             public T answer(InvocationOnMock invocation) throws Throwable {
170                 return value;
171             }
172
173         };
174     }
175
176     protected Resource createResourceObject() {
177         return createResourceObject(ComponentTypeEnum.RESOURCE, "uid");
178     }
179
180     protected Resource createResourceObject(String uid) {
181         return createResourceObject(ComponentTypeEnum.RESOURCE, uid);
182     }
183
184     protected Resource createResourceObject(ComponentTypeEnum componentType, String uid) {
185         Resource resource = new Resource();
186         resource.setUniqueId(uid);
187         resource.setComponentType(componentType);
188         resource.setName("MyResourceName");
189         resource.addCategory("VoIP", "INfra");
190         resource.setDescription("My short description");
191         List<String> tgs = new ArrayList<>();
192         tgs.add("test");
193         resource.setTags(tgs);
194         List<String> template = new ArrayList<>();
195         template.add("Root");
196         resource.setDerivedFrom(template);
197         resource.setVendorName("Motorola");
198         resource.setVendorRelease("1.0.0");
199         resource.setContactId("yavivi");
200         resource.setIcon("MyIcon.jpg");
201         resource.setToscaType(ToscaElementTypeEnum.TOPOLOGY_TEMPLATE.getValue());
202
203         return resource;
204     }
205
206     protected Resource createResourceVFCMTObject() {
207         ResourceMetadataDataDefinition rMetadataDataDefinition = new ResourceMetadataDataDefinition();
208         rMetadataDataDefinition.setResourceType(ResourceTypeEnum.VFCMT);
209         ComponentMetadataDefinition cMetadataDataDefinition = new ComponentMetadataDefinition(rMetadataDataDefinition) ;
210
211         Resource resource = new Resource(cMetadataDataDefinition);
212         resource.setUniqueId("rid");
213         resource.setName("MyResourceVFCMTName");
214         resource.addCategory("VoIP", "INfra");
215         resource.setDescription("My short description");
216         List<String> tgs = new ArrayList<>();
217         tgs.add("test1");
218         resource.setTags(tgs);
219         List<String> template = new ArrayList<>();
220         template.add("Root");
221         resource.setDerivedFrom(template);
222         resource.setVendorName("Motorola");
223         resource.setVendorRelease("1.0.0");
224         resource.setContactId("yavivi");
225         resource.setIcon("MyIcon.jpg");
226         resource.setToscaType(ToscaElementTypeEnum.NODE_TYPE.getValue());
227
228         return resource;
229     }
230     protected Service createServiceObject() {
231         return createServiceObject("sid");
232     }
233
234     protected Service createServiceObject(String uid) {
235         Service service = new Service();
236         service.setName("MyServiceName");
237         service.setUniqueId(uid);
238         service.addCategory("VoIP", null);
239         service.setDescription("My short description");
240         List<String> tgs = new ArrayList<>();
241         tgs.add("test");
242         service.setTags(tgs);
243         List<String> template = new ArrayList<>();
244         template.add("Root");
245         service.setContactId("aa0001");
246         service.setIcon("MyIcon.jpg");
247
248         return service;
249     }
250
251     protected void assertResponse(Either<? extends Component, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
252         ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
253         ResponseFormat actualResponse = createResponse.right().value();
254         assertThat(expectedResponse.getMessageId()).isEqualTo(actualResponse.getMessageId());
255     }
256
257     protected void assertServiceResponse(Either<Service, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
258         ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
259         ResponseFormat actualResponse = createResponse.right().value();
260         assertThat(expectedResponse.getMessageId()).isEqualTo(actualResponse.getMessageId());
261     }
262
263     protected static ArtifactDefinition getArtifactPlaceHolder(String resourceId, String logicalName) {
264         ArtifactDefinition artifact = new ArtifactDefinition();
265
266         artifact.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, logicalName.toLowerCase()));
267         artifact.setArtifactLabel(logicalName.toLowerCase());
268
269         return artifact;
270     }
271 }