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=========================================================
19 * Modifications copyright (c) 2019 Nokia
20 * ================================================================================
22 package org.openecomp.sdc.be.components.validation;
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.jsontitan.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;
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;
53 public class ServiceDistributionValidationTest {
55 private static final String USER_ID = "userId";
56 private static final String SERVICE_ID = "serviceId";
57 private static final String ENV_ID = "envId";
60 private ServiceDistributionValidation testInstance;
63 private UserValidations userValidations;
66 private ToscaOperationFacade toscaOperationFacade;
69 private OperationalEnvironmentDao operationalEnvironmentDao;
72 private IDistributionEngine distributionEngine;
75 private ComponentsUtils componentsUtils;
78 private Service service;
79 private OperationalEnvironmentEntry operationalEnvironmentEntry;
80 private ResponseFormat errResponse;
83 public void setUp() throws Exception {
84 MockitoAnnotations.initMocks(this);
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);
96 public void validateActivateServiceRequest_userNotExist() {
97 when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenThrow(new ByResponseFormatComponentException(errResponse));
99 testInstance.validateActivateServiceRequest(SERVICE_ID, ENV_ID, user, new ServiceDistributionReqInfo("distributionData"));
100 } catch(ByResponseFormatComponentException e){
101 assertEquals(errResponse, e.getResponseFormat());
103 verifyZeroInteractions(toscaOperationFacade, operationalEnvironmentDao, componentsUtils);
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);
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);
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());
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());
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());
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());
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());