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 org.junit.Assert;
 
  25 import org.junit.Before;
 
  26 import org.junit.Test;
 
  27 import org.mockito.ArgumentMatchers;
 
  28 import org.mockito.InjectMocks;
 
  29 import org.mockito.Mock;
 
  30 import org.mockito.MockitoAnnotations;
 
  31 import org.openecomp.sdc.be.components.utils.OperationalEnvironmentBuilder;
 
  32 import org.openecomp.sdc.be.config.Configuration;
 
  33 import org.openecomp.sdc.be.config.DistributionEngineConfiguration;
 
  34 import org.openecomp.sdc.be.config.DistributionEngineConfiguration.DistributionStatusTopicConfig;
 
  35 import org.openecomp.sdc.be.dao.api.ActionStatus;
 
  36 import org.openecomp.sdc.be.model.Service;
 
  37 import org.openecomp.sdc.be.model.User;
 
  38 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 
  39 import org.openecomp.sdc.be.resources.data.OperationalEnvironmentEntry;
 
  41 import java.util.HashSet;
 
  42 import java.util.List;
 
  45 import java.util.function.Function;
 
  46 import java.util.stream.Collectors;
 
  47 import java.util.stream.Stream;
 
  49 import static org.junit.Assert.assertEquals;
 
  50 import static org.mockito.ArgumentMatchers.any;
 
  51 import static org.mockito.ArgumentMatchers.eq;
 
  52 import static org.mockito.Mockito.mock;
 
  53 import static org.mockito.Mockito.verifyNoInteractions;
 
  54 import static org.mockito.Mockito.when;
 
  56 public class DistributionEngineTest{
 
  58         public static final String DISTRIBUTION_ID = "distId";
 
  59         public static final String ENV_ID = "envId";
 
  60         public static final String USER_ID = "userId";
 
  61         public static final String MODIFIER = "modifier";
 
  64         private DistributionEngine testInstance;
 
  67         private EnvironmentsEngine environmentsEngine;
 
  70         private DistributionNotificationSender distributionNotificationSender;
 
  73         private ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder;
 
  75         private DummyDistributionConfigurationManager distributionEngineConfigurationMock;
 
  77         private Map<String, OperationalEnvironmentEntry> envs;
 
  79     private User modifier = new User();
 
  81     private Configuration.EnvironmentContext environmentContext = mock(Configuration.EnvironmentContext.class);
 
  84         public void setUpMock() throws Exception {
 
  85                 MockitoAnnotations.openMocks(this);
 
  86                 distributionEngineConfigurationMock = new DummyDistributionConfigurationManager();
 
  87                 envs = getEnvs(ENV_ID);
 
  88         modifier.setUserId(USER_ID);
 
  89         modifier.setFirstName(MODIFIER);
 
  90         modifier.setLastName(MODIFIER);
 
  91         when(environmentContext.getDefaultValue()).thenReturn("General_Revenue-Bearing");
 
  92         when(distributionEngineConfigurationMock.getConfiguration().getEnvironmentContext())
 
  93                                 .thenReturn(environmentContext);
 
  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         verifyNoInteractions(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()));
 
 138         private DistributionEngine createTestSubject() {
 
 139                 return new DistributionEngine();
 
 142         @Test(expected=NullPointerException.class)
 
 143         public void testInit() throws Exception {
 
 144                 DistributionEngine testSubject;
 
 147                 testSubject = createTestSubject();
 
 148                 Deencapsulation.invoke(testSubject, "init");
 
 152         public void testShutdown() throws Exception {
 
 153                 DistributionEngine testSubject;
 
 156                 testSubject = createTestSubject();
 
 157                 testSubject.shutdown();
 
 161         public void testValidateConfiguration() throws Exception {
 
 162                 DistributionEngine testSubject;
 
 163                 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
 
 164                 deConfiguration.setDistributionStatusTopic((new DistributionStatusTopicConfig()));
 
 168                 testSubject = createTestSubject();
 
 169                 result = Deencapsulation.invoke(testSubject, "validateConfiguration", deConfiguration);
 
 173         public void testIsValidServers() throws Exception {
 
 174                 DistributionEngine testSubject;
 
 175                 List<String> uebServers = null;
 
 176                 String methodName = "";
 
 177                 String paramName = "";
 
 181                 testSubject = createTestSubject();
 
 183                 result = Deencapsulation.invoke(testSubject, "isValidServers",
 
 184                                 new Object[] { List.class, methodName, paramName });
 
 185                 Assert.assertEquals(false, result);
 
 189         public void testIsValidFqdn() throws Exception {
 
 190                 DistributionEngine testSubject;
 
 191                 String serverFqdn = "";
 
 195                 testSubject = createTestSubject();
 
 196                 result = Deencapsulation.invoke(testSubject, "isValidFqdn", new Object[] { serverFqdn });
 
 200         public void testIsValidParam() throws Exception {
 
 201                 DistributionEngine testSubject;
 
 202                 String paramValue = "";
 
 203                 String methodName = "";
 
 204                 String paramName = "";
 
 208                 testSubject = createTestSubject();
 
 209                 result = Deencapsulation.invoke(testSubject, "isValidParam",
 
 210                                 new Object[] { paramValue, methodName, paramName });
 
 214         public void testIsValidParam_1() throws Exception {
 
 215                 DistributionEngine testSubject;
 
 216                 List<String> paramValue = null;
 
 217                 String methodName = "";
 
 218                 String paramName = "";
 
 222                 testSubject = createTestSubject();
 
 223                 result = Deencapsulation.invoke(testSubject, "isValidParam",
 
 224                                 new Object[] { List.class, methodName, paramName });
 
 228         public void testIsValidObject() throws Exception {
 
 229                 DistributionEngine testSubject;
 
 230                 Object paramValue = null;
 
 231                 String methodName = "";
 
 232                 String paramName = "";
 
 236                 testSubject = createTestSubject();
 
 238                 result = Deencapsulation.invoke(testSubject, "isValidObject",
 
 239                                 new Object[] { Object.class, methodName, paramName });
 
 240                 Assert.assertEquals(false, result);
 
 244         public void testGetEnvironmentErrorDescription() throws Exception {
 
 245                 DistributionEngine testSubject;
 
 246                 StorageOperationStatus status = null;
 
 250                 testSubject = createTestSubject();
 
 251                 result = Deencapsulation.invoke(testSubject, "getEnvironmentErrorDescription",
 
 252                                  StorageOperationStatus.DISTR_ENVIRONMENT_NOT_AVAILABLE);
 
 253                 result = Deencapsulation.invoke(testSubject, "getEnvironmentErrorDescription",
 
 254                                  StorageOperationStatus.DISTR_ENVIRONMENT_NOT_FOUND);
 
 255                 result = Deencapsulation.invoke(testSubject, "getEnvironmentErrorDescription",
 
 256                                  StorageOperationStatus.DISTR_ENVIRONMENT_SENT_IS_INVALID);
 
 257                 result = Deencapsulation.invoke(testSubject, "getEnvironmentErrorDescription",
 
 258                                  StorageOperationStatus.ARTIFACT_NOT_FOUND);
 
 262         public void testIsEnvironmentAvailable() throws Exception {
 
 263                 DistributionEngine testSubject;
 
 265                 StorageOperationStatus result;
 
 268                 testSubject = createTestSubject();
 
 270                 result = testSubject.isEnvironmentAvailable(envName);
 
 271                 Assert.assertEquals(StorageOperationStatus.DISTR_ENVIRONMENT_SENT_IS_INVALID, result);
 
 274                 testSubject = createTestSubject();
 
 276                 result = testSubject.isEnvironmentAvailable(envName);
 
 277                 Assert.assertEquals(StorageOperationStatus.DISTR_ENVIRONMENT_NOT_FOUND, result);
 
 280         //TODO Create test coverage for this method
 
 282         public void testIsEnvironmentAvailable_1() throws Exception {
 
 283                 DistributionEngine testSubject;
 
 284                 StorageOperationStatus result;
 
 287                 testSubject = createTestSubject();
 
 288                 result = testInstance.isEnvironmentAvailable();
 
 291         @Test(expected=NullPointerException.class)
 
 292         public void testDisableEnvironment() throws Exception {
 
 293                 DistributionEngine testSubject;
 
 297                 testSubject = createTestSubject();
 
 298                 testSubject.disableEnvironment(envName);
 
 302         public void testBuildTopicName() throws Exception {
 
 303                 DistributionEngine testSubject;
 
 308                 testSubject = createTestSubject();
 
 309                 result = Deencapsulation.invoke(testSubject, "buildTopicName", new Object[] { envName });
 
 313         public void testIsReadyForDistribution() throws Exception {
 
 314                 DistributionEngine testSubject;
 
 315                 Service service = null;
 
 317                 StorageOperationStatus result;
 
 320                 testSubject = createTestSubject();
 
 321                 result = testSubject.isReadyForDistribution(envName);
 
 326         public void testGetEnvironmentById() throws Exception {
 
 327                 DistributionEngine testSubject;
 
 329                 OperationalEnvironmentEntry result;
 
 332                 when(environmentsEngine.getEnvironmentById(ArgumentMatchers.anyString())).thenReturn(new OperationalEnvironmentEntry());
 
 333                 result = testInstance.getEnvironmentById(opEnvId);
 
 337         public void testBuildServiceForDistribution() throws Exception {
 
 338                 Service service = new Service();
 
 339                 String distributionId = "";
 
 340                 String workloadContext = "";
 
 341                 INotificationData result;
 
 344                 //testSubject = createTestSubject();
 
 345                 when(serviceDistributionArtifactsBuilder.buildResourceInstanceForDistribution(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any())).thenReturn(new NotificationDataImpl());
 
 346                 result = testInstance.buildServiceForDistribution(service, distributionId, workloadContext);