package edu.brown.workload; import java.io.File; import org.junit.Test; import edu.brown.BaseTestCase; import edu.brown.statistics.Histogram; import edu.brown.statistics.ObjectHistogram; import edu.brown.utils.ProjectType; import edu.brown.workload.Workload; import edu.brown.workload.filters.ProcedureLimitFilter; public class TestWorkloadFile extends BaseTestCase { protected static final int WORKLOAD_XACT_LIMIT = 5000; protected static final int NUM_PARTITIONS = 10; protected static final int BASE_PARTITION = 0; protected static final int NUM_INTERVALS = 30; // Reading the workload takes a long time, so we only want to do it once protected static Workload workload; protected static File workload_file; @Override protected void setUp() throws Exception { super.setUp(ProjectType.TPCC); this.addPartitions(NUM_PARTITIONS); if (workload == null) { workload_file = this.getWorkloadFile(ProjectType.TPCC); workload = new Workload(catalog); ((Workload)workload).load(workload_file, catalog_db, new ProcedureLimitFilter(WORKLOAD_XACT_LIMIT)); assert(workload.getTransactionCount() > 0) : "No transaction loaded from workload"; assertEquals(WORKLOAD_XACT_LIMIT, workload.getTransactionCount()); } assertNotNull(workload_file); } /** * testGetTimeInterval */ @Test public void testGetTimeInterval() throws Exception { Histogram<Integer> h = new ObjectHistogram<Integer>(); for (TransactionTrace txn_trace : workload.getTransactions()) { assert(txn_trace.getQueryCount() > 0) : txn_trace.debug(catalog_db); int interval = workload.getTimeInterval(txn_trace, NUM_INTERVALS); assert(interval >= 0) : "Invalid Interval: " + interval; assert(interval < NUM_INTERVALS) : "Invalid Interval: " + interval; h.put(interval); } // FOR System.err.println(h); for (int interval = 0; interval < NUM_INTERVALS; interval++) { Long count = h.get(interval); assertNotNull("No results for Interval #" + interval, count); } // FOR // Make sure the last interval doesn't only have one entry! assertNotSame("Only entry in last interval!", 1l, h.get(NUM_INTERVALS - 1).longValue()); } }