mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-07-27 00:45:23 -04:00
Add missing RepeatRule, Simplify SeedNodeForTesting
This commit is contained in:
parent
8cfdf1907e
commit
d72d7299df
5 changed files with 74 additions and 51 deletions
|
@ -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 " +
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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"/>
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue