package org.voltdb.regressionsuites; import java.util.HashSet; import java.util.Set; import junit.framework.Test; import org.voltdb.BackendTarget; import org.voltdb.CatalogContext; import org.voltdb.VoltSystemProcedure; import org.voltdb.VoltTable; import org.voltdb.client.Client; import org.voltdb.client.ClientResponse; import org.voltdb.sysprocs.AdHoc; import edu.brown.benchmark.wikipedia.WikipediaClient; import edu.brown.benchmark.wikipedia.WikipediaLoader; import edu.brown.benchmark.wikipedia.WikipediaProjectBuilder; import edu.brown.hstore.Hstoreservice.Status; import edu.brown.hstore.conf.HStoreConf; /** * Simple test suite for the SEATS benchmark * @author pavlo */ public class TestWikipediaSuite extends RegressionSuite { private static final String PREFIX = "wikipedia"; private static final double SCALEFACTOR = 0.01; /** * Constructor needed for JUnit. Should just pass on parameters to superclass. * @param name The name of the method to test. This is just passed to the superclass. */ public TestWikipediaSuite(String name) { super(name); } public WikipediaLoader initWikipediaDatabase(final CatalogContext catalogContext, final Client client) throws Exception { HStoreConf hstore_conf = HStoreConf.singleton(); String args[] = { "NOCONNECTIONS=true", "CLIENT.SCALEFACTOR=" + hstore_conf.client.scalefactor, }; WikipediaLoader loader = new WikipediaLoader(args) { { this.setCatalogContext(catalogContext); this.setClientHandle(client); } @Override public CatalogContext getCatalogContext() { return (catalogContext); } }; loader.load(); return (loader); } public WikipediaClient initWikipediaClient(final CatalogContext catalogContext, final Client client) throws Exception { HStoreConf hstore_conf = HStoreConf.singleton(); String args[] = { "NOCONNECTIONS=true", "CLIENT.SCALEFACTOR=" + hstore_conf.client.scalefactor, }; WikipediaClient benchmarkClient = new WikipediaClient(args) { { this.setCatalogContext(catalogContext); this.setClientHandle(client); } @Override public CatalogContext getCatalogContext() { return (catalogContext); } }; return (benchmarkClient); } /** * testInitialize */ public void testInitialize() throws Exception { Client client = this.getClient(); this.initWikipediaDatabase(this.getCatalogContext(), client); Set<String> allTables = new HashSet<String>(); String procName = VoltSystemProcedure.procCallName(AdHoc.class); for (String tableName : allTables) { String query = "SELECT COUNT(*) FROM " + tableName; ClientResponse cresponse = client.callProcedure(procName, query); assertEquals(Status.OK, cresponse.getStatus()); VoltTable results[] = cresponse.getResults(); assertEquals(1, results.length); long count = results[0].asScalarLong(); assertTrue(tableName + " -> " + count, count > 0); // System.err.println(tableName + "\n" + results[0]); } // FOR } public static Test suite() { VoltServerConfig config = null; // the suite made here will all be using the tests from this class MultiConfigSuiteBuilder builder = new MultiConfigSuiteBuilder(TestWikipediaSuite.class); builder.setGlobalConfParameter("client.scalefactor", SCALEFACTOR); // build up a project builder for the benchmark WikipediaProjectBuilder project = new WikipediaProjectBuilder(); project.addAllDefaults(); boolean success; ///////////////////////////////////////////////////////////// // CONFIG #1: 1 Local Site/Partition running on JNI backend ///////////////////////////////////////////////////////////// config = new LocalSingleProcessServer(PREFIX + "-1part.jar", 1, BackendTarget.NATIVE_EE_JNI); success = config.compile(project); assert(success); builder.addServerConfig(config); ///////////////////////////////////////////////////////////// // CONFIG #2: 1 Local Site with 2 Partitions running on JNI backend ///////////////////////////////////////////////////////////// // config = new LocalSingleProcessServer(PREFIX + "-2part.jar", 2, BackendTarget.NATIVE_EE_JNI); // success = config.compile(project); // assert(success); // builder.addServerConfig(config); // // //////////////////////////////////////////////////////////// // // CONFIG #3: cluster of 2 nodes running 2 site each, one replica // //////////////////////////////////////////////////////////// // config = new LocalCluster(PREFIX + "-cluster.jar", 2, 2, 1, BackendTarget.NATIVE_EE_JNI); // success = config.compile(project); // assert(success); // builder.addServerConfig(config); return builder; } }