package net.tomp2p.p2p;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import net.tomp2p.Utils2;
import net.tomp2p.futures.BaseFuture;
import net.tomp2p.futures.FutureBootstrap;
import net.tomp2p.futures.FutureDiscover;
import net.tomp2p.peers.Number160;
import net.tomp2p.peers.PeerAddress;
import org.junit.Assert;
import org.junit.Test;
public class TestBootstrap {
@Test
public void testBootstrapDiscover() throws Exception {
final Random rnd = new Random(42);
Peer master = null;
Peer slave = null;
try {
master = new PeerMaker(new Number160(rnd)).ports(4001).makeAndListen();
slave = new PeerMaker(new Number160(rnd)).ports(4002).makeAndListen();
FutureDiscover fd = master.discover().setPeerAddress(slave.getPeerAddress()).start();
fd.awaitUninterruptibly();
System.err.println(fd.getFailedReason());
Assert.assertEquals(true, fd.isSuccess());
} finally {
if (master != null) {
master.shutdown().await();
}
if (slave != null) {
slave.shutdown().await();
}
}
}
@Test
public void testBootstrapFail() throws Exception {
final Random rnd = new Random(42);
Peer master = null;
Peer slave = null;
try {
master = new PeerMaker(new Number160(rnd)).ports(4001).makeAndListen();
slave = new PeerMaker(new Number160(rnd)).ports(4002).makeAndListen();
FutureBootstrap fb = master.bootstrap().setInetAddress(InetAddress.getByName("127.0.0.1"))
.setPorts(3000).start();
fb.awaitUninterruptibly();
Assert.assertEquals(false, fb.isSuccess());
System.err.println(fb.getFailedReason());
fb = master.bootstrap().setPeerAddress(slave.getPeerAddress()).start();
fb.awaitUninterruptibly();
Assert.assertEquals(true, fb.isSuccess());
} finally {
if (master != null) {
master.shutdown().await();
}
if (slave != null) {
slave.shutdown().await();
}
}
}
@Test
public void testBootstrap() throws Exception {
final Random rnd = new Random(42);
Peer master = null;
try {
// setup
Peer[] peers = Utils2.createNodes(2000, rnd, 4001);
master = peers[0];
// do testing
List<FutureBootstrap> tmp = new ArrayList<FutureBootstrap>();
for (int i = 0; i < peers.length; i++) {
if (peers[i] != master) {
FutureBootstrap res = peers[i].bootstrap().setPeerAddress(master.getPeerAddress())
.start();
tmp.add(res);
}
}
int i = 0;
for (FutureBootstrap fm : tmp) {
fm.awaitUninterruptibly();
if (fm.isFailed())
System.err.println(fm.getFailedReason());
Assert.assertEquals(true, fm.isSuccess());
System.err.println("i:" + (++i));
}
} finally {
if (master != null) {
master.shutdown().await();
}
}
}
@Test
public void testBootstrap2() throws Exception {
final Random rnd = new Random(42);
Peer master = null;
try {
// setup
Peer[] peers = Utils2.createNodes(2000, rnd, 4001);
master = peers[0];
// do testing
List<FutureBootstrap> tmp = new ArrayList<FutureBootstrap>();
for (int i = 0; i < peers.length; i++) {
if (peers[i] != master) {
FutureBootstrap res = peers[i].bootstrap().setPeerAddress(master.getPeerAddress())
.start();
tmp.add(res);
}
}
int i = 0;
for (FutureBootstrap fm : tmp) {
fm.awaitUninterruptibly();
if (fm.isFailed())
System.err.println("FAILL:" + fm.getFailedReason());
Assert.assertEquals(true, fm.isSuccess());
System.err.println("i:" + (++i));
}
} finally {
if (master != null) {
master.shutdown().await();
}
}
}
@Test
public void testBootstrap3() throws Exception {
final Random rnd = new Random(42);
Peer master = null;
try {
// setup
Peer[] peers = Utils2.createNonMaintenanceNodes(100, rnd, 4001);
master = peers[0];
// do testing
List<FutureBootstrap> tmp = new ArrayList<FutureBootstrap>();
// we start from 1, because a broadcast to ourself will not get
// replied.
for (int i = 1; i < peers.length; i++) {
FutureBootstrap res = peers[i].bootstrap().setPorts(4001).setBroadcast().start();
tmp.add(res);
}
int i = 0;
for (FutureBootstrap fm : tmp) {
System.err.println("i:" + (++i));
fm.awaitUninterruptibly();
if (fm.isFailed())
System.err.println("error " + fm.getFailedReason());
Assert.assertEquals(true, fm.isSuccess());
}
} finally {
if (master != null) {
master.shutdown().await();
}
}
}
@Test
public void testBootstrap4() throws Exception {
final Random rnd = new Random(42);
Peer master = null;
Peer slave = null;
try {
master = new PeerMaker(new Number160(rnd)).ports(4001).makeAndListen();
slave = new PeerMaker(new Number160(rnd)).ports(4002).makeAndListen();
BaseFuture res = slave.ping().setPort(4001).setBroadcast().start();
res.awaitUninterruptibly();
Assert.assertEquals(true, res.isSuccess());
} finally {
if (master != null) {
master.shutdown().await();
}
if (slave != null) {
slave.shutdown().await();
}
}
}
@Test
public void testBootstrap5() throws Exception {
final Random rnd = new Random(42);
Peer peer = null;
try {
peer = new PeerMaker(new Number160(rnd)).ports(4000).makeAndListen();
PeerAddress pa = new PeerAddress(new Number160(rnd), "192.168.77.77", 4000, 4000);
FutureBootstrap tmp = peer.bootstrap().setPeerAddress(pa).start();
tmp.awaitUninterruptibly();
Assert.assertEquals(false, tmp.isSuccess());
} finally {
if (peer != null) {
peer.shutdown().await();
}
}
}
/**
* This test works because if a peer bootstraps to itself, then its typically the bootstrapping peer.
*
* @throws Exception .
*/
@Test
public void testBootstrap6() throws Exception {
final Random rnd = new Random(42);
Peer peer = null;
try {
peer = new PeerMaker(new Number160(rnd)).ports(4000).makeAndListen();
FutureBootstrap tmp = peer.bootstrap().setPeerAddress(peer.getPeerAddress()).start();
tmp.awaitUninterruptibly();
Assert.assertEquals(true, tmp.isSuccess());
} finally {
if (peer != null) {
peer.shutdown().await();
}
}
}
/**
* This test fails because if a peer bootstraps to itself, then its typically the bootstrapping peer. However, if we
* bootstrap to more than one peer, and the boostrap fails, then we fail this test.
*
* @throws Exception .
*/
@Test
public void testBootstrap7() throws Exception {
final Random rnd = new Random(42);
Peer peer = null;
try {
peer = new PeerMaker(new Number160(rnd)).ports(4000).makeAndListen();
Collection<PeerAddress> bootstrapTo = new ArrayList<PeerAddress>(2);
PeerAddress pa = new PeerAddress(new Number160(rnd), "192.168.77.77", 4000, 4000);
bootstrapTo.add(peer.getPeerAddress());
bootstrapTo.add(pa);
FutureBootstrap tmp = peer.bootstrap().setBootstrapTo(bootstrapTo).start();
tmp.awaitUninterruptibly();
Assert.assertEquals(false, tmp.isSuccess());
} finally {
if (peer != null) {
peer.shutdown().await();
}
}
}
}