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