package org.rhq.server.metrics; import static java.util.Arrays.asList; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import java.util.ArrayList; import java.util.List; import org.joda.time.DateTime; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.rhq.server.metrics.aggregation.IndexIterator; import org.rhq.server.metrics.domain.IndexBucket; import org.rhq.server.metrics.domain.IndexEntry; /** * @author John Sanda */ public class IndexIteratorTest extends MetricsTest { private static final int PAGE_SIZE = 2; private int numPartitions = 2; @BeforeMethod public void setUp() { numPartitions = 2; purgeDB(); } @Override protected MetricsConfiguration createConfiguration() { MetricsConfiguration configuration = new MetricsConfiguration(); configuration.setIndexPageSize(PAGE_SIZE); configuration.setIndexPartitions(numPartitions); return configuration; } @Test public void iterateOverEmptyIndex() { IndexIterator iterator = new IndexIterator(hour(4), hour(5), IndexBucket.RAW, dao, configuration); assertFalse(iterator.hasNext()); } @Test public void iterateOverNonEmptyIndex() { dao.updateIndex(IndexBucket.RAW, hour(3).getMillis(), 100).get(); dao.updateIndex(IndexBucket.RAW, hour(4).getMillis(), 100).get(); dao.updateIndex(IndexBucket.RAW, hour(4).getMillis(), 101).get(); dao.updateIndex(IndexBucket.RAW, hour(4).getMillis(), 102).get(); dao.updateIndex(IndexBucket.RAW, hour(4).getMillis(), 103).get(); dao.updateIndex(IndexBucket.RAW, hour(4).getMillis(), 104).get(); dao.updateIndex(IndexBucket.RAW, hour(4).getMillis(), 107).get(); dao.updateIndex(IndexBucket.RAW, hour(4).getMillis(), 109).get(); dao.updateIndex(IndexBucket.RAW, hour(5).getMillis(), 108).get(); dao.updateIndex(IndexBucket.RAW, hour(5).getMillis(), 109).get(); dao.updateIndex(IndexBucket.RAW, hour(5).getMillis(), 111).get(); dao.updateIndex(IndexBucket.RAW, hour(6).getMillis(), 108).get(); List<IndexEntry> expected = asList( newIndexEntry(IndexBucket.RAW, hour(4), 100), newIndexEntry(IndexBucket.RAW, hour(4), 102), newIndexEntry(IndexBucket.RAW, hour(4), 104), newIndexEntry(IndexBucket.RAW, hour(4), 101), newIndexEntry(IndexBucket.RAW, hour(4), 103), newIndexEntry(IndexBucket.RAW, hour(4), 107), newIndexEntry(IndexBucket.RAW, hour(4), 109), newIndexEntry(IndexBucket.RAW, hour(5), 108), newIndexEntry(IndexBucket.RAW, hour(5), 109), newIndexEntry(IndexBucket.RAW, hour(5), 111) ); List<IndexEntry> actual = new ArrayList<IndexEntry>(); IndexIterator iterator = new IndexIterator(hour(4), hour(6), IndexBucket.RAW, dao, configuration); while (iterator.hasNext()) { actual.add(iterator.next()); } assertEquals(actual, expected, "The index entries do not match"); } private IndexEntry newIndexEntry(IndexBucket bucket, DateTime time, int scheduleId) { return new IndexEntry(bucket, (scheduleId % numPartitions), time, scheduleId); } }