package edu.brown.statistics;
import java.io.File;
import java.lang.reflect.Field;
import java.util.SortedMap;
import org.json.JSONObject;
import org.voltdb.catalog.*;
import edu.brown.BaseTestCase;
import edu.brown.utils.ProjectType;
public class TestTableStatistics extends BaseTestCase {
protected static Table catalog_tbl;
protected static TableStatistics stats;
@Override
protected void setUp() throws Exception {
super.setUp(ProjectType.TM1);
if (stats== null) {
catalog_tbl = this.getTable("ACCESS_INFO");
stats = new TableStatistics(catalog_tbl);
assertNotNull(stats);
long temp = 0l;
stats.tuple_size_total = ++temp;
stats.tuple_size_min = ++temp;
stats.tuple_size_max = ++temp;
stats.tuple_size_avg = ++temp;
stats.tuple_count_total = ++temp;
}
}
/**
* testLoad
*/
public void testLoad() throws Exception {
File f = this.getStatsFile(ProjectType.TM1);
assertNotNull(f);
WorkloadStatistics wstats = new WorkloadStatistics(catalog_db);
wstats.load(f, catalog_db);
for (Table catalog_tbl : catalog_db.getTables()) {
TableStatistics tstats = wstats.getTableStatistics(catalog_tbl);
assertNotNull(tstats);
assert(tstats.tuple_count_total > 0) : String.format("%s.tuple_count_total", catalog_tbl.getName());
// System.err.println(String.format("%s.tuple_count_total = %d", catalog_tbl.getName(), tstats.tuple_count_total));
assert(tstats.tuple_size_total > 0) : String.format("%s.tuple_size_total", catalog_tbl.getName());
// System.err.println(String.format("%s.tuple_size_total = %d", catalog_tbl.getName(), tstats.tuple_size_total));
} // FOR
}
/**
* testToJSONString
*/
public void testToJSONString() throws Exception {
String json = stats.toJSONString();
assertNotNull(json);
for (TableStatistics.Members element : TableStatistics.Members.values()) {
assertTrue(json.indexOf(element.name()) != -1);
} // FOR
}
/**
* testFromJSONString
*/
@SuppressWarnings("unchecked")
public void testFromJSONString() throws Exception {
String json = stats.toJSONString();
assertNotNull(json);
JSONObject jsonObject = new JSONObject(json);
TableStatistics copy = new TableStatistics(catalog_tbl);
copy.fromJSONObject(jsonObject, catalog_db);
for (TableStatistics.Members element : TableStatistics.Members.values()) {
String field_name = element.toString().toLowerCase();
Field field = TableStatistics.class.getDeclaredField(field_name);
assertNotNull(field);
Object orig_value = field.get(stats);
Object copy_value = field.get(copy);
if (orig_value instanceof SortedMap) {
SortedMap orig_map = (SortedMap)orig_value;
SortedMap copy_map = (SortedMap)copy_value;
for (Object key : orig_map.keySet()) {
assertTrue(copy_map.containsKey(key));
Object orig_map_value = orig_map.get(key);
if (! (orig_map_value instanceof ColumnStatistics)) {
assertEquals(orig_map_value, copy_map.get(key));
}
} // FOR
} else {
assertEquals(orig_value, copy_value);
}
} // FOR
}
}