package org.basex.local.single; import static org.basex.core.Text.*; import java.io.*; import org.basex.*; import org.basex.api.client.*; import org.basex.core.*; import org.basex.core.cmd.*; import org.junit.*; /** * This class offers utility methods to perform simple benchmarks. * * @author BaseX Team 2005-17, BSD License * @author Christian Gruen */ public abstract class Benchmark extends SandboxTest { /** Test document. */ private static final String INPUT = "src/test/resources/factbook.zip"; /** Server reference. */ private static BaseXServer server; /** Session. */ private static Session session; /** Local vs server flag. */ private static boolean local; /** * Initializes the benchmark. * @throws IOException I/O exception */ @BeforeClass public static void init() throws IOException { // check if server is (not) running final int sp = context.soptions.get(StaticOptions.SERVERPORT); server = local || BaseXServer.ping(S_LOCALHOST, sp) ? null : createServer(); session = local ? new LocalSession(context) : createClient(); // create test database session.execute(new Set(MainOptions.QUERYINFO, true)); } /** * Stops the server. * @throws IOException I/O exception */ @AfterClass public static void stop() throws IOException { stopServer(server); } /** * Creates a new database instance and performs a query. * @param query query to be evaluated * @return resulting string * @throws IOException I/O exception */ protected static String eval(final String query) throws IOException { return eval(1, query); } /** * Performs the specified query n times and and returns the result. * @param query query to be evaluated * @param n number of runs * @return resulting string * @throws IOException I/O exception */ protected static String eval(final int n, final String query) throws IOException { // loop through number of runs for a single query check(); String result = ""; for(int rn = 0; rn < n; ++rn) result = session.execute(new XQuery(query)); return result; } /** * Creates or opens the test database. * @throws IOException I/O exception */ private static void check() throws IOException { session.execute(new Check(INPUT)); } }