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(),
174 config.getNextSyncTime(syncThresholdTime, timeNow.getTimeInMillis(), 1 * 86400));
179 public void validateFirstSyncTimeCalculation_timeNowEqualsSyncTimeBoundary() {
181 Calendar syncThresholdTime = Calendar.getInstance(TimeZone.getTimeZone("EST"), Locale.CANADA);
183 // 06:00 on 1-Feb-2017
184 syncThresholdTime.set(2017, 2, 1, 6, 0, 0);
186 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"), Locale.CANADA);
188 // set year, month, day, hour, minute, second
189 timeNow.set(2017, 2, 1, 6, 0, 0); // 00:00 on 1-Feb-2017
191 // First sync time is the 06:00 am threshold time
192 // assertEquals( (syncThresholdTime.getTimeInMillis()/1000),
193 // (config.getNextSyncTime(syncThresholdTime, timeNow.getTimeInMillis(), 1*86400)/1000));
198 public void validateFirstSyncTimeCalculation_timeNowGreaterThanSyncTimeBoundary() {
200 Calendar syncThresholdTime = Calendar.getInstance(TimeZone.getTimeZone("EST"), Locale.CANADA);
202 // 06:00 on 1-Feb-2017
203 syncThresholdTime.set(2017, 2, 1, 6, 0, 0);
205 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"), Locale.CANADA);
207 // set year, month, day, hour, minute, second
208 timeNow.set(2017, 2, 1, 8, 0, 0); // 00:00 on 1-Feb-2017
210 // First sync time is 1 full sync period past the sync threshold time
211 assertEquals(86400000 + syncThresholdTime.getTimeInMillis(),
212 config.getNextSyncTime(syncThresholdTime, timeNow.getTimeInMillis(), 1 * 86400));
217 * @Test public void validateDefaultPeriodicInitialSyncDelay_dailySync_timeNowAtMidnight() {
219 * config.setSyncTaskStartTimeTimeZone("EST"); config.setSyncTaskStartTimeHr(6);
220 * config.setSyncTaskStartTimeMin(0); config.setSyncTaskStartTimeSec(0);
221 * config.setSyncTaskFrequencyInDay(1); config.setSyncTaskInitialDelayInMs(60000);
223 * Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
225 * // set year, month, day, hour, minute, second timeNow.set(Calendar.AM_PM, Calendar.AM);
226 * timeNow.set(Calendar.HOUR, 0); timeNow.set(Calendar.MINUTE, 0); timeNow.set(Calendar.SECOND,
229 * // First sync time is 6 hours from midnight assertEquals( 6*3600*1000,
230 * config.getDefaultInitialSyncDelayInMs(timeNow));
236 public void validateDefaultPeriodicInitialSyncDelay_dailySync_timeNowAt4AM() {
238 config.setSyncTaskStartTimeTimeZone("EST");
239 config.setSyncTaskStartTimeHr(6);
240 config.setSyncTaskStartTimeMin(0);
241 config.setSyncTaskStartTimeSec(0);
242 config.setSyncTaskFrequencyInDay(1);
243 config.setSyncTaskInitialDelayInMs(60000);
245 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
247 // set year, month, day, hour, minute, second
248 timeNow.set(Calendar.AM_PM, Calendar.AM);
249 timeNow.set(Calendar.HOUR, 4);
250 timeNow.set(Calendar.MINUTE, 0);
251 timeNow.set(Calendar.SECOND, 0);
253 // round time to minutes to avoid millisecond alignment variance
254 assertEquals(2 * 3600, (config.getDefaultInitialSyncDelayInMs(timeNow)) / 1000);
259 public void validateDefaultPeriodicInitialSyncDelay_dailySync_timeNowAt6AM() {
261 config.setSyncTaskStartTimeTimeZone("EST");
262 config.setSyncTaskStartTimeHr(6);
263 config.setSyncTaskStartTimeMin(0);
264 config.setSyncTaskStartTimeSec(0);
265 config.setSyncTaskFrequencyInDay(1);
266 config.setSyncTaskInitialDelayInMs(60000);
268 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
270 // set year, month, day, hour, minute, second
271 timeNow.set(Calendar.AM_PM, Calendar.AM);
272 timeNow.set(Calendar.HOUR, 6);
273 timeNow.set(Calendar.MINUTE, 0);
274 timeNow.set(Calendar.SECOND, 0);
276 // First sync time is now with 60 seconds from now
277 assertEquals(60000, config.getDefaultInitialSyncDelayInMs(timeNow));
282 public void validateDefaultPeriodicInitialSyncDelay_dailySync_timeNowAt10PM() {
284 config.setSyncTaskStartTimeTimeZone("EST");
285 config.setSyncTaskStartTimeHr(6);
286 config.setSyncTaskStartTimeMin(0);
287 config.setSyncTaskStartTimeSec(0);
288 config.setSyncTaskFrequencyInDay(1);
289 config.setSyncTaskInitialDelayInMs(60000);
291 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
293 // set year, month, day, hour, minute, second
294 timeNow.set(Calendar.AM_PM, Calendar.PM);
295 timeNow.set(Calendar.HOUR, 10);
296 timeNow.set(Calendar.MINUTE, 0);
297 timeNow.set(Calendar.SECOND, 0);
299 // First sync time is now 1 sync period delayed. The time delay before
300 // the initial sync should now be 8 hours, assuming 10PM is the current time.
301 assertEquals(8 * 3600, (config.getDefaultInitialSyncDelayInMs(timeNow) / 1000));
306 * @Test public void validateDefaultPeriodicInitialSyncDelay_weeklySync_timeNowAtMidnight() {
308 * config.setSyncTaskStartTimeTimeZone("EST"); config.setSyncTaskStartTimeHr(6);
309 * config.setSyncTaskStartTimeMin(0); config.setSyncTaskStartTimeSec(0);
310 * config.setSyncTaskFrequencyInDay(7); config.setSyncTaskInitialDelayInMs(60000);
312 * Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
314 * // set year, month, day, hour, minute, second timeNow.set(Calendar.AM_PM, Calendar.AM);
315 * timeNow.set(Calendar.HOUR, 0); timeNow.set(Calendar.MINUTE, 0); timeNow.set(Calendar.SECOND,
318 * // First sync time is 6 hours from midnight assertTrue(6*3600*1000 >=
319 * config.getDefaultInitialSyncDelayInMs(timeNow));
325 public void validateDefaultPeriodicInitialSyncDelay_weeklySync_timeNowAt4AM() {
327 config.setSyncTaskStartTimeTimeZone("EST");
328 config.setSyncTaskStartTimeHr(6);
329 config.setSyncTaskStartTimeMin(0);
330 config.setSyncTaskStartTimeSec(0);
331 config.setSyncTaskFrequencyInDay(7);
332 config.setSyncTaskInitialDelayInMs(60000);
334 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
336 // set year, month, day, hour, minute, second
337 timeNow.set(Calendar.AM_PM, Calendar.AM);
338 timeNow.set(Calendar.HOUR, 4);
339 timeNow.set(Calendar.MINUTE, 0);
340 timeNow.set(Calendar.SECOND, 0);
342 // round time to minutes to avoid millisecond alignment variance
343 assertEquals(2 * 3600, (config.getDefaultInitialSyncDelayInMs(timeNow)) / 1000);
348 public void validateDefaultPeriodicInitialSyncDelay_weeklySync_timeNowAt6AM() {
350 config.setSyncTaskStartTimeTimeZone("EST");
351 config.setSyncTaskStartTimeHr(6);
352 config.setSyncTaskStartTimeMin(0);
353 config.setSyncTaskStartTimeSec(0);
354 config.setSyncTaskFrequencyInDay(7);
355 config.setSyncTaskInitialDelayInMs(60000);
357 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
359 // set year, month, day, hour, minute, second
360 timeNow.set(Calendar.AM_PM, Calendar.AM);
361 timeNow.set(Calendar.HOUR, 6);
362 timeNow.set(Calendar.MINUTE, 0);
363 timeNow.set(Calendar.SECOND, 0);
365 // First sync time is now with 60 seconds from now
366 assertEquals(60000, config.getDefaultInitialSyncDelayInMs(timeNow));
371 public void validateDefaultPeriodicInitialSyncDelay_weeklySync_timeNowAt10PM() {
373 config.setSyncTaskStartTimeTimeZone("EST");
374 config.setSyncTaskStartTimeHr(6);
375 config.setSyncTaskStartTimeMin(0);
376 config.setSyncTaskStartTimeSec(0);
377 config.setSyncTaskFrequencyInDay(7);
378 config.setSyncTaskInitialDelayInMs(60000);
380 Calendar timeNow = Calendar.getInstance(TimeZone.getTimeZone("EST"));
382 // set year, month, day, hour, minute, second
383 timeNow.set(Calendar.AM_PM, Calendar.PM);
384 timeNow.set(Calendar.HOUR, 10);
385 timeNow.set(Calendar.MINUTE, 0);
386 timeNow.set(Calendar.SECOND, 0);
388 // First sync time is now 1 sync period delayed. The time delay before
389 // the initial sync should now be 8 hours + 24*6 days, assuming 10PM is the current time.
390 assertEquals((8 + (6 * 24)) * 3600, (config.getDefaultInitialSyncDelayInMs(timeNow) / 1000));