package edu.brown.statistics;
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;
import edu.brown.utils.StringUtil;
public class TestProcedureStatistics extends BaseTestCase {
protected static Procedure catalog_proc;
protected static ProcedureStatistics stats;
@Override
protected void setUp() throws Exception {
super.setUp(ProjectType.TPCC);
if (stats == null) {
catalog_proc = this.getProcedure("neworder");
stats = new ProcedureStatistics(catalog_proc);
assertNotNull(stats);
}
}
/**
* testToJSONString
*/
public void testToJSONString() throws Exception {
String json = stats.toJSONString();
assertNotNull(json);
for (ProcedureStatistics.Members element : ProcedureStatistics.Members.values()) {
System.out.println(element); System.out.flush();
assertTrue(json.indexOf(element.name()) != -1);
} // FOR
}
/**
* testFromJSONString
*/
public void testFromJSONString() throws Exception {
String json = stats.toJSONString();
assertNotNull(json);
JSONObject jsonObject = new JSONObject(json);
ProcedureStatistics copy = new ProcedureStatistics(catalog_proc);
copy.fromJSONObject(jsonObject, catalog_db);
for (ProcedureStatistics.Members element : ProcedureStatistics.Members.values()) {
String field_name = element.toString().toLowerCase();
Field field = ProcedureStatistics.class.getDeclaredField(field_name);
assertNotNull(field);
System.out.println(field_name); System.out.flush();
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("Missing Key: " + key + "\n" + StringUtil.formatMaps(copy_map), copy_map.containsKey(key));
System.out.println("\t" + key);
System.out.flush();
assertEquals(orig_map.get(key), copy_map.get(key));
} // FOR
} else {
assertEquals(orig_value, copy_value);
}
} // FOR
}
}