package com.linkedin.thirdeye.client; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; import org.joda.time.DateTime; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.google.common.collect.Range; import com.linkedin.thirdeye.api.TimeGranularity; public class TestTimeRangeUtils { @Test(dataProvider = "computeTimeRanges") public void computeTimeRanges(TimeGranularity granularity, DateTime start, DateTime end, List<Range<DateTime>> expected) { List<Range<DateTime>> actual = TimeRangeUtils.computeTimeRanges(granularity, start, end); Assert.assertEquals(actual, expected); } @DataProvider(name = "computeTimeRanges") public Object[][] provideComputeTimeRanges() { DateTime now = DateTime.now(); DateTime yesterday = now.minusDays(1); List<Object[]> entries = new ArrayList<>(); entries.add(new Object[] { null, yesterday, now, Collections.singletonList(Range.closedOpen(yesterday, now)) }); entries.add(new Object[] { new TimeGranularity(1, TimeUnit.DAYS), yesterday, now, Collections.singletonList(Range.closedOpen(yesterday, now)) }); entries.add(new Object[] { new TimeGranularity(6, TimeUnit.HOURS), yesterday, now, Arrays.asList(Range.closedOpen(yesterday, yesterday.plusHours(6)), Range.closedOpen(yesterday.plusHours(6), yesterday.plusHours(12)), Range.closedOpen(yesterday.plusHours(12), yesterday.plusHours(18)), Range.closedOpen(yesterday.plusHours(18), yesterday.plusHours(24))) }); return entries.toArray(new Object[entries.size()][]); } }