FutureResponseHandler respHdl = new FutureResponseHandler();
BodyDataSink dataSink = con.send(new HttpRequestHeader("POST", "text/plain"), respHdl);
dataSink.setFlushmode(FlushMode.ASYNC);
dataSink.flush();
IHttpExchange srvExchange = null;
do {
QAUtil.sleep(100);
srvExchange = srvHdl.getLastExchange();
} while(srvExchange == null);
IHttpRequest srvSideRequest = srvExchange.getRequest();
NonBlockingBodyDataSource srvSideDataSource = srvSideRequest.getNonBlockingBody();
Assert.assertEquals(0, srvSideDataSource.available());
srvExchange.getConnection().suspendReceiving();
StringBuilder sent = new StringBuilder();
for (int i = 0; i < 10; i++) {
String s = new String(QAUtil.generateByteArray(50000 + i));
sent.append(s);
dataSink.write(s);
QAUtil.sleep(100);
// System.out.println("Client: pending writeData: " + dataSink.getPendingWriteDataSize());
// System.out.println("Server: received data: " + srvSideDataSource.available());
}
// Assert.assertTrue(dataSink.getPendingWriteDataSize() > 10000);
// Assert.assertEquals(0, srvSideDataSource.available());
srvExchange.getConnection().resumeReceiving();
dataSink.close();
System.out.println("waiting for complete");
do {
QAUtil.sleep(100);
} while (!srvSideDataSource.isComplete());
System.out.println("read received server data");
String reveived = srvSideDataSource.readStringByLength(srvSideDataSource.available());
Assert.assertEquals(sent.toString(), reveived);
srvExchange.send(new HttpResponse(200));
Assert.assertEquals(200, respHdl.getResponse().getStatus());
con.close();
server.close();