package xapi.test.server;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import xapi.io.X_IO;
import xapi.io.api.IORequest;
import xapi.io.api.IORequestBuilder;
import xapi.io.service.IOService;
import xapi.log.X_Log;
import xapi.time.X_Time;
import xapi.util.X_Debug;
import xapi.util.api.ConvertsValue;
import xapi.util.api.ErrorHandler;
import xapi.util.api.Pointer;
import xapi.util.api.SuccessHandler;
import static org.junit.Assert.assertTrue;
public class BasicIOTest {
private static abstract class Handler implements SuccessHandler<String>, ErrorHandler<Throwable> {
@Override
public void onError(final Throwable e) {
X_Log.error("IO error encountered", e);
X_Debug.rethrow(e);
}
}
protected static TestServer server;
private static final ConvertsValue<String,String> pass_thru = new ConvertsValue<String,String>() {
@Override
public String convert(final String from) {
return from;
}
};
@BeforeClass
public static void setupServer() {
server = new TestServer();
server.start();
}
@AfterClass
public static void teardownServer() {
server.finish();
}
@Test
public void testRequests() {
final IOService service = X_IO.getIOService();
service.registerParser(String.class, pass_thru, pass_thru);
final IORequestBuilder<String> req = service.request(String.class,
"http://127.0.0.1:" + TestServer.TEST_PORT+
"/xapi/debug");
final Pointer<Boolean> success = new Pointer<Boolean>(false);
final IORequest<String> state = req.send(new Handler() {
@Override
public void onSuccess(final String t) {
success.set("GET".equals(t));
}
});
while (state.isPending()) {
X_Time.trySleep(10, 0);
}
assertTrue(success.get());
}
}