package net.tomp2p.rpc;
import net.tomp2p.connection2.ChannelCreator;
import net.tomp2p.connection2.DefaultConnectionConfiguration;
import net.tomp2p.futures.FutureChannelCreator;
import net.tomp2p.futures.FutureResponse;
import net.tomp2p.p2p.Peer;
import net.tomp2p.p2p.PeerMaker;
import net.tomp2p.peers.Number160;
import net.tomp2p.utils.Timings;
import org.junit.Assert;
import org.junit.Test;
public class TestPeerExchange {
@Test
public void testPex() throws Exception {
Peer sender = null;
Peer recv1 = null;
ChannelCreator cc = null;
try {
sender = new PeerMaker(new Number160("0x9876")).p2pId(55).ports(2424).makeAndListen();
recv1 = new PeerMaker(new Number160("0x1234")).p2pId(55).ports(8088).makeAndListen();
Number160 locationKey = new Number160("0x5555");
Number160 domainKey = new Number160("0x7777");
FutureChannelCreator fcc = recv1.getConnectionBean().reservation().create(1, 0);
fcc.awaitUninterruptibly();
cc = fcc.getChannelCreator();
sender.getPeerBean().trackerStorage()
.addActive(locationKey, domainKey, sender.getPeerAddress(), null);
FutureResponse fr = sender.getPeerExchangeRPC().peerExchange(recv1.getPeerAddress(), locationKey,
domainKey, false, cc, new DefaultConnectionConfiguration());
fr.awaitUninterruptibly();
if (fr.isFailed()) {
System.err.println(fr.getFailedReason());
}
Assert.assertEquals(true, fr.isSuccess());
Timings.sleep(500);
Assert.assertEquals(1, recv1.getPeerBean().trackerStorage().sizeSecondary(locationKey, domainKey));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cc != null) {
cc.shutdown().awaitListenersUninterruptibly();
}
if (sender != null) {
sender.shutdown().await();
}
if (recv1 != null) {
recv1.shutdown().await();
}
}
}
}