diff --git a/core/src/main/java/org/bitcoinj/testing/TestWithPeerGroup.java b/core/src/main/java/org/bitcoinj/testing/TestWithPeerGroup.java index acbc8451..0d7b5691 100644 --- a/core/src/main/java/org/bitcoinj/testing/TestWithPeerGroup.java +++ b/core/src/main/java/org/bitcoinj/testing/TestWithPeerGroup.java @@ -80,6 +80,7 @@ protected void initPeerGroup() { peerGroup = new PeerGroup(unitTestParams, blockChain, new BlockingClientManager()); peerGroup.setPingIntervalMsec(0); // Disable the pings as they just get in the way of most tests. peerGroup.addWallet(wallet); + peerGroup.setUseLocalhostPeerWhenPossible(false); // Prevents from connecting to bitcoin nodes on localhost. } protected InboundMessageQueuer connectPeerWithoutVersionExchange(int id) throws Exception { diff --git a/core/src/test/java/org/bitcoinj/core/FilteredBlockAndPartialMerkleTreeTests.java b/core/src/test/java/org/bitcoinj/core/FilteredBlockAndPartialMerkleTreeTests.java index c62c16e4..f994d8e9 100644 --- a/core/src/test/java/org/bitcoinj/core/FilteredBlockAndPartialMerkleTreeTests.java +++ b/core/src/test/java/org/bitcoinj/core/FilteredBlockAndPartialMerkleTreeTests.java @@ -141,6 +141,8 @@ public void serializeDownloadBlockWithWallet() throws Exception { super.setUp(blockStore); peerGroup.addWallet(wallet); + peerGroup.setUseLocalhostPeerWhenPossible(false); // Prevents from connecting to bitcoin nodes on localhost. + blockChain.addWallet(wallet); peerGroup.startAsync(); diff --git a/core/src/test/java/org/bitcoinj/core/PeerGroupTest.java b/core/src/test/java/org/bitcoinj/core/PeerGroupTest.java index 562d60d2..58f2595f 100644 --- a/core/src/test/java/org/bitcoinj/core/PeerGroupTest.java +++ b/core/src/test/java/org/bitcoinj/core/PeerGroupTest.java @@ -36,6 +36,7 @@ import org.junit.runners.Parameterized; import java.io.IOException; +import java.net.BindException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.util.*; @@ -686,9 +687,24 @@ public void waitForPeersOfVersion() throws Exception { @Test public void preferLocalPeer() throws IOException { - // Check that if we have a localhost port 8333 then it's used instead of the p2p network. - ServerSocket local = new ServerSocket(params.getPort(), 100, InetAddresses.forString("127.0.0.1")); + // Because we are using the same port (8333 or 18333) that is used by Satoshi client + // We have to consider 2 cases: + // 1. Test are executed on the same machine that is running full node / Satoshi client + // 2. Test are executed without any full node running locally + // We have to avoid to connecting to real and external services in unit tests + // So we skip this test in case we have already something running on port params.getPort() + + // Check that if we have a localhost port 8333 or 18333 then it's used instead of the p2p network. + ServerSocket local = null; try { + local = new ServerSocket(params.getPort(), 100, InetAddresses.forString("127.0.0.1")); + } + catch(BindException e) { // Port already in use, skipping this test. + return; + } + + try { + peerGroup.setUseLocalhostPeerWhenPossible(true); peerGroup.startAsync(); peerGroup.awaitRunning(); local.accept().close(); // Probe connect