2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.components.distribution.engine;
23 import mockit.Deencapsulation;
24 import java.util.LinkedList;
25 import org.junit.Assert;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.mockito.ArgumentMatchers;
29 import org.mockito.InjectMocks;
30 import org.mockito.Mock;
31 import org.mockito.Mockito;
32 import org.mockito.MockitoAnnotations;
33 import org.openecomp.sdc.be.components.BeConfDependentTest;
34 import org.openecomp.sdc.be.components.utils.OperationalEnvironmentBuilder;
35 import org.openecomp.sdc.be.config.DistributionEngineConfiguration;
36 import org.openecomp.sdc.be.config.DistributionEngineConfiguration.CreateTopicConfig;
37 import org.openecomp.sdc.be.config.DistributionEngineConfiguration.DistributionStatusTopicConfig;
38 import org.openecomp.sdc.be.dao.api.ActionStatus;
39 import org.openecomp.sdc.be.model.Service;
40 import org.openecomp.sdc.be.model.User;
41 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
42 import org.openecomp.sdc.be.resources.data.OperationalEnvironmentEntry;
44 import java.util.HashSet;
45 import java.util.List;
48 import java.util.function.Function;
49 import java.util.stream.Collectors;
50 import java.util.stream.Stream;
52 import static org.junit.Assert.assertEquals;
53 import static org.mockito.ArgumentMatchers.any;
54 import static org.mockito.ArgumentMatchers.eq;
55 import static org.mockito.Mockito.verifyZeroInteractions;
56 import static org.mockito.Mockito.when;
58 public class DistributionEngineTest extends BeConfDependentTest{
60 public static final String DISTRIBUTION_ID = "distId";
61 public static final String ENV_ID = "envId";
62 public static final String USER_ID = "userId";
63 public static final String MODIFIER = "modifier";
66 private DistributionEngine testInstance;
69 private EnvironmentsEngine environmentsEngine;
72 private DistributionNotificationSender distributionNotificationSender;
75 private ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder;
78 private DistributionEngineClusterHealth distributionEngineClusterHealth;
80 private DummyDistributionConfigurationManager distributionEngineConfigurationMock;
82 private Map<String, OperationalEnvironmentEntry> envs;
84 private User modifier = new User();
87 public void setUpMock() throws Exception {
88 MockitoAnnotations.initMocks(this);
89 distributionEngineConfigurationMock = new DummyDistributionConfigurationManager();
90 envs = getEnvs(ENV_ID);
91 modifier.setUserId(USER_ID);
92 modifier.setFirstName(MODIFIER);
93 modifier.setLastName(MODIFIER);
97 public void notifyService() throws Exception {
98 NotificationDataImpl notificationData = new NotificationDataImpl();
99 Service service = new Service();
100 when(environmentsEngine.getEnvironmentById(ENV_ID)).thenReturn(envs.get(ENV_ID));
101 when(distributionEngineConfigurationMock.getConfigurationMock().getDistributionNotifTopicName()).thenReturn("topic");
102 when(distributionNotificationSender.sendNotification(eq("topic-ENVID"), eq(DISTRIBUTION_ID), any(EnvironmentMessageBusData.class),
103 any(NotificationDataImpl.class), any(Service.class), any(User.class)))
104 .thenReturn(ActionStatus.OK);
105 ActionStatus actionStatus = testInstance.notifyService(DISTRIBUTION_ID, service, notificationData, ENV_ID, modifier);
106 assertEquals(ActionStatus.OK, actionStatus);
110 public void notifyService_couldNotResolveEnvironment() throws Exception {
111 when(environmentsEngine.getEnvironments()).thenReturn(envs);
112 ActionStatus actionStatus = testInstance.notifyService(DISTRIBUTION_ID, new Service(), new NotificationDataImpl(), "someNonExisitngEnv", modifier);
113 assertEquals(ActionStatus.DISTRIBUTION_ENVIRONMENT_NOT_AVAILABLE, actionStatus);
114 verifyZeroInteractions(distributionNotificationSender);
118 public void notifyService_failedWhileSendingNotification() throws Exception {
119 NotificationDataImpl notificationData = new NotificationDataImpl();
120 Service service = new Service();
121 when(environmentsEngine.getEnvironmentById(ENV_ID)).thenReturn(envs.get(ENV_ID));
122 when(distributionEngineConfigurationMock.getConfigurationMock().getDistributionNotifTopicName()).thenReturn("topic");
123 when(distributionNotificationSender.sendNotification(eq("topic-ENVID"), eq(DISTRIBUTION_ID), any(EnvironmentMessageBusData.class),
124 any(NotificationDataImpl.class), any(Service.class), any(User.class)))
125 .thenReturn(ActionStatus.GENERAL_ERROR);
126 ActionStatus actionStatus = testInstance.notifyService(DISTRIBUTION_ID, service, notificationData, ENV_ID, modifier);
127 assertEquals(ActionStatus.GENERAL_ERROR, actionStatus);
130 private Map<String, OperationalEnvironmentEntry> getEnvs(String... environmentIds) {
131 Set<String> uebAddress = new HashSet<>();
132 uebAddress.add("someAddress");
133 return Stream.of(environmentIds)
134 .map(id -> new OperationalEnvironmentBuilder().setEnvId(id).setDmaapUebAddress(uebAddress).build())
135 .collect(Collectors.toMap(OperationalEnvironmentEntry::getEnvironmentId, Function.identity()));
139 public void testIsActive() throws Exception {
141 testInstance.isActive();
145 public void testInitDisabled() throws Exception {
147 Deencapsulation.invoke(testInstance, "init");
151 public void testInitNotValidConfig() throws Exception {
152 DistributionEngine testSubject;
155 Mockito.when(distributionEngineConfigurationMock.getConfigurationMock().isStartDistributionEngine())
157 Mockito.when(distributionEngineConfigurationMock.configurationMock.getDistributionStatusTopic())
158 .thenReturn(new DistributionStatusTopicConfig());
159 Deencapsulation.invoke(testInstance, "init");
163 public void testInit() throws Exception {
164 DistributionEngine testSubject;
167 Mockito.when(distributionEngineConfigurationMock.getConfigurationMock().isStartDistributionEngine())
169 DistributionStatusTopicConfig value = new DistributionStatusTopicConfig();
170 value.setConsumerId("mock");
171 value.setConsumerGroup("mock");
172 value.setFetchTimeSec(0);
173 value.setPollingIntervalSec(0);
174 LinkedList<String> value2 = new LinkedList<>();
175 value2.add("uebsb91kcdc.it.att.com:3904");
176 value2.add("uebsb92kcdc.it.att.com:3904");
177 Mockito.when(distributionEngineConfigurationMock.configurationMock.getUebServers()).thenReturn(value2);
178 Mockito.when(distributionEngineConfigurationMock.configurationMock.getEnvironments()).thenReturn(value2);
179 Mockito.when(distributionEngineConfigurationMock.configurationMock.getUebPublicKey()).thenReturn("mock");
180 Mockito.when(distributionEngineConfigurationMock.configurationMock.getUebSecretKey()).thenReturn("mock");
181 Mockito.when(distributionEngineConfigurationMock.configurationMock.getDistributionNotifTopicName())
183 Mockito.when(distributionEngineConfigurationMock.configurationMock.getDistributionStatusTopicName())
185 Mockito.when(distributionEngineConfigurationMock.configurationMock.getCreateTopic())
186 .thenReturn(new CreateTopicConfig());
187 Mockito.when(distributionEngineConfigurationMock.configurationMock.getDistributionStatusTopic())
189 Deencapsulation.invoke(testInstance, "init");
193 public void testShutdown() throws Exception {
194 DistributionEngine testSubject;
197 testInstance.shutdown();
201 public void testValidateConfiguration() throws Exception {
202 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
203 deConfiguration.setDistributionStatusTopic((new DistributionStatusTopicConfig()));
207 result = Deencapsulation.invoke(testInstance, "validateConfiguration", deConfiguration);
211 public void testIsValidServers() throws Exception {
212 List<String> uebServers = null;
213 String methodName = "";
214 String paramName = "";
219 result = Deencapsulation.invoke(testInstance, "isValidServers",
220 new Object[] { List.class, methodName, paramName });
221 Assert.assertEquals(false, result);
225 public void testIsValidFqdn() throws Exception {
226 String serverFqdn = "";
230 result = Deencapsulation.invoke(testInstance, "isValidFqdn", new Object[] { serverFqdn });
234 public void testIsValidParam() throws Exception {
235 String paramValue = "";
236 String methodName = "";
237 String paramName = "";
241 result = Deencapsulation.invoke(testInstance, "isValidParam",
242 new Object[] { paramValue, methodName, paramName });
246 public void testIsValidParam_1() throws Exception {
247 List<String> paramValue = null;
248 String methodName = "";
249 String paramName = "";
253 result = Deencapsulation.invoke(testInstance, "isValidParam",
254 new Object[] { List.class, methodName, paramName });
258 public void testIsValidObject() throws Exception {
259 Object paramValue = null;
260 String methodName = "";
261 String paramName = "";
266 result = Deencapsulation.invoke(testInstance, "isValidObject",
267 new Object[] { Object.class, methodName, paramName });
268 Assert.assertEquals(false, result);
272 public void testGetEnvironmentErrorDescription() throws Exception {
273 StorageOperationStatus status = null;
277 result = Deencapsulation.invoke(testInstance, "getEnvironmentErrorDescription",
278 StorageOperationStatus.DISTR_ENVIRONMENT_NOT_AVAILABLE);
279 result = Deencapsulation.invoke(testInstance, "getEnvironmentErrorDescription",
280 StorageOperationStatus.DISTR_ENVIRONMENT_NOT_FOUND);
281 result = Deencapsulation.invoke(testInstance, "getEnvironmentErrorDescription",
282 StorageOperationStatus.DISTR_ENVIRONMENT_SENT_IS_INVALID);
283 result = Deencapsulation.invoke(testInstance, "getEnvironmentErrorDescription",
284 StorageOperationStatus.ARTIFACT_NOT_FOUND);
288 public void testIsEnvironmentAvailable() throws Exception {
289 DistributionEngine testSubject;
291 StorageOperationStatus result;
295 result = testInstance.isEnvironmentAvailable(envName);
296 Assert.assertEquals(StorageOperationStatus.DISTR_ENVIRONMENT_SENT_IS_INVALID, result);
300 result = testInstance.isEnvironmentAvailable(envName);
301 Assert.assertEquals(StorageOperationStatus.DISTR_ENVIRONMENT_NOT_FOUND, result);
305 public void testIsEnvironmentAvailable_1() throws Exception {
306 DistributionEngine testSubject;
307 StorageOperationStatus result;
309 LinkedList<String> value = new LinkedList<>();
311 Mockito.when(distributionEngineConfigurationMock.configurationMock.getEnvironments()).thenReturn(value);
312 testInstance.isEnvironmentAvailable();
316 public void testBuildTopicName() throws Exception {
321 result = Deencapsulation.invoke(testInstance, "buildTopicName", new Object[] { envName });
327 public void testGetEnvironmentById() throws Exception {
328 DistributionEngine testSubject;
330 OperationalEnvironmentEntry result;
333 when(environmentsEngine.getEnvironmentById(ArgumentMatchers.anyString()))
334 .thenReturn(new OperationalEnvironmentEntry());
335 result = testInstance.getEnvironmentById(opEnvId);
339 public void testBuildServiceForDistribution() throws Exception {
340 Service service = new Service();
341 String distributionId = "";
342 String workloadContext = "";
343 INotificationData result;
346 // testSubject = createTestSubject();
347 when(serviceDistributionArtifactsBuilder.buildResourceInstanceForDistribution(ArgumentMatchers.any(),
348 ArgumentMatchers.any(), ArgumentMatchers.any())).thenReturn(new NotificationDataImpl());
349 result = testInstance.buildServiceForDistribution(service, distributionId, workloadContext);