summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-relay-selector/src/relay_selector/query.rs10
-rw-r--r--mullvad-relay-selector/tests/relay_selector.rs32
2 files changed, 41 insertions, 1 deletions
diff --git a/mullvad-relay-selector/src/relay_selector/query.rs b/mullvad-relay-selector/src/relay_selector/query.rs
index cf9fc475ba..bdf6843d41 100644
--- a/mullvad-relay-selector/src/relay_selector/query.rs
+++ b/mullvad-relay-selector/src/relay_selector/query.rs
@@ -662,6 +662,16 @@ pub mod builder {
}
}
+ // impl-block for after DAITA is set
+ impl<Multihop, Obfuscation, QuantumResistant> RelayQueryBuilder<Wireguard<Multihop, Obfuscation, bool, QuantumResistant>> {
+ /// Enable DAITA use_anywhere.
+ pub fn daita_use_anywhere(mut self, constraint: impl Into<Constraint<bool>>) -> Self {
+ self.query.wireguard_constraints.daita_use_anywhere = constraint.into();
+ self
+ }
+ }
+
+
impl<Multihop, Obfuscation, Daita> RelayQueryBuilder<Wireguard<Multihop, Obfuscation, Daita, Any>> {
/// Enable PQ support.
pub fn quantum_resistant(
diff --git a/mullvad-relay-selector/tests/relay_selector.rs b/mullvad-relay-selector/tests/relay_selector.rs
index 1349b5af26..2ac05c8a7c 100644
--- a/mullvad-relay-selector/tests/relay_selector.rs
+++ b/mullvad-relay-selector/tests/relay_selector.rs
@@ -1448,7 +1448,11 @@ fn test_daita() {
let relay_selector = RelaySelector::from_list(SelectorConfig::default(), RELAYS.clone());
// Only pick relays that support DAITA
- let query = RelayQueryBuilder::new().wireguard().daita().build();
+ let query = RelayQueryBuilder::new()
+ .wireguard()
+ .daita()
+ .daita_use_anywhere(false)
+ .build();
let relay = unwrap_entry_relay(relay_selector.get_relay_by_query(query).unwrap());
assert!(
supports_daita(&relay),
@@ -1459,12 +1463,36 @@ fn test_daita() {
let query = RelayQueryBuilder::new()
.wireguard()
.daita()
+ .daita_use_anywhere(false)
.location(NON_DAITA_RELAY_LOCATION.clone())
.build();
relay_selector
.get_relay_by_query(query)
.expect_err("Expected to find no matching relay");
+ // Should be able to connect to non-DAITA relay with use_anywhere
+ let query = RelayQueryBuilder::new()
+ .wireguard()
+ .daita()
+ .daita_use_anywhere(true)
+ .location(NON_DAITA_RELAY_LOCATION.clone())
+ .build();
+ let relay = relay_selector
+ .get_relay_by_query(query)
+ .expect("Expected to find a relay with daita_use_anywhere");
+ match relay {
+ GetRelay::Wireguard {
+ inner: WireguardConfig::Multihop { exit, entry },
+ ..
+ } => {
+ assert!(supports_daita(&entry), "entry relay must support DAITA");
+ assert!(!supports_daita(&exit), "exit relay must not support DAITA");
+ }
+ wrong_relay => panic!(
+ "Relay selector should have picked a Wireguard relay, instead chose {wrong_relay:?}"
+ ),
+ }
+
// DAITA-supporting relays can be picked even when it is disabled
let query = RelayQueryBuilder::new()
.wireguard()
@@ -1487,6 +1515,7 @@ fn test_daita() {
let query = RelayQueryBuilder::new()
.wireguard()
.daita()
+ .daita_use_anywhere(false)
.multihop()
.build();
let relay = relay_selector.get_relay_by_query(query).unwrap();
@@ -1506,6 +1535,7 @@ fn test_daita() {
let query = RelayQueryBuilder::new()
.wireguard()
.daita()
+ .daita_use_anywhere(false)
.multihop()
.location(NON_DAITA_RELAY_LOCATION.clone())
.build();