package dw.xmlrpc.itest; import java.net.MalformedURLException; import static com.github.tomakehurst.wiremock.client.WireMock.*; import org.junit.Rule; import com.github.tomakehurst.wiremock.http.Fault; import com.github.tomakehurst.wiremock.junit.WireMockRule; import dw.xmlrpc.DokuJClient; import dw.xmlrpc.DokuJClientConfig; import dw.xmlrpc.exception.DokuException; import dw.xmlrpc.exception.DokuTimeoutException; import dw.xmlrpc.exception.DokuUnknownException; public class Test_BadQueries { private final int port = 8080; @Rule public WireMockRule wireMockRule = new WireMockRule(port); @org.junit.Test(expected=DokuTimeoutException.class) public void iCanStopIfItTakesTooLongToRespond() throws MalformedURLException, DokuException{ setTimeout(); DokuJClient client = buildClientWithTimeOut(1); makeADummyCall(client); } @org.junit.Test public void iCanWaitEvenIfResponseTakesLong() throws MalformedURLException, DokuException{ setTimeout(); DokuJClient client = buildClientWithTimeOut(60); makeADummyCall(client); } @org.junit.Test public void timeoutOfZeroMeansWaitAsLongAsYouNeed() throws MalformedURLException, DokuException{ setTimeout(); DokuJClient client = buildClientWithTimeOut(0); makeADummyCall(client); } private void setTimeout(){ addRequestProcessingDelay(5*1000); stubFor(post(urlEqualTo("/lib/exe/xmlrpc.php")) .willReturn(aResponse() .withStatus(200) .withBody("<methodResponse><params><param><value><array><data></data></array></value></param></params></methodResponse>") )); } @org.junit.Test(expected=DokuUnknownException.class) public void corruptedReply() throws Exception { stubFor(post(urlEqualTo("/lib/exe/xmlrpc.php")) .willReturn(aResponse() .withStatus(200) .withFault(Fault.MALFORMED_RESPONSE_CHUNK))); makeADummyCall(buildClient()); } private DokuJClient buildClient() throws MalformedURLException, DokuException { return buildClientWithTimeOut(0); } private DokuJClient buildClientWithTimeOut(int timeoutInSeconds) throws MalformedURLException, DokuException{ DokuJClientConfig config = new DokuJClientConfig("http://localhost:" + port + "/lib/exe/xmlrpc.php"); config.setTimeOutInSeconds(timeoutInSeconds); return new DokuJClient(config); } private void makeADummyCall(DokuJClient client) throws DokuException{ client.genericQuery("wiki.getAllPages"); } }