summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2024-02-02 18:06:04 +0100
committerDavid Lönnhager <david.l@mullvad.net>2024-02-05 09:21:08 +0100
commit2e1d01d804e93ad7b0895ab89144802522967bc4 (patch)
treea3dff1649d253104afea253f606270f4a74170fc
parent900d57eb5429203d899445d9ea02067f0a751ae9 (diff)
downloadmullvadvpn-2e1d01d804e93ad7b0895ab89144802522967bc4.tar.xz
mullvadvpn-2e1d01d804e93ad7b0895ab89144802522967bc4.zip
Test whether the default settings use the correct version
-rw-r--r--mullvad-daemon/src/migrations/mod.rs62
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);
+ }
+}