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