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.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;
50 import java.util.ArrayList;
51 import java.util.List;
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;
60 @ExtendWith(MockitoExtension.class)
61 class CertificationChangeTransitionTests extends LifecycleTestBase {
64 private ServiceBusinessLogic serviceBusinessLogic;
66 private CertificationChangeTransition changeTransition;
68 Resource resource, resourceAfterCertify;
69 Service service, serviceAfterCertify;
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";
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();
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)));
106 changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
107 assertTrue(changeStateResult.isLeft());
111 void testCheckoutStateValidation() {
112 Either<? extends Component, ResponseFormat> changeStateResult;
114 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
115 when(toscaElementLifecycleOperation.certifyToscaElement(RES_ID, user.getUserId(), owner.getUserId()))
116 .thenReturn(Either.left(ModelConverter.convertToToscaElement(resourceAfterCertify)));
118 changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
119 assertTrue(changeStateResult.isLeft());
121 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
122 changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
123 assertTrue(changeStateResult.isLeft());
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)));
134 changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
135 assertTrue(changeStateResult.isLeft());
137 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
138 changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
139 assertTrue(changeStateResult.isLeft());
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)));
150 changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
151 assertTrue(changeStateResult.isLeft());
153 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
154 changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
155 assertTrue(changeStateResult.isLeft());
159 void testVSPIsArchivedValidation() {
160 Resource resource = createResourceObject();
161 resource.setVspArchived(true);
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();
168 User user = new User();
169 user.setUserId("cs0008");
170 user.setFirstName("Carlos");
171 user.setLastName("Santana");
172 user.setRole(Role.DESIGNER.name());
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());
184 void testValidateAllResourceInstanceCertified_SuccessWithoutRI() {
185 Resource resource = new Resource();
186 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = changeTransition.validateAllResourceInstanceCertified(resource);
187 assertTrue(validateAllResourceInstanceCertified.isLeft());
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");
197 resource.setComponentInstances(riList);
199 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = changeTransition.validateAllResourceInstanceCertified(resource);
200 assertTrue(validateAllResourceInstanceCertified.isLeft());
204 void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMinorVersion() {
205 Resource resource = createVFWithRI("0.3");
207 simulateCertifiedVersionExistForRI();
209 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = changeTransition.validateAllResourceInstanceCertified(resource);
211 assertTrue(validateAllResourceInstanceCertified.isRight());
212 ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
213 assertEquals((int) responseFormat.getStatus(), HttpStatus.SC_FORBIDDEN);
214 assertEquals("SVC4559", responseFormat.getMessageId());
219 void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMajorVersion() {
220 Resource resource = createVFWithRI("1.3");
222 simulateCertifiedVersionExistForRI();
224 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = changeTransition.validateAllResourceInstanceCertified(resource);
226 assertTrue(validateAllResourceInstanceCertified.isRight());
227 ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
228 assertEquals((int) responseFormat.getStatus(), HttpStatus.SC_FORBIDDEN);
229 assertEquals("SVC4559", responseFormat.getMessageId());
234 void testDeploymentArtifactRestriction() {
235 Either<? extends Component, ResponseFormat> changeStateResult;
236 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
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());
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);
256 private Resource createVFWithRI(String riVersion) {
257 Resource resource = new Resource();
258 List<ComponentInstance> riList = new ArrayList<>();
259 ComponentInstance ri = new ComponentInstance();
261 ri.setComponentVersion(riVersion);
262 ri.setComponentUid("someUniqueId");
264 resource.setComponentInstances(riList);