Wrote more tests for scan result value sort

This commit is contained in:
Justin Borromeo 2019-02-06 12:08:12 -08:00
parent 8b7d5f5081
commit 4f51024b31
1 changed files with 113 additions and 8 deletions

View File

@ -45,6 +45,7 @@ public class ScanQueryQueryToolChestTest
{ {
private static ScanQueryQueryToolChest chest; private static ScanQueryQueryToolChest chest;
private static ScanQueryConfig config; private static ScanQueryConfig config;
private static int numElements;
@Before @Before
public void setup() public void setup()
@ -53,13 +54,14 @@ public class ScanQueryQueryToolChestTest
expect(config.getMaxRowsTimeOrderedInMemory()).andReturn(100000); expect(config.getMaxRowsTimeOrderedInMemory()).andReturn(100000);
replay(config); replay(config);
chest = new ScanQueryQueryToolChest(config, null); chest = new ScanQueryQueryToolChest(config, null);
numElements = 1000;
} }
@Test @Test
public void testDescendingHeapsortListScanResultValues() public void testDescendingHeapsortListScanResultValues()
{ {
List<ScanResultValue> inputs = new ArrayList<>(); List<ScanResultValue> inputs = new ArrayList<>();
for (long i = 0; i < 1000; i++) { for (long i = 0; i < numElements; i++) {
HashMap<String, Object> event = new HashMap<>(); HashMap<String, Object> event = new HashMap<>();
event.put("__time", i * 1000); event.put("__time", i * 1000);
inputs.add( inputs.add(
@ -94,22 +96,24 @@ public class ScanQueryQueryToolChestTest
.build(); .build();
Iterator<ScanResultValue> sorted = chest.heapsortScanResultValues(inputs.iterator(), scanQuery); Iterator<ScanResultValue> sorted = chest.heapsortScanResultValues(inputs.iterator(), scanQuery);
int count = 0;
Long previousTime = Long.MAX_VALUE; Long previousTime = Long.MAX_VALUE;
while (sorted.hasNext()) { while (sorted.hasNext()) {
count++;
ScanResultValue curr = sorted.next(); ScanResultValue curr = sorted.next();
Long currentTime = (Long) Long currentTime = (Long)
((Map<String, Object>) (((List<Object>) curr.getEvents()).get(0))).get(ColumnHolder.TIME_COLUMN_NAME); ((Map<String, Object>) (((List<Object>) curr.getEvents()).get(0))).get(ColumnHolder.TIME_COLUMN_NAME);
Assert.assertTrue("Event timestamp is less than that of the previous event", Assert.assertTrue(currentTime < previousTime);
currentTime < previousTime);
previousTime = currentTime; previousTime = currentTime;
} }
Assert.assertEquals(numElements, count);
} }
@Test @Test
public void testAscendingHeapsortListScanResultValues() public void testAscendingHeapsortListScanResultValues()
{ {
List<ScanResultValue> inputs = new ArrayList<>(); List<ScanResultValue> inputs = new ArrayList<>();
for (long i = 1000; i > 0; i--) { for (long i = numElements; i > 0; i--) {
HashMap<String, Object> event = new HashMap<>(); HashMap<String, Object> event = new HashMap<>();
event.put("__time", i * 1000); event.put("__time", i * 1000);
inputs.add( inputs.add(
@ -144,16 +148,117 @@ public class ScanQueryQueryToolChestTest
.build(); .build();
Iterator<ScanResultValue> sorted = chest.heapsortScanResultValues(inputs.iterator(), scanQuery); Iterator<ScanResultValue> sorted = chest.heapsortScanResultValues(inputs.iterator(), scanQuery);
int count = 0;
Long previousTime = -1L; Long previousTime = -1L;
while (sorted.hasNext()) { while (sorted.hasNext()) {
count++;
ScanResultValue curr = sorted.next(); ScanResultValue curr = sorted.next();
Long currentTime = (Long) Long currentTime = (Long)
((Map<String, Object>) (((List<Object>) curr.getEvents()).get(0))).get(ColumnHolder.TIME_COLUMN_NAME); ((Map<String, Object>) (((List<Object>) curr.getEvents()).get(0))).get(ColumnHolder.TIME_COLUMN_NAME);
Assert.assertTrue( Assert.assertTrue(currentTime > previousTime);
"Event timestamp is greater than that of the previous event",
currentTime > previousTime
);
previousTime = currentTime; previousTime = currentTime;
} }
Assert.assertEquals(numElements, count);
} }
@Test
public void testDescendingHeapsortCompactedListScanResultValues()
{
List<ScanResultValue> inputs = new ArrayList<>();
for (long i = 0; i < numElements; i++) {
inputs.add(
new ScanResultValue(
"some segment id",
Collections.singletonList("__time"),
Collections.singletonList(Collections.singletonList(new Long(i * 1000)))
)
);
}
ScanQuery scanQuery = new Druids.ScanQueryBuilder()
.resultFormat(ScanQuery.RESULT_FORMAT_COMPACTED_LIST)
.timeOrder(ScanQuery.TIME_ORDER_DESCENDING)
.dataSource("some data source")
.intervals(new QuerySegmentSpec()
{
@Override
public List<Interval> getIntervals()
{
return null;
}
@Override
public <T> QueryRunner<T> lookup(
Query<T> query, QuerySegmentWalker walker
)
{
return null;
}
})
.limit(99999)
.build();
Iterator<ScanResultValue> sorted = chest.heapsortScanResultValues(inputs.iterator(), scanQuery);
Long previousTime = Long.MAX_VALUE;
int count = 0 ;
while (sorted.hasNext()) {
count++;
ScanResultValue curr = sorted.next();
Long currentTime = (Long)
((List<Object>) (((List<Object>) curr.getEvents()).get(0))).get(0);
Assert.assertTrue(currentTime < previousTime);
previousTime = currentTime;
}
Assert.assertEquals(numElements, count);
}
@Test
public void testAscendingHeapsortCompactedListScanResultValues()
{
List<ScanResultValue> inputs = new ArrayList<>();
for (long i = numElements; i > 0; i--) {
inputs.add(
new ScanResultValue(
"some segment id",
Collections.singletonList("__time"),
Collections.singletonList(Collections.singletonList(new Long(i * 1000)))
)
);
}
ScanQuery scanQuery = new Druids.ScanQueryBuilder()
.resultFormat(ScanQuery.RESULT_FORMAT_COMPACTED_LIST)
.timeOrder(ScanQuery.TIME_ORDER_ASCENDING)
.dataSource("some data source")
.intervals(new QuerySegmentSpec()
{
@Override
public List<Interval> getIntervals()
{
return null;
}
@Override
public <T> QueryRunner<T> lookup(
Query<T> query, QuerySegmentWalker walker
)
{
return null;
}
})
.limit(99999)
.build();
Iterator<ScanResultValue> sorted = chest.heapsortScanResultValues(inputs.iterator(), scanQuery);
Long previousTime = -1L;
int count = 0;
while (sorted.hasNext()) {
count++;
ScanResultValue curr = sorted.next();
Long currentTime = (Long)
((List<Object>) (((List<Object>) curr.getEvents()).get(0))).get(0);
Assert.assertTrue(currentTime > previousTime);
previousTime = currentTime;
}
Assert.assertEquals(numElements, count);
}
} }