Sync Integ to Master
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / ServiceDistributionBLTest.java
1 package org.openecomp.sdc.be.components;
2
3 import fj.data.Either;
4 import org.junit.Before;
5 import org.junit.Test;
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;
33
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;
38
39 /**
40  * Created by chaya on 10/26/2017.
41  */
42 public class ServiceDistributionBLTest {
43
44     @InjectMocks
45     ServiceBusinessLogic bl = new ServiceBusinessLogic();
46
47     @Mock
48     ServiceDistributionValidation serviceDistributionValidation;
49
50     @Mock
51     HealthCheckBusinessLogic healthCheckBusinessLogic;
52
53     @Mock
54     ToscaOperationFacade toscaOperationFacade;
55
56     ComponentsUtils componentsUtils;
57
58     @Mock
59     DistributionEngine distributionEngine;
60
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;
67
68
69     public ServiceDistributionBLTest() {
70     }
71
72     @Before
73     public void setup() {
74
75         ExternalConfiguration.setAppName("catalog-be");
76         MockitoAnnotations.initMocks(this);
77         // init Configuration
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");
93     }
94
95     @Test
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);
104     }
105
106     @Test
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"));
118     }
119
120     //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
121     @Test
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"));
130     }
131
132     //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
133     @Test
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"));
142     }
143
144     //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
145     @Test
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"));
154     }
155
156     //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
157     @Test
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"));
166     }
167
168     @Test
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"));
177     }
178
179     @Test
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));
188     }
189
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);
197     }
198
199     private Either<String, ResponseFormat> callActivateServiceOnTenantWIthDefaults() {
200         return bl.activateServiceOnTenantEnvironment("serviceId", "envId", modifier, new ServiceDistributionReqInfo("workload"));
201     }
202 }