package org.basex.http.rest;
import static org.junit.Assert.*;
import java.io.*;
import org.basex.http.*;
import org.basex.io.in.*;
import org.basex.util.*;
import org.junit.*;
/**
* This class sends parallel PUT requests to the REST API.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
public final class RESTParallelPutTest extends HTTPTest {
/** Client count. */
private static final int CLIENTS = 10;
/** Runs per client. */
private static final int RUNS = 10;
/** Failed string. */
private static String failed;
// INITIALIZERS =============================================================
/**
* Start server.
* @throws Exception exception
*/
@BeforeClass
public static void start() throws Exception {
init(REST_ROOT, true);
}
// TEST METHODS =============================================================
/**
* Concurrency test.
* @throws Exception exception
*/
@Test
public void test() throws Exception {
put(NAME, new ArrayInput(""));
// start and join concurrent clients
final Client[] clients = new Client[CLIENTS];
final int cs = clients.length;
for(int i = 0; i < cs; i++) clients[i] = new Client();
for(final Client c : clients) c.start();
for(final Client c : clients) c.join();
delete(NAME);
if(failed != null) fail(failed);
}
/** Client class. */
private static class Client extends Thread {
@Override
public void run() {
try {
for(int i = 0; i < RUNS && failed == null; i++) {
put(NAME + '/' + i + ".xml", new ArrayInput("<x/>"));
}
} catch(final IOException ex) {
failed = ex.getMessage();
Util.stack(ex);
}
}
}
}