1 package org.onap.aai.sparky.synchronizer.config;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
6 import java.util.Calendar;
7 import java.util.Locale;
8 import java.util.Properties;
9 import java.util.TimeZone;
11 import org.junit.Before;
12 import org.junit.Test;
14 public class SynchronizerConfigurationTest {
16 private SynchronizerConfiguration config;
18 private Properties generateTestProperties() {
20 Properties props = new Properties();
22 props.put("synchronizer.syncTask.initialDelayInMs", "60000");
23 props.put("synchronizer.syncTask.taskFrequencyInDay", "2");
24 props.put("synchronizer.syncTask.startTimestamp", "05:00:00 UTC+00:00");
25 props.put("synchronizer.historicalEntitySummarizerEnabled", "true");
26 props.put("synchronizer.historicalEntitySummarizedFrequencyInMinutes", "5");
27 props.put("synchronizer.resolver.progressLogFrequencyInMs", "60000");
28 props.put("synchronizer.resolver.queueMonitorFrequencyInMs", "1000");
29 props.put("synchronizer.resolver.displayVerboseQueueManagerStats", "false");
31 props.put("synchronizer.indexIntegrityValidator.enabled", "false");
32 props.put("synchronizer.indexIntegrityValidatorFrequencyInMs", "3600000");
33 props.put("synchronizer.scrollContextTimeToLiveInMinutes", "5");
34 props.put("synchronizer.numScrollContextItemsToRetrievePerRequest", "5000");
35 props.put("synchronizer.suppressResourceNotFoundErrors", "true");
36 props.put("synchronizer.applyNodesOnlyModifier", "false");
37 props.put("synchronizer.autosuggestSynchronizationEnabled", "true");
44 public void init() throws Exception {
46 config = new SynchronizerConfiguration(generateTestProperties());
51 public void validateAccessors() {
53 assertEquals(60000, config.getSyncTaskInitialDelayInMs());
54 assertEquals(2, config.getSyncTaskFrequencyInDay());
55 assertEquals("05:00:00 UTC+00:00", config.getSyncTaskStartTime());
56 assertEquals(5, config.getSyncTaskStartTimeHr());
57 assertEquals(0, config.getSyncTaskStartTimeMin());
58 assertEquals(0, config.getSyncTaskStartTimeSec());
59 assertEquals(true, config.isAutosuggestSynchronizationEnabled());
60 assertEquals(false, config.isConfigDisabledForInitialSync() );
61 assertEquals(true, config.isConfigOkForPeriodicSync());
62 assertEquals(true, config.isConfigOkForStartupSync());
63 assertEquals(false, config.isDisplayVerboseQueueManagerStats());
64 assertEquals(false, config.isIndexIntegrityValidatorEnabled());
65 assertEquals(false, config.isNodesOnlyModifierEnabled());
66 assertEquals(true, config.isResourceNotFoundErrorsSupressed());
67 assertEquals(5000, config.getNumScrollContextItemsToRetrievePerRequest());
68 assertEquals(5, config.getScrollContextTimeToLiveInMinutes());
69 assertEquals("GMT+00:00", config.getSyncTaskStartTimeTimeZone());
70 assertEquals(0, config.getSyncTaskFrequencyInMs());
71 assertEquals(60000, config.getResolverProgressLogFrequencyInMs());
72 assertEquals(1000, config.getResolverQueueMonitorFrequencyInMs());
73 assertEquals(3600000, config.getIndexIntegrityValidatorFrequencyInMs());
74 assertTrue(config.toString().startsWith("SynchronizerConfiguration"));
77 config.setSyncTaskInitialDelayInMs(1234);
78 assertEquals(1234, config.getSyncTaskInitialDelayInMs());
80 config.setSyncTaskFrequencyInDay(5);
81 assertEquals(5, config.getSyncTaskFrequencyInDay());
82 config.setSyncTaskStartTime("06:10:22 UTC+00:00");
83 assertEquals("06:10:22 UTC+00:00", config.getSyncTaskStartTime());
85 config.setSyncTaskStartTimeHr(6);
86 assertEquals(6, config.getSyncTaskStartTimeHr());
88 config.setSyncTaskStartTimeMin(10);
89 assertEquals(10, config.getSyncTaskStartTimeMin());
91 config.setSyncTaskStartTimeSec(22);
92 assertEquals(22, config.getSyncTaskStartTimeSec());
94 config.setAutosuggestSynchronizationEnabled(false);
95 assertEquals(false, config.isAutosuggestSynchronizationEnabled());
97 config.setDisplayVerboseQueueManagerStats(true);
98 assertEquals(true, config.isDisplayVerboseQueueManagerStats());
101 config.setIndexIntegrityValidatorEnabled(true);
102 assertEquals(true, config.isIndexIntegrityValidatorEnabled());
104 config.setNodesOnlyModifierEnabled(true);
105 assertEquals(true, config.isNodesOnlyModifierEnabled());
107 config.setResourceNotFoundErrorsSupressed(false);
108 assertEquals(false, config.isResourceNotFoundErrorsSupressed());
110 config.setNumScrollContextItemsToRetrievePerRequest(1234);
111 assertEquals(1234, config.getNumScrollContextItemsToRetrievePerRequest());
113 config.setScrollContextTimeToLiveInMinutes(11);
114 assertEquals(11, config.getScrollContextTimeToLiveInMinutes());
117 config.setSyncTaskStartTimeTimeZone("EST");
118 assertEquals("EST", config.getSyncTaskStartTimeTimeZone());
120 config.setSyncTaskFrequencyInMs(1221);
121 assertEquals(1221, config.getSyncTaskFrequencyInMs());
123 config.setResolverProgressLogFrequencyInMs(1111);
124 assertEquals(1111, config.getResolverProgressLogFrequencyInMs());
126 config.setResolverQueueMonitorFrequencyInMs(1111);
127 assertEquals(1111, config.getResolverQueueMonitorFrequencyInMs());
129 config.setIndexIntegrityValidatorFrequencyInMs(5555);
130 assertEquals(5555, config.getIndexIntegrityValidatorFrequencyInMs());
132 config.setConfigOkForPeriodicSync(false);
133 assertEquals(false, config.isConfigOkForPeriodicSync());
135 config.setConfigOkForStartupSync(false);
136 assertEquals(false, config.isConfigOkForStartupSync());
142 public void validateFirstSyncTimeCalculation_taskFrequencyZeroDays() {
144 Calendar syncThresholdTime = Calendar.getInstance(TimeZone.getTimeZone("EST"),Locale.CANADA);
146 // set year, month, day, hour, minute, second
147 syncThresholdTime.set(2017,2,1,0,0,0); // 00:00 on 1-Feb-2017
150 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"),Locale.CANADA);
152 // set year, month, day, hour, minute, second
153 timeNow.set(2017,2,1,0,0,0); // 00:00 on 1-Feb-2017
155 assertEquals( 0, config.getNextSyncTime(syncThresholdTime, timeNow.getTimeInMillis(), 0));
160 public void validateFirstSyncTimeCalculation_timeNowLessThanSyncTimeBoundary() {
162 Calendar syncThresholdTime = Calendar.getInstance(TimeZone.getTimeZone("EST"),Locale.CANADA);
164 // 06:00 on 1-Feb-2017
165 syncThresholdTime.set(2017,2,1,6,0,0);
167 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"),Locale.CANADA);
169 // set year, month, day, hour, minute, second
170 timeNow.set(2017,2,1,0,0,0); // 00:00 on 1-Feb-2017
172 // First sync time is the 06:00 am threshold time
173 assertEquals( syncThresholdTime.getTimeInMillis(), config.getNextSyncTime(syncThresholdTime, timeNow.getTimeInMillis(), 1*86400));
178 public void validateFirstSyncTimeCalculation_timeNowEqualsSyncTimeBoundary() {
180 Calendar syncThresholdTime = Calendar.getInstance(TimeZone.getTimeZone("EST"),Locale.CANADA);
182 // 06:00 on 1-Feb-2017
183 syncThresholdTime.set(2017,2,1,6,0,0);
185 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"),Locale.CANADA);
187 // set year, month, day, hour, minute, second
188 timeNow.set(2017,2,1,6,0,0); // 00:00 on 1-Feb-2017
190 // First sync time is the 06:00 am threshold time
191 assertEquals( (syncThresholdTime.getTimeInMillis()/1000), (config.getNextSyncTime(syncThresholdTime, timeNow.getTimeInMillis(), 1*86400)/1000));
196 public void validateFirstSyncTimeCalculation_timeNowGreaterThanSyncTimeBoundary() {
198 Calendar syncThresholdTime = Calendar.getInstance(TimeZone.getTimeZone("EST"),Locale.CANADA);
200 // 06:00 on 1-Feb-2017
201 syncThresholdTime.set(2017,2,1,6,0,0);
203 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"),Locale.CANADA);
205 // set year, month, day, hour, minute, second
206 timeNow.set(2017,2,1,8,0,0); // 00:00 on 1-Feb-2017
208 // First sync time is 1 full sync period past the sync threshold time
209 assertEquals( 86400000 + syncThresholdTime.getTimeInMillis(), config.getNextSyncTime(syncThresholdTime, timeNow.getTimeInMillis(), 1*86400));
214 public void validateDefaultPeriodicInitialSyncDelay_dailySync_timeNowAtMidnight() {
216 config.setSyncTaskStartTimeTimeZone("EST");
217 config.setSyncTaskStartTimeHr(6);
218 config.setSyncTaskStartTimeMin(0);
219 config.setSyncTaskStartTimeSec(0);
220 config.setSyncTaskFrequencyInDay(1);
221 config.setSyncTaskInitialDelayInMs(60000);
223 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
225 // set year, month, day, hour, minute, second
226 timeNow.set(Calendar.AM_PM, Calendar.AM);
227 timeNow.set(Calendar.HOUR, 0);
228 timeNow.set(Calendar.MINUTE, 0);
229 timeNow.set(Calendar.SECOND, 0);
231 // First sync time is 6 hours from midnight
232 assertEquals( 6*3600*1000, config.getDefaultInitialSyncDelayInMs(timeNow));
237 public void validateDefaultPeriodicInitialSyncDelay_dailySync_timeNowAt4AM() {
239 config.setSyncTaskStartTimeTimeZone("EST");
240 config.setSyncTaskStartTimeHr(6);
241 config.setSyncTaskStartTimeMin(0);
242 config.setSyncTaskStartTimeSec(0);
243 config.setSyncTaskFrequencyInDay(1);
244 config.setSyncTaskInitialDelayInMs(60000);
246 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
248 // set year, month, day, hour, minute, second
249 timeNow.set(Calendar.AM_PM, Calendar.AM);
250 timeNow.set(Calendar.HOUR, 4);
251 timeNow.set(Calendar.MINUTE, 0);
252 timeNow.set(Calendar.SECOND, 0);
254 // round time to minutes to avoid millisecond alignment variance
255 assertEquals(2 * 3600, (config.getDefaultInitialSyncDelayInMs(timeNow)) / 1000);
260 public void validateDefaultPeriodicInitialSyncDelay_dailySync_timeNowAt6AM() {
262 config.setSyncTaskStartTimeTimeZone("EST");
263 config.setSyncTaskStartTimeHr(6);
264 config.setSyncTaskStartTimeMin(0);
265 config.setSyncTaskStartTimeSec(0);
266 config.setSyncTaskFrequencyInDay(1);
267 config.setSyncTaskInitialDelayInMs(60000);
269 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
271 // set year, month, day, hour, minute, second
272 timeNow.set(Calendar.AM_PM, Calendar.AM);
273 timeNow.set(Calendar.HOUR, 6);
274 timeNow.set(Calendar.MINUTE, 0);
275 timeNow.set(Calendar.SECOND, 0);
277 // First sync time is now with 60 seconds from now
278 assertEquals( 60000, config.getDefaultInitialSyncDelayInMs(timeNow));
283 public void validateDefaultPeriodicInitialSyncDelay_dailySync_timeNowAt10PM() {
285 config.setSyncTaskStartTimeTimeZone("EST");
286 config.setSyncTaskStartTimeHr(6);
287 config.setSyncTaskStartTimeMin(0);
288 config.setSyncTaskStartTimeSec(0);
289 config.setSyncTaskFrequencyInDay(1);
290 config.setSyncTaskInitialDelayInMs(60000);
292 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
294 // set year, month, day, hour, minute, second
295 timeNow.set(Calendar.AM_PM, Calendar.PM);
296 timeNow.set(Calendar.HOUR, 10);
297 timeNow.set(Calendar.MINUTE, 0);
298 timeNow.set(Calendar.SECOND, 0);
300 // First sync time is now 1 sync period delayed. The time delay before
301 // the initial sync should now be 8 hours, assuming 10PM is the current time.
302 assertEquals( 8*3600, (config.getDefaultInitialSyncDelayInMs(timeNow)/1000));
307 public void validateDefaultPeriodicInitialSyncDelay_weeklySync_timeNowAtMidnight() {
309 config.setSyncTaskStartTimeTimeZone("EST");
310 config.setSyncTaskStartTimeHr(6);
311 config.setSyncTaskStartTimeMin(0);
312 config.setSyncTaskStartTimeSec(0);
313 config.setSyncTaskFrequencyInDay(7);
314 config.setSyncTaskInitialDelayInMs(60000);
316 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
318 // set year, month, day, hour, minute, second
319 timeNow.set(Calendar.AM_PM, Calendar.AM);
320 timeNow.set(Calendar.HOUR, 0);
321 timeNow.set(Calendar.MINUTE, 0);
322 timeNow.set(Calendar.SECOND, 0);
324 // First sync time is 6 hours from midnight
325 assertTrue(6*3600*1000 >= config.getDefaultInitialSyncDelayInMs(timeNow));
330 public void validateDefaultPeriodicInitialSyncDelay_weeklySync_timeNowAt4AM() {
332 config.setSyncTaskStartTimeTimeZone("EST");
333 config.setSyncTaskStartTimeHr(6);
334 config.setSyncTaskStartTimeMin(0);
335 config.setSyncTaskStartTimeSec(0);
336 config.setSyncTaskFrequencyInDay(7);
337 config.setSyncTaskInitialDelayInMs(60000);
339 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
341 // set year, month, day, hour, minute, second
342 timeNow.set(Calendar.AM_PM, Calendar.AM);
343 timeNow.set(Calendar.HOUR, 4);
344 timeNow.set(Calendar.MINUTE, 0);
345 timeNow.set(Calendar.SECOND, 0);
347 // round time to minutes to avoid millisecond alignment variance
348 assertEquals(2 * 3600, (config.getDefaultInitialSyncDelayInMs(timeNow)) / 1000);
353 public void validateDefaultPeriodicInitialSyncDelay_weeklySync_timeNowAt6AM() {
355 config.setSyncTaskStartTimeTimeZone("EST");
356 config.setSyncTaskStartTimeHr(6);
357 config.setSyncTaskStartTimeMin(0);
358 config.setSyncTaskStartTimeSec(0);
359 config.setSyncTaskFrequencyInDay(7);
360 config.setSyncTaskInitialDelayInMs(60000);
362 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
364 // set year, month, day, hour, minute, second
365 timeNow.set(Calendar.AM_PM, Calendar.AM);
366 timeNow.set(Calendar.HOUR, 6);
367 timeNow.set(Calendar.MINUTE, 0);
368 timeNow.set(Calendar.SECOND, 0);
370 // First sync time is now with 60 seconds from now
371 assertEquals( 60000, config.getDefaultInitialSyncDelayInMs(timeNow));
376 public void validateDefaultPeriodicInitialSyncDelay_weeklySync_timeNowAt10PM() {
378 config.setSyncTaskStartTimeTimeZone("EST");
379 config.setSyncTaskStartTimeHr(6);
380 config.setSyncTaskStartTimeMin(0);
381 config.setSyncTaskStartTimeSec(0);
382 config.setSyncTaskFrequencyInDay(7);
383 config.setSyncTaskInitialDelayInMs(60000);
385 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
387 // set year, month, day, hour, minute, second
388 timeNow.set(Calendar.AM_PM, Calendar.PM);
389 timeNow.set(Calendar.HOUR, 10);
390 timeNow.set(Calendar.MINUTE, 0);
391 timeNow.set(Calendar.SECOND, 0);
393 // First sync time is now 1 sync period delayed. The time delay before
394 // the initial sync should now be 8 hours + 24*6 days, assuming 10PM is the current time.
395 assertEquals( (8+(6*24))*3600, (config.getDefaultInitialSyncDelayInMs(timeNow)/1000));