Autowired annotation for catalog-be
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / ServiceDistributionBLTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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  * ================================================================================
21  */
22 package org.openecomp.sdc.be.components;
23
24 import fj.data.Either;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.InjectMocks;
28 import org.mockito.Mockito;
29 import org.mockito.MockitoAnnotations;
30 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
31 import org.openecomp.sdc.be.components.distribution.engine.DistributionEngine;
32 import org.openecomp.sdc.be.components.distribution.engine.INotificationData;
33 import org.openecomp.sdc.be.components.distribution.engine.NotificationDataImpl;
34 import org.openecomp.sdc.be.components.health.HealthCheckBusinessLogic;
35 import org.openecomp.sdc.be.components.impl.ActivationRequestInformation;
36 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
37 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
38 import org.openecomp.sdc.be.components.path.ForwardingPathValidator;
39 import org.openecomp.sdc.be.components.utils.ComponentBusinessLogicMock;
40 import org.openecomp.sdc.be.components.validation.NodeFilterValidator;
41 import org.openecomp.sdc.be.components.validation.ServiceDistributionValidation;
42 import org.openecomp.sdc.be.config.ConfigurationManager;
43 import org.openecomp.sdc.be.dao.api.ActionStatus;
44 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
45 import org.openecomp.sdc.be.externalapi.servlet.representation.ServiceDistributionReqInfo;
46 import org.openecomp.sdc.be.impl.ComponentsUtils;
47 import org.openecomp.sdc.be.model.ComponentParametersView;
48 import org.openecomp.sdc.be.model.DistributionStatusEnum;
49 import org.openecomp.sdc.be.model.Service;
50 import org.openecomp.sdc.be.model.User;
51 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeFilterOperation;
52 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
53 import org.openecomp.sdc.common.api.ConfigurationSource;
54 import org.openecomp.sdc.common.impl.ExternalConfiguration;
55 import org.openecomp.sdc.common.impl.FSConfigurationSource;
56 import org.openecomp.sdc.common.util.ThreadLocalsHolder;
57 import org.openecomp.sdc.exception.ResponseFormat;
58
59 import static org.junit.Assert.assertEquals;
60 import static org.junit.Assert.assertTrue;
61 import static org.mockito.ArgumentMatchers.any;
62 import static org.mockito.ArgumentMatchers.anyString;
63 import static org.mockito.Mockito.when;
64
65 /**
66  * Created by chaya on 10/26/2017.
67  */
68 public class ServiceDistributionBLTest extends ComponentBusinessLogicMock {
69
70     private final ServiceDistributionValidation serviceDistributionValidation = Mockito.mock(ServiceDistributionValidation.class);
71     private final DistributionEngine distributionEngine = Mockito.mock(DistributionEngine.class);
72     private final HealthCheckBusinessLogic healthCheckBusinessLogic = Mockito.mock(HealthCheckBusinessLogic.class);
73     private final ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
74     private final ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
75     private final ForwardingPathValidator forwardingPathValidator = Mockito.mock(ForwardingPathValidator.class);
76     private final UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
77     private final NodeFilterOperation serviceFilterOperation = Mockito.mock(NodeFilterOperation.class);
78     private final NodeFilterValidator serviceFilterValidator = Mockito.mock(NodeFilterValidator.class);
79
80     @InjectMocks
81     ServiceBusinessLogic bl = new ServiceBusinessLogic(elementDao, groupOperation, groupInstanceOperation,
82         groupTypeOperation, groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation,
83         artifactsBusinessLogic, distributionEngine, componentInstanceBusinessLogic,
84         serviceDistributionValidation, forwardingPathValidator, uiComponentDataConverter,
85         serviceFilterOperation, serviceFilterValidator, artifactToscaOperation);
86
87     ComponentsUtils componentsUtils;
88
89     private Service serviceToActivate;
90     private ActivationRequestInformation activationRequestInformation;
91     private String WORKLOAD_CONTEXT = "vnfContext";
92     private String TENANT = "tenant";
93     private String DID = "distributionId";
94     private User modifier;
95
96
97     public ServiceDistributionBLTest() {
98     }
99
100     @Before
101     public void setup() {
102
103         ExternalConfiguration.setAppName("catalog-be");
104         MockitoAnnotations.initMocks(this);
105         // init Configuration
106         String appConfigDir = "src/test/resources/config/catalog-be";
107         ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
108         ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
109         componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
110         bl.setComponentsUtils(componentsUtils);
111         serviceToActivate = new Service();
112         serviceToActivate.setDistributionStatus(DistributionStatusEnum.DISTRIBUTION_NOT_APPROVED);
113         activationRequestInformation = new ActivationRequestInformation(serviceToActivate, WORKLOAD_CONTEXT, TENANT);
114         when(toscaOperationFacade.getToscaElement(anyString(), any(ComponentParametersView.class)))
115                 .thenReturn(Either.left(serviceToActivate));
116         when(distributionEngine.buildServiceForDistribution(any(Service.class), anyString(), anyString()))
117                 .thenReturn(new NotificationDataImpl());
118         modifier = new User();
119         modifier.setUserId("uid");
120         modifier.setFirstName("user");
121     }
122
123     @Test
124     public void testActivateServiceOnTenantValidationFails() {
125         int VALIDATION_FAIL_STATUS = 666;
126         when(serviceDistributionValidation.validateActivateServiceRequest
127                 (anyString(), anyString(),any(User.class), any(ServiceDistributionReqInfo.class)))
128                 .thenReturn(Either.right(new ResponseFormat(VALIDATION_FAIL_STATUS)));
129         Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
130         assertTrue(stringResponseFormatEither.isRight());
131         assertEquals((int) stringResponseFormatEither.right().value().getStatus(), VALIDATION_FAIL_STATUS);
132     }
133
134     //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
135     @Test
136     public void testDistributionAuthenticationFails() {
137         mockAllMethodsUntilDENotification();
138         when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(),any(User.class)))
139                 .thenReturn(ActionStatus.AUTHENTICATION_ERROR);
140         Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
141         assertTrue(stringResponseFormatEither.isRight());
142         assertEquals(502, (int) stringResponseFormatEither.right().value().getStatus());
143         assertEquals("SVC4676", stringResponseFormatEither.right().value().getMessageId());
144     }
145
146     //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
147     @Test
148     public void testDistributionUnknownHostFails() {
149         mockAllMethodsUntilDENotification();
150         when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(), any(User.class)))
151                 .thenReturn(ActionStatus.UNKNOWN_HOST);
152         Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
153         assertTrue(stringResponseFormatEither.isRight());
154         assertEquals(502, (int) stringResponseFormatEither.right().value().getStatus());
155         assertEquals("SVC4676", stringResponseFormatEither.right().value().getMessageId());
156     }
157
158     //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
159     @Test
160     public void testDistributionConnectionErrorFails() {
161         mockAllMethodsUntilDENotification();
162         when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(), any(User.class)))
163                 .thenReturn(ActionStatus.CONNNECTION_ERROR);
164         Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
165         assertTrue(stringResponseFormatEither.isRight());
166         assertEquals(502, (int) stringResponseFormatEither.right().value().getStatus());
167         assertEquals("SVC4676", stringResponseFormatEither.right().value().getMessageId());
168     }
169
170     //TODO see if we want to add ActionStatus.AUTHENTICATION_ERROR to error-configuration.yaml
171     @Test
172     public void testDistributionObjectNotFoundFails() {
173         mockAllMethodsUntilDENotification();
174         when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(), any(User.class)))
175                 .thenReturn(ActionStatus.OBJECT_NOT_FOUND);
176         Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
177         assertTrue(stringResponseFormatEither.isRight());
178         assertEquals(502, (int) stringResponseFormatEither.right().value().getStatus());
179         assertEquals("SVC4676", stringResponseFormatEither.right().value().getMessageId());
180     }
181
182     @Test
183     public void testDistributionGeneralFails() {
184         mockAllMethodsUntilDENotification();
185         when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(), any(User.class)))
186                 .thenReturn(ActionStatus.GENERAL_ERROR);
187         Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
188         assertTrue(stringResponseFormatEither.isRight());
189         assertEquals(502, (int) stringResponseFormatEither.right().value().getStatus());
190         assertEquals("SVC4676", stringResponseFormatEither.right().value().getMessageId());
191     }
192
193     @Test
194     public void testDistributionOk() {
195         mockAllMethodsUntilDENotification();
196         ThreadLocalsHolder.setUuid(DID);
197         when(distributionEngine.notifyService(anyString(),any(Service.class), any(INotificationData.class), anyString(), anyString(), any(User.class)))
198                 .thenReturn(ActionStatus.OK);
199         Either<String, ResponseFormat> stringResponseFormatEither = callActivateServiceOnTenantWIthDefaults();
200         assertTrue(stringResponseFormatEither.isLeft());
201         assertEquals(stringResponseFormatEither.left().value(), DID);
202     }
203
204     private void mockAllMethodsUntilDENotification() {
205         when(serviceDistributionValidation.validateActivateServiceRequest
206                 (anyString(), anyString(),any(User.class), any(ServiceDistributionReqInfo.class)))
207                 .thenReturn(Either.left(activationRequestInformation));
208         when(healthCheckBusinessLogic.isDistributionEngineUp()).thenReturn(true);
209     }
210
211     private Either<String, ResponseFormat> callActivateServiceOnTenantWIthDefaults() {
212         return bl.activateServiceOnTenantEnvironment("serviceId", "envId", modifier, new ServiceDistributionReqInfo("workload"));
213     }
214 }