mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-06-27 16:17:37 -04:00
Sync with Thomas changes, add bootstrap call
This commit is contained in:
parent
c1a645500f
commit
2ec1fe1c59
3 changed files with 72 additions and 38 deletions
|
@ -77,7 +77,6 @@ public class SeedNode {
|
||||||
|
|
||||||
log.debug("SeedNode started.");
|
log.debug("SeedNode started.");
|
||||||
new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
while (running) {
|
while (running) {
|
||||||
|
@ -87,7 +86,7 @@ public class SeedNode {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(2000);
|
Thread.sleep(2000);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import java.util.List;
|
||||||
public interface BootstrapNodes {
|
public interface BootstrapNodes {
|
||||||
Node LOCALHOST = Node.at("localhost", "127.0.0.1");
|
Node LOCALHOST = Node.at("localhost", "127.0.0.1");
|
||||||
Node DIGITAL_OCEAN_1 = Node.at("digitalocean1.bitsquare.io", "188.226.179.109");
|
Node DIGITAL_OCEAN_1 = Node.at("digitalocean1.bitsquare.io", "188.226.179.109");
|
||||||
|
Node DIGITAL_OCEAN_1_DEV = Node.at("digitalocean1.bitsquare.io", "188.226.179.109", 7367);
|
||||||
|
|
||||||
Node DEFAULT_BOOTSTRAP_NODE = DIGITAL_OCEAN_1;
|
Node DEFAULT_BOOTSTRAP_NODE = DIGITAL_OCEAN_1;
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ 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.Ports;
|
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;
|
||||||
|
@ -49,6 +50,8 @@ import net.tomp2p.p2p.Peer;
|
||||||
import net.tomp2p.p2p.PeerBuilder;
|
import net.tomp2p.p2p.PeerBuilder;
|
||||||
import net.tomp2p.peers.Number160;
|
import net.tomp2p.peers.Number160;
|
||||||
import net.tomp2p.peers.PeerAddress;
|
import net.tomp2p.peers.PeerAddress;
|
||||||
|
import net.tomp2p.peers.PeerMap;
|
||||||
|
import net.tomp2p.peers.PeerMapConfiguration;
|
||||||
import net.tomp2p.storage.Data;
|
import net.tomp2p.storage.Data;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
@ -87,7 +90,7 @@ public class TomP2PTests {
|
||||||
// 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.
|
||||||
private static final Node BOOTSTRAP_NODE =
|
private static final Node BOOTSTRAP_NODE =
|
||||||
(FORCED_CONNECTION_TYPE == ConnectionType.DIRECT) ? BootstrapNodes.LOCALHOST : BootstrapNodes
|
(FORCED_CONNECTION_TYPE == ConnectionType.DIRECT) ? BootstrapNodes.LOCALHOST : BootstrapNodes
|
||||||
.DIGITAL_OCEAN_1;
|
.DIGITAL_OCEAN_1_DEV;
|
||||||
|
|
||||||
private static final PeerAddress BOOTSTRAP_NODE_ADDRESS;
|
private static final PeerAddress BOOTSTRAP_NODE_ADDRESS;
|
||||||
|
|
||||||
|
@ -119,10 +122,12 @@ public class TomP2PTests {
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void tearDown() {
|
public void tearDown() {
|
||||||
if (peer1DHT != null)
|
if (peer1DHT != null) {
|
||||||
peer1DHT.shutdown().awaitUninterruptibly();
|
peer1DHT.shutdown().awaitUninterruptibly();
|
||||||
if (peer2DHT != null)
|
}
|
||||||
peer2DHT.shutdown().awaitUninterruptibly();
|
if (peer2DHT != null) {
|
||||||
|
peer2DHT.shutdown().awaitUninterruptibly();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -215,21 +220,20 @@ 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"))
|
FuturePut futurePut1 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo1")).start();
|
||||||
.start();
|
|
||||||
futurePut1.awaitUninterruptibly();
|
futurePut1.awaitUninterruptibly();
|
||||||
|
futurePut1.awaitListenersUninterruptibly();
|
||||||
assertTrue(futurePut1.isSuccess());
|
assertTrue(futurePut1.isSuccess());
|
||||||
|
|
||||||
FuturePut futurePut2 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo2"))
|
FuturePut futurePut2 = peer1DHT.add(Number160.createHash("locationKey")).data(new Data("hallo2")).start();
|
||||||
.start();
|
|
||||||
futurePut2.awaitUninterruptibly();
|
futurePut2.awaitUninterruptibly();
|
||||||
|
futurePut2.awaitListenersUninterruptibly();
|
||||||
assertTrue(futurePut2.isSuccess());
|
assertTrue(futurePut2.isSuccess());
|
||||||
|
|
||||||
|
|
||||||
peer2DHT = getDHTPeer("node_2", client2Port);
|
peer2DHT = getDHTPeer("node_2", client2Port);
|
||||||
Number160 contentKey = new Data("hallo1").hash();
|
Number160 contentKey = new Data("hallo1").hash();
|
||||||
FutureRemove futureRemove = peer2DHT.remove(Number160.createHash("locationKey")).contentKey(contentKey)
|
FutureRemove futureRemove = peer2DHT.remove(Number160.createHash("locationKey")).contentKey(contentKey).start();
|
||||||
.start();
|
|
||||||
futureRemove.awaitUninterruptibly();
|
futureRemove.awaitUninterruptibly();
|
||||||
futureRemove.awaitListenersUninterruptibly();
|
futureRemove.awaitListenersUninterruptibly();
|
||||||
|
|
||||||
|
@ -237,9 +241,14 @@ public class TomP2PTests {
|
||||||
// it might change in future to something like foundAndRemoved and notFound
|
// it might change in future to something like foundAndRemoved and notFound
|
||||||
// See discussion at: https://github.com/tomp2p/TomP2P/issues/57#issuecomment-62069840
|
// See discussion at: https://github.com/tomp2p/TomP2P/issues/57#issuecomment-62069840
|
||||||
|
|
||||||
|
assertTrue(futureRemove.isSuccess());
|
||||||
|
|
||||||
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());
|
||||||
|
if (!futureGet.dataMap().values().contains(new Data("hallo2"))) {
|
||||||
|
log.error("raw data has the value, the evaluated not!");
|
||||||
|
}
|
||||||
|
|
||||||
assertTrue(futureGet.dataMap().values().contains(new Data("hallo2")));
|
assertTrue(futureGet.dataMap().values().contains(new Data("hallo2")));
|
||||||
assertTrue(futureGet.dataMap().values().size() == 1);
|
assertTrue(futureGet.dataMap().values().size() == 1);
|
||||||
|
@ -252,31 +261,33 @@ public class TomP2PTests {
|
||||||
@Test
|
@Test
|
||||||
@Repeat(STRESS_TEST_COUNT)
|
@Repeat(STRESS_TEST_COUNT)
|
||||||
public void testSendDirectBetweenLocalPeers() throws Exception {
|
public void testSendDirectBetweenLocalPeers() throws Exception {
|
||||||
peer1DHT = getDHTPeer("node_1", client1Port);
|
if (FORCED_CONNECTION_TYPE != ConnectionType.NAT && resolvedConnectionType != ConnectionType.RELAY) {
|
||||||
peer2DHT = getDHTPeer("node_2", client2Port);
|
peer1DHT = getDHTPeer("node_1", client1Port);
|
||||||
|
peer2DHT = getDHTPeer("node_2", client2Port);
|
||||||
|
|
||||||
final CountDownLatch countDownLatch = new CountDownLatch(1);
|
final CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
|
|
||||||
final StringBuilder result = new StringBuilder();
|
final StringBuilder result = new StringBuilder();
|
||||||
peer2DHT.peer().objectDataReply((sender, request) -> {
|
peer2DHT.peer().objectDataReply((sender, request) -> {
|
||||||
countDownLatch.countDown();
|
countDownLatch.countDown();
|
||||||
result.append(String.valueOf(request));
|
result.append(String.valueOf(request));
|
||||||
return "pong";
|
return "pong";
|
||||||
});
|
});
|
||||||
FuturePeerConnection futurePeerConnection = peer1DHT.peer().createPeerConnection(peer2DHT.peer()
|
FuturePeerConnection futurePeerConnection = peer1DHT.peer().createPeerConnection(peer2DHT.peer()
|
||||||
.peerAddress(), 500);
|
.peerAddress(), 500);
|
||||||
FutureDirect futureDirect = peer1DHT.peer().sendDirect(futurePeerConnection).object("hallo").start();
|
FutureDirect futureDirect = peer1DHT.peer().sendDirect(futurePeerConnection).object("hallo").start();
|
||||||
futureDirect.awaitUninterruptibly();
|
futureDirect.awaitUninterruptibly();
|
||||||
|
|
||||||
|
|
||||||
countDownLatch.await(3, TimeUnit.SECONDS);
|
countDownLatch.await(3, TimeUnit.SECONDS);
|
||||||
if (countDownLatch.getCount() > 0)
|
if (countDownLatch.getCount() > 0)
|
||||||
Assert.fail("The test method did not complete successfully!");
|
Assert.fail("The test method did not complete successfully!");
|
||||||
|
|
||||||
assertEquals("hallo", result.toString());
|
assertEquals("hallo", result.toString());
|
||||||
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.
|
||||||
|
@ -297,8 +308,13 @@ public class TomP2PTests {
|
||||||
final String id = clientId + clientPort;
|
final String id = clientId + clientPort;
|
||||||
Peer peer = null;
|
Peer peer = null;
|
||||||
try {
|
try {
|
||||||
peer = new PeerBuilder(Number160.createHash(clientId)).bindings(getBindings())
|
Number160 peerId = Number160.createHash(clientId);
|
||||||
.ports(clientPort).start();
|
PeerMapConfiguration pmc = new PeerMapConfiguration(peerId).peerNoVerification();
|
||||||
|
PeerMap pm = new PeerMap(pmc);
|
||||||
|
ChannelClientConfiguration cc = PeerBuilder.createDefaultChannelClientConfiguration();
|
||||||
|
cc.maxPermitsTCP(100);
|
||||||
|
cc.maxPermitsUDP(100);
|
||||||
|
peer = new PeerBuilder(peerId).bindings(getBindings()).peerMap(pm).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()) {
|
||||||
|
@ -341,7 +357,6 @@ public class TomP2PTests {
|
||||||
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);
|
||||||
futureNAT.awaitUninterruptibly();
|
futureNAT.awaitUninterruptibly();
|
||||||
futureNAT.awaitListenersUninterruptibly();
|
|
||||||
if (futureNAT.isSuccess()) {
|
if (futureNAT.isSuccess()) {
|
||||||
log.info("Automatic port forwarding is setup. Now we do a futureDiscover again. Address = " +
|
log.info("Automatic port forwarding is setup. Now we do a futureDiscover again. Address = " +
|
||||||
futureNAT.peerAddress());
|
futureNAT.peerAddress());
|
||||||
|
@ -350,7 +365,17 @@ public class TomP2PTests {
|
||||||
if (futureDiscover.isSuccess()) {
|
if (futureDiscover.isSuccess()) {
|
||||||
log.info("Discover with automatic port forwarding was successful. Address = " + futureDiscover
|
log.info("Discover with automatic port forwarding was successful. Address = " + futureDiscover
|
||||||
.peerAddress());
|
.peerAddress());
|
||||||
return peer;
|
|
||||||
|
FutureBootstrap futureBootstrap = peer.bootstrap().peerAddress(BOOTSTRAP_NODE_ADDRESS).start();
|
||||||
|
futureBootstrap.awaitUninterruptibly();
|
||||||
|
if (futureBootstrap.isSuccess()) {
|
||||||
|
return peer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log.warn("Bootstrap failed. Reason = " + futureBootstrap.failedReason());
|
||||||
|
peer.shutdown().awaitUninterruptibly();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
log.warn("Discover with automatic port forwarding failed. Reason = " + futureDiscover
|
log.warn("Discover with automatic port forwarding failed. Reason = " + futureDiscover
|
||||||
|
@ -390,8 +415,17 @@ public class TomP2PTests {
|
||||||
futureRelayNAT.awaitUninterruptibly();
|
futureRelayNAT.awaitUninterruptibly();
|
||||||
if (futureRelayNAT.isSuccess()) {
|
if (futureRelayNAT.isSuccess()) {
|
||||||
log.info("Bootstrap using relay was successful. Address = " + peer.peerAddress());
|
log.info("Bootstrap using relay was successful. Address = " + peer.peerAddress());
|
||||||
return peer;
|
|
||||||
|
|
||||||
|
FutureBootstrap futureBootstrap = peer.bootstrap().peerAddress(BOOTSTRAP_NODE_ADDRESS).start();
|
||||||
|
futureBootstrap.awaitUninterruptibly();
|
||||||
|
if (futureBootstrap.isSuccess()) {
|
||||||
|
return peer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log.warn("Bootstrap failed. Reason = " + futureBootstrap.failedReason());
|
||||||
|
peer.shutdown().awaitUninterruptibly();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
log.error("Bootstrap using relay failed " + futureRelayNAT.failedReason());
|
log.error("Bootstrap using relay failed " + futureRelayNAT.failedReason());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue