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 // checkout transition object
78 // rfcObj.setLifeCycleOperation(toscaElementLifecycleOperation);
79 // checkoutObj.setAuditingManager(iAuditingManager);
80 rfcObj.setConfigurationManager(configurationManager);
82 // Either<ToscaRepresentation, ToscaError> either = Either.left(toscaRepresentation);
83 // when(toscaExportUtils.exportComponent(Mockito.any())).thenReturn(either);
88 public void testVFCMTStateValidation(){
89 Either<? extends Component, ResponseFormat> changeStateResult;
90 Resource resource = createResourceVFCMTObject();
92 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
93 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
94 assertTrue(ownerResponse.isLeft());
95 User owner = ownerResponse.left().value();
97 User user = new User();
98 user.setUserId("cs0008");
99 user.setFirstName("Carlos");
100 user.setLastName("Santana");
101 user.setRole(Role.TESTER.name());
103 changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
104 assertEquals(changeStateResult.isLeft(), true);
108 public void testCheckoutStateValidation() {
109 Either<? extends Component, ResponseFormat> changeStateResult;
110 Resource resource = createResourceObject();
112 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
113 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
114 assertTrue(ownerResponse.isLeft());
115 User owner = ownerResponse.left().value();
116 // changeStateResult = rfcObj.changeStateOperation(resource, user,
118 changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
119 assertEquals(changeStateResult.isLeft(), true);
121 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
122 // changeStateResult = rfcObj.changeStateOperation(resource, user,
124 changeStateResult = rfcObj.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false);
125 assertEquals(changeStateResult.isLeft(), true);
129 public void testAlreadyRfc() {
130 Either<Resource, ResponseFormat> changeStateResult;
131 Resource resource = createResourceObject();
133 resource.setLifecycleState(LifecycleStateEnum.READY_FOR_CERTIFICATION);
134 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
135 assertTrue(ownerResponse.isLeft());
136 User owner = ownerResponse.left().value();
137 Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.READY_FOR_CERTIFICATION);
138 assertEquals(validateBeforeTransition.isRight(), true);
139 changeStateResult = Either.right(validateBeforeTransition.right().value());
140 assertResponse(changeStateResult, ActionStatus.COMPONENT_SENT_FOR_CERTIFICATION, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
145 public void testCertificationInProgress() {
146 Either<Resource, ResponseFormat> changeStateResult;
147 Resource resource = createResourceObject();
149 resource.setLifecycleState(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
150 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
151 assertTrue(ownerResponse.isLeft());
152 User owner = ownerResponse.left().value();
153 Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
154 assertEquals(validateBeforeTransition.isRight(), true);
155 changeStateResult = Either.right(validateBeforeTransition.right().value());
156 assertResponse(changeStateResult, ActionStatus.COMPONENT_IN_CERT_IN_PROGRESS_STATE, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
161 public void testAlreadyCertified() {
162 Either<Resource, ResponseFormat> changeStateResult;
163 Resource resource = createResourceObject();
165 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
166 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
167 assertTrue(ownerResponse.isLeft());
168 User owner = ownerResponse.left().value();
169 Either<Boolean, ResponseFormat> validateBeforeTransition = rfcObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.CERTIFIED);
170 assertEquals(validateBeforeTransition.isRight(), true);
171 changeStateResult = Either.right(validateBeforeTransition.right().value());
172 assertResponse(changeStateResult, ActionStatus.COMPONENT_ALREADY_CERTIFIED, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
177 public void testValidateAllResourceInstanceCertified_SuccessWithoutRI() {
178 Resource resource = new Resource();
179 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
180 assertTrue(validateAllResourceInstanceCertified.isLeft());
184 public void testValidateAllResourceInstanceCertified_SuccessWithCertifiedResources() {
185 Resource resource = new Resource();
186 List<ComponentInstance> riList = new ArrayList<ComponentInstance>();
187 ComponentInstance ri = new ComponentInstance();
188 ri.setComponentVersion("2.0");
190 resource.setComponentInstances(riList);
192 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
193 assertTrue(validateAllResourceInstanceCertified.isLeft());
197 public void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMinorVersion() {
198 Resource resource = createVFWithRI("0.3");
200 simulateCertifiedVersionExistForRI();
202 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
204 assertTrue(validateAllResourceInstanceCertified.isRight());
205 ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
206 assertTrue(responseFormat.getStatus() == HttpStatus.SC_FORBIDDEN);
207 assertTrue(responseFormat.getMessageId().equals("SVC4559"));
212 public void testValidateAllResourceInstanceCertified_FailWithUnCertifiedResourcesMajorVersion() {
213 Resource resource = createVFWithRI("1.3");
215 simulateCertifiedVersionExistForRI();
217 Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified = rfcObj.validateAllResourceInstanceCertified(resource);
219 assertTrue(validateAllResourceInstanceCertified.isRight());
220 ResponseFormat responseFormat = validateAllResourceInstanceCertified.right().value();
221 assertTrue(responseFormat.getStatus() == HttpStatus.SC_FORBIDDEN);
222 assertTrue(responseFormat.getMessageId().equals("SVC4559"));
227 public void testDeploymentArtifactRestriction() {
228 Either<? extends Component, ResponseFormat> changeStateResult;
229 Service service = createServiceObject();
230 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
232 Either<User, ResponseFormat> ownerResponse = rfcObj.getComponentOwner(service, ComponentTypeEnum.SERVICE);
233 assertTrue(ownerResponse.isLeft());
234 User owner = ownerResponse.left().value();
236 Either<Service, ResponseFormat> result = Either.left(service);
237 Either<ToscaElement, StorageOperationStatus> reqCertRes = Either.left(ModelConverter.convertToToscaElement(service));
238 Either<Either<ArtifactDefinition, Operation>, ResponseFormat> resultArtifacts = Either.left(Either.left(new ArtifactDefinition()));
239 when(serviceBusinessLogic.generateHeatEnvArtifacts(service, owner, false, true)).thenReturn(result);
240 when(serviceBusinessLogic.generateVfModuleArtifacts(service, owner, false, true)).thenReturn(result);
241 when(serviceBusinessLogic.populateToscaArtifacts(service, owner, true, false, false)).thenReturn(resultArtifacts);
242 when(toscaElementLifecycleOperation.requestCertificationToscaElement(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(reqCertRes);
243 changeStateResult = rfcObj.changeState(ComponentTypeEnum.SERVICE, service, serviceBusinessLogic, user, owner, false, true);
244 assertEquals(changeStateResult.isLeft(), true);
247 private void simulateCertifiedVersionExistForRI() {
248 Component dummyResource = new Resource();
249 Either<Component, StorageOperationStatus> result = Either.left(dummyResource);
250 Mockito.when(toscaOperationFacade.getToscaElement(Mockito.anyString())).thenReturn(Either.left(dummyResource));
251 Mockito.when(toscaOperationFacade.findLastCertifiedToscaElementByUUID(Mockito.any(Component.class))).thenReturn(result);
254 private Resource createVFWithRI(String riVersion) {
255 Resource resource = new Resource();
256 List<ComponentInstance> riList = new ArrayList<ComponentInstance>();
257 ComponentInstance ri = new ComponentInstance();
259 ri.setComponentVersion(riVersion);
260 ri.setComponentUid("someUniqueId");
262 resource.setComponentInstances(riList);