summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSebastian Holmin <sebastian.holmin@mullvad.net>2025-07-09 15:00:25 +0200
committerSebastian Holmin <sebastian.holmin@mullvad.net>2025-07-11 10:15:29 +0200
commit2985cf50fc64a715767e4d3e3617933804e42af0 (patch)
tree45566123976ffba5101d68a1e003c93e9bfe0ac6
parent75bf9ab63c770ccdb3b861ce9310f2407560e7d0 (diff)
downloadmullvadvpn-2985cf50fc64a715767e4d3e3617933804e42af0.tar.xz
mullvadvpn-2985cf50fc64a715767e4d3e3617933804e42af0.zip
Make enable/disable daemon not start/stop
-rw-r--r--test/test-manager/src/tests/mod.rs57
-rw-r--r--test/test-manager/src/tests/windows.rs12
-rw-r--r--test/test-runner/src/main.rs10
3 files changed, 39 insertions, 40 deletions
diff --git a/test/test-manager/src/tests/mod.rs b/test/test-manager/src/tests/mod.rs
index 2194841b34..76d3a4bb48 100644
--- a/test/test-manager/src/tests/mod.rs
+++ b/test/test-manager/src/tests/mod.rs
@@ -214,19 +214,35 @@ async fn ensure_daemon_version(
) -> anyhow::Result<MullvadProxyClient> {
let app_package_filename = &TEST_CONFIG.app_package_filename;
- let mullvad_client = if correct_daemon_version_is_running(rpc_provider.new_client().await).await
- {
- ensure_daemon_environment(rpc)
- .await
- .context("Failed to reset daemon environment")?;
- rpc_provider.new_client().await
- } else {
+ let must_reinstall_app =
+ match correct_daemon_version_is_running(rpc_provider.new_client().await).await {
+ Ok(correct_version) => !correct_version,
+ // Failing to reach the daemon is a sign that it is not installed
+ Err(mullvad_management_interface::Error::Rpc(..)) => {
+ log::debug!("Daemon is not running, attempting to start it");
+
+ let failed_starting_daemon = rpc.enable_mullvad_daemon().await.is_err()
+ || rpc.start_mullvad_daemon().await.is_err();
+ if failed_starting_daemon {
+ log::warn!("Failed to start the daemon service");
+ }
+ failed_starting_daemon
+ }
+ Err(e) => panic!("Failed to get app version: {e}"),
+ };
+
+ if must_reinstall_app {
// NOTE: Reinstalling the app resets the daemon environment
install_app(rpc, app_package_filename, rpc_provider)
.await
- .with_context(|| format!("Failed to install app '{app_package_filename}'"))?
- };
- Ok(mullvad_client)
+ .with_context(|| format!("Failed to install app '{app_package_filename}'"))
+ } else {
+ ensure_daemon_environment(rpc)
+ .await
+ .context("Failed to reset daemon environment")?;
+
+ Ok(rpc_provider.new_client().await)
+ }
}
/// Conditionally restart the running daemon
@@ -254,23 +270,12 @@ pub async fn ensure_daemon_environment(rpc: &ServiceClient) -> Result<(), anyhow
}
/// Checks if daemon is installed with the version specified by `TEST_CONFIG.app_package_filename`
-async fn correct_daemon_version_is_running(mut mullvad_client: MullvadProxyClient) -> bool {
+async fn correct_daemon_version_is_running(
+ mut mullvad_client: MullvadProxyClient,
+) -> Result<bool, mullvad_management_interface::Error> {
let app_package_filename = &TEST_CONFIG.app_package_filename;
let expected_version = get_version_from_path(std::path::Path::new(app_package_filename))
.unwrap_or_else(|_| panic!("Invalid app version: {app_package_filename}"));
-
- use mullvad_management_interface::Error::*;
- match mullvad_client.get_current_version().await {
- // Failing to reach the daemon is a sign that it is not installed
- Err(Rpc(..)) => {
- log::debug!("Could not reach active daemon before test, it is not running");
- false
- }
- Err(e) => panic!("Failed to get app version: {e}"),
- Ok(version) if version == expected_version => true,
- _ => {
- log::debug!("Daemon version mismatch");
- false
- }
- }
+ let version = mullvad_client.get_current_version().await?;
+ Ok(version == expected_version)
}
diff --git a/test/test-manager/src/tests/windows.rs b/test/test-manager/src/tests/windows.rs
index a3b17acfb3..e857b6901f 100644
--- a/test/test-manager/src/tests/windows.rs
+++ b/test/test-manager/src/tests/windows.rs
@@ -75,12 +75,6 @@ async fn test_clearing_blocked_state_on_failed_upgrade(
.mullvad_exit_ip;
ensure!(!mullvad_exit_ip, "Should *not* be a Mullvad Exit IP");
- // Do the same thing again, but with lockdown mode enabled?
- // assert that the firewall rules are still applied
-
- // TODO: Move this to clean up routine
- log::info!("Re-enabling Mullvad daemon system service");
- rpc.enable_mullvad_daemon().await?;
Ok(())
}
@@ -143,11 +137,5 @@ async fn test_not_clearing_blocked_state_on_failed_upgrade_with_lockdown_mode(
"Device is leaking - blocking rules have not applied properly"
);
- // Do the same thing again, but with lockdown mode enabled?
- // assert that the firewall rules are still applied
-
- // TODO: Move this to clean up routine
- log::info!("Re-enabling Mullvad daemon system service");
- rpc.enable_mullvad_daemon().await?;
Ok(())
}
diff --git a/test/test-runner/src/main.rs b/test/test-runner/src/main.rs
index 843285eb33..51a357543e 100644
--- a/test/test-runner/src/main.rs
+++ b/test/test-runner/src/main.rs
@@ -321,7 +321,10 @@ impl Service for TestServer {
/// Disable the Mullvad VPN system service.
async fn disable_mullvad_daemon(self, _: context::Context) -> Result<(), test_rpc::Error> {
#[cfg(not(target_os = "windows"))]
- unimplemented!("disable_mullvad_daemon is only implemented on Windows");
+ {
+ log::warn!("disable_mullvad_daemon is only implemented on Windows");
+ return Err(test_rpc::Error::Syscall);
+ }
#[cfg(target_os = "windows")]
{
sys::disable_system_service_startup().await
@@ -330,7 +333,10 @@ impl Service for TestServer {
async fn enable_mullvad_daemon(self, _: context::Context) -> Result<(), test_rpc::Error> {
#[cfg(not(target_os = "windows"))]
- unimplemented!("enable_mullvad_daemon is only implemented on Windows");
+ {
+ log::warn!("enable_mullvad_daemon is only implemented on Windows");
+ return Err(test_rpc::Error::Syscall);
+ }
#[cfg(target_os = "windows")]
{
sys::enable_system_service_startup().await