diff --git a/core/src/main/java/bisq/core/btc/nodes/BtcNodesSetupPreferences.java b/core/src/main/java/bisq/core/btc/nodes/BtcNodesSetupPreferences.java index 2a28fe708a..95eb39132e 100644 --- a/core/src/main/java/bisq/core/btc/nodes/BtcNodesSetupPreferences.java +++ b/core/src/main/java/bisq/core/btc/nodes/BtcNodesSetupPreferences.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.stream.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,9 +67,9 @@ public List selectPreferredNodes(BtcNodes btcNodes) { break; case PROVIDED: default: - List hardcodedBtcNodes = btcNodes.getProvidedBtcNodes(); - List filterProvidedBtcNodes = config.filterProvidedBtcNodes; - List bannedBtcNodes = config.bannedBtcNodes; + Stream hardcodedBtcNodes = btcNodes.getProvidedBtcNodes().stream(); + Stream filterProvidedBtcNodes = config.filterProvidedBtcNodes.stream(); + Stream bannedBtcNodes = config.bannedBtcNodes.stream(); result = FederatedBtcNodeProvider.getNodes(hardcodedBtcNodes, filterProvidedBtcNodes, bannedBtcNodes); break; } diff --git a/core/src/main/java/bisq/core/btc/nodes/FederatedBtcNodeProvider.java b/core/src/main/java/bisq/core/btc/nodes/FederatedBtcNodeProvider.java index ed37f0a910..ec64f54075 100644 --- a/core/src/main/java/bisq/core/btc/nodes/FederatedBtcNodeProvider.java +++ b/core/src/main/java/bisq/core/btc/nodes/FederatedBtcNodeProvider.java @@ -6,6 +6,7 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import lombok.extern.slf4j.Slf4j; @@ -14,24 +15,23 @@ @Slf4j public class FederatedBtcNodeProvider { - static List getNodes(List hardcodedBtcNodes, - List filterProvidedBtcNodesConfig, - List bannedBtcNodesConfig) { - Set filterProvidedBtcNodes = filterProvidedBtcNodesConfig.stream() + static List getNodes(Stream hardcodedBtcNodes, + Stream filterProvidedBtcNodesConfig, + Stream bannedBtcNodesConfig) { + Stream filterProvidedBtcNodes = filterProvidedBtcNodesConfig .filter(n -> !n.isEmpty()) .map(FederatedBtcNodeProvider::getNodeAddress) .filter(Objects::nonNull) - .map(nodeAddress -> new BtcNodes.BtcNode(null, nodeAddress.getHostName(), null, nodeAddress.getPort(), "Provided by filter")) - .collect(Collectors.toSet()); - hardcodedBtcNodes.addAll(filterProvidedBtcNodes); + .map(nodeAddress -> new BtcNodes.BtcNode(null, nodeAddress.getHostName(), null, + nodeAddress.getPort(), "Provided by filter")); - Set bannedBtcNodeHostNames = bannedBtcNodesConfig.stream() + Set bannedBtcNodeHostNames = bannedBtcNodesConfig .filter(n -> !n.isEmpty()) .map(FederatedBtcNodeProvider::getNodeAddress) .filter(Objects::nonNull) .collect(Collectors.toSet()); - return hardcodedBtcNodes.stream() + return Stream.concat(hardcodedBtcNodes, filterProvidedBtcNodes) .filter(btcNode -> { String nodeAddress = btcNode.hasOnionAddress() ? btcNode.getOnionAddress() : btcNode.getHostNameOrAddress(); diff --git a/core/src/test/java/bisq/core/btc/nodes/FederatedBtcNodeProviderTest.java b/core/src/test/java/bisq/core/btc/nodes/FederatedBtcNodeProviderTest.java index 5f42da3f2f..47916c1caa 100644 --- a/core/src/test/java/bisq/core/btc/nodes/FederatedBtcNodeProviderTest.java +++ b/core/src/test/java/bisq/core/btc/nodes/FederatedBtcNodeProviderTest.java @@ -1,8 +1,7 @@ package bisq.core.btc.nodes; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.stream.Stream; import org.junit.jupiter.api.Test; @@ -20,12 +19,11 @@ void onlyHardcodedNodes() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); - List bannedBtcNodes = Collections.emptyList(); + Stream filterProvidedBtcNodes = Stream.empty(); + Stream bannedBtcNodes = Stream.empty(); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); assertIterableEquals(hardcodedNodes, selectedNodes); } @@ -43,13 +41,12 @@ void bannedIpV4Node() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); + Stream filterProvidedBtcNodes = Stream.empty(); String bannedFullAddress = bannedAddress + ":" + port; - List bannedBtcNodes = List.of(bannedFullAddress); + Stream bannedBtcNodes = Stream.of(bannedFullAddress); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); var expected = List.of( new BtcNodes.BtcNode(null, "alice.onion", null, @@ -72,13 +69,12 @@ void bannedIpV4NodeWrongPort() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); + Stream filterProvidedBtcNodes = Stream.empty(); String bannedFullAddress = bannedAddress + ":" + 1234; - List bannedBtcNodes = List.of(bannedFullAddress); + Stream bannedBtcNodes = Stream.of(bannedFullAddress); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); assertIterableEquals(hardcodedNodes, selectedNodes); } @@ -96,13 +92,12 @@ void bannedIpV6Node() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); + Stream filterProvidedBtcNodes = Stream.empty(); String bannedFullAddress = "[" + bannedAddress + "]" + ":" + port; - List bannedBtcNodes = List.of(bannedFullAddress); + Stream bannedBtcNodes = Stream.of(bannedFullAddress); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); var expected = List.of( new BtcNodes.BtcNode(null, "alice.onion", null, @@ -125,13 +120,12 @@ void bannedIpV6NodeWrongPort() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); + Stream filterProvidedBtcNodes = Stream.empty(); String bannedFullAddress = "[" + bannedAddress + "]" + ":" + 1234; - List bannedBtcNodes = List.of(bannedFullAddress); + Stream bannedBtcNodes = Stream.of(bannedFullAddress); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); assertIterableEquals(hardcodedNodes, selectedNodes); } @@ -149,12 +143,11 @@ void bannedHostNameNode() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); - List bannedBtcNodes = List.of(bannedHostName + ":" + port); + Stream filterProvidedBtcNodes = Stream.empty(); + Stream bannedBtcNodes = Stream.of(bannedHostName + ":" + port); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); var expected = List.of( new BtcNodes.BtcNode(null, "alice.onion", null, @@ -177,12 +170,11 @@ void bannedHostNameNodeWrongPort() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); - List bannedBtcNodes = List.of(bannedHostName + ":" + 1234); + Stream filterProvidedBtcNodes = Stream.empty(); + Stream bannedBtcNodes = Stream.of(bannedHostName + ":" + 1234); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); assertIterableEquals(hardcodedNodes, selectedNodes); } @@ -200,12 +192,11 @@ void bannedOnionNode() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); - List bannedBtcNodes = List.of(bannedOnionAddress + ":" + BtcNodes.BtcNode.DEFAULT_PORT); + Stream filterProvidedBtcNodes = Stream.empty(); + Stream bannedBtcNodes = Stream.of(bannedOnionAddress + ":" + BtcNodes.BtcNode.DEFAULT_PORT); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); var expected = List.of( new BtcNodes.BtcNode(null, "alice.onion", null, @@ -229,12 +220,11 @@ void bannedOnionNodeWrongPort() { BtcNodes.BtcNode.DEFAULT_PORT, "@charlie") ); - List mutableHardcodedList = new ArrayList<>(hardcodedNodes); - List filterProvidedBtcNodes = Collections.emptyList(); - List bannedBtcNodes = List.of(bannedOnionAddress + ":" + 1234); + Stream filterProvidedBtcNodes = Stream.empty(); + Stream bannedBtcNodes = Stream.of(bannedOnionAddress + ":" + 1234); List selectedNodes = FederatedBtcNodeProvider - .getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes); + .getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes); assertIterableEquals(hardcodedNodes, selectedNodes); }