diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2018-03-16 16:08:53 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2018-04-11 06:35:07 -0300 |
| commit | 89774b59c63cd82dd2b4b27112c399159c891815 (patch) | |
| tree | d64015cbfe439295e6d1d9e6194ca279385ea816 | |
| parent | 78239aa18952d2aebdba7042d7dba2c9d501589a (diff) | |
| download | mullvadvpn-89774b59c63cd82dd2b4b27112c399159c891815.tar.xz mullvadvpn-89774b59c63cd82dd2b4b27112c399159c891815.zip | |
Test `CachedDnsResolver`
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | mullvad-rpc/Cargo.toml | 3 | ||||
| -rw-r--r-- | mullvad-rpc/src/cached_dns_resolver.rs | 83 |
3 files changed, 87 insertions, 0 deletions
diff --git a/Cargo.lock b/Cargo.lock index 57a56e2d99..1ae167fb80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -675,6 +675,7 @@ dependencies = [ "mullvad-types 0.1.0", "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tempdir 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/mullvad-rpc/Cargo.toml b/mullvad-rpc/Cargo.toml index f243e76baa..b76062a226 100644 --- a/mullvad-rpc/Cargo.toml +++ b/mullvad-rpc/Cargo.toml @@ -19,3 +19,6 @@ native-tls = "0.1" log = "0.4" mullvad-types = { path = "../mullvad-types" } + +[dev-dependencies] +tempdir = "0.3" diff --git a/mullvad-rpc/src/cached_dns_resolver.rs b/mullvad-rpc/src/cached_dns_resolver.rs index 9cf341de69..6677046048 100644 --- a/mullvad-rpc/src/cached_dns_resolver.rs +++ b/mullvad-rpc/src/cached_dns_resolver.rs @@ -61,3 +61,86 @@ impl CachedDnsResolver { writeln!(cache_file, "{}", address) } } + +#[cfg(test)] +mod tests { + extern crate tempdir; + + use std::fs::{self, File}; + use std::io::{Read, Write}; + + use self::tempdir::TempDir; + use super::*; + + #[test] + fn uses_cached_address() { + let (_temp_dir, cache_dir) = create_test_dirs(); + let cached_address = "127.0.0.1".parse().unwrap(); + + write_address(&cache_dir, cached_address); + + let cache = create_cached_dns_resolver(&cache_dir); + let address = cache.resolve().unwrap(); + + assert_eq!(address, cached_address); + } + + #[test] + fn caches_resolved_ip() { + let (_temp_dir, cache_dir) = create_test_dirs(); + let cache = create_cached_dns_resolver(&cache_dir); + + let address = cache.resolve().unwrap(); + + assert_eq!(get_cached_address(&cache_dir), address.to_string()); + } + + #[test] + fn resolves_even_if_impossible_to_store_in_cache() { + let (temp_dir, cache_dir) = create_test_dirs(); + let cache = create_cached_dns_resolver(&cache_dir); + + ::std::mem::drop(temp_dir); + + assert!(cache.resolve().is_some()); + } + + fn create_test_dirs() -> (TempDir, PathBuf) { + let temp_dir = TempDir::new("ip-cache-test").unwrap(); + let cache_dir = temp_dir.path().join("cache"); + + fs::create_dir(&cache_dir).unwrap(); + + (temp_dir, cache_dir) + } + + fn write_address(dir: &Path, address: IpAddr) -> PathBuf { + let file_path = dir.join("api_ip_address.txt"); + let mut file = File::create(&file_path).unwrap(); + + writeln!(file, "{}", address).unwrap(); + + file_path + } + + fn get_cached_address(cache_dir: &Path) -> String { + let cache_file_path = cache_dir.join("api_ip_address.txt"); + + assert!(cache_file_path.exists()); + + let mut cache_file = File::open(cache_file_path).unwrap(); + let mut cached_address = String::new(); + + cache_file.read_to_string(&mut cached_address).unwrap(); + + cached_address.trim().to_string() + } + + fn create_cached_dns_resolver(cache_dir: &Path) -> CachedDnsResolver { + let hostname = "api.mullvad.net".to_owned(); + let filename = "api_ip_address.txt"; + let cache_file = cache_dir.join(filename); + + CachedDnsResolver::new(hostname, cache_file) + } +} |
