package edu.brown.designer.generators;
import org.voltdb.catalog.*;
import java.util.*;
import edu.brown.BaseTestCase;
import edu.brown.catalog.CatalogKey;
import edu.brown.designer.*;
import edu.brown.utils.ProjectType;
import edu.brown.workload.Workload;
/**
*
* @author pavlo
*
*/
public class TestDependencyGraphGenerator extends BaseTestCase {
protected DesignerInfo info;
@Override
protected void setUp() throws Exception {
super.setUp(ProjectType.TPCC, true);
this.applyParameterMappings(ProjectType.TPCC);
Workload workload = new Workload(catalog);
info = new DesignerInfo(catalogContext, workload);
}
/**
* testGenerate
*/
public void testGenerate() throws Exception {
DependencyGraph dgraph = new DependencyGraph(catalog_db);
new DependencyGraphGenerator(info).generate(dgraph);
Table item_table = catalog_db.getTables().get("ITEM");
Table warehouse_table = catalog_db.getTables().get("WAREHOUSE");
Table district_table = catalog_db.getTables().get("DISTRICT");
//
// Make sure that ITEM and WAREHOUSE are the roots
//
Set<String> expected = new HashSet<String>();
expected.add(CatalogKey.createKey(item_table));
expected.add(CatalogKey.createKey(warehouse_table));
for (DesignerVertex v : dgraph.getRoots()) {
// Skip any internal system tables
Table catalog_tbl = v.getCatalogItem();
if (catalog_tbl.getSystable()) continue;
//System.out.println(v.getCatalogItem());
assertTrue(expected.contains(v.getCatalogKey()));
} // FOR
assertEquals(expected.size(), dgraph.getRoots().size());
//
// Then make sure that DISTRICT is attached to WAREHOUSE
//
DesignerVertex warehouse_v = dgraph.getVertex(warehouse_table);
assertNotNull(warehouse_v);
DesignerVertex district_v = dgraph.getVertex(district_table);
assertNotNull(district_v);
assertTrue(dgraph.getSuccessors(warehouse_v).contains(district_v));
}
}