Manage a single server for use with tests. It supports three modes:
- One server for a whole test suite
- One server per test class
- One server per individual test
One server per individual test can be troublesome due to connections not closing down
fast enough (left in TCP state
TIME_WAIT which is 2 minutes) and also can be
slow. One server per test class is a good compromise.
The data in the server is always reseet between tests.
Using a connection pooling HttpClient (see
HttpOp#createPoolingHttpClient()) is
important, both for test performance and for reducing the TCP connection load on the
operating system.
Usage:
In the test suite, put:
@BeforeClass static public void beforeSuiteClass() { FusekiTestServer.ctlBeforeTestSuite(); }
@AfterClass static public void afterSuiteClass() { FusekiTestServer.ctlAfterTestSuite(); }
In the test class, put:
@BeforeClass public static void ctlBeforeClass() { FusekiTestServer.ctlBeforeClass(); }
@AfterClass public static void ctlAfterClass() { FusekiTestServer.ctlAfterClass(); }
@Before public void ctlBeforeTest() { FusekiTestServer.ctlBeforeTest(); }
@After public void ctlAfterTest() { FusekiTestServer.ctlAfterTest(); }
Much of this machinery is unnessecary for just running a sever in the background:
private static FusekiServer server ;
private static DatasetGraph serverdsg = DatasetGraphFactory.createTxnMem() ;
@BeforeClass
public static void beforeClass() {
server = FusekiServer.create()
.setPort(....)
.add("/ds", serverdsg)
.build()
.start();
}
@Before
public void beforeTest() {
// Clear up data in server servers
Txn.executeWrite(serverdsg, ()->serverdsg.clear()) ;
}
@AfterClass
public static void afterClass() {
server.stop();
}