diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-02-02 18:06:04 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-02-05 09:21:08 +0100 |
| commit | 2e1d01d804e93ad7b0895ab89144802522967bc4 (patch) | |
| tree | a3dff1649d253104afea253f606270f4a74170fc | |
| parent | 900d57eb5429203d899445d9ea02067f0a751ae9 (diff) | |
| download | mullvadvpn-2e1d01d804e93ad7b0895ab89144802522967bc4.tar.xz mullvadvpn-2e1d01d804e93ad7b0895ab89144802522967bc4.zip | |
Test whether the default settings use the correct version
| -rw-r--r-- | mullvad-daemon/src/migrations/mod.rs | 62 |
1 files changed, 47 insertions, 15 deletions
diff --git a/mullvad-daemon/src/migrations/mod.rs b/mullvad-daemon/src/migrations/mod.rs index 363c0bd282..f5a54867b2 100644 --- a/mullvad-daemon/src/migrations/mod.rs +++ b/mullvad-daemon/src/migrations/mod.rs @@ -133,23 +133,9 @@ pub async fn migrate_all(cache_dir: &Path, settings_dir: &Path) -> Result<Option let mut settings: serde_json::Value = serde_json::from_reader(&settings_bytes[..]).map_err(Error::Deserialize)?; - if !settings.is_object() { - return Err(Error::InvalidSettingsContent); - } - let old_settings = settings.clone(); - v1::migrate(&mut settings)?; - v2::migrate(&mut settings)?; - v3::migrate(&mut settings)?; - v4::migrate(&mut settings)?; - - account_history::migrate_location(cache_dir, settings_dir).await; - account_history::migrate_formats(settings_dir, &mut settings).await?; - - let migration_data = v5::migrate(&mut settings)?; - v6::migrate(&mut settings)?; - v7::migrate(&mut settings)?; + let migration_data = migrate_settings(Some((cache_dir, settings_dir)), &mut settings).await?; if settings == old_settings { // Nothing changed @@ -175,6 +161,31 @@ pub async fn migrate_all(cache_dir: &Path, settings_dir: &Path) -> Result<Option Ok(migration_data) } +async fn migrate_settings( + directories: Option<(&Path, &Path)>, + settings: &mut serde_json::Value, +) -> Result<Option<MigrationData>> { + if !settings.is_object() { + return Err(Error::InvalidSettingsContent); + } + + v1::migrate(settings)?; + v2::migrate(settings)?; + v3::migrate(settings)?; + v4::migrate(settings)?; + + if let Some((cache_dir, settings_dir)) = directories { + account_history::migrate_location(cache_dir, settings_dir).await; + account_history::migrate_formats(settings_dir, settings).await?; + } + + let migration_data = v5::migrate(settings)?; + v6::migrate(settings)?; + v7::migrate(settings)?; + + Ok(migration_data) +} + pub(crate) fn migrate_device( migration_data: MigrationData, rest_handle: mullvad_api::rest::MullvadRestHandle, @@ -383,3 +394,24 @@ mod windows { unsafe { IsWellKnownSid(sid as *const SID as *mut _, well_known_sid_type) == 1 } } } + +#[cfg(test)] +mod test { + use mullvad_types::settings::Settings; + + use crate::migrations::migrate_settings; + + /// Ensure that no migration logic runs for the default settings by checking whether anything + /// has changed after running the migration code + #[tokio::test] + async fn test_settings_format_version() { + let default_settings = serde_json::to_value(Settings::default()).unwrap(); + let mut migrated_settings = default_settings.clone(); + + migrate_settings(None, &mut migrated_settings) + .await + .unwrap(); + + assert_eq!(default_settings, migrated_settings); + } +} |
