Remove random ports and static ID

This commit is contained in:
Manfred Karrer 2014-11-10 13:17:06 +01:00
parent 05a86f251f
commit 865fe73bfb

View file

@ -26,12 +26,12 @@ import java.io.IOException;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.Random;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import net.tomp2p.connection.Bindings; import net.tomp2p.connection.Bindings;
import net.tomp2p.connection.ChannelClientConfiguration; import net.tomp2p.connection.ChannelClientConfiguration;
import net.tomp2p.connection.Ports;
import net.tomp2p.connection.StandardProtocolFamily; import net.tomp2p.connection.StandardProtocolFamily;
import net.tomp2p.dht.FutureGet; import net.tomp2p.dht.FutureGet;
import net.tomp2p.dht.FuturePut; import net.tomp2p.dht.FuturePut;
@ -84,7 +84,7 @@ public class TomP2PTests {
} }
// If you want to test in one specific connection mode define it directly, otherwise use UNKNOWN // If you want to test in one specific connection mode define it directly, otherwise use UNKNOWN
private static final ConnectionType FORCED_CONNECTION_TYPE = ConnectionType.NAT; private static final ConnectionType FORCED_CONNECTION_TYPE = ConnectionType.DIRECT;
// Typically you run the seed node in localhost to test direct connection. // Typically you run the seed node in localhost to test direct connection.
// If you have a setup where you are not behind a router you can also use a WAN side seed node. // If you have a setup where you are not behind a router you can also use a WAN side seed node.
@ -107,6 +107,7 @@ public class TomP2PTests {
// Use to stress tests by repeating them // Use to stress tests by repeating them
private static final int STRESS_TEST_COUNT = 1; private static final int STRESS_TEST_COUNT = 1;
private Peer peer;
private PeerDHT peer1DHT; private PeerDHT peer1DHT;
private PeerDHT peer2DHT; private PeerDHT peer2DHT;
private int client1Port; private int client1Port;
@ -116,52 +117,66 @@ public class TomP2PTests {
@Before @Before
public void setUp() { public void setUp() {
client1Port = getNewRandomPort(); client1Port = 7777;
client2Port = getNewRandomPort(); client2Port = 7778;
} }
@After @After
public void tearDown() { public void tearDown() {
if (peer1DHT != null) { if (peer1DHT != null) {
peer1DHT.shutdown().awaitUninterruptibly(); peer1DHT.shutdown().awaitUninterruptibly();
peer1DHT.shutdown().awaitListenersUninterruptibly();
} }
if (peer2DHT != null) { if (peer2DHT != null) {
peer2DHT.shutdown().awaitUninterruptibly(); peer2DHT.shutdown().awaitUninterruptibly();
peer2DHT.shutdown().awaitListenersUninterruptibly();
}
if (peer != null) {
peer.shutdown().awaitUninterruptibly();
peer.shutdown().awaitListenersUninterruptibly();
} }
} }
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void bootstrapInUnknownMode() throws Exception { public void bootstrapInUnknownMode() throws Exception {
if (FORCED_CONNECTION_TYPE == ConnectionType.UNKNOWN) if (FORCED_CONNECTION_TYPE == ConnectionType.UNKNOWN) {
assertNotNull(bootstrapInUnknownMode("node_1", client1Port)); peer = bootstrapInUnknownMode(client1Port);
assertNotNull(peer);
}
} }
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testBootstrapDirectConnection() throws Exception { public void testBootstrapDirectConnection() throws Exception {
if (FORCED_CONNECTION_TYPE == ConnectionType.DIRECT) if (FORCED_CONNECTION_TYPE == ConnectionType.DIRECT) {
assertNotNull(bootstrapDirectConnection("node_1", client1Port)); peer = bootstrapDirectConnection(client1Port);
assertNotNull(peer);
}
} }
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testBootstrapWithPortForwarding() throws Exception { public void testBootstrapWithPortForwarding() throws Exception {
if (FORCED_CONNECTION_TYPE == ConnectionType.NAT) if (FORCED_CONNECTION_TYPE == ConnectionType.NAT) {
assertNotNull(bootstrapWithPortForwarding("node_1", client1Port)); peer = bootstrapWithPortForwarding(client1Port);
assertNotNull(peer);
}
} }
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testBootstrapInRelayMode() throws Exception { public void testBootstrapInRelayMode() throws Exception {
if (FORCED_CONNECTION_TYPE == ConnectionType.RELAY) if (FORCED_CONNECTION_TYPE == ConnectionType.RELAY) {
assertNotNull(bootstrapInRelayMode("node_1", client1Port)); peer = bootstrapInRelayMode(client1Port);
assertNotNull(peer);
}
} }
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testPut() throws Exception { public void testPut() throws Exception {
peer1DHT = getDHTPeer("node_1", client1Port); peer1DHT = getDHTPeer(client1Port);
FuturePut futurePut = peer1DHT.put(Number160.createHash("key")).data(new Data("hallo")).start(); FuturePut futurePut = peer1DHT.put(Number160.createHash("key")).data(new Data("hallo")).start();
futurePut.awaitUninterruptibly(); futurePut.awaitUninterruptibly();
assertTrue(futurePut.isSuccess()); assertTrue(futurePut.isSuccess());
@ -170,12 +185,12 @@ public class TomP2PTests {
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testPutGet() throws Exception { public void testPutGet() throws Exception {
peer1DHT = getDHTPeer("node_1", client1Port); peer1DHT = getDHTPeer(client1Port);
FuturePut futurePut = peer1DHT.put(Number160.createHash("key")).data(new Data("hallo")).start(); FuturePut futurePut = peer1DHT.put(Number160.createHash("key")).data(new Data("hallo")).start();
futurePut.awaitUninterruptibly(); futurePut.awaitUninterruptibly();
assertTrue(futurePut.isSuccess()); assertTrue(futurePut.isSuccess());
peer2DHT = getDHTPeer("node_2", client2Port); peer2DHT = getDHTPeer(client2Port);
FutureGet futureGet = peer2DHT.get(Number160.createHash("key")).start(); FutureGet futureGet = peer2DHT.get(Number160.createHash("key")).start();
futureGet.awaitUninterruptibly(); futureGet.awaitUninterruptibly();
assertTrue(futureGet.isSuccess()); assertTrue(futureGet.isSuccess());
@ -185,7 +200,7 @@ public class TomP2PTests {
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testAdd() throws Exception { public void testAdd() throws Exception {
peer1DHT = getDHTPeer("node_1", client1Port); peer1DHT = getDHTPeer(client1Port);
FuturePut futurePut1 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo1")).start(); FuturePut futurePut1 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo1")).start();
futurePut1.awaitUninterruptibly(); futurePut1.awaitUninterruptibly();
assertTrue(futurePut1.isSuccess()); assertTrue(futurePut1.isSuccess());
@ -194,7 +209,7 @@ public class TomP2PTests {
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testAddGet() throws Exception { public void testAddGet() throws Exception {
peer1DHT = getDHTPeer("node_1", client1Port); peer1DHT = getDHTPeer(client1Port);
FuturePut futurePut1 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo1")) FuturePut futurePut1 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo1"))
.start(); .start();
futurePut1.awaitUninterruptibly(); futurePut1.awaitUninterruptibly();
@ -206,7 +221,7 @@ public class TomP2PTests {
assertTrue(futurePut2.isSuccess()); assertTrue(futurePut2.isSuccess());
peer2DHT = getDHTPeer("node_2", client2Port); peer2DHT = getDHTPeer(client2Port);
FutureGet futureGet = peer2DHT.get(Number160.createHash("locationKey")).all().start(); FutureGet futureGet = peer2DHT.get(Number160.createHash("locationKey")).all().start();
futureGet.awaitUninterruptibly(); futureGet.awaitUninterruptibly();
assertTrue(futureGet.isSuccess()); assertTrue(futureGet.isSuccess());
@ -219,7 +234,7 @@ public class TomP2PTests {
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testAddRemove() throws Exception { public void testAddRemove() throws Exception {
peer1DHT = getDHTPeer("node_1", client1Port); peer1DHT = getDHTPeer(client1Port);
FuturePut futurePut1 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo1")).start(); FuturePut futurePut1 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo1")).start();
futurePut1.awaitUninterruptibly(); futurePut1.awaitUninterruptibly();
futurePut1.awaitListenersUninterruptibly(); futurePut1.awaitListenersUninterruptibly();
@ -231,7 +246,7 @@ public class TomP2PTests {
assertTrue(futurePut2.isSuccess()); assertTrue(futurePut2.isSuccess());
peer2DHT = getDHTPeer("node_2", client2Port); peer2DHT = getDHTPeer(client2Port);
Number160 contentKey = new Data("hallo1").hash(); Number160 contentKey = new Data("hallo1").hash();
FutureRemove futureRemove = peer2DHT.remove(Number160.createHash("locationKey")).contentKey(contentKey).start(); FutureRemove futureRemove = peer2DHT.remove(Number160.createHash("locationKey")).contentKey(contentKey).start();
futureRemove.awaitUninterruptibly(); futureRemove.awaitUninterruptibly();
@ -262,8 +277,8 @@ public class TomP2PTests {
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testSendDirectBetweenLocalPeers() throws Exception { public void testSendDirectBetweenLocalPeers() throws Exception {
if (FORCED_CONNECTION_TYPE != ConnectionType.NAT && resolvedConnectionType != ConnectionType.RELAY) { if (FORCED_CONNECTION_TYPE != ConnectionType.NAT && resolvedConnectionType != ConnectionType.RELAY) {
peer1DHT = getDHTPeer("node_1", client1Port); peer1DHT = getDHTPeer(client1Port);
peer2DHT = getDHTPeer("node_2", client2Port); peer2DHT = getDHTPeer(client2Port);
final CountDownLatch countDownLatch = new CountDownLatch(1); final CountDownLatch countDownLatch = new CountDownLatch(1);
@ -295,7 +310,7 @@ public class TomP2PTests {
@Test @Test
@Repeat(STRESS_TEST_COUNT) @Repeat(STRESS_TEST_COUNT)
public void testSendDirectToSeedNode() throws Exception { public void testSendDirectToSeedNode() throws Exception {
peer1DHT = getDHTPeer("node_1", client1Port); peer1DHT = getDHTPeer(client1Port);
FuturePeerConnection futurePeerConnection = FuturePeerConnection futurePeerConnection =
peer1DHT.peer().createPeerConnection(BOOTSTRAP_NODE_ADDRESS, 500); peer1DHT.peer().createPeerConnection(BOOTSTRAP_NODE_ADDRESS, 500);
FutureDirect futureDirect = peer1DHT.peer().sendDirect(futurePeerConnection).object("hallo").start(); FutureDirect futureDirect = peer1DHT.peer().sendDirect(futurePeerConnection).object("hallo").start();
@ -304,11 +319,10 @@ public class TomP2PTests {
assertEquals("pong", futureDirect.object()); assertEquals("pong", futureDirect.object());
} }
private Peer bootstrapDirectConnection(String clientId, int clientPort) { private Peer bootstrapDirectConnection(int clientPort) {
final String id = clientId + clientPort;
Peer peer = null; Peer peer = null;
try { try {
Number160 peerId = Number160.createHash(clientId); Number160 peerId = new Number160(new Random(43L));
PeerMapConfiguration pmc = new PeerMapConfiguration(peerId).peerNoVerification(); PeerMapConfiguration pmc = new PeerMapConfiguration(peerId).peerNoVerification();
PeerMap pm = new PeerMap(pmc); PeerMap pm = new PeerMap(pmc);
ChannelClientConfiguration cc = PeerBuilder.createDefaultChannelClientConfiguration(); ChannelClientConfiguration cc = PeerBuilder.createDefaultChannelClientConfiguration();
@ -347,11 +361,11 @@ public class TomP2PTests {
} }
} }
private Peer bootstrapWithPortForwarding(String clientId, int clientPort) { private Peer bootstrapWithPortForwarding(int clientPort) {
final String id = clientId + clientPort; Number160 peerId = new Number160(new Random(43L));
Peer peer = null; Peer peer = null;
try { try {
peer = new PeerBuilder(Number160.createHash(clientId)).bindings(getBindings()).behindFirewall() peer = new PeerBuilder(peerId).bindings(getBindings()).behindFirewall()
.ports(clientPort).start(); .ports(clientPort).start();
PeerNAT peerNAT = new PeerBuilderNAT(peer).start(); PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
@ -401,12 +415,11 @@ public class TomP2PTests {
} }
} }
private Peer bootstrapInRelayMode(String clientId, int clientPort) { private Peer bootstrapInRelayMode(int clientPort) {
final String id = clientId + clientPort; Number160 peerId = new Number160(new Random(43L));
Peer peer = null; Peer peer = null;
try { try {
peer = new PeerBuilder(Number160.createHash(clientId)).bindings(getBindings()).behindFirewall() peer = new PeerBuilder(peerId).bindings(getBindings()).behindFirewall()
.ports(clientPort).start(); .ports(clientPort).start();
PeerNAT peerNAT = new PeerBuilderNAT(peer).start(); PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
@ -444,19 +457,19 @@ public class TomP2PTests {
} }
} }
private Peer bootstrapInUnknownMode(String clientId, int clientPort) { private Peer bootstrapInUnknownMode(int clientPort) {
resolvedConnectionType = ConnectionType.DIRECT; resolvedConnectionType = ConnectionType.DIRECT;
Peer peer = bootstrapDirectConnection(clientId, clientPort); Peer peer = bootstrapDirectConnection(clientPort);
if (peer != null) if (peer != null)
return peer; return peer;
resolvedConnectionType = ConnectionType.NAT; resolvedConnectionType = ConnectionType.NAT;
peer = bootstrapWithPortForwarding(clientId, clientPort); peer = bootstrapWithPortForwarding(clientPort);
if (peer != null) if (peer != null)
return peer; return peer;
resolvedConnectionType = ConnectionType.RELAY; resolvedConnectionType = ConnectionType.RELAY;
peer = bootstrapInRelayMode(clientId, clientPort); peer = bootstrapInRelayMode(clientPort);
if (peer != null) if (peer != null)
return peer; return peer;
else else
@ -466,19 +479,19 @@ public class TomP2PTests {
return peer; return peer;
} }
private PeerDHT getDHTPeer(String clientId, int clientPort) { private PeerDHT getDHTPeer(int clientPort) {
Peer peer; Peer peer;
if (FORCED_CONNECTION_TYPE == ConnectionType.DIRECT) { if (FORCED_CONNECTION_TYPE == ConnectionType.DIRECT) {
peer = bootstrapDirectConnection(clientId, clientPort); peer = bootstrapDirectConnection(clientPort);
} }
else if (FORCED_CONNECTION_TYPE == ConnectionType.NAT) { else if (FORCED_CONNECTION_TYPE == ConnectionType.NAT) {
peer = bootstrapWithPortForwarding(clientId, clientPort); peer = bootstrapWithPortForwarding(clientPort);
} }
else if (FORCED_CONNECTION_TYPE == ConnectionType.RELAY) { else if (FORCED_CONNECTION_TYPE == ConnectionType.RELAY) {
peer = bootstrapInRelayMode(clientId, clientPort); peer = bootstrapInRelayMode(clientPort);
} }
else { else {
peer = bootstrapInUnknownMode(clientId, clientPort); peer = bootstrapInUnknownMode(clientPort);
} }
if (peer == null) if (peer == null)
@ -490,15 +503,6 @@ public class TomP2PTests {
return new PeerBuilderDHT(peer).start(); return new PeerBuilderDHT(peer).start();
} }
private int getNewRandomPort() {
// new Ports().tcpPort() returns a random port
int newPort = new Ports().tcpPort();
while (newPort == client1Port || newPort == client2Port)
newPort = new Ports().tcpPort();
return newPort;
}
private Bindings getBindings() { private Bindings getBindings() {
Bindings bindings = new Bindings(); Bindings bindings = new Bindings();
bindings.addProtocol(StandardProtocolFamily.INET); bindings.addProtocol(StandardProtocolFamily.INET);