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.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;
51 import java.util.ArrayList;
52 import java.util.List;
54 import static org.junit.Assert.assertEquals;
55 import static org.junit.Assert.assertTrue;
56 import static org.mockito.Mockito.when;
58 @RunWith(MockitoJUnitRunner.Silent.class)
59 public class CertificationRequestTest extends LifecycleTestBase {
62 private ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder;
64 private ServiceBusinessLogic serviceBusinessLogic;
66 private CapabilityOperation capabilityOperation;
68 private ToscaExportHandler toscaExportUtils;
70 private CertificationRequestTransition rfcObj;
76 rfcObj = new CertificationRequestTransition(componentsUtils, toscaElementLifecycleOperation, serviceDistributionArtifactsBuilder, serviceBusinessLogic, capabilityOperation, toscaExportUtils, toscaOperationFacade, titanDao);
77 rfcObj.setConfigurationManager(configurationManager);
81 public void testVFCMTStateValidation(){
82 Either<? extends Component, ResponseFormat> changeStateResult;
83 Resource resource = createResourceVFCMTObject();
85 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
86 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
87 assertTrue(ownerResponse.isLeft());
88 User owner = ownerResponse.left().value();
90 User user = new User();
91 user.setUserId("cs0008");
92 user.setFirstName("Carlos");
93 user.setLastName("Santana");
94 user.setRole(Role.TESTER.name());
96 changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
97 assertEquals(changeStateResult.isLeft(), true);
101 public void testCheckoutStateValidation() {
102 Either<? extends Component, ResponseFormat> changeStateResult;
103 Resource resource = createResourceObject();
105 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
106 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
107 assertTrue(ownerResponse.isLeft());
108 User owner = ownerResponse.left().value();
109 changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
110 assertEquals(changeStateResult.isLeft(), true);
112 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
113 changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
114 assertEquals(changeStateResult.isLeft(), true);
118 public void testAlreadyRfc() {
119 Either<Resource, ResponseFormat> changeStateResult;
120 Resource resource = createResourceObject();
122 resource.setLifecycleState(LifecycleStateEnum.READY_FOR_CERTIFICATION);
123 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
124 assertTrue(ownerResponse.isLeft());
125 User owner = ownerResponse.left().value();
126 Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.READY_FOR_CERTIFICATION);
127 assertEquals(validateBeforeTransition.isRight(), true);
128 changeStateResult = Either.right(validateBeforeTransition.right().value());
129 assertResponse(changeStateResult, ActionStatus.COMPONENT_SENT_FOR_CERTIFICATION, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
134 public void testCertificationInProgress() {
135 Either<Resource, ResponseFormat> changeStateResult;
136 Resource resource = createResourceObject();
138 resource.setLifecycleState(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
139 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
140 assertTrue(ownerResponse.isLeft());
141 User owner = ownerResponse.left().value();
142 Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
143 assertEquals(validateBeforeTransition.isRight(), true);
144 changeStateResult = Either.right(validateBeforeTransition.right().value());
145 assertResponse(changeStateResult, ActionStatus.COMPONENT_IN_CERT_IN_PROGRESS_STATE, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
150 public void testAlreadyCertified() {
151 Either<Resource, ResponseFormat> changeStateResult;
152 Resource resource = createResourceObject();
154 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
155 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
156 assertTrue(ownerResponse.isLeft());
157 User owner = ownerResponse.left().value();
158 Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.CERTIFIED);
159 assertEquals(validateBeforeTransition.isRight(), true);
160 changeStateResult = Either.right(validateBeforeTransition.right().value());
161 assertResponse(changeStateResult, ActionStatus.COMPONENT_ALREADY_CERTIFIED, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
166 public void testValidateAllResourceInstanceCertified_SuccessWithoutRI() {
167 Resource resource = new Resource();
168 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
169 assertTrue(validateAllResourceInstanceCertified.isLeft());
173 public void testValidateAllResourceInstanceCertified_SuccessWithCertifiedResources() {
174 Resource resource = new Resource();
175 List<ComponentInstance> riList = new ArrayList<ComponentInstance>();
176 ComponentInstance ri = new ComponentInstance();
177 ri.setComponentVersion("2.0");
179 resource.setComponentInstances(riList);
181 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
182 assertTrue(validateAllResourceInstanceCertified.isLeft());
186 public void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMinorVersion() {
187 Resource resource = createVFWithRI("0.3");
189 simulateCertifiedVersionExistForRI();
191 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
193 assertTrue(validateAllResourceInstanceCertified.isRight());
194 ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
195 assertTrue(responseFormat.getStatus() == HttpStatus.SC_FORBIDDEN);
196 assertTrue(responseFormat.getMessageId().equals("SVC4559"));
201 public void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMajorVersion() {
202 Resource resource = createVFWithRI("1.3");
204 simulateCertifiedVersionExistForRI();
206 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
208 assertTrue(validateAllResourceInstanceCertified.isRight());
209 ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
210 assertTrue(responseFormat.getStatus() == HttpStatus.SC_FORBIDDEN);
211 assertTrue(responseFormat.getMessageId().equals("SVC4559"));
216 public void testDeploymentArtifactRestriction() {
217 Either<? extends Component, ResponseFormat> changeStateResult;
218 Service service = createServiceObject();
219 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
221 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(service, ComponentTypeEnum.SERVICE);
222 assertTrue(ownerResponse.isLeft());
223 User owner = ownerResponse.left().value();
225 Either<Service, ResponseFormat> result = Either.left(service);
226 Either<ToscaElement, StorageOperationStatus> reqCertRes = Either.left(ModelConverter.convertToToscaElement(service));
227 Either<Either<ArtifactDefinition, Operation>, ResponseFormat> resultArtifacts = Either.left(Either.left(new ArtifactDefinition()));
228 when(serviceBusinessLogic.generateHeatEnvArtifacts(service, owner, false, true)).thenReturn(result);
229 when(serviceBusinessLogic.generateVfModuleArtifacts(service, owner, false, true)).thenReturn(result);
230 when(serviceBusinessLogic.populateToscaArtifacts(service, owner, true, false, false)).thenReturn(resultArtifacts);
231 when(toscaElementLifecycleOperation.requestCertificationToscaElement(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(reqCertRes);
232 changeStateResult = rfcObj.changeState(ComponentTypeEnum.SERVICE, service, serviceBusinessLogic, user, owner, false, true);
233 assertEquals(changeStateResult.isLeft(), true);
236 private void simulateCertifiedVersionExistForRI() {
237 Component dummyResource = new Resource();
238 Either<Component, StorageOperationStatus> result = Either.left(dummyResource);
239 Mockito.when(toscaOperationFacade.getToscaElement(Mockito.anyString())).thenReturn(Either.left(dummyResource));
240 Mockito.when(toscaOperationFacade.findLastCertifiedToscaElementByUUID(Mockito.any(Component.class))).thenReturn(result);
243 private Resource createVFWithRI(String riVersion) {
244 Resource resource = new Resource();
245 List<ComponentInstance> riList = new ArrayList<ComponentInstance>();
246 ComponentInstance ri = new ComponentInstance();
248 ri.setComponentVersion(riVersion);
249 ri.setComponentUid("someUniqueId");
251 resource.setComponentInstances(riList);