package net.tomp2p.rpc;
import net.tomp2p.connection2.ChannelCreator;
import net.tomp2p.futures.FutureChannelCreator;
import net.tomp2p.futures.FutureResponse;
import net.tomp2p.p2p.Peer;
import net.tomp2p.p2p.PeerMaker;
import net.tomp2p.p2p.builder.ShutdownBuilder;
import net.tomp2p.peers.Number160;
import org.junit.Assert;
import org.junit.Test;
public class TestQuit {
@Test
public void testGracefulhalt() 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();
sender.bootstrap().setPeerAddress(recv1.getPeerAddress()).start().awaitUninterruptibly();
Assert.assertEquals(1, sender.getPeerBean().peerMap().getAll().size());
Assert.assertEquals(1, recv1.getPeerBean().peerMap().getAllOverflow().size());
// graceful shutdown
FutureChannelCreator fcc = recv1.getConnectionBean().reservation().create(1, 0);
fcc.awaitUninterruptibly();
cc = fcc.getChannelCreator();
ShutdownBuilder builder = new ShutdownBuilder(sender);
FutureResponse fr = sender.getQuitRPC().quit(recv1.getPeerAddress(), builder, cc);
sender.shutdown().await();
// don't care about the sender
Assert.assertEquals(0, recv1.getPeerBean().peerMap().getAll().size());
} finally {
if (cc != null) {
cc.shutdown().await();
}
if (sender != null) {
sender.shutdown().await();
}
if (recv1 != null) {
recv1.shutdown().await();
}
}
}
}