package org.basex.server;
import org.basex.*;
import org.basex.api.client.*;
import org.junit.*;
/**
* This class performs a client/server memory stress tests with a specified number of threads and
* queries.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public final class ServerMemTest extends SandboxTest {
/** Query to be run. */
private static final String QUERY = "(for $i in 1 to 50000 order by $i return $i)[1]";
/** Server reference. */
BaseXServer server;
/**
* Runs the test.
* @throws Exception exception
*/
@Test
public void clients10() throws Exception {
run(10);
}
/**
* Runs the test.
* @throws Exception exception
*/
@Test
public void clients100() throws Exception {
run(100);
}
/**
* Runs the stress test.
* @param clients number of clients
* @throws Exception exception
*/
private void run(final int clients) throws Exception {
//run server instance
server = createServer();
// run clients
final Client[] cl = new Client[clients];
for(int i = 0; i < clients; ++i) cl[i] = new Client();
for(final Client c : cl) c.start();
for(final Client c : cl) c.join();
// stop server
stopServer(server);
}
/** Single client. */
static final class Client extends Thread {
/** Client session. */
private final ClientSession session;
/**
* Default constructor.
* @throws Exception exception
*/
Client() throws Exception {
session = createClient();
}
@Override
public void run() {
try {
// Perform query
session.execute("xquery " + QUERY);
session.close();
} catch(final Exception ex) {
ex.printStackTrace();
}
}
}
}