diff --git a/src/system/auto_update.rs b/src/system/auto_update.rs index 4a3dda3..150218d 100644 --- a/src/system/auto_update.rs +++ b/src/system/auto_update.rs @@ -238,6 +238,21 @@ mod test { assert_eq!(release.version.as_str(), "0.7.0"); } + #[test] + fn should_default_release_body_when_missing() { + let release: UpdRelease = UpdRelease { + name: String::from("termscp 0.7.0"), + version: String::from("0.7.0"), + date: String::from("2021-09-12T00:00:00Z"), + body: None, + assets: vec![], + }; + let release: Release = Release::from(release); + + assert!(release.body.is_empty()); + assert_eq!(release.version.as_str(), "0.7.0"); + } + #[test] fn should_tell_that_version_is_higher() { assert!(Update::is_new_version_higher("0.10.0", "0.9.0")); @@ -248,6 +263,39 @@ mod test { assert!(!Update::is_new_version_higher("0.10.9", "0.11.0")); } + #[test] + fn should_ignore_release_without_semver() { + let release = Release { + version: String::from("latest"), + body: String::from("notes"), + }; + + assert!(Update::check_version(release).is_none()); + } + + #[test] + fn should_ignore_release_when_version_is_not_newer() { + let release = Release { + version: cargo_crate_version!().to_string(), + body: String::from("notes"), + }; + + assert!(Update::check_version(release).is_none()); + } + + #[test] + fn should_accept_release_when_version_is_newer() { + let release = Release { + version: String::from("termscp-999.0.0"), + body: String::from("notes"), + }; + + let release = Update::check_version(release).unwrap(); + + assert_eq!(release.version.as_str(), "termscp-999.0.0"); + assert_eq!(release.body.as_str(), "notes"); + } + #[test] fn test_should_check_whether_github_api_is_reachable() { assert!(Update::check_github_api_reachable().is_ok()); diff --git a/src/system/sshkey_storage.rs b/src/system/sshkey_storage.rs index 2101b73..f2e9288 100644 --- a/src/system/sshkey_storage.rs +++ b/src/system/sshkey_storage.rs @@ -206,6 +206,43 @@ Host test ); } + #[test] + fn should_make_mapkey_from_username_and_host() { + assert_eq!( + SshKeyStorage::make_mapkey("example.org", "veeso"), + "veeso@example.org" + ); + } + + #[test] + fn should_prefer_termscp_key_over_ssh_config() { + let rsa_key = test_helpers::create_sample_file_with_content( + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDErJhQxEI0+VvhlXVUyh+vMCm7aXfCA/g633AG8ezD/5EylwchtAr2JCoBWnxn4zV8nI9dMqOgm0jO4IsXpKOjQojv+0VOH7I+cDlBg0tk4hFlvyyS6YviDAfDDln3jYUM+5QNDfQLaZlH2WvcJ3mkDxLVlI9MBX1BAeSmChLxwAvxALp2ncImNQLzDO9eHcig3dtMrEKkzXQowRW5Y7eUzg2+vvVq4H2DOjWwUndvB5sJkhEfTUVE7ID8ZdGJo60kUb/02dZYj+IbkAnMCsqktk0cg/4XFX82hEfRYFeb1arkysFisPU1DOb6QielL/axeTebVplaouYcXY0pFdJt root@8c50fd4c345a", + ); + let ssh_config_file = test_helpers::create_sample_file_with_content(format!( + r#" +Host test + HostName 127.0.0.1 + User test + IdentityFile {} +"#, + rsa_key.path().display() + )); + let tmp_dir: tempfile::TempDir = tempfile::TempDir::new().ok().unwrap(); + let (cfg_path, key_path): (PathBuf, PathBuf) = get_paths(tmp_dir.path()); + let mut client: ConfigClient = ConfigClient::new(cfg_path.as_path(), key_path.as_path()) + .ok() + .unwrap(); + client.set_ssh_config(Some(ssh_config_file.path().to_string_lossy().to_string())); + assert!(client.add_ssh_key("test", "pi", "stored-key").is_ok()); + + let storage: SshKeyStorage = SshKeyStorage::from(&client); + let resolved = storage.resolve("test", "pi").unwrap(); + + assert!(resolved.ends_with("pi@test.key")); + assert_ne!(resolved.as_path(), rsa_key.path()); + } + /// Get paths for configuration and keys directory fn get_paths(dir: &Path) -> (PathBuf, PathBuf) { let mut k: PathBuf = PathBuf::from(dir);