2 * ============LICENSE_START=======================================================
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
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 static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertTrue;
26 import static org.mockito.Mockito.when;
29 import java.util.ArrayList;
30 import java.util.HashSet;
31 import java.util.List;
33 import java.util.concurrent.atomic.AtomicBoolean;
35 import org.junit.BeforeClass;
36 import org.junit.Test;
37 import org.mockito.Mock;
38 import org.mockito.Mockito;
39 import org.openecomp.sdc.be.config.ConfigurationManager;
40 import org.openecomp.sdc.be.config.DistributionEngineConfiguration;
41 import org.openecomp.sdc.be.config.DistributionEngineConfiguration.CreateTopicConfig;
42 import org.openecomp.sdc.be.distribution.api.client.CambriaOperationStatus;
43 import org.openecomp.sdc.be.impl.ComponentsUtils;
44 import org.openecomp.sdc.common.api.ConfigurationSource;
45 import org.openecomp.sdc.common.impl.ExternalConfiguration;
46 import org.openecomp.sdc.common.impl.FSConfigurationSource;
48 import fj.data.Either;
50 public class DistributionEngineInitTaskTest {
53 private ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
56 private CambriaHandler cambriaHandler = Mockito.mock(CambriaHandler.class);
58 // public static final IAuditingDao iAuditingDao =
59 // Mockito.mock(AuditingDao.class);
62 public static void setup() {
63 // ExternalConfiguration.setAppName("distribEngine1");
64 ExternalConfiguration.setAppName("catalog-be");
65 ExternalConfiguration.setConfigDir("src/test/resources/config");
66 ExternalConfiguration.listenForChanges();
68 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), ExternalConfiguration.getConfigDir() + File.separator + ExternalConfiguration.getAppName());
70 ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
74 public void checkIncrement() {
76 String envName = "PrOD";
78 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
81 deConfiguration.setInitRetryIntervalSec(retry);
82 deConfiguration.setInitMaxIntervalSec(maxRetry);
83 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
85 for (int i = 1; i < 5; i++) {
86 initTask.incrementRetryInterval();
87 assertEquals("check next retry interval", initTask.getCurrentRetryInterval(), retry * (long) Math.pow(2, i));
90 initTask.incrementRetryInterval();
91 assertEquals("check next retry interval reach max retry interval", initTask.getCurrentRetryInterval(), maxRetry);
96 public void testInitFlowScenarioSuccess() {
98 String notifTopic = "notif";
99 String statusTopic = "status";
101 List<String> uebServers = new ArrayList<>();
102 uebServers.add("server1");
103 CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.NOT_FOUND);
104 Either<Set<String>, CambriaErrorResponse> right = Either.right(cambriaErrorResponse);
105 when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(right);
107 String envName = "PrOD";
109 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
110 deConfiguration.setUebServers(uebServers);
113 deConfiguration.setInitRetryIntervalSec(retry);
114 deConfiguration.setInitMaxIntervalSec(maxRetry);
115 deConfiguration.setDistributionNotifTopicName(notifTopic);
116 deConfiguration.setDistributionStatusTopicName(statusTopic);
117 CreateTopicConfig createTopic = new CreateTopicConfig();
118 createTopic.setPartitionCount(1);
119 createTopic.setReplicationCount(1);
120 deConfiguration.setCreateTopic(createTopic);
122 cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
124 String realNotifTopic = notifTopic + "-" + envName.toUpperCase();
125 String realStatusTopic = statusTopic + "-" + envName.toUpperCase();
126 when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realNotifTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
127 when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realStatusTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
129 cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
130 when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
131 .thenReturn(cambriaErrorResponse);
133 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
134 initTask.setCambriaHandler(cambriaHandler);
136 boolean initFlow = initTask.initFlow();
137 assertTrue("check init flow succeed", initFlow);
142 public void testInitFlowScenarioSuccessTopicsAlreadyExists() {
144 String envName = "PrOD";
145 String notifTopic = "notif";
146 String statusTopic = "status";
148 String realNotifTopic = notifTopic + "-" + envName.toUpperCase();
149 String realStatusTopic = statusTopic + "-" + envName.toUpperCase();
151 Set<String> topics = new HashSet<String>();
152 topics.add(realNotifTopic);
153 topics.add(realStatusTopic);
155 List<String> uebServers = new ArrayList<>();
156 uebServers.add("server1");
157 Either<Set<String>, CambriaErrorResponse> left = Either.left(topics);
159 when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(left);
161 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
162 deConfiguration.setUebServers(uebServers);
165 deConfiguration.setInitRetryIntervalSec(retry);
166 deConfiguration.setInitMaxIntervalSec(maxRetry);
167 deConfiguration.setDistributionNotifTopicName(notifTopic);
168 deConfiguration.setDistributionStatusTopicName(statusTopic);
169 CreateTopicConfig createTopic = new CreateTopicConfig();
170 createTopic.setPartitionCount(1);
171 createTopic.setReplicationCount(1);
172 deConfiguration.setCreateTopic(createTopic);
174 CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
175 when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
176 .thenReturn(cambriaErrorResponse);
178 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
179 initTask.setCambriaHandler(cambriaHandler);
182 boolean initFlow = initTask.initFlow();
183 assertTrue("check init flow succeed", initFlow);
184 } catch (Exception e) {
185 assertTrue("Should not throw exception", false);
191 public void testInitFlowScenarioFailToRegister() {
193 String notifTopic = "notif";
194 String statusTopic = "status";
196 List<String> uebServers = new ArrayList<>();
197 uebServers.add("server1");
198 CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.NOT_FOUND);
199 Either<Set<String>, CambriaErrorResponse> right = Either.right(cambriaErrorResponse);
200 when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(right);
202 String envName = "PrOD";
204 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
205 deConfiguration.setUebServers(uebServers);
208 deConfiguration.setInitRetryIntervalSec(retry);
209 deConfiguration.setInitMaxIntervalSec(maxRetry);
210 deConfiguration.setDistributionNotifTopicName(notifTopic);
211 deConfiguration.setDistributionStatusTopicName(statusTopic);
212 CreateTopicConfig createTopic = new CreateTopicConfig();
213 createTopic.setPartitionCount(1);
214 createTopic.setReplicationCount(1);
215 deConfiguration.setCreateTopic(createTopic);
217 cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
219 String realNotifTopic = notifTopic + "-" + envName.toUpperCase();
220 String realStatusTopic = statusTopic + "-" + envName.toUpperCase();
221 when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realNotifTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
222 when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realStatusTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
224 when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(SubscriberTypeEnum.class)))
225 .thenReturn(new CambriaErrorResponse(CambriaOperationStatus.OK));
227 when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(SubscriberTypeEnum.class)))
228 .thenReturn(new CambriaErrorResponse(CambriaOperationStatus.CONNNECTION_ERROR));
231 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
232 initTask.setCambriaHandler(cambriaHandler);
234 boolean initFlow = initTask.initFlow();
235 assertFalse("check init flow failed", initFlow);
240 public void testInitFlowScenario1GetTopicsFailed() {
242 List<String> uebServers = new ArrayList<>();
243 uebServers.add("server1");
244 CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.CONNNECTION_ERROR);
245 Either<Set<String>, CambriaErrorResponse> right = Either.right(cambriaErrorResponse);
246 when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(right);
248 String envName = "PrOD";
250 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
251 deConfiguration.setUebServers(uebServers);
254 deConfiguration.setInitRetryIntervalSec(retry);
255 deConfiguration.setInitMaxIntervalSec(maxRetry);
256 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
257 initTask.setCambriaHandler(cambriaHandler);
259 boolean initFlow = initTask.initFlow();
260 assertFalse("check init flow failed", initFlow);