*
* @throws Exception should not happen
*/
public void testBiDirectionalInBandBytestream() throws Exception {
Connection initiatorConnection = getConnection(0);
Connection targetConnection = getConnection(1);
// test data
Random rand = new Random();
final byte[] data = new byte[dataSize];
rand.nextBytes(data);
final SynchronousQueue<byte[]> queue = new SynchronousQueue<byte[]>();
InBandBytestreamManager targetByteStreamManager = InBandBytestreamManager.getByteStreamManager(targetConnection);
InBandBytestreamListener incomingByteStreamListener = new InBandBytestreamListener() {
public void incomingBytestreamRequest(InBandBytestreamRequest request) {
try {
InBandBytestreamSession session = request.accept();
OutputStream outputStream = session.getOutputStream();
outputStream.write(data);
outputStream.flush();
InputStream inputStream = session.getInputStream();
byte[] receivedData = new byte[dataSize];
int totalRead = 0;
while (totalRead < dataSize) {
int read = inputStream.read(receivedData, totalRead, dataSize - totalRead);
totalRead += read;
}
queue.put(receivedData);
}
catch (Exception e) {
fail(e.getMessage());
}
}
};
targetByteStreamManager.addIncomingBytestreamListener(incomingByteStreamListener);
InBandBytestreamManager initiatorByteStreamManager = InBandBytestreamManager.getByteStreamManager(initiatorConnection);
InBandBytestreamSession session = initiatorByteStreamManager.establishSession(targetConnection.getUser());
// verify stream
byte[] receivedData = new byte[dataSize];
InputStream inputStream = session.getInputStream();
int totalRead = 0;