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