summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-types/src/settings/migrations/v1.rs119
-rw-r--r--mullvad-types/src/settings/mod.rs2
2 files changed, 120 insertions, 1 deletions
diff --git a/mullvad-types/src/settings/migrations/v1.rs b/mullvad-types/src/settings/migrations/v1.rs
index 8960d07499..a5b4e7c618 100644
--- a/mullvad-types/src/settings/migrations/v1.rs
+++ b/mullvad-types/src/settings/migrations/v1.rs
@@ -100,3 +100,122 @@ pub enum TunnelConstraints {
#[serde(rename = "wireguard")]
Wireguard(WireguardConstraints),
}
+
+#[cfg(test)]
+mod test {
+ use super::super::SettingsMigration;
+ use serde_json;
+ const OLD_SETTINGS: &str = r#"
+{
+ "account_token": "1234",
+ "relay_settings": {
+ "normal": {
+ "location": {
+ "only": {
+ "country": "se"
+ }
+ },
+ "tunnel": {
+ "only": {
+ "openvpn": {
+ "port": {
+ "only": 53
+ },
+ "protocol": {
+ "only": "udp"
+ }
+ }
+ }
+ }
+ }
+ },
+ "bridge_settings": {
+ "normal": {
+ "location": "any"
+ }
+ },
+ "bridge_state": "auto",
+ "allow_lan": true,
+ "block_when_disconnected": false,
+ "auto_connect": false,
+ "tunnel_options": {
+ "openvpn": {
+ "mssfix": null
+ },
+ "wireguard": {
+ "mtu": null
+ },
+ "generic": {
+ "enable_ipv6": false
+ }
+ }
+}
+"#;
+
+ const NEW_SETTINGS: &str = r#"
+{
+ "account_token": "1234",
+ "relay_settings": {
+ "normal": {
+ "location": {
+ "only": {
+ "country": "se"
+ }
+ },
+ "tunnel_protocol": "any",
+ "wireguard_constraints": {
+ "port": "any"
+ },
+ "openvpn_constraints": {
+ "port": {
+ "only": 53
+ },
+ "protocol": {
+ "only": "udp"
+ }
+ }
+ }
+ },
+ "bridge_settings": {
+ "normal": {
+ "location": "any"
+ }
+ },
+ "bridge_state": "auto",
+ "allow_lan": true,
+ "block_when_disconnected": false,
+ "auto_connect": false,
+ "tunnel_options": {
+ "openvpn": {
+ "mssfix": null
+ },
+ "wireguard": {
+ "mtu": null
+ },
+ "generic": {
+ "enable_ipv6": false
+ }
+ },
+ "settings_version": 2
+}
+"#;
+
+ #[test]
+ fn test_migration() {
+ let m = super::Migration;
+ let old_settings = m
+ .read(&mut OLD_SETTINGS.as_bytes())
+ .expect("Failed to deserialize old format");
+ let new_settings = serde_json::from_str(&NEW_SETTINGS).unwrap();
+
+ assert_eq!(&m.migrate(old_settings).unwrap(), &new_settings);
+ }
+
+ #[test]
+ #[should_panic]
+ fn test_deserialization_failure() {
+ let m = super::Migration;
+ m.read(&mut NEW_SETTINGS.as_bytes())
+ .expect("Failed to deserialize old format");
+ }
+}
diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs
index 0cc8ae34f1..c2f84cff59 100644
--- a/mullvad-types/src/settings/mod.rs
+++ b/mullvad-types/src/settings/mod.rs
@@ -50,7 +50,7 @@ static SETTINGS_FILE: &str = "settings.json";
/// Mullvad daemon settings.
-#[derive(Debug, Clone, Deserialize, Serialize)]
+#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
#[serde(default)]
pub struct Settings {
account_token: Option<String>,