1 package org.openecomp.sdc.be.components;
3 import static org.junit.Assert.assertTrue;
4 import static org.mockito.ArgumentMatchers.any;
5 import static org.mockito.ArgumentMatchers.anyString;
6 import static org.mockito.Mockito.when;
8 import org.junit.Before;
10 import org.mockito.InjectMocks;
11 import org.mockito.Mock;
12 import org.mockito.Mockito;
13 import org.mockito.MockitoAnnotations;
14 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
15 import org.openecomp.sdc.be.components.distribution.engine.DistributionEngine;
16 import org.openecomp.sdc.be.components.distribution.engine.INotificationData;
17 import org.openecomp.sdc.be.components.distribution.engine.NotificationDataImpl;
18 import org.openecomp.sdc.be.components.health.HealthCheckBusinessLogic;
19 import org.openecomp.sdc.be.components.impl.ActivationRequestInformation;
20 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
21 import org.openecomp.sdc.be.components.validation.ServiceDistributionValidation;
22 import org.openecomp.sdc.be.config.ConfigurationManager;
23 import org.openecomp.sdc.be.dao.api.ActionStatus;
24 import org.openecomp.sdc.be.externalapi.servlet.representation.ServiceDistributionReqInfo;
25 import org.openecomp.sdc.be.impl.ComponentsUtils;
26 import org.openecomp.sdc.be.model.ComponentParametersView;
27 import org.openecomp.sdc.be.model.DistributionStatusEnum;
28 import org.openecomp.sdc.be.model.Service;
29 import org.openecomp.sdc.be.model.User;
30 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
31 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
32 import org.openecomp.sdc.common.api.ConfigurationSource;
33 import org.openecomp.sdc.common.impl.ExternalConfiguration;
34 import org.openecomp.sdc.common.impl.FSConfigurationSource;
35 import org.openecomp.sdc.common.util.ThreadLocalsHolder;
36 import org.openecomp.sdc.exception.ResponseFormat;
38 import fj.data.Either;
41 * Created by chaya on 10/26/2017.
43 public class ServiceDistributionBLTest {
46 ServiceBusinessLogic bl = new ServiceBusinessLogic();
49 ServiceDistributionValidation serviceDistributionValidation;
52 HealthCheckBusinessLogic healthCheckBusinessLogic;
55 ToscaOperationFacade toscaOperationFacade;
57 ComponentsUtils componentsUtils;
60 DistributionEngine distributionEngine;
62 private Service serviceToActivate;
63 private ActivationRequestInformation activationRequestInformation;
64 private String WORKLOAD_CONTEXT = "vnfContext";
65 private String TENANT = "tenant";
66 private String DID = "distributionId";
67 private User modifier;
70 public ServiceDistributionBLTest() {
76 ExternalConfiguration.setAppName("catalog-be");
77 MockitoAnnotations.initMocks(this);
79 String appConfigDir = "src/test/resources/config/catalog-be";
80 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
81 ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
82 componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
83 bl.setComponentsUtils(componentsUtils);
84 serviceToActivate = new Service();
85 serviceToActivate.setDistributionStatus(DistributionStatusEnum.DISTRIBUTION_NOT_APPROVED);
86 activationRequestInformation = new ActivationRequestInformation(serviceToActivate, WORKLOAD_CONTEXT, TENANT);
87 when(toscaOperationFacade.getToscaElement(anyString(), any(ComponentParametersView.class)))
88 .thenReturn(Either.left(serviceToActivate));
89 when(distributionEngine.buildServiceForDistribution(any(Service.class), anyString(), anyString()))
90 .thenReturn(new NotificationDataImpl());
91 modifier = new User();
92 modifier.setUserId("uid");
93 modifier.setFirstName("user");
97 public void testActivateServiceOnTenantValidationFails() {
98 int VALIDATION_FAIL_STATUS = 666;
99 when(serviceDistributionValidation.validateActivateServiceRequest
100 (anyString(), anyString(),any(User.class), any(ServiceDistributionReqInfo.class)))
101 .thenReturn(Either.right(new ResponseFormat(VALIDATION_FAIL_STATUS)));
102 Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
103 assertTrue(stringResponseFormatEither.isRight());
104 assertTrue(stringResponseFormatEither.right().value().getStatus() == VALIDATION_FAIL_STATUS);
108 public void testNoDeploymentArtifacts() {
109 when(serviceDistributionValidation.validateActivateServiceRequest
110 (anyString(), anyString(),any(User.class), any(ServiceDistributionReqInfo.class)))
111 .thenReturn(Either.left(activationRequestInformation));
112 when(healthCheckBusinessLogic.isDistributionEngineUp()).thenReturn(true);
113 when(distributionEngine.verifyServiceHasDeploymentArtifacts(any(Service.class)))
114 .thenReturn(StorageOperationStatus.DISTR_ARTIFACT_NOT_FOUND);
115 Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
116 assertTrue(stringResponseFormatEither.isRight());
117 assertTrue(stringResponseFormatEither.right().value().getStatus() == 409);
118 assertTrue(stringResponseFormatEither.right().value().getMessageId().equals("SVC4139"));
121 //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
123 public void testDistributionAuthenticationFails() {
124 mockAllMethodsUntilDENotification();
125 when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(),anyString(), anyString(), anyString()))
126 .thenReturn(ActionStatus.AUTHENTICATION_ERROR);
127 Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
128 assertTrue(stringResponseFormatEither.isRight());
129 assertTrue(stringResponseFormatEither.right().value().getStatus() == 502);
130 assertTrue(stringResponseFormatEither.right().value().getMessageId().equals("SVC4676"));
133 //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
135 public void testDistributionUnknownHostFails() {
136 mockAllMethodsUntilDENotification();
137 when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(),anyString(), anyString()))
138 .thenReturn(ActionStatus.UNKNOWN_HOST);
139 Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
140 assertTrue(stringResponseFormatEither.isRight());
141 assertTrue(stringResponseFormatEither.right().value().getStatus() == 502);
142 assertTrue(stringResponseFormatEither.right().value().getMessageId().equals("SVC4676"));
145 //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
147 public void testDistributionConnectionErrorFails() {
148 mockAllMethodsUntilDENotification();
149 when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(),anyString(), anyString()))
150 .thenReturn(ActionStatus.CONNNECTION_ERROR);
151 Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
152 assertTrue(stringResponseFormatEither.isRight());
153 assertTrue(stringResponseFormatEither.right().value().getStatus() == 502);
154 assertTrue(stringResponseFormatEither.right().value().getMessageId().equals("SVC4676"));
157 //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
159 public void testDistributionObjectNotFoundFails() {
160 mockAllMethodsUntilDENotification();
161 when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(),anyString(), anyString()))
162 .thenReturn(ActionStatus.OBJECT_NOT_FOUND);
163 Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
164 assertTrue(stringResponseFormatEither.isRight());
165 assertTrue(stringResponseFormatEither.right().value().getStatus() == 502);
166 assertTrue(stringResponseFormatEither.right().value().getMessageId().equals("SVC4676"));
170 public void testDistributionGeneralFails() {
171 mockAllMethodsUntilDENotification();
172 when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(),anyString(), anyString()))
173 .thenReturn(ActionStatus.GENERAL_ERROR);
174 Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
175 assertTrue(stringResponseFormatEither.isRight());
176 assertTrue(stringResponseFormatEither.right().value().getStatus() == 502);
177 assertTrue(stringResponseFormatEither.right().value().getMessageId().equals("SVC4676"));
181 public void testDistributionOk() {
182 mockAllMethodsUntilDENotification();
183 ThreadLocalsHolder.setUuid(DID);
184 when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(),anyString(), anyString(), anyString()))
185 .thenReturn(ActionStatus.OK);
186 Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
187 assertTrue(stringResponseFormatEither.isLeft());
188 assertTrue(stringResponseFormatEither.left().value().equals(DID));
191 private void mockAllMethodsUntilDENotification() {
192 when(serviceDistributionValidation.validateActivateServiceRequest
193 (anyString(), anyString(),any(User.class), any(ServiceDistributionReqInfo.class)))
194 .thenReturn(Either.left(activationRequestInformation));
195 when(healthCheckBusinessLogic.isDistributionEngineUp()).thenReturn(true);
196 when(distributionEngine.verifyServiceHasDeploymentArtifacts(any(Service.class)))
197 .thenReturn(StorageOperationStatus.OK);
200 private Either<String, ResponseFormat> callActivateServiceOnTenantWIthDefaults() {
201 return bl.activateServiceOnTenantEnvironment("serviceId", "envId", modifier, new ServiceDistributionReqInfo("workload"));