Sync Integ to Master
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / lifecycle / CertificationRequestTest.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.apache.http.HttpStatus;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.mockito.Mock;
29 import org.mockito.Mockito;
30 import org.mockito.junit.MockitoJUnitRunner;
31 import org.openecomp.sdc.be.components.distribution.engine.ServiceDistributionArtifactsBuilder;
32 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
33 import org.openecomp.sdc.be.dao.api.ActionStatus;
34 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
35 import org.openecomp.sdc.be.model.ArtifactDefinition;
36 import org.openecomp.sdc.be.model.Component;
37 import org.openecomp.sdc.be.model.ComponentInstance;
38 import org.openecomp.sdc.be.model.LifecycleStateEnum;
39 import org.openecomp.sdc.be.model.Operation;
40 import org.openecomp.sdc.be.model.Resource;
41 import org.openecomp.sdc.be.model.Service;
42 import org.openecomp.sdc.be.model.User;
43 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
44 import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
45 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
46 import org.openecomp.sdc.be.model.operations.impl.CapabilityOperation;
47 import org.openecomp.sdc.be.tosca.ToscaExportHandler;
48 import org.openecomp.sdc.be.user.Role;
49 import org.openecomp.sdc.exception.ResponseFormat;
50
51 import java.util.ArrayList;
52 import java.util.List;
53
54 import static org.junit.Assert.assertEquals;
55 import static org.junit.Assert.assertTrue;
56 import static org.mockito.Mockito.when;
57
58 @RunWith(MockitoJUnitRunner.Silent.class)
59 public class CertificationRequestTest extends LifecycleTestBase {
60
61     @Mock
62     private ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder;
63     @Mock
64     private ServiceBusinessLogic serviceBusinessLogic;
65     @Mock
66     private CapabilityOperation capabilityOperation;
67     @Mock
68     private ToscaExportHandler toscaExportUtils;
69
70     private CertificationRequestTransition rfcObj;
71
72
73     @Before
74     public void setup() {
75         super.setup();
76         rfcObj = new CertificationRequestTransition(componentsUtils, toscaElementLifecycleOperation, serviceDistributionArtifactsBuilder, serviceBusinessLogic, capabilityOperation, toscaExportUtils,  toscaOperationFacade,  titanDao);
77         // checkout transition object
78 //        rfcObj.setLifeCycleOperation(toscaElementLifecycleOperation);
79         // checkoutObj.setAuditingManager(iAuditingManager);
80         rfcObj.setConfigurationManager(configurationManager);
81
82 //        Either<ToscaRepresentation, ToscaError> either = Either.left(toscaRepresentation);
83 //        when(toscaExportUtils.exportComponent(Mockito.any())).thenReturn(either);
84
85     }
86
87     @Test
88     public void testVFCMTStateValidation(){
89         Either<? extends Component, ResponseFormat> changeStateResult;
90         Resource resource = createResourceVFCMTObject();
91
92         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
93         Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
94         assertTrue(ownerResponse.isLeft());
95         User owner = ownerResponse.left().value();
96
97         User user = new User();
98         user.setUserId("cs0008");
99         user.setFirstName("Carlos");
100         user.setLastName("Santana");
101         user.setRole(Role.TESTER.name());
102
103         changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
104         assertEquals(changeStateResult.isLeft(), true);
105     }
106
107     @Test
108     public void testCheckoutStateValidation() {
109         Either<? extends Component, ResponseFormat> changeStateResult;
110         Resource resource = createResourceObject();
111
112         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
113         Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
114         assertTrue(ownerResponse.isLeft());
115         User owner = ownerResponse.left().value();
116         // changeStateResult = rfcObj.changeStateOperation(resource, user,
117         // owner, false);
118         changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
119         assertEquals(changeStateResult.isLeft(), true);
120
121         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
122         // changeStateResult = rfcObj.changeStateOperation(resource, user,
123         // owner, false);
124         changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
125         assertEquals(changeStateResult.isLeft(), true);
126     }
127
128     @Test
129     public void testAlreadyRfc() {
130         Either<Resource, ResponseFormat> changeStateResult;
131         Resource resource = createResourceObject();
132
133         resource.setLifecycleState(LifecycleStateEnum.READY_FOR_CERTIFICATION);
134         Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
135         assertTrue(ownerResponse.isLeft());
136         User owner = ownerResponse.left().value();
137         Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.READY_FOR_CERTIFICATION);
138         assertEquals(validateBeforeTransition.isRight(), true);
139         changeStateResult = Either.right(validateBeforeTransition.right().value());
140         assertResponse(changeStateResult, ActionStatus.COMPONENT_SENT_FOR_CERTIFICATION, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
141
142     }
143
144     @Test
145     public void testCertificationInProgress() {
146         Either<Resource, ResponseFormat> changeStateResult;
147         Resource resource = createResourceObject();
148
149         resource.setLifecycleState(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
150         Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
151         assertTrue(ownerResponse.isLeft());
152         User owner = ownerResponse.left().value();
153         Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
154         assertEquals(validateBeforeTransition.isRight(), true);
155         changeStateResult = Either.right(validateBeforeTransition.right().value());
156         assertResponse(changeStateResult, ActionStatus.COMPONENT_IN_CERT_IN_PROGRESS_STATE, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
157
158     }
159
160     @Test
161     public void testAlreadyCertified() {
162         Either<Resource, ResponseFormat> changeStateResult;
163         Resource resource = createResourceObject();
164
165         resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
166         Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
167         assertTrue(ownerResponse.isLeft());
168         User owner = ownerResponse.left().value();
169         Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.CERTIFIED);
170         assertEquals(validateBeforeTransition.isRight(), true);
171         changeStateResult = Either.right(validateBeforeTransition.right().value());
172         assertResponse(changeStateResult, ActionStatus.COMPONENT_ALREADY_CERTIFIED, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
173
174     }
175
176     @Test
177     public void testValidateAllResourceInstanceCertified_SuccessWithoutRI() {
178         Resource resource = new Resource();
179         Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
180         assertTrue(validateAllResourceInstanceCertified.isLeft());
181     }
182
183     @Test
184     public void testValidateAllResourceInstanceCertified_SuccessWithCertifiedResources() {
185         Resource resource = new Resource();
186         List<ComponentInstance> riList = new ArrayList<ComponentInstance>();
187         ComponentInstance ri = new ComponentInstance();
188         ri.setComponentVersion("2.0");
189         riList.add(ri);
190         resource.setComponentInstances(riList);
191
192         Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
193         assertTrue(validateAllResourceInstanceCertified.isLeft());
194     }
195
196     @Test
197     public void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMinorVersion() {
198         Resource resource = createVFWithRI("0.3");
199
200         simulateCertifiedVersionExistForRI();
201
202         Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
203
204         assertTrue(validateAllResourceInstanceCertified.isRight());
205         ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
206         assertTrue(responseFormat.getStatus() == HttpStatus.SC_FORBIDDEN);
207         assertTrue(responseFormat.getMessageId().equals("SVC4559"));
208
209     }
210
211     @Test
212     public void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMajorVersion() {
213         Resource resource = createVFWithRI("1.3");
214
215         simulateCertifiedVersionExistForRI();
216
217         Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
218
219         assertTrue(validateAllResourceInstanceCertified.isRight());
220         ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
221         assertTrue(responseFormat.getStatus() == HttpStatus.SC_FORBIDDEN);
222         assertTrue(responseFormat.getMessageId().equals("SVC4559"));
223
224     }
225
226     @Test
227     public void testDeploymentArtifactRestriction() {
228         Either<? extends Component, ResponseFormat> changeStateResult;
229         Service service = createServiceObject();
230         service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
231
232         Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(service, ComponentTypeEnum.SERVICE);
233         assertTrue(ownerResponse.isLeft());
234         User owner = ownerResponse.left().value();
235
236         Either<Service, ResponseFormat> result = Either.left(service);
237         Either<ToscaElement, StorageOperationStatus> reqCertRes = Either.left(ModelConverter.convertToToscaElement(service));
238         Either<Either<ArtifactDefinition, Operation>, ResponseFormat> resultArtifacts = Either.left(Either.left(new ArtifactDefinition()));
239         when(serviceBusinessLogic.generateHeatEnvArtifacts(service, owner, false, true)).thenReturn(result);
240         when(serviceBusinessLogic.generateVfModuleArtifacts(service, owner, false, true)).thenReturn(result);
241         when(serviceBusinessLogic.populateToscaArtifacts(service, owner, true, false, false)).thenReturn(resultArtifacts);
242         when(toscaElementLifecycleOperation.requestCertificationToscaElement(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(reqCertRes);
243         changeStateResult = rfcObj.changeState(ComponentTypeEnum.SERVICE, service, serviceBusinessLogic, user, owner, false, true);
244         assertEquals(changeStateResult.isLeft(), true);
245     }
246
247     private void simulateCertifiedVersionExistForRI() {
248         Component dummyResource = new Resource();
249         Either<Component, StorageOperationStatus> result = Either.left(dummyResource);
250         Mockito.when(toscaOperationFacade.getToscaElement(Mockito.anyString())).thenReturn(Either.left(dummyResource));
251         Mockito.when(toscaOperationFacade.findLastCertifiedToscaElementByUUID(Mockito.any(Component.class))).thenReturn(result);
252     }
253
254     private Resource createVFWithRI(String riVersion) {
255         Resource resource = new Resource();
256         List<ComponentInstance> riList = new ArrayList<ComponentInstance>();
257         ComponentInstance ri = new ComponentInstance();
258
259         ri.setComponentVersion(riVersion);
260         ri.setComponentUid("someUniqueId");
261         riList.add(ri);
262         resource.setComponentInstances(riList);
263         return resource;
264     }
265
266 }