summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSebastian Holmin <sebastian.holmin@mullvad.net>2024-11-20 08:40:07 +0100
committerSebastian Holmin <sebastian.holmin@mullvad.net>2024-11-20 08:40:07 +0100
commit22d50da42cbbe973924ff39c5c5f8de134f60117 (patch)
treef0ab57b33ddf18f39d3a8ad8f1549e10ae6f8d1e
parente125d0dde998c086ec2c7fb4a347c346cc3581b2 (diff)
parent1ff1dcfdff6b96d5b94b7984292415d34ccbef5b (diff)
downloadmullvadvpn-22d50da42cbbe973924ff39c5c5f8de134f60117.tar.xz
mullvadvpn-22d50da42cbbe973924ff39c5c5f8de134f60117.zip
Merge branch 'use-low-latency-servers-for-more-tests-des-1448'
-rw-r--r--mullvad-relay-selector/src/relay_selector/query.rs13
-rw-r--r--test/test-manager/src/tests/helpers.rs44
-rw-r--r--test/test-manager/src/tests/mod.rs19
-rw-r--r--test/test-manager/src/tests/ui.rs10
4 files changed, 64 insertions, 22 deletions
diff --git a/mullvad-relay-selector/src/relay_selector/query.rs b/mullvad-relay-selector/src/relay_selector/query.rs
index 1f0e393ac1..50bed8aa13 100644
--- a/mullvad-relay-selector/src/relay_selector/query.rs
+++ b/mullvad-relay-selector/src/relay_selector/query.rs
@@ -154,6 +154,10 @@ impl RelayQuery {
&self.openvpn_constraints
}
+ pub fn into_openvpn_constraints(self) -> OpenVpnRelayQuery {
+ self.openvpn_constraints
+ }
+
pub fn set_openvpn_constraints(
&mut self,
openvpn_constraints: OpenVpnRelayQuery,
@@ -165,6 +169,10 @@ impl RelayQuery {
&self.wireguard_constraints
}
+ pub fn into_wireguard_constraints(self) -> WireguardRelayQuery {
+ self.wireguard_constraints
+ }
+
pub fn set_wireguard_constraints(
&mut self,
wireguard_constraints: WireguardRelayQuery,
@@ -890,9 +898,8 @@ pub mod builder {
impl<Transport> RelayQueryBuilder<OpenVPN<Transport, BridgeConstraints>> {
/// Constraint the geographical location of the selected bridge.
- pub fn bridge_location(mut self, location: GeographicLocationConstraint) -> Self {
- self.protocol.bridge_settings.location =
- Constraint::Only(LocationConstraint::from(location));
+ pub fn bridge_location(mut self, location: impl Into<LocationConstraint>) -> Self {
+ self.protocol.bridge_settings.location = Constraint::Only(location.into());
self.query.openvpn_constraints.bridge_settings =
BridgeQuery::Normal(self.protocol.bridge_settings.clone());
self
diff --git a/test/test-manager/src/tests/helpers.rs b/test/test-manager/src/tests/helpers.rs
index fc86a73c70..ff581c8f62 100644
--- a/test/test-manager/src/tests/helpers.rs
+++ b/test/test-manager/src/tests/helpers.rs
@@ -743,7 +743,7 @@ pub async fn constrain_to_relay(
///
/// This can be used to query the relay selector without triggering a tunnel state change in the
/// daemon.
-fn get_daemon_relay_selector(
+pub fn get_daemon_relay_selector(
settings: &mullvad_types::settings::Settings,
relay_list: mullvad_types::relay_list::RelayList,
) -> RelaySelector {
@@ -767,7 +767,7 @@ pub fn into_constraint(relay: &Relay) -> Constraint<LocationConstraint> {
/// Ping monitoring made easy!
///
-/// Continously ping some destination while monitoring to detect diverging
+/// Continuously ping some destination while monitoring to detect diverging
/// packets.
///
/// To customize [`Pinger`] before the pinging and network monitoring starts,
@@ -897,7 +897,7 @@ impl PingerBuilder {
}
}
-/// This helper spawns a seperate process which checks if we are connected to Mullvad, and tries to
+/// This helper spawns a separate process which checks if we are connected to Mullvad, and tries to
/// leak traffic outside the tunnel by sending TCP, UDP, and ICMP packets to [LEAK_DESTINATION].
pub struct ConnChecker {
rpc: ServiceClient,
@@ -962,7 +962,7 @@ impl ConnChecker {
self.payload = Some(payload.into())
}
- /// Spawn the connecton checker process and return a handle to it.
+ /// Spawn the connection checker process and return a handle to it.
///
/// Dropping the handle will stop the process.
/// **NOTE**: The handle must be dropped from a tokio runtime context.
@@ -1101,7 +1101,7 @@ impl ConnCheckerHandle<'_> {
}
pub async fn check_connection(&mut self) -> anyhow::Result<ConnectionStatus> {
- // Monitor all pakets going to LEAK_DESTINATION during the check.
+ // Monitor all packets going to LEAK_DESTINATION during the check.
let leak_destination = self.checker.leak_destination;
let monitor = start_packet_monitor(
move |packet| packet.destination.ip() == leak_destination.ip(),
@@ -1201,18 +1201,22 @@ fn parse_am_i_mullvad(result: String) -> anyhow::Result<bool> {
pub mod custom_lists {
use super::*;
+
use mullvad_types::custom_list::{CustomList, Id};
use std::sync::{LazyLock, Mutex};
// Expose all custom list variants as a shorthand.
pub use List::*;
+ /// The default custom list to use as location for all tests.
+ pub const DEFAULT_LIST: List = List::Nordic;
+
/// Mapping between [List] to daemon custom lists. Since custom list ids are assigned by the
/// daemon at the creation of the custom list settings object, we can't map a custom list
/// name to a specific list before runtime.
static IDS: LazyLock<Mutex<HashMap<List, Id>>> = LazyLock::new(|| Mutex::new(HashMap::new()));
- /// Pre-defined (well-typed) custom lists which may be useuful in different test scenarios.
+ /// Pre-defined (well-typed) custom lists which may be useful in different test scenarios.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum List {
/// A selection of Nordic servers
@@ -1310,6 +1314,34 @@ pub mod custom_lists {
Ok(())
}
+ /// Set the default location to the custom list specified by `DEFAULT_LIST`. This also includes
+ /// entry location for multihop. It does not, however, affect bridge location for OpenVPN.
+ /// This is for simplify, as bridges default to using the server closest to the exit anyway, and
+ /// OpenVPN is slated for removal.
+ pub async fn set_default_location(
+ mullvad_client: &mut MullvadProxyClient,
+ ) -> anyhow::Result<()> {
+ let constraints = get_custom_list_location_relay_constraints(DEFAULT_LIST);
+
+ mullvad_client
+ .set_relay_settings(constraints.into())
+ .await
+ .context("Failed to set relay settings")
+ }
+
+ fn get_custom_list_location_relay_constraints(custom_list: List) -> RelayConstraints {
+ let wireguard_constraints = mullvad_types::relay_constraints::WireguardConstraints {
+ entry_location: Constraint::Only(custom_list.into()),
+ ..Default::default()
+ };
+
+ RelayConstraints {
+ location: Constraint::Only(custom_list.into()),
+ wireguard_constraints,
+ ..Default::default()
+ }
+ }
+
/// Dig out a custom list from the daemon settings based on the custom list's name.
/// There should be an rpc for this.
async fn find_custom_list(
diff --git a/test/test-manager/src/tests/mod.rs b/test/test-manager/src/tests/mod.rs
index ca24cd63bf..a7b3778907 100644
--- a/test/test-manager/src/tests/mod.rs
+++ b/test/test-manager/src/tests/mod.rs
@@ -83,9 +83,12 @@ pub fn get_tests() -> Vec<&'static TestMetadata> {
}
pub fn get_filtered_tests(specified_tests: &[String]) -> Result<Vec<&TestMetadata>, anyhow::Error> {
- let mut tests = get_tests();
- tests.retain(|test| test.should_run_on_os(TEST_CONFIG.os));
- if !specified_tests.is_empty() {
+ let tests = get_tests();
+
+ let mut tests = if specified_tests.is_empty() {
+ // Keep all tests
+ tests
+ } else {
specified_tests
.iter()
.map(|f| {
@@ -95,11 +98,10 @@ pub fn get_filtered_tests(specified_tests: &[String]) -> Result<Vec<&TestMetadat
.cloned()
.ok_or(anyhow::anyhow!("Test '{f}' not found"))
})
- .collect()
- } else {
- // Keep all tests
- Ok(tests)
- }
+ .collect::<Result<_, anyhow::Error>>()?
+ };
+ tests.retain(|test| test.should_run_on_os(TEST_CONFIG.os));
+ Ok(tests)
}
/// Make sure the daemon is installed and logged in and restore settings to the defaults.
@@ -122,6 +124,7 @@ pub async fn prepare_daemon(
.context("Failed to disconnect daemon after test")?;
helpers::ensure_logged_in(&mut mullvad_client).await?;
helpers::custom_lists::add_default_lists(&mut mullvad_client).await?;
+ helpers::custom_lists::set_default_location(&mut mullvad_client).await?;
Ok(())
}
diff --git a/test/test-manager/src/tests/ui.rs b/test/test-manager/src/tests/ui.rs
index 994557748b..6b9ce5b3a9 100644
--- a/test/test-manager/src/tests/ui.rs
+++ b/test/test-manager/src/tests/ui.rs
@@ -91,7 +91,7 @@ pub async fn test_ui_tunnel_settings(
rpc: ServiceClient,
mut mullvad_client: MullvadProxyClient,
) -> anyhow::Result<()> {
- // NOTE: This test connects multiple times using various settings, some of which may cauase a
+ // NOTE: This test connects multiple times using various settings, some of which may cause a
// significant increase in connection time, e.g. multihop and OpenVPN. For this reason, it is
// preferable to only target low latency servers.
use helpers::custom_lists::LowLatency;
@@ -223,8 +223,6 @@ async fn test_custom_bridge_gui(
rpc: ServiceClient,
mut mullvad_client: MullvadProxyClient,
) -> Result<(), Error> {
- use mullvad_relay_selector::{RelaySelector, SelectorConfig};
-
// For this test to work, we need to supply the following env-variables:
//
// * SHADOWSOCKS_SERVER_IP
@@ -238,8 +236,10 @@ async fn test_custom_bridge_gui(
// `test_manager::tests::access_methods::test_shadowsocks`.
let gui_test = "custom-bridge.spec";
+
+ let settings = mullvad_client.get_settings().await.unwrap();
let relay_list = mullvad_client.get_relay_locations().await.unwrap();
- let relay_selector = RelaySelector::from_list(SelectorConfig::default(), relay_list);
+ let relay_selector = helpers::get_daemon_relay_selector(&settings, relay_list);
let custom_proxy = relay_selector
.get_bridge_forced()
.expect("`test_shadowsocks` needs at least one shadowsocks relay to execute. Found none in relay list.");
@@ -279,7 +279,7 @@ pub async fn test_import_settings_ui(_: TestContext, rpc: ServiceClient) -> Resu
Ok(())
}
-/// Test obufscation settings in the GUI
+/// Test obfuscation settings in the GUI
#[test_function]
pub async fn test_obfuscation_settings_ui(_: TestContext, rpc: ServiceClient) -> Result<(), Error> {
let ui_result = run_test(&rpc, &["obfuscation.spec"]).await?;