package net.tomp2p;
import java.io.IOException;
import net.tomp2p.connection.ChannelCreator;
import net.tomp2p.futures.FutureChannelCreator;
import net.tomp2p.futures.FutureResponse;
import net.tomp2p.message.Buffer;
import net.tomp2p.p2p.Peer;
import net.tomp2p.p2p.PeerBuilder;
import net.tomp2p.p2p.builder.SendDirectBuilder;
import net.tomp2p.peers.Number160;
import net.tomp2p.peers.PeerAddress;
import net.tomp2p.rpc.RawDataReply;
import net.tomp2p.storage.AlternativeCompositeByteBuf;
import org.junit.Assert;
import org.junit.Test;
public class TestDirect2 {
private static final byte[] TestRawBytes = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
@Test
public void testDirect1() throws InterruptedException, IOException {
Peer sender = null;
Peer recv1 = null;
ChannelCreator cc = null;
try {
sender = new PeerBuilder(new Number160("0x50")).p2pId(55).ports(2424)
.maintenanceTask(TestUtil.CreateInfiniteIntervalMaintenanceTask())
.channelServerConfiguration(TestUtil.createInfiniteTimeoutChannelServerConfiguration(2424, 2424))
.start();
recv1 = new PeerBuilder(new Number160("0x20")).p2pId(55).ports(8088)
.maintenanceTask(TestUtil.CreateInfiniteIntervalMaintenanceTask())
.channelServerConfiguration(TestUtil.createInfiniteTimeoutChannelServerConfiguration(8088, 8088))
.start();
recv1.rawDataReply(new RawDataReply() {
@Override
public Buffer reply(PeerAddress sender, Buffer requestBuffer, boolean complete) throws Exception {
return createTestBuffer();
}
});
FutureChannelCreator fcc = sender.connectionBean().reservation().create(0, 2);
fcc.awaitUninterruptibly();
cc = fcc.channelCreator();
SendDirectBuilder sendDirectBuilder = new SendDirectBuilder(sender, (PeerAddress) null);
sendDirectBuilder.streaming();
sendDirectBuilder.idleTCPSeconds(Integer.MAX_VALUE);
Buffer buffer = createTestBuffer();
sendDirectBuilder.buffer(buffer);
FutureResponse fr1 = sender.directDataRPC().send(recv1.peerAddress(), sendDirectBuilder, cc);
fr1.awaitUninterruptibly();
Assert.assertEquals(true, fr1.isSuccess());
Buffer ret = fr1.responseMessage().buffer(0);
Assert.assertEquals(buffer, ret);
}
finally {
if (sender != null) {
sender.shutdown().await();
}
if (recv1 != null) {
recv1.shutdown().await();
}
if (cc != null) {
cc.shutdown().await();
}
}
}
private static Buffer createTestBuffer() {
AlternativeCompositeByteBuf acbb = AlternativeCompositeByteBuf.compBuffer();
acbb.writeBytes(TestRawBytes);
return new Buffer(acbb);
}
}