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