Package net.tomp2p.p2p

Source Code of net.tomp2p.p2p.TestQuit

package net.tomp2p.p2p;

import java.util.Random;

import net.tomp2p.Utils2;
import net.tomp2p.connection.ChannelCreator;
import net.tomp2p.futures.FutureChannelCreator;
import net.tomp2p.futures.FutureDone;
import net.tomp2p.p2p.builder.ShutdownBuilder;
import net.tomp2p.peers.Number160;
import net.tomp2p.peers.PeerAddress;

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 PeerBuilder(new Number160("0x9876")).p2pId(55).ports(2424).start();
            recv1 = new PeerBuilder(new Number160("0x1234")).p2pId(55).ports(8088).start();
            sender.bootstrap().peerAddress(recv1.peerAddress()).start().awaitUninterruptibly();
            Assert.assertEquals(1, sender.peerBean().peerMap().all().size());
            Assert.assertEquals(1, recv1.peerBean().peerMap().allOverflow().size());
            // graceful shutdown
           
            FutureChannelCreator fcc = recv1.connectionBean().reservation().create(1, 0);
            fcc.awaitUninterruptibly();
            cc = fcc.channelCreator();
           
            ShutdownBuilder builder = new ShutdownBuilder(sender);
           
            sender.quitRPC().quit(recv1.peerAddress(), builder, cc);
            sender.shutdown().await();
            // don't care about the sender
            Assert.assertEquals(0, recv1.peerBean().peerMap().all().size());

        } finally {
            if (cc != null) {
                cc.shutdown().await();
            }
            if (sender != null) {
                sender.shutdown().await();
            }
            if (recv1 != null) {
                recv1.shutdown().await();
            }
        }
    }
   
    /**
   * Test the quit messages if they set a peer as offline.
   *
   * @throws Exception .
   */
  @Test
  public void testQuit() throws Exception {
    Peer master = null;
    try {
      // setup
      final int nrPeers = 200;
      final int port = 4001;
      Random rnd =new Random(42);
      Peer[] peers = Utils2.createNodes(nrPeers, rnd, port);
      master = peers[0];
      Utils2.perfectRouting(peers);
      // do testing
      final int peerTest = 10;
      System.err.println("counter: " + countOnline(peers, peers[peerTest].peerAddress()));
      FutureDone<Void> futureShutdown = peers[peerTest].announceShutdown().start();
      futureShutdown.awaitUninterruptibly();
      // we need to wait a bit, since the quit RPC is a fire and forget
      // and we return immediately
      Thread.sleep(2000);
      int counter = countOnline(peers, peers[peerTest].peerAddress());
      System.err.println("counter: " + counter);
      Assert.assertEquals(180, nrPeers - 20);
    } finally {
      if (master != null) {
        master.shutdown().await();
      }
    }
  }
 
  private static int countOnline(Peer[] peers, PeerAddress peerAddress) {
    int counter = 0;
    for (Peer peer : peers) {
      if (peer.peerBean().peerMap().contains(peerAddress)) {
        counter++;
      }
    }
    return counter;
  }
}
TOP

Related Classes of net.tomp2p.p2p.TestQuit

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.