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.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;
44 import java.util.ArrayList;
45 import java.util.List;
47 import static org.junit.Assert.assertEquals;
48 import static org.junit.Assert.assertTrue;
49 import static org.mockito.Mockito.when;
51 @RunWith(MockitoJUnitRunner.Silent.class)
52 public class CertificationRequestTest extends LifecycleTestBase {
55 private ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder;
57 private ServiceBusinessLogic serviceBusinessLogic;
59 private CapabilityOperation capabilityOperation;
61 private ToscaExportHandler toscaExportUtils;
63 private CertificationRequestTransition rfcObj;
69 rfcObj = new CertificationRequestTransition(componentsUtils, toscaElementLifecycleOperation, serviceBusinessLogic, toscaOperationFacade,
71 rfcObj.setConfigurationManager(configurationManager);
75 public void testVFCMTStateValidation(){
76 Either<? extends Component, ResponseFormat> changeStateResult;
77 Resource resource = createResourceVFCMTObject();
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();
84 User user = new User();
85 user.setUserId("cs0008");
86 user.setFirstName("Carlos");
87 user.setLastName("Santana");
88 user.setRole(Role.TESTER.name());
90 changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
91 assertTrue(changeStateResult.isLeft());
95 public void testCheckoutStateValidation() {
96 Either<? extends Component, ResponseFormat> changeStateResult;
97 Resource resource = createResourceObject();
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());
106 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
107 changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
108 assertTrue(changeStateResult.isLeft());
112 public void testAlreadyRfc() {
113 Either<Resource, ResponseFormat> changeStateResult;
114 Resource resource = createResourceObject();
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());
128 public void testCertificationInProgress() {
129 Either<Resource, ResponseFormat> changeStateResult;
130 Resource resource = createResourceObject();
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());
144 public void testAlreadyCertified() {
145 Either<Resource, ResponseFormat> changeStateResult;
146 Resource resource = createResourceObject();
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());
159 public void testVSPIsArchivedValidation(){
160 Either<? extends Component, ResponseFormat> changeStateResult;
161 Resource resource = createResourceObject();
162 resource.setVspArchived(true);
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();
169 User user = new User();
170 user.setUserId("cs0008");
171 user.setFirstName("Carlos");
172 user.setLastName("Santana");
173 user.setRole(Role.TESTER.name());
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());
183 public void testValidateAllResourceInstanceCertified_SuccessWithoutRI() {
184 Resource resource = new Resource();
185 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
186 assertTrue(validateAllResourceInstanceCertified.isLeft());
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");
196 resource.setComponentInstances(riList);
198 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
199 assertTrue(validateAllResourceInstanceCertified.isLeft());
203 public void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMinorVersion() {
204 Resource resource = createVFWithRI("0.3");
206 simulateCertifiedVersionExistForRI();
208 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
210 assertTrue(validateAllResourceInstanceCertified.isRight());
211 ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
212 assertEquals((int) responseFormat.getStatus(), HttpStatus.SC_FORBIDDEN);
213 assertEquals("SVC4559", responseFormat.getMessageId());
218 public void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMajorVersion() {
219 Resource resource = createVFWithRI("1.3");
221 simulateCertifiedVersionExistForRI();
223 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
225 assertTrue(validateAllResourceInstanceCertified.isRight());
226 ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
227 assertEquals((int) responseFormat.getStatus(), HttpStatus.SC_FORBIDDEN);
228 assertEquals("SVC4559", responseFormat.getMessageId());
233 public void testDeploymentArtifactRestriction() {
234 Either<? extends Component, ResponseFormat> changeStateResult;
235 Service service = createServiceObject();
236 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
238 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(service, ComponentTypeEnum.SERVICE);
239 assertTrue(ownerResponse.isLeft());
240 User owner = ownerResponse.left().value();
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());
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);
260 private Resource createVFWithRI(String riVersion) {
261 Resource resource = new Resource();
262 List<ComponentInstance> riList = new ArrayList<>();
263 ComponentInstance ri = new ComponentInstance();
265 ri.setComponentVersion(riVersion);
266 ri.setComponentUid("someUniqueId");
268 resource.setComponentInstances(riList);