diff options
| author | Sebastian Holmin <sebastian.holmin@mullvad.net> | 2025-07-09 15:00:25 +0200 |
|---|---|---|
| committer | Sebastian Holmin <sebastian.holmin@mullvad.net> | 2025-07-11 10:15:29 +0200 |
| commit | 2985cf50fc64a715767e4d3e3617933804e42af0 (patch) | |
| tree | 45566123976ffba5101d68a1e003c93e9bfe0ac6 | |
| parent | 75bf9ab63c770ccdb3b861ce9310f2407560e7d0 (diff) | |
| download | mullvadvpn-2985cf50fc64a715767e4d3e3617933804e42af0.tar.xz mullvadvpn-2985cf50fc64a715767e4d3e3617933804e42af0.zip | |
Make enable/disable daemon not start/stop
| -rw-r--r-- | test/test-manager/src/tests/mod.rs | 57 | ||||
| -rw-r--r-- | test/test-manager/src/tests/windows.rs | 12 | ||||
| -rw-r--r-- | test/test-runner/src/main.rs | 10 |
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 |
