Add missing RepeatRule, Simplify SeedNodeForTesting

This commit is contained in:
Manfred Karrer 2014-11-07 18:33:59 +01:00
parent 8cfdf1907e
commit d72d7299df
5 changed files with 74 additions and 51 deletions

View file

@ -89,7 +89,8 @@ public class TxIdTextField extends AnchorPane {
textField.setText(txID); textField.setText(txID);
textField.setOnMouseClicked(mouseEvent -> { textField.setOnMouseClicked(mouseEvent -> {
try { try {
Desktop.getDesktop().browse(URI.create("https://blockchain.info/address/" + txID)); // TODO get the url form the app preferences
Desktop.getDesktop().browse(URI.create("https://blockchain.info/tx/" + txID));
} catch (IOException e) { } catch (IOException e) {
log.warn(e.getMessage()); log.warn(e.getMessage());
Popups.openWarningPopup("Warning", "Opening blockchain.info failed. Please check your internet " + Popups.openWarningPopup("Warning", "Opening blockchain.info failed. Please check your internet " +

View file

@ -86,9 +86,13 @@ public class DHTManager extends AbstractActor {
/* if (ip.getBootstrapPeers() != null && ip.getBootstrapPeers().size() > 0) { /* if (ip.getBootstrapPeers() != null && ip.getBootstrapPeers().size() > 0) {
peer.bootstrap().bootstrapTo(ip.getBootstrapPeers()).start(); peer.bootstrap().bootstrapTo(ip.getBootstrapPeers()).start();
}*/ }*/
// Needed for DHT support
peerDHT = new PeerBuilderDHT(peer).start(); peerDHT = new PeerBuilderDHT(peer).start();
// Needed for NAT support
peerNAT = new PeerBuilderNAT(peer).start(); peerNAT = new PeerBuilderNAT(peer).start();
new PeerBuilderNAT(peer).start();
peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() { peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() {
@Override @Override
public void peerInserted(PeerAddress peerAddress, boolean verified) { public void peerInserted(PeerAddress peerAddress, boolean verified) {

View file

@ -25,8 +25,8 @@
<logger name="io.bitsquare" level="TRACE"/> <logger name="io.bitsquare" level="TRACE"/>
<logger name="org.bitcoinj" level="WARN"/> <logger name="org.bitcoinj" level="INFO"/>
<logger name="net.tomp2p" level="TRACE"/> <logger name="net.tomp2p" level="INFO"/>
<logger name="net.tomp2p.message.Encoder" level="WARN"/> <logger name="net.tomp2p.message.Encoder" level="WARN"/>

View file

@ -19,8 +19,11 @@ package io.bitsquare.msg;
import io.bitsquare.network.Node; import io.bitsquare.network.Node;
import net.tomp2p.connection.Bindings;
import net.tomp2p.connection.ChannelServerConfiguration;
import net.tomp2p.connection.Ports;
import net.tomp2p.connection.StandardProtocolFamily;
import net.tomp2p.dht.PeerBuilderDHT; import net.tomp2p.dht.PeerBuilderDHT;
import net.tomp2p.dht.PeerDHT;
import net.tomp2p.nat.PeerBuilderNAT; import net.tomp2p.nat.PeerBuilderNAT;
import net.tomp2p.p2p.Peer; import net.tomp2p.p2p.Peer;
import net.tomp2p.p2p.PeerBuilder; import net.tomp2p.p2p.PeerBuilder;
@ -37,22 +40,29 @@ public class SeedNodeForTesting {
private static final Logger log = LoggerFactory.getLogger(SeedNodeForTesting.class); private static final Logger log = LoggerFactory.getLogger(SeedNodeForTesting.class);
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
// Define your seed node IP and port
// "127.0.0.1" for localhost or SEED_ID_WAN_1
new SeedNodeForTesting().startSeedNode("localhost", Node.DEFAULT_PORT);
}
public Thread startSeedNode(String seedNodeId, int seedNodePort) {
Thread thread = new Thread(() -> {
Peer peer = null; Peer peer = null;
try { try {
peer = new PeerBuilder(Number160.createHash(seedNodeId)).ports(seedNodePort).start(); ChannelServerConfiguration csc = PeerBuilder.createDefaultChannelServerConfiguration();
PeerDHT peerDHT = new PeerBuilderDHT(peer).start(); csc.ports(new Ports(Node.DEFAULT_PORT, Node.DEFAULT_PORT));
peerDHT.peer().objectDataReply((sender, request) -> { csc.portsForwarding(new Ports(Node.DEFAULT_PORT, Node.DEFAULT_PORT));
csc.connectionTimeoutTCPMillis(10 * 1000);
csc.idleTCPSeconds(10);
csc.idleUDPSeconds(10);
Bindings bindings = new Bindings();
bindings.addProtocol(StandardProtocolFamily.INET);
peer = new PeerBuilder(Number160.createHash("localhost")).bindings(bindings)
.channelServerConfiguration(csc).ports(Node.DEFAULT_PORT).start();
peer.objectDataReply((sender, request) -> {
log.trace("received request: ", request.toString()); log.trace("received request: ", request.toString());
return "pong"; return "pong";
}); });
// Needed for DHT support
new PeerBuilderDHT(peer).start();
// Needed for NAT support
new PeerBuilderNAT(peer).start(); new PeerBuilderNAT(peer).start();
log.debug("SeedNode started."); log.debug("SeedNode started.");
@ -66,9 +76,5 @@ public class SeedNodeForTesting {
if (peer != null) if (peer != null)
peer.shutdown().awaitUninterruptibly(); peer.shutdown().awaitUninterruptibly();
} }
});
thread.start();
return thread;
} }
} }

View file

@ -20,6 +20,7 @@ package io.bitsquare.msg;
import io.bitsquare.network.BootstrapNodes; import io.bitsquare.network.BootstrapNodes;
import io.bitsquare.network.Node; import io.bitsquare.network.Node;
import io.bitsquare.util.Repeat; import io.bitsquare.util.Repeat;
import io.bitsquare.util.RepeatRule;
import java.io.IOException; import java.io.IOException;
@ -30,7 +31,9 @@ import java.util.Map;
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.Ports; import net.tomp2p.connection.Ports;
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;
import net.tomp2p.dht.FutureRemove; import net.tomp2p.dht.FutureRemove;
@ -53,6 +56,7 @@ import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -78,7 +82,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.DIRECT; private static final ConnectionType FORCED_CONNECTION_TYPE = ConnectionType.NAT;
// 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.
@ -100,7 +104,8 @@ public class TomP2PTests {
// If cache is used tests get faster as it doesn't create and bootstrap a new node at every test. // If cache is used tests get faster as it doesn't create and bootstrap a new node at every test.
// Need to observe if it can have some side effects. // Need to observe if it can have some side effects.
private static final boolean CACHE_CLIENTS = true; // In cached mode I observed more failures, need investigation why but might be a test setup problem.
private static final boolean CACHE_CLIENTS = false;
// 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;
@ -113,6 +118,7 @@ public class TomP2PTests {
private int client1Port; private int client1Port;
private int client2Port; private int client2Port;
private ConnectionType resolvedConnectionType; private ConnectionType resolvedConnectionType;
public @Rule RepeatRule repeatRule = new RepeatRule();
@Before @Before
public void setUp() { public void setUp() {
@ -175,7 +181,6 @@ public class TomP2PTests {
futurePut.awaitUninterruptibly(); futurePut.awaitUninterruptibly();
assertTrue(futurePut.isSuccess()); assertTrue(futurePut.isSuccess());
peer2DHT = getDHTPeer("node_2", client2Port); peer2DHT = getDHTPeer("node_2", client2Port);
FutureGet futureGet = peer2DHT.get(Number160.createHash("key")).start(); FutureGet futureGet = peer2DHT.get(Number160.createHash("key")).start();
futureGet.awaitUninterruptibly(); futureGet.awaitUninterruptibly();
@ -190,21 +195,19 @@ public class TomP2PTests {
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());
FuturePut futurePut2 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo2")).start();
futurePut2.awaitUninterruptibly();
assertTrue(futurePut2.isSuccess());
} }
@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("node_1", 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());
FuturePut futurePut2 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo2")).start(); FuturePut futurePut2 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo2"))
.start();
futurePut2.awaitUninterruptibly(); futurePut2.awaitUninterruptibly();
assertTrue(futurePut2.isSuccess()); assertTrue(futurePut2.isSuccess());
@ -223,11 +226,13 @@ public class TomP2PTests {
@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("node_1", 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());
FuturePut futurePut2 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo2")).start(); FuturePut futurePut2 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo2"))
.start();
futurePut2.awaitUninterruptibly(); futurePut2.awaitUninterruptibly();
assertTrue(futurePut2.isSuccess()); assertTrue(futurePut2.isSuccess());
@ -257,7 +262,6 @@ public class TomP2PTests {
@Test @Test
@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.NAT) {
peer1DHT = getDHTPeer("node_1", client1Port); peer1DHT = getDHTPeer("node_1", client1Port);
peer2DHT = getDHTPeer("node_2", client2Port); peer2DHT = getDHTPeer("node_2", client2Port);
@ -283,7 +287,6 @@ public class TomP2PTests {
assertTrue(futureDirect.isSuccess()); assertTrue(futureDirect.isSuccess());
log.debug(futureDirect.object().toString()); log.debug(futureDirect.object().toString());
assertEquals("pong", futureDirect.object()); assertEquals("pong", futureDirect.object());
// }
} }
// That test should always succeed as we use the server seed node as receiver. // That test should always succeed as we use the server seed node as receiver.
@ -292,7 +295,6 @@ public class TomP2PTests {
@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("node_1", 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();
@ -301,7 +303,6 @@ public class TomP2PTests {
assertEquals("pong", futureDirect.object()); assertEquals("pong", futureDirect.object());
} }
private Peer bootstrapDirectConnection(String clientId, int clientPort) { private Peer bootstrapDirectConnection(String clientId, int clientPort) {
final String id = clientId + clientPort; final String id = clientId + clientPort;
if (CACHE_CLIENTS && cachedPeers.containsKey(id)) { if (CACHE_CLIENTS && cachedPeers.containsKey(id)) {
@ -309,7 +310,8 @@ public class TomP2PTests {
} }
Peer peer = null; Peer peer = null;
try { try {
peer = new PeerBuilder(Number160.createHash(clientId)).ports(clientPort).start(); peer = new PeerBuilder(Number160.createHash(clientId)).bindings(getBindings())
.ports(clientPort).start();
FutureDiscover futureDiscover = peer.discover().peerAddress(BOOTSTRAP_NODE_ADDRESS).start(); FutureDiscover futureDiscover = peer.discover().peerAddress(BOOTSTRAP_NODE_ADDRESS).start();
futureDiscover.awaitUninterruptibly(); futureDiscover.awaitUninterruptibly();
if (futureDiscover.isSuccess()) { if (futureDiscover.isSuccess()) {
@ -339,7 +341,9 @@ public class TomP2PTests {
} }
Peer peer = null; Peer peer = null;
try { try {
peer = new PeerBuilder(Number160.createHash(clientId)).ports(clientPort).behindFirewall().start(); peer = new PeerBuilder(Number160.createHash(clientId)).bindings(getBindings()).behindFirewall()
.ports(clientPort).start();
PeerNAT peerNAT = new PeerBuilderNAT(peer).start(); PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
FutureDiscover futureDiscover = peer.discover().peerAddress(BOOTSTRAP_NODE_ADDRESS).start(); FutureDiscover futureDiscover = peer.discover().peerAddress(BOOTSTRAP_NODE_ADDRESS).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover); FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
@ -386,7 +390,9 @@ public class TomP2PTests {
Peer peer = null; Peer peer = null;
try { try {
peer = new PeerBuilder(Number160.createHash(clientId)).ports(clientPort).behindFirewall().start(); peer = new PeerBuilder(Number160.createHash(clientId)).bindings(getBindings()).behindFirewall()
.ports(clientPort).start();
PeerNAT peerNAT = new PeerBuilderNAT(peer).start(); PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
FutureDiscover futureDiscover = peer.discover().peerAddress(BOOTSTRAP_NODE_ADDRESS).start(); FutureDiscover futureDiscover = peer.discover().peerAddress(BOOTSTRAP_NODE_ADDRESS).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover); FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
@ -468,4 +474,10 @@ public class TomP2PTests {
return newPort; return newPort;
} }
private Bindings getBindings() {
Bindings bindings = new Bindings();
bindings.addProtocol(StandardProtocolFamily.INET);
return bindings;
}
} }