re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / distribution / engine / DistributionEngineInitTaskTest.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  */
20
21 package org.openecomp.sdc.be.components.distribution.engine;
22
23 import fj.data.Either;
24 import org.apache.commons.collections.CollectionUtils;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.Mock;
28 import org.mockito.Mockito;
29 import org.openecomp.sdc.be.config.ConfigurationManager;
30 import org.openecomp.sdc.be.config.DistributionEngineConfiguration;
31 import org.openecomp.sdc.be.config.DistributionEngineConfiguration.CreateTopicConfig;
32 import org.openecomp.sdc.be.distribution.api.client.CambriaOperationStatus;
33 import org.openecomp.sdc.be.impl.ComponentsUtils;
34 import org.openecomp.sdc.be.resources.data.OperationalEnvironmentEntry;
35 import org.openecomp.sdc.common.api.ConfigurationSource;
36 import org.openecomp.sdc.common.impl.ExternalConfiguration;
37 import org.openecomp.sdc.common.impl.FSConfigurationSource;
38
39 import java.io.File;
40 import java.util.ArrayList;
41 import java.util.HashSet;
42 import java.util.List;
43 import java.util.Set;
44 import java.util.concurrent.atomic.AtomicBoolean;
45
46 import static org.junit.Assert.*;
47 import static org.junit.Assert.fail;
48 import static org.mockito.Mockito.when;
49
50 public class DistributionEngineInitTaskTest {
51
52     @Mock
53     private ComponentsUtils componentsUtils;
54
55     @Mock
56     private CambriaHandler cambriaHandler;
57
58     @Before
59     public void setup() {
60         ExternalConfiguration.setAppName("catalog-be");
61         ExternalConfiguration.setConfigDir("src/test/resources/config");
62         ExternalConfiguration.listenForChanges();
63
64         ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), ExternalConfiguration.getConfigDir() + File.separator + ExternalConfiguration.getAppName());
65         new ConfigurationManager(configurationSource);
66
67         componentsUtils = Mockito.mock(ComponentsUtils.class);
68         cambriaHandler = Mockito.mock(CambriaHandler.class);
69     }
70
71     @Test
72     public void checkIncrement() {
73
74         String envName = "PrOD";
75
76         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
77         int retry = 2;
78         int maxRetry = 40;
79         deConfiguration.setInitRetryIntervalSec(retry);
80         deConfiguration.setInitMaxIntervalSec(maxRetry);
81         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
82
83         for (int i = 1; i < 5; i++) {
84             initTask.incrementRetryInterval();
85             assertEquals("check next retry interval", initTask.getCurrentRetryInterval(), retry * (long) Math.pow(2, i));
86         }
87
88         initTask.incrementRetryInterval();
89         assertEquals("check next retry interval reach max retry interval", initTask.getCurrentRetryInterval(), maxRetry);
90
91     }
92     
93     @Test
94     public void checkStartTask() {
95
96         String envName = "PrOD";
97
98         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
99         int retry = 2;
100         int maxRetry = 40;
101         deConfiguration.setInitRetryIntervalSec(retry);
102         deConfiguration.setInitMaxIntervalSec(maxRetry);
103         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
104         
105         initTask.startTask();
106     }
107     
108     @Test
109     public void checkRestartTask() {
110
111         String envName = "PrOD";
112
113         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
114         int retry = 2;
115         int maxRetry = 40;
116         deConfiguration.setInitRetryIntervalSec(retry);
117         deConfiguration.setInitMaxIntervalSec(maxRetry);
118         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
119         
120         initTask.restartTask();
121     }
122     
123     @Test
124     public void checkStopTask() {
125
126         String envName = "PrOD";
127
128         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
129         int retry = 2;
130         int maxRetry = 40;
131         deConfiguration.setInitRetryIntervalSec(retry);
132         deConfiguration.setInitMaxIntervalSec(maxRetry);
133         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
134         
135         initTask.stopTask();
136         initTask.startTask();
137         initTask.stopTask();
138     }
139     
140     @Test
141     public void checkDestroy() {
142
143         String envName = "PrOD";
144
145         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
146         int retry = 2;
147         int maxRetry = 40;
148         deConfiguration.setInitRetryIntervalSec(retry);
149         deConfiguration.setInitMaxIntervalSec(maxRetry);
150         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
151         
152         initTask.destroy();
153     }
154     
155     @Test
156     public void checkRun() {
157
158         String notifTopic = "notif";
159         String statusTopic = "status";
160
161         List<String> uebServers = new ArrayList<>();
162         uebServers.add("server1");
163         CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.NOT_FOUND);
164         Either<Set<String>, CambriaErrorResponse> right = Either.right(cambriaErrorResponse);
165         when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(right);
166
167         String envName = "PrOD";
168
169         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
170         deConfiguration.setUebServers(uebServers);
171         int retry = 2;
172         int maxRetry = 40;
173         deConfiguration.setInitRetryIntervalSec(retry);
174         deConfiguration.setInitMaxIntervalSec(maxRetry);
175         deConfiguration.setDistributionNotifTopicName(notifTopic);
176         deConfiguration.setDistributionStatusTopicName(statusTopic);
177         CreateTopicConfig createTopic = new CreateTopicConfig();
178         createTopic.setPartitionCount(1);
179         createTopic.setReplicationCount(1);
180         deConfiguration.setCreateTopic(createTopic);
181
182         cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
183
184         String realNotifTopic = notifTopic + "-" + envName.toUpperCase();
185         String realStatusTopic = statusTopic + "-" + envName.toUpperCase();
186         when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realNotifTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
187         when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realStatusTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
188
189         cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
190         when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
191                 .thenReturn(cambriaErrorResponse);
192
193         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
194         initTask.setCambriaHandler(cambriaHandler);
195
196         boolean initFlow = initTask.initFlow();
197         
198         initTask.run();
199     }
200     
201     @SuppressWarnings("unchecked")
202     @Test
203     public void testInitFlowScenarioSuccess() {
204
205         String notifTopic = "notif";
206         String statusTopic = "status";
207
208         List<String> uebServers = new ArrayList<>();
209         uebServers.add("server1");
210         CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.NOT_FOUND);
211         Either<Set<String>, CambriaErrorResponse> right = Either.right(cambriaErrorResponse);
212         when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(right);
213
214         String envName = "PrOD";
215
216         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
217         deConfiguration.setUebServers(uebServers);
218         int retry = 2;
219         int maxRetry = 40;
220         deConfiguration.setInitRetryIntervalSec(retry);
221         deConfiguration.setInitMaxIntervalSec(maxRetry);
222         deConfiguration.setDistributionNotifTopicName(notifTopic);
223         deConfiguration.setDistributionStatusTopicName(statusTopic);
224         CreateTopicConfig createTopic = new CreateTopicConfig();
225         createTopic.setPartitionCount(1);
226         createTopic.setReplicationCount(1);
227         deConfiguration.setCreateTopic(createTopic);
228
229         cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
230
231         String realNotifTopic = notifTopic + "-" + envName.toUpperCase();
232         String realStatusTopic = statusTopic + "-" + envName.toUpperCase();
233         when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realNotifTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
234         when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realStatusTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
235
236         cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
237         when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
238                 .thenReturn(cambriaErrorResponse);
239
240         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
241         initTask.setCambriaHandler(cambriaHandler);
242
243         boolean initFlow = initTask.initFlow();
244         assertTrue("check init flow succeed", initFlow);
245
246     }
247
248     @SuppressWarnings("unchecked")
249     @Test
250     public void testInitFlowScenarioSuccessTopicsAlreadyExists() {
251
252         String envName = "PrOD";
253         String notifTopic = "notif";
254         String statusTopic = "status";
255
256         String realNotifTopic = notifTopic + "-" + envName.toUpperCase();
257         String realStatusTopic = statusTopic + "-" + envName.toUpperCase();
258
259         Set<String> topics = new HashSet<>();
260         topics.add(realNotifTopic);
261         topics.add(realStatusTopic);
262
263         List<String> uebServers = new ArrayList<>();
264         uebServers.add("server1");
265         Either<Set<String>, CambriaErrorResponse> left = Either.left(topics);
266
267         when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(left);
268
269         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
270         deConfiguration.setUebServers(uebServers);
271         int retry = 2;
272         int maxRetry = 40;
273         deConfiguration.setInitRetryIntervalSec(retry);
274         deConfiguration.setInitMaxIntervalSec(maxRetry);
275         deConfiguration.setDistributionNotifTopicName(notifTopic);
276         deConfiguration.setDistributionStatusTopicName(statusTopic);
277         CreateTopicConfig createTopic = new CreateTopicConfig();
278         createTopic.setPartitionCount(1);
279         createTopic.setReplicationCount(1);
280         deConfiguration.setCreateTopic(createTopic);
281
282         CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
283         when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
284                 .thenReturn(cambriaErrorResponse);
285
286         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
287         initTask.setCambriaHandler(cambriaHandler);
288
289         try {
290             boolean initFlow = initTask.initFlow();
291             assertTrue("check init flow succeed", initFlow);
292         } catch (Exception e) {
293             fail("Should not throw exception");
294         }
295
296     }
297
298     @SuppressWarnings("unchecked")
299     @Test
300     public void testInitFlowScenarioFailToRegister() {
301
302         String notifTopic = "notif";
303         String statusTopic = "status";
304
305         List<String> uebServers = new ArrayList<>();
306         uebServers.add("server1");
307         CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.NOT_FOUND);
308         Either<Set<String>, CambriaErrorResponse> right = Either.right(cambriaErrorResponse);
309         when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(right);
310
311         String envName = "PrOD";
312
313         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
314         deConfiguration.setUebServers(uebServers);
315         int retry = 2;
316         int maxRetry = 40;
317         deConfiguration.setInitRetryIntervalSec(retry);
318         deConfiguration.setInitMaxIntervalSec(maxRetry);
319         deConfiguration.setDistributionNotifTopicName(notifTopic);
320         deConfiguration.setDistributionStatusTopicName(statusTopic);
321         CreateTopicConfig createTopic = new CreateTopicConfig();
322         createTopic.setPartitionCount(1);
323         createTopic.setReplicationCount(1);
324         deConfiguration.setCreateTopic(createTopic);
325
326         cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
327
328         String realNotifTopic = notifTopic + "-" + envName.toUpperCase();
329         String realStatusTopic = statusTopic + "-" + envName.toUpperCase();
330         when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realNotifTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
331         when(cambriaHandler.createTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realStatusTopic), Mockito.eq(1), Mockito.eq(1))).thenReturn(cambriaErrorResponse);
332
333         when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realNotifTopic)))
334                 .thenReturn(new CambriaErrorResponse(CambriaOperationStatus.OK));
335
336         when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.eq(realStatusTopic)))
337                 .thenReturn(new CambriaErrorResponse(CambriaOperationStatus.CONNNECTION_ERROR));
338
339
340         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
341         initTask.setCambriaHandler(cambriaHandler);
342
343         boolean initFlow = initTask.initFlow();
344         assertFalse("check init flow failed", initFlow);
345
346     }
347
348     @SuppressWarnings("unchecked")
349     @Test
350     public void testInitFlowScenario1GetTopicsFailed() {
351
352         List<String> uebServers = new ArrayList<>();
353         uebServers.add("server1");
354         CambriaErrorResponse cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.CONNNECTION_ERROR);
355         Either<Set<String>, CambriaErrorResponse> right = Either.right(cambriaErrorResponse);
356         when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(right);
357
358         String envName = "PrOD";
359
360         DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
361         deConfiguration.setUebServers(uebServers);
362         int retry = 2;
363         int maxRetry = 40;
364         deConfiguration.setInitRetryIntervalSec(retry);
365         deConfiguration.setInitMaxIntervalSec(maxRetry);
366         DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null, readEnvFromConfig(deConfiguration));
367         initTask.setCambriaHandler(cambriaHandler);
368
369         boolean initFlow = initTask.initFlow();
370         assertFalse("check init flow failed", initFlow);
371
372     }
373
374     private OperationalEnvironmentEntry readEnvFromConfig(DistributionEngineConfiguration distributionEngineConfiguration) {
375         OperationalEnvironmentEntry entry = new OperationalEnvironmentEntry();
376         entry.setUebApikey(distributionEngineConfiguration.getUebPublicKey());
377         entry.setUebSecretKey(distributionEngineConfiguration.getUebSecretKey());
378         Set<String> puebEndpoints = new HashSet<>();
379         if(distributionEngineConfiguration.getUebServers() != null)
380             puebEndpoints.addAll(distributionEngineConfiguration.getUebServers());
381         entry.setDmaapUebAddress(puebEndpoints);
382         String envName = "UNKNOWN";
383         if(CollectionUtils.isNotEmpty(distributionEngineConfiguration.getEnvironments()))
384             envName = distributionEngineConfiguration.getEnvironments().get(0);
385         entry.setEnvironmentId(envName);
386         return entry;
387     }
388
389 }