package org.gridkit.jvmtool.stacktrace.analytics;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import org.junit.Test;
public class TimeRangeCheckerTest {
private static String DATE_FORMAT = "yyyy.MM.dd_HH:mm:ss";
private static TimeZone UTC = TimeZone.getTimeZone("UTC");
@Test
public void verify_hour_wrap_range() {
TimeRangeChecker checker = new TimeRangeChecker("10:10", "12:20", UTC);
assertFalse(checker.evaluate(date("2016.02.21_08:08:09")));
assertTrue (checker.evaluate(date("2016.02.21_09:10:10")));
assertTrue (checker.evaluate(date("2016.02.21_10:10:11")));
assertTrue (checker.evaluate(date("2016.02.21_11:11:18")));
assertTrue (checker.evaluate(date("2016.02.21_12:11:40")));
assertTrue (checker.evaluate(date("2016.02.21_13:12:19")));
assertFalse(checker.evaluate(date("2016.02.21_14:12:20")));
assertFalse(checker.evaluate(date("2016.02.21_15:12:21")));
// Second pass
assertFalse(checker.evaluate(date("2016.02.21_08:08:09")));
assertTrue (checker.evaluate(date("2016.02.21_09:10:10")));
assertTrue (checker.evaluate(date("2016.02.21_10:10:11")));
assertTrue (checker.evaluate(date("2016.02.21_11:11:18")));
assertTrue (checker.evaluate(date("2016.02.21_12:11:40")));
assertTrue (checker.evaluate(date("2016.02.21_13:12:19")));
assertFalse(checker.evaluate(date("2016.02.21_14:12:20")));
assertFalse(checker.evaluate(date("2016.02.21_15:12:21")));
assertTrue (checker.isCached(date("2016.02.21_08:08:09")));
assertTrue (checker.isCached(date("2016.02.21_09:10:10")));
assertTrue (checker.isCached(date("2016.02.21_10:10:11")));
assertTrue (checker.isCached(date("2016.02.21_11:11:18")));
assertTrue (checker.isCached(date("2016.02.21_12:11:40")));
assertTrue (checker.isCached(date("2016.02.21_13:12:19")));
assertTrue (checker.isCached(date("2016.02.21_14:12:20")));
assertTrue (checker.isCached(date("2016.02.21_15:12:21")));
assertTrue (checker.isCached(date("2016.02.21_08:06:09")));
assertTrue (checker.isCached(date("2016.02.21_09:11:10")));
assertTrue (checker.isCached(date("2016.02.21_10:11:11")));
assertTrue (checker.isCached(date("2016.02.21_11:11:18")));
assertTrue (checker.isCached(date("2016.02.21_12:12:10")));
assertTrue (checker.isCached(date("2016.02.21_14:12:20")));
assertTrue (checker.isCached(date("2016.02.21_15:12:21")));
assertTrue (checker.isCached(date("2016.02.21_15:13:21")));
}
@Test
public void verify_hour_wrap_range_inverted() {
TimeRangeChecker checker = new TimeRangeChecker("18:10", "02:20", UTC);
assertFalse(checker.evaluate(date("2016.02.21_08:17:00")));
assertFalse(checker.evaluate(date("2016.02.21_09:18:09")));
assertTrue (checker.evaluate(date("2016.02.21_10:18:10")));
assertTrue (checker.evaluate(date("2016.02.21_11:00:00")));
assertTrue (checker.evaluate(date("2016.02.21_12:00:15")));
assertTrue (checker.evaluate(date("2016.02.21_13:01:40")));
assertTrue (checker.evaluate(date("2016.02.21_14:02:19")));
assertFalse(checker.evaluate(date("2016.02.21_15:02:20")));
assertFalse(checker.evaluate(date("2016.02.21_16:02:21")));
// Second pass
assertFalse(checker.evaluate(date("2016.02.21_08:17:00")));
assertFalse(checker.evaluate(date("2016.02.21_09:18:09")));
assertTrue (checker.evaluate(date("2016.02.21_10:18:10")));
assertTrue (checker.evaluate(date("2016.02.21_11:00:00")));
assertTrue (checker.evaluate(date("2016.02.21_12:00:15")));
assertTrue (checker.evaluate(date("2016.02.21_13:01:40")));
assertTrue (checker.evaluate(date("2016.02.21_14:02:19")));
assertFalse(checker.evaluate(date("2016.02.21_15:02:20")));
assertFalse(checker.evaluate(date("2016.02.21_16:02:21")));
assertTrue (checker.isCached(date("2016.02.21_08:17:00")));
assertTrue (checker.isCached(date("2016.02.21_09:18:09")));
assertTrue (checker.isCached(date("2016.02.21_10:18:10")));
assertTrue (checker.isCached(date("2016.02.21_11:00:00")));
assertTrue (checker.isCached(date("2016.02.21_12:00:15")));
assertTrue (checker.isCached(date("2016.02.21_13:01:40")));
assertTrue (checker.isCached(date("2016.02.21_14:02:19")));
assertTrue (checker.isCached(date("2016.02.21_15:02:20")));
assertTrue (checker.isCached(date("2016.02.21_16:02:21")));
assertTrue (checker.isCached(date("2016.02.21_08:17:05")));
assertTrue (checker.isCached(date("2016.02.21_09:18:7")));
assertTrue (checker.isCached(date("2016.02.21_10:18:12")));
assertTrue (checker.isCached(date("2016.02.21_11:01:00")));
assertTrue (checker.isCached(date("2016.02.21_12:01:15")));
assertTrue (checker.isCached(date("2016.02.21_13:01:40")));
assertTrue (checker.isCached(date("2016.02.21_14:02:10")));
assertTrue (checker.isCached(date("2016.02.21_15:02:22")));
assertTrue (checker.isCached(date("2016.02.21_16:14:00")));
}
@Test
public void verify_day_wrap_range() {
TimeRangeChecker checker = new TimeRangeChecker("10:10:00", "12:20:00", UTC);
assertFalse(checker.evaluate(date("2016.02.10_08:09:00")));
assertTrue (checker.evaluate(date("2016.02.11_10:10:00")));
assertTrue (checker.evaluate(date("2016.02.12_10:11:00")));
assertTrue (checker.evaluate(date("2016.02.13_11:18:00")));
assertTrue (checker.evaluate(date("2016.02.14_11:40:00")));
assertTrue (checker.evaluate(date("2016.02.15_12:19:59")));
assertFalse(checker.evaluate(date("2016.02.16_12:20:00")));
assertFalse(checker.evaluate(date("2016.02.17_12:21:00")));
// Second pass
assertFalse(checker.evaluate(date("2016.02.10_08:09:00")));
assertTrue (checker.evaluate(date("2016.02.11_10:10:00")));
assertTrue (checker.evaluate(date("2016.02.12_10:11:00")));
assertTrue (checker.evaluate(date("2016.02.13_11:18:00")));
assertTrue (checker.evaluate(date("2016.02.14_11:40:00")));
assertTrue (checker.evaluate(date("2016.02.15_12:19:59")));
assertFalse(checker.evaluate(date("2016.02.16_12:20:00")));
assertFalse(checker.evaluate(date("2016.02.17_12:21:00")));
assertTrue (checker.isCached(date("2016.02.10_08:09:00")));
assertTrue (checker.isCached(date("2016.02.11_10:10:00")));
assertTrue (checker.isCached(date("2016.02.12_10:11:00")));
assertTrue (checker.isCached(date("2016.02.13_11:18:00")));
assertTrue (checker.isCached(date("2016.02.14_11:40:00")));
assertTrue (checker.isCached(date("2016.02.15_12:19:59")));
assertTrue (checker.isCached(date("2016.02.16_12:20:00")));
assertTrue (checker.isCached(date("2016.02.17_12:21:00")));
}
@Test
public void verify_day_wrap_range_inverted() {
TimeRangeChecker checker = new TimeRangeChecker("18:10:00", "02:20:00", UTC);
assertFalse(checker.evaluate(date("2016.02.10_17:00:00")));
assertFalse(checker.evaluate(date("2016.02.11_18:09:00")));
assertTrue (checker.evaluate(date("2016.02.12_18:10:00")));
assertTrue (checker.evaluate(date("2016.02.13_00:00:00")));
assertTrue (checker.evaluate(date("2016.02.14_00:15:00")));
assertTrue (checker.evaluate(date("2016.02.15_01:40:00")));
assertTrue (checker.evaluate(date("2016.02.16_02:19:59")));
assertFalse(checker.evaluate(date("2016.02.17_02:20:00")));
assertFalse(checker.evaluate(date("2016.02.18_02:21:00")));
// Second pass
assertFalse(checker.evaluate(date("2016.02.10_17:00:00")));
assertFalse(checker.evaluate(date("2016.02.11_18:09:00")));
assertTrue (checker.evaluate(date("2016.02.12_18:10:00")));
assertTrue (checker.evaluate(date("2016.02.13_00:00:00")));
assertTrue (checker.evaluate(date("2016.02.14_00:15:00")));
assertTrue (checker.evaluate(date("2016.02.15_01:40:00")));
assertTrue (checker.evaluate(date("2016.02.16_02:19:59")));
assertFalse(checker.evaluate(date("2016.02.17_02:20:00")));
assertFalse(checker.evaluate(date("2016.02.18_02:21:00")));
assertTrue (checker.isCached(date("2016.02.10_17:00:00")));
assertTrue (checker.isCached(date("2016.02.11_18:09:00")));
assertTrue (checker.isCached(date("2016.02.12_18:10:00")));
assertTrue (checker.isCached(date("2016.02.13_00:00:00")));
assertTrue (checker.isCached(date("2016.02.14_00:15:00")));
assertTrue (checker.isCached(date("2016.02.15_01:40:00")));
assertTrue (checker.isCached(date("2016.02.16_02:19:59")));
assertTrue (checker.isCached(date("2016.02.17_02:20:00")));
assertTrue (checker.isCached(date("2016.02.18_02:21:00")));
}
@Test
public void verify_month_wrap_range() {
TimeRangeChecker checker = new TimeRangeChecker("10_18:10:00", "20_02:20:00", UTC);
assertFalse(checker.evaluate(date("2016.02.10_18:09:00")));
assertTrue (checker.evaluate(date("2016.03.10_18:10:00")));
assertTrue (checker.evaluate(date("2016.04.12_10:11:00")));
assertTrue (checker.evaluate(date("2016.05.13_11:18:00")));
assertTrue (checker.evaluate(date("2016.06.14_11:40:00")));
assertTrue (checker.evaluate(date("2016.07.20_02:19:59")));
assertFalse(checker.evaluate(date("2016.08.20_02:20:00")));
assertFalse(checker.evaluate(date("2016.09.20_02:21:00")));
// Second pass
assertFalse(checker.evaluate(date("2016.02.10_18:09:00")));
assertTrue (checker.evaluate(date("2016.03.10_18:10:00")));
assertTrue (checker.evaluate(date("2016.04.12_10:11:00")));
assertTrue (checker.evaluate(date("2016.05.13_11:18:00")));
assertTrue (checker.evaluate(date("2016.06.14_11:40:00")));
assertTrue (checker.evaluate(date("2016.07.20_02:19:59")));
assertFalse(checker.evaluate(date("2016.08.20_02:20:00")));
assertFalse(checker.evaluate(date("2016.09.20_02:21:00")));
}
@Test
public void verify_year_wrap_range() {
TimeRangeChecker checker = new TimeRangeChecker("02.20_18:10:00", "04.10_02:20:00", UTC);
assertFalse(checker.evaluate(date("2016.02.20_18:09:00")));
assertTrue (checker.evaluate(date("2017.02.20_18:10:00")));
assertTrue (checker.evaluate(date("2018.02.25_10:11:00")));
assertTrue (checker.evaluate(date("2019.03.13_11:18:00")));
assertTrue (checker.evaluate(date("2020.03.14_11:40:00")));
assertTrue (checker.evaluate(date("2021.04.10_02:19:59")));
assertFalse(checker.evaluate(date("2022.04.10_02:20:00")));
assertFalse(checker.evaluate(date("2023.09.20_02:21:00")));
// Second pass
assertFalse(checker.evaluate(date("2016.02.20_18:09:00")));
assertTrue (checker.evaluate(date("2017.02.20_18:10:00")));
assertTrue (checker.evaluate(date("2018.02.25_10:11:00")));
assertTrue (checker.evaluate(date("2019.03.13_11:18:00")));
assertTrue (checker.evaluate(date("2020.03.14_11:40:00")));
assertTrue (checker.evaluate(date("2021.04.10_02:19:59")));
assertFalse(checker.evaluate(date("2022.04.10_02:20:00")));
assertFalse(checker.evaluate(date("2023.09.20_02:21:00")));
}
@Test
public void verify_year_accurate_range() {
TimeRangeChecker checker = new TimeRangeChecker("16.02.20_18:10:00", "16.04.10_02:20:00", UTC);
assertFalse(checker.evaluate(date("2015.02.20_18:10:00")));
assertFalse(checker.evaluate(date("2016.02.20_18:09:00")));
assertTrue (checker.evaluate(date("2016.02.20_18:10:00")));
assertTrue (checker.evaluate(date("2016.02.25_10:11:00")));
assertTrue (checker.evaluate(date("2016.03.13_11:18:00")));
assertTrue (checker.evaluate(date("2016.03.14_11:40:00")));
assertTrue (checker.evaluate(date("2016.04.10_02:19:59")));
assertFalse(checker.evaluate(date("2016.04.10_02:20:00")));
assertFalse(checker.evaluate(date("2016.09.20_02:21:00")));
}
@Test
public void verify_millenium_accurate_range() {
TimeRangeChecker checker = new TimeRangeChecker("2016.02.20_18:10:00", "2016.04.10_02:20:00", UTC);
assertFalse(checker.evaluate(date("2015.02.20_18:10:00")));
assertFalse(checker.evaluate(date("2016.02.20_18:09:00")));
assertTrue (checker.evaluate(date("2016.02.20_18:10:00")));
assertTrue (checker.evaluate(date("2016.02.25_10:11:00")));
assertTrue (checker.evaluate(date("2016.03.13_11:18:00")));
assertTrue (checker.evaluate(date("2016.03.14_11:40:00")));
assertTrue (checker.evaluate(date("2016.04.10_02:19:59")));
assertFalse(checker.evaluate(date("2016.04.10_02:20:00")));
assertFalse(checker.evaluate(date("2016.09.20_02:21:00")));
}
public long date(String text) {
try {
SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT);
fmt.setTimeZone(UTC);
return fmt.parse(text).getTime();
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}
}