package streamcruncher.test.func.generic;
import java.sql.Timestamp;
import java.util.List;
import java.util.TreeSet;
import org.testng.Assert;
import streamcruncher.api.artifact.RowSpec;
import streamcruncher.api.artifact.RowSpec.Info;
import streamcruncher.test.func.BatchResult;
import streamcruncher.test.func.TrafficGenerator;
/*
* Author: Ashwin Jayaprakash Date: Sep 10, 2006 Time: 4:49:51 PM
*/
/**
* Test for the "Highest X" in a Partition Window clause.
*/
public abstract class HighestRowsWindowFTest extends TrafficGenerator {
protected static final int windowSize = 5;
protected int getMaxDataRows() {
return 30;
}
protected void afterEvent(int counter) {
if (counter % 10 == 0) {
try {
Thread.sleep(5000);
}
catch (InterruptedException e) {
e.printStackTrace(System.err);
}
}
}
@Override
protected String[] getColumnTypes() {
return new String[] { java.lang.Long.class.getName(), java.sql.Timestamp.class.getName(),
RowSpec.addInfo(java.lang.String.class.getName(), Info.SIZE, 12),
java.lang.Integer.class.getName(), java.lang.Double.class.getName() };
}
@Override
protected String[] getResultColumnTypes() {
return new String[] { java.lang.Long.class.getName(),
RowSpec.addInfo(java.lang.String.class.getName(), Info.SIZE, 12),
java.lang.Double.class.getName() };
}
@Override
protected String getRQL() {
return "select event_id, vehicle_id, speed from test (partition store highest "
+ windowSize + " using event_id) as testStr "
+ "where testStr.$row_status is not dead order by event_id;";
}
protected String getResultFetcherSQLOrderByClause() {
return "order by event_id";
}
@Override
protected void verify(List<BatchResult> results) {
TreeSet<Long> previousIds = new TreeSet<Long>();
Long lastIdInBatch = null;
System.out.println("--Results--");
for (BatchResult result : results) {
System.out.println("Batch created at: " + new Timestamp(result.getTimestamp())
+ ". Rows: " + result.getRows().size());
List<Object[]> rows = result.getRows();
// ------------
System.out.println(" Batch results");
for (Object[] objects : rows) {
System.out.print(" ");
for (Object object : objects) {
System.out.print(object + " ");
}
System.out.println();
/*
* "event_id", "vehicle_id", "speed".
*/
lastIdInBatch = ((Number) objects[0]).longValue();
}
Assert.assertFalse(previousIds.contains(lastIdInBatch),
"Highest Id has already occurred in previous run, but appeared again");
if (previousIds.isEmpty() == false) {
Long prevCycId = previousIds.last();
Assert.assertTrue((lastIdInBatch > prevCycId),
"Highest Id is not greater than previously seen Highest Ids");
}
previousIds.add(lastIdInBatch);
}
Assert.assertEquals(lastIdInBatch.longValue(), getMaxDataRows(),
"Last Highest Id returned was not expected");
}
}