5bf12d56bc63a840d82b92850d51999e3c229dbe
[sdc.git] /
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 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;
27
28 import java.io.File;
29 import java.util.ArrayList;
30 import java.util.HashSet;
31 import java.util.List;
32 import java.util.Set;
33 import java.util.concurrent.atomic.AtomicBoolean;
34
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;
47
48 import fj.data.Either;
49
50 public class DistributionEngineInitTaskTest {
51
52         @Mock
53         private ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
54
55         @Mock
56         private CambriaHandler cambriaHandler = Mockito.mock(CambriaHandler.class);
57
58         // public static final IAuditingDao iAuditingDao =
59         // Mockito.mock(AuditingDao.class);
60
61         @BeforeClass
62         public static void setup() {
63                 // ExternalConfiguration.setAppName("distribEngine1");
64                 ExternalConfiguration.setAppName("catalog-be");
65                 ExternalConfiguration.setConfigDir("src/test/resources/config");
66                 ExternalConfiguration.listenForChanges();
67
68                 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), ExternalConfiguration.getConfigDir() + File.separator + ExternalConfiguration.getAppName());
69
70                 ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
71         }
72
73         @Test
74         public void checkIncrement() {
75
76                 String envName = "PrOD";
77
78                 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
79                 int retry = 2;
80                 int maxRetry = 40;
81                 deConfiguration.setInitRetryIntervalSec(retry);
82                 deConfiguration.setInitMaxIntervalSec(maxRetry);
83                 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
84
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));
88                 }
89
90                 initTask.incrementRetryInterval();
91                 assertEquals("check next retry interval reach max retry interval", initTask.getCurrentRetryInterval(), maxRetry);
92
93         }
94
95         @Test
96         public void testInitFlowScenarioSuccess() {
97
98                 String notifTopic = "notif";
99                 String statusTopic = "status";
100
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);
106
107                 String envName = "PrOD";
108
109                 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
110                 deConfiguration.setUebServers(uebServers);
111                 int retry = 2;
112                 int maxRetry = 40;
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);
121
122                 cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
123
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);
128
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);
132
133                 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
134                 initTask.setCambriaHandler(cambriaHandler);
135
136                 boolean initFlow = initTask.initFlow();
137                 assertTrue("check init flow succeed", initFlow);
138
139         }
140
141         @Test
142         public void testInitFlowScenarioSuccessTopicsAlreadyExists() {
143
144                 String envName = "PrOD";
145                 String notifTopic = "notif";
146                 String statusTopic = "status";
147
148                 String realNotifTopic = notifTopic + "-" + envName.toUpperCase();
149                 String realStatusTopic = statusTopic + "-" + envName.toUpperCase();
150
151                 Set<String> topics = new HashSet<String>();
152                 topics.add(realNotifTopic);
153                 topics.add(realStatusTopic);
154
155                 List<String> uebServers = new ArrayList<>();
156                 uebServers.add("server1");
157                 Either<Set<String>, CambriaErrorResponse> left = Either.left(topics);
158
159                 when(cambriaHandler.getTopics(Mockito.any(List.class))).thenReturn(left);
160
161                 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
162                 deConfiguration.setUebServers(uebServers);
163                 int retry = 2;
164                 int maxRetry = 40;
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);
173
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);
177
178                 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
179                 initTask.setCambriaHandler(cambriaHandler);
180
181                 try {
182                         boolean initFlow = initTask.initFlow();
183                         assertTrue("check init flow succeed", initFlow);
184                 } catch (Exception e) {
185                         assertTrue("Should not throw exception", false);
186                 }
187
188         }
189
190         @Test
191         public void testInitFlowScenarioFailToRegister() {
192
193                 String notifTopic = "notif";
194                 String statusTopic = "status";
195
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);
201
202                 String envName = "PrOD";
203
204                 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
205                 deConfiguration.setUebServers(uebServers);
206                 int retry = 2;
207                 int maxRetry = 40;
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);
216
217                 cambriaErrorResponse = new CambriaErrorResponse(CambriaOperationStatus.OK);
218
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);
223
224                 when(cambriaHandler.registerToTopic(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(SubscriberTypeEnum.class)))
225                                 .thenReturn(new CambriaErrorResponse(CambriaOperationStatus.OK));
226
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));
229
230
231                 DistributionEngineInitTask initTask = new DistributionEngineInitTask(0l, deConfiguration, envName, new AtomicBoolean(false), componentsUtils, null);
232                 initTask.setCambriaHandler(cambriaHandler);
233
234                 boolean initFlow = initTask.initFlow();
235                 assertFalse("check init flow failed", initFlow);
236
237         }
238
239         @Test
240         public void testInitFlowScenario1GetTopicsFailed() {
241
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);
247
248                 String envName = "PrOD";
249
250                 DistributionEngineConfiguration deConfiguration = new DistributionEngineConfiguration();
251                 deConfiguration.setUebServers(uebServers);
252                 int retry = 2;
253                 int maxRetry = 40;
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);
258
259                 boolean initFlow = initTask.initFlow();
260                 assertFalse("check init flow failed", initFlow);
261
262         }
263
264 }