package edu.brown.statistics; import java.lang.reflect.Field; import java.util.*; import org.json.*; import org.voltdb.catalog.*; import edu.brown.BaseTestCase; import edu.brown.utils.ProjectType; public class TestQueryStatistics extends BaseTestCase { protected static Catalog catalog; protected static Database catalog_db; protected static Table catalog_tbl; protected static Procedure catalog_proc; protected static Statement catalog_stmt; protected static QueryStatistics stats; @Override protected void setUp() throws Exception { super.setUp(ProjectType.TPCC); if (stats == null) { catalog_tbl = this.getTable("WAREHOUSE"); catalog_proc = this.getProcedure("neworder"); catalog_stmt = catalog_proc.getStatements().get("getWarehouseTaxRate"); stats = new QueryStatistics(catalog_stmt); assertNotNull(stats); } } /** * testToJSONString */ public void testToJSONString() throws Exception { String json = stats.toJSONString(); assertNotNull(json); for (QueryStatistics.Members element : QueryStatistics.Members.values()) { assertTrue(json.indexOf(element.name()) != -1); } // FOR } /** * testFromJSONString */ public void testFromJSONString() throws Exception { String json = stats.toJSONString(); assertNotNull(json); JSONObject jsonObject = new JSONObject(json); QueryStatistics copy = new QueryStatistics(catalog_stmt); copy.fromJSONObject(jsonObject, catalog_db); for (QueryStatistics.Members element : QueryStatistics.Members.values()) { String field_name = element.toString().toLowerCase(); Field field = QueryStatistics.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)); // assertEquals(orig_map.get(key), copy_map.get(key)); // } // FOR } else if (orig_value == null) { assertNull(copy_value); } else { assertEquals(orig_value, copy_value); } } // FOR } }