mirror of
https://github.com/bisq-network/bisq.git
synced 2025-03-01 01:32:17 +01:00
Merge pull request #7343 from alvasw/fix_crash_due_to_broken_filter_provided_nodes_merge
Fix crash due to broken filter provided nodes merge
This commit is contained in:
commit
65f64fc80e
3 changed files with 41 additions and 50 deletions
|
@ -26,6 +26,7 @@ import bisq.common.util.Utilities;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -66,9 +67,9 @@ public class BtcNodesSetupPreferences {
|
||||||
break;
|
break;
|
||||||
case PROVIDED:
|
case PROVIDED:
|
||||||
default:
|
default:
|
||||||
List<BtcNode> hardcodedBtcNodes = btcNodes.getProvidedBtcNodes();
|
Stream<BtcNode> hardcodedBtcNodes = btcNodes.getProvidedBtcNodes().stream();
|
||||||
List<String> filterProvidedBtcNodes = config.filterProvidedBtcNodes;
|
Stream<String> filterProvidedBtcNodes = config.filterProvidedBtcNodes.stream();
|
||||||
List<String> bannedBtcNodes = config.bannedBtcNodes;
|
Stream<String> bannedBtcNodes = config.bannedBtcNodes.stream();
|
||||||
result = FederatedBtcNodeProvider.getNodes(hardcodedBtcNodes, filterProvidedBtcNodes, bannedBtcNodes);
|
result = FederatedBtcNodeProvider.getNodes(hardcodedBtcNodes, filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@ -14,24 +15,23 @@ import org.jetbrains.annotations.Nullable;
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class FederatedBtcNodeProvider {
|
public class FederatedBtcNodeProvider {
|
||||||
|
|
||||||
static List<BtcNodes.BtcNode> getNodes(List<BtcNodes.BtcNode> hardcodedBtcNodes,
|
static List<BtcNodes.BtcNode> getNodes(Stream<BtcNodes.BtcNode> hardcodedBtcNodes,
|
||||||
List<String> filterProvidedBtcNodesConfig,
|
Stream<String> filterProvidedBtcNodesConfig,
|
||||||
List<String> bannedBtcNodesConfig) {
|
Stream<String> bannedBtcNodesConfig) {
|
||||||
Set<BtcNodes.BtcNode> filterProvidedBtcNodes = filterProvidedBtcNodesConfig.stream()
|
Stream<BtcNodes.BtcNode> filterProvidedBtcNodes = filterProvidedBtcNodesConfig
|
||||||
.filter(n -> !n.isEmpty())
|
.filter(n -> !n.isEmpty())
|
||||||
.map(FederatedBtcNodeProvider::getNodeAddress)
|
.map(FederatedBtcNodeProvider::getNodeAddress)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.map(nodeAddress -> new BtcNodes.BtcNode(null, nodeAddress.getHostName(), null, nodeAddress.getPort(), "Provided by filter"))
|
.map(nodeAddress -> new BtcNodes.BtcNode(null, nodeAddress.getHostName(), null,
|
||||||
.collect(Collectors.toSet());
|
nodeAddress.getPort(), "Provided by filter"));
|
||||||
hardcodedBtcNodes.addAll(filterProvidedBtcNodes);
|
|
||||||
|
|
||||||
Set<NodeAddress> bannedBtcNodeHostNames = bannedBtcNodesConfig.stream()
|
Set<NodeAddress> bannedBtcNodeHostNames = bannedBtcNodesConfig
|
||||||
.filter(n -> !n.isEmpty())
|
.filter(n -> !n.isEmpty())
|
||||||
.map(FederatedBtcNodeProvider::getNodeAddress)
|
.map(FederatedBtcNodeProvider::getNodeAddress)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
return hardcodedBtcNodes.stream()
|
return Stream.concat(hardcodedBtcNodes, filterProvidedBtcNodes)
|
||||||
.filter(btcNode -> {
|
.filter(btcNode -> {
|
||||||
String nodeAddress = btcNode.hasOnionAddress() ? btcNode.getOnionAddress() :
|
String nodeAddress = btcNode.hasOnionAddress() ? btcNode.getOnionAddress() :
|
||||||
btcNode.getHostNameOrAddress();
|
btcNode.getHostNameOrAddress();
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
package bisq.core.btc.nodes;
|
package bisq.core.btc.nodes;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
@ -20,12 +19,11 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
Stream<String> bannedBtcNodes = Stream.empty();
|
||||||
List<String> bannedBtcNodes = Collections.emptyList();
|
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
assertIterableEquals(hardcodedNodes, selectedNodes);
|
assertIterableEquals(hardcodedNodes, selectedNodes);
|
||||||
}
|
}
|
||||||
|
@ -43,13 +41,12 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
|
||||||
String bannedFullAddress = bannedAddress + ":" + port;
|
String bannedFullAddress = bannedAddress + ":" + port;
|
||||||
List<String> bannedBtcNodes = List.of(bannedFullAddress);
|
Stream<String> bannedBtcNodes = Stream.of(bannedFullAddress);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
var expected = List.of(
|
var expected = List.of(
|
||||||
new BtcNodes.BtcNode(null, "alice.onion", null,
|
new BtcNodes.BtcNode(null, "alice.onion", null,
|
||||||
|
@ -72,13 +69,12 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
|
||||||
String bannedFullAddress = bannedAddress + ":" + 1234;
|
String bannedFullAddress = bannedAddress + ":" + 1234;
|
||||||
List<String> bannedBtcNodes = List.of(bannedFullAddress);
|
Stream<String> bannedBtcNodes = Stream.of(bannedFullAddress);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
assertIterableEquals(hardcodedNodes, selectedNodes);
|
assertIterableEquals(hardcodedNodes, selectedNodes);
|
||||||
}
|
}
|
||||||
|
@ -96,13 +92,12 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
|
||||||
String bannedFullAddress = "[" + bannedAddress + "]" + ":" + port;
|
String bannedFullAddress = "[" + bannedAddress + "]" + ":" + port;
|
||||||
List<String> bannedBtcNodes = List.of(bannedFullAddress);
|
Stream<String> bannedBtcNodes = Stream.of(bannedFullAddress);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
var expected = List.of(
|
var expected = List.of(
|
||||||
new BtcNodes.BtcNode(null, "alice.onion", null,
|
new BtcNodes.BtcNode(null, "alice.onion", null,
|
||||||
|
@ -125,13 +120,12 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
|
||||||
String bannedFullAddress = "[" + bannedAddress + "]" + ":" + 1234;
|
String bannedFullAddress = "[" + bannedAddress + "]" + ":" + 1234;
|
||||||
List<String> bannedBtcNodes = List.of(bannedFullAddress);
|
Stream<String> bannedBtcNodes = Stream.of(bannedFullAddress);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
assertIterableEquals(hardcodedNodes, selectedNodes);
|
assertIterableEquals(hardcodedNodes, selectedNodes);
|
||||||
}
|
}
|
||||||
|
@ -149,12 +143,11 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
Stream<String> bannedBtcNodes = Stream.of(bannedHostName + ":" + port);
|
||||||
List<String> bannedBtcNodes = List.of(bannedHostName + ":" + port);
|
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
var expected = List.of(
|
var expected = List.of(
|
||||||
new BtcNodes.BtcNode(null, "alice.onion", null,
|
new BtcNodes.BtcNode(null, "alice.onion", null,
|
||||||
|
@ -177,12 +170,11 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
Stream<String> bannedBtcNodes = Stream.of(bannedHostName + ":" + 1234);
|
||||||
List<String> bannedBtcNodes = List.of(bannedHostName + ":" + 1234);
|
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
assertIterableEquals(hardcodedNodes, selectedNodes);
|
assertIterableEquals(hardcodedNodes, selectedNodes);
|
||||||
}
|
}
|
||||||
|
@ -200,12 +192,11 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
Stream<String> bannedBtcNodes = Stream.of(bannedOnionAddress + ":" + BtcNodes.BtcNode.DEFAULT_PORT);
|
||||||
List<String> bannedBtcNodes = List.of(bannedOnionAddress + ":" + BtcNodes.BtcNode.DEFAULT_PORT);
|
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
var expected = List.of(
|
var expected = List.of(
|
||||||
new BtcNodes.BtcNode(null, "alice.onion", null,
|
new BtcNodes.BtcNode(null, "alice.onion", null,
|
||||||
|
@ -229,12 +220,11 @@ public class FederatedBtcNodeProviderTest {
|
||||||
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
BtcNodes.BtcNode.DEFAULT_PORT, "@charlie")
|
||||||
);
|
);
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> mutableHardcodedList = new ArrayList<>(hardcodedNodes);
|
Stream<String> filterProvidedBtcNodes = Stream.empty();
|
||||||
List<String> filterProvidedBtcNodes = Collections.emptyList();
|
Stream<String> bannedBtcNodes = Stream.of(bannedOnionAddress + ":" + 1234);
|
||||||
List<String> bannedBtcNodes = List.of(bannedOnionAddress + ":" + 1234);
|
|
||||||
|
|
||||||
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
List<BtcNodes.BtcNode> selectedNodes = FederatedBtcNodeProvider
|
||||||
.getNodes(mutableHardcodedList, filterProvidedBtcNodes, bannedBtcNodes);
|
.getNodes(hardcodedNodes.stream(), filterProvidedBtcNodes, bannedBtcNodes);
|
||||||
|
|
||||||
assertIterableEquals(hardcodedNodes, selectedNodes);
|
assertIterableEquals(hardcodedNodes, selectedNodes);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue