package edu.brown.designer.partitioners; import java.io.File; import java.util.Collection; import org.junit.Test; import org.voltdb.catalog.*; import org.voltdb.types.PartitionMethodType; import edu.brown.BaseTestCase; import edu.brown.catalog.CatalogUtil; import edu.brown.designer.Designer; import edu.brown.designer.DesignerHints; import edu.brown.designer.DesignerInfo; import edu.brown.designer.partitioners.plan.PartitionPlan; import edu.brown.designer.partitioners.plan.TableEntry; import edu.brown.mappings.ParameterMappingsSet; import edu.brown.utils.ProjectType; import edu.brown.workload.Workload; public class TestPrimaryKeyPartitioner extends BaseTestCase { private PrimaryKeyPartitioner partitioner; private Workload workload; private Designer designer; private DesignerInfo info; private DesignerHints hints; private static ParameterMappingsSet correlations; private static File correlations_file; @Override protected void setUp() throws Exception { super.setUp(ProjectType.TPCC, true); if (correlations == null) { correlations_file = this.getParameterMappingsFile(ProjectType.TPCC); assertNotNull(correlations_file); assert(correlations_file.exists()); correlations = new ParameterMappingsSet(); correlations.load(correlations_file, catalog_db); } // Setup everything else (that's just how we roll up in this ma) this.workload = new Workload(catalog); this.info = new DesignerInfo(catalogContext, this.workload); this.info.setPartitionerClass(PrimaryKeyPartitioner.class); this.info.setMappings(correlations); this.info.setMappingsFile(correlations_file); this.hints = new DesignerHints(); this.designer = new Designer(this.info, this.hints, this.info.getArgs()); this.partitioner = (PrimaryKeyPartitioner)this.designer.getPartitioner(); assertNotNull(this.partitioner); } /** * testGenerate */ @Test public void testGenerate() throws Exception { PartitionPlan pplan = this.partitioner.generate(this.hints); assertNotNull(pplan); assertEquals(catalogContext.getDataTables().size(), pplan.getTableEntries().size()); for (Table catalog_tbl : pplan.getTableEntries().keySet()) { if (catalog_tbl.getSystable()) continue; TableEntry pentry = pplan.getTableEntries().get(catalog_tbl); assertNotNull("Null PartitionEntry for " + catalog_tbl, pentry); Collection<Column> pkey_columns = CatalogUtil.getPrimaryKeyColumns(catalog_tbl); PartitionMethodType expected = (pkey_columns.isEmpty() ? PartitionMethodType.REPLICATION : PartitionMethodType.HASH); assertEquals("Invalid PartitionMethodType for " + catalog_tbl, expected, pentry.getMethod()); } // FOR System.err.println(pplan); } }