1ff159f31762806dfacb2b616c3c5a3ad7efa2d1
[sdc.git] /
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  * Modifications copyright (c) 2019 Nokia
20  * ================================================================================
21  */
22 package org.openecomp.sdc.be.components.validation;
23
24 import fj.data.Either;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.InjectMocks;
28 import org.mockito.Mock;
29 import org.mockito.MockitoAnnotations;
30 import org.openecomp.sdc.be.components.distribution.engine.IDistributionEngine;
31 import org.openecomp.sdc.be.components.impl.ActivationRequestInformation;
32 import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
33 import org.openecomp.sdc.be.dao.api.ActionStatus;
34 import org.openecomp.sdc.be.dao.cassandra.OperationalEnvironmentDao;
35 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
36 import org.openecomp.sdc.be.datatypes.enums.EnvironmentStatusEnum;
37 import org.openecomp.sdc.be.externalapi.servlet.representation.ServiceDistributionReqInfo;
38 import org.openecomp.sdc.be.impl.ComponentsUtils;
39 import org.openecomp.sdc.be.model.LifecycleStateEnum;
40 import org.openecomp.sdc.be.model.Service;
41 import org.openecomp.sdc.be.model.User;
42 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
43 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
44 import org.openecomp.sdc.be.resources.data.OperationalEnvironmentEntry;
45 import org.openecomp.sdc.exception.ResponseFormat;
46
47 import static org.junit.Assert.assertEquals;
48 import static org.mockito.ArgumentMatchers.anyString;
49 import static org.mockito.ArgumentMatchers.eq;
50 import static org.mockito.Mockito.verifyZeroInteractions;
51 import static org.mockito.Mockito.when;
52
53 public class ServiceDistributionValidationTest {
54
55     private static final String USER_ID = "userId";
56     private static final String SERVICE_ID = "serviceId";
57     private static final String ENV_ID = "envId";
58
59     @InjectMocks
60     private ServiceDistributionValidation testInstance;
61
62     @Mock
63     private UserValidations userValidations;
64
65     @Mock
66     private ToscaOperationFacade toscaOperationFacade;
67
68     @Mock
69     private OperationalEnvironmentDao operationalEnvironmentDao;
70
71     @Mock
72     private IDistributionEngine distributionEngine;
73
74     @Mock
75     private ComponentsUtils componentsUtils;
76
77     private User user;
78     private Service service;
79     private OperationalEnvironmentEntry operationalEnvironmentEntry;
80     private ResponseFormat errResponse;
81
82     @Before
83     public void setUp() throws Exception {
84         MockitoAnnotations.initMocks(this);
85         user = new User();
86         user.setUserId(USER_ID);
87         errResponse = new ResponseFormat();
88         service = new Service();
89         service.setUniqueId(SERVICE_ID);
90         service.setLifecycleState(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS);
91         operationalEnvironmentEntry = new OperationalEnvironmentEntry();
92         operationalEnvironmentEntry.setStatus(EnvironmentStatusEnum.COMPLETED);
93     }
94
95     @Test
96     public void validateActivateServiceRequest_userNotExist() {
97         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenThrow(new ByResponseFormatComponentException(errResponse));
98         try {
99             testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo("distributionData"));
100         } catch(ByResponseFormatComponentException e){
101             assertEquals(errResponse, e.getResponseFormat());
102         }
103         verifyZeroInteractions(toscaOperationFacade, operationalEnvironmentDao, componentsUtils);
104     }
105
106     @Test
107     public void validateActivateServiceRequest_ServiceNotExist() {
108         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(user);
109         when(toscaOperationFacade.getLatestServiceByUuid(eq(SERVICE_ID))).thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
110         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.GENERAL_ERROR, ComponentTypeEnum.SERVICE)).thenReturn(ActionStatus.GENERAL_ERROR);
111         when(componentsUtils.getResponseFormat(ActionStatus.API_RESOURCE_NOT_FOUND, ApiResourceEnum.SERVICE_ID.getValue())).thenReturn(errResponse);
112         Either<ActivationRequestInformation, ResponseFormat> activateServiceReq = testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo("distributionData"));
113         assertEquals(errResponse, activateServiceReq.right().value());
114         verifyZeroInteractions(operationalEnvironmentDao);
115     }
116
117     @Test
118     public void validateActivateServiceRequest_ServiceLifeCycleStateNotReadyForDistribution() {
119         service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
120         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(user);
121         when(toscaOperationFacade.getLatestServiceByUuid(eq(SERVICE_ID))).thenReturn(Either.left(service));
122         when(componentsUtils.getResponseFormat(eq(ActionStatus.INVALID_SERVICE_STATE))).thenReturn(errResponse);
123         Either<ActivationRequestInformation, ResponseFormat> activateServiceReq = testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo("distributionData"));
124         assertEquals(errResponse, activateServiceReq.right().value());
125         verifyZeroInteractions(operationalEnvironmentDao);
126     }
127
128     @Test
129     public void validateActivateServiceRequest_operationalEnvNotExist() throws Exception {
130         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(user);
131         when(toscaOperationFacade.getLatestServiceByUuid(eq(SERVICE_ID))).thenReturn(Either.left(service));
132         when(distributionEngine.getEnvironmentById(ENV_ID)).thenReturn(null);
133         when(componentsUtils.getResponseFormat(eq(ActionStatus.API_RESOURCE_NOT_FOUND), anyString())).thenReturn(errResponse);
134         Either<ActivationRequestInformation, ResponseFormat> activateServiceReq = testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo("distributionData"));
135         assertEquals(errResponse, activateServiceReq.right().value());
136     }
137
138     @Test
139     public void validateActivateServiceRequest_operationalEnvStatusNotComplete() {
140         operationalEnvironmentEntry.setStatus(EnvironmentStatusEnum.IN_PROGRESS);
141         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(user);
142         when(toscaOperationFacade.getLatestServiceByUuid(eq(SERVICE_ID))).thenReturn(Either.left(service));
143         when(distributionEngine.getEnvironmentById(ENV_ID)).thenReturn(operationalEnvironmentEntry);
144         when(componentsUtils.getResponseFormat(eq(ActionStatus.API_RESOURCE_NOT_FOUND), anyString())).thenReturn(errResponse);
145         Either<ActivationRequestInformation, ResponseFormat> activateServiceReq = testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo("distributionData"));
146         assertEquals(errResponse, activateServiceReq.right().value());
147     }
148
149     @Test
150     public void validateActivateServiceRequest_couldNotParseDistributionData() {
151         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(user);
152         when(toscaOperationFacade.getLatestServiceByUuid(eq(SERVICE_ID))).thenReturn(Either.left(service));
153         when(distributionEngine.getEnvironmentById(ENV_ID)).thenReturn(operationalEnvironmentEntry);
154         when(componentsUtils.getResponseFormat(eq(ActionStatus.MISSING_BODY))).thenReturn(errResponse);
155         Either<ActivationRequestInformation, ResponseFormat> activateServiceReq = testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo());
156         assertEquals(errResponse, activateServiceReq.right().value());
157     }
158
159     @Test
160     public void validateActivateServiceRequest_distributionDataHasNoWorkloadContext() {
161         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(user);
162         when(toscaOperationFacade.getLatestServiceByUuid(eq(SERVICE_ID))).thenReturn(Either.left(service));
163         when(distributionEngine.getEnvironmentById(ENV_ID)).thenReturn(operationalEnvironmentEntry);
164         when(componentsUtils.getResponseFormat(eq(ActionStatus.MISSING_BODY))).thenReturn(errResponse);
165         Either<ActivationRequestInformation, ResponseFormat> activateServiceReq = testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo(""));
166         assertEquals(errResponse, activateServiceReq.right().value());
167     }
168
169     @Test
170     public void validateActivateServiceRequest_requestValid() {
171         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(user);
172         when(toscaOperationFacade.getLatestServiceByUuid(eq(SERVICE_ID))).thenReturn(Either.left(service));
173         when(distributionEngine.getEnvironmentById(ENV_ID)).thenReturn(operationalEnvironmentEntry);
174         Either<ActivationRequestInformation, ResponseFormat> activateServiceReq = testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo("context"));
175         assertEquals(service, activateServiceReq.left().value().getServiceToActivate());
176         assertEquals("context", activateServiceReq.left().value().getWorkloadContext());
177     }
178 }