diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-01-08 15:41:48 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-01-08 16:52:47 +0100 |
| commit | 167e9a9a1f4d856e034fee55cad01065e24c427f (patch) | |
| tree | 761cc8d732e9d36d623965c215870136a5189526 | |
| parent | ad96d229d66b6231632778f7c6be64da6090a410 (diff) | |
| download | mullvadvpn-167e9a9a1f4d856e034fee55cad01065e24c427f.tar.xz mullvadvpn-167e9a9a1f4d856e034fee55cad01065e24c427f.zip | |
Add unit test that loads valid patch file
| -rw-r--r-- | mullvad-daemon/src/settings/patch.rs | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/mullvad-daemon/src/settings/patch.rs b/mullvad-daemon/src/settings/patch.rs index f3682b4322..50c0da6304 100644 --- a/mullvad-daemon/src/settings/patch.rs +++ b/mullvad-daemon/src/settings/patch.rs @@ -131,8 +131,19 @@ pub async fn merge_validate_patch( settings: &mut SettingsPersister, json_patch: &str, ) -> Result<(), Error> { + let new_settings = merge_validate_patch_inner(settings, json_patch)?; + + settings + .update(move |settings| *settings = new_settings) + .await + .map_err(Error::Settings)?; + + Ok(()) +} + +fn merge_validate_patch_inner(settings: &Settings, json_patch: &str) -> Result<Settings, Error> { let mut settings_value: serde_json::Value = - serde_json::to_value(settings.to_settings()).map_err(Error::SerializeSettings)?; + serde_json::to_value(settings).map_err(Error::SerializeSettings)?; let patch_value: serde_json::Value = serde_json::from_str(json_patch).map_err(Error::ParsePatch)?; @@ -142,12 +153,7 @@ pub async fn merge_validate_patch( let new_settings: Settings = serde_json::from_value(settings_value).map_err(Error::DeserializePatched)?; - settings - .update(move |settings| *settings = new_settings) - .await - .map_err(Error::Settings)?; - - Ok(()) + Ok(new_settings) } /// Replace overrides for existing values in the array if there's a matching hostname. For hostnames @@ -400,6 +406,17 @@ fn test_overflow() { )); } +/// Test whether valid patches from documentation are accepted by the implementation +#[test] +fn test_valid_patch_files() { + const OVERRIDE_PATCH: &str = + include_str!("../../../docs/patch-examples/override-relay-ips.json"); + + let prev_settings = Settings::default(); + let _ = merge_validate_patch_inner(&prev_settings, OVERRIDE_PATCH) + .expect("failed to apply relay overrides"); +} + #[test] fn test_patch_relay_override() { const PERMITTED_SUBKEYS: &PermittedKey = &PermittedKey::object(&[( |
