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