use cargo_update::ops::assert_index_path; use std::path::{PathBuf, Path}; use std::fs::{self, File}; use std::env::temp_dir; #[test] fn sparse() { let indices = prep_indices("sparse"); assert_eq!(assert_index_path(&indices, "https://github.com/rust-lang/crates.io-index", true), Ok(PathBuf::from("/ENOENT"))); assert_eq!(assert_index_path(&indices, "dupa", true), Ok(PathBuf::from("/ENOENT"))); } #[test] fn nonexistent() { let indices = prep_indices("nonexistent"); assert_eq!(assert_index_path(&indices, "https://github.com/rust-lang/crates.io-index", false), Ok(indices.join("registry").join("index").join("github.com-1ecc6299db9ec823"))); assert!(indices.join("registry").join("index").join("github.com-1ecc6299db9ec823").is_dir()); } #[test] fn is_file() { let indices = prep_indices("is_file"); prepare_indices(&indices, &[]); File::create(indices.join("registry").join("index").join("github.com-1ecc6299db9ec823")).unwrap(); assert_eq!(assert_index_path(&indices, "https://github.com/rust-lang/crates.io-index", false), Err(format!("{} (index directory for https://github.com/rust-lang/crates.io-index) not a directory", indices.join("registry").join("index").join("github.com-1ecc6299db9ec823").display()) .into())); } #[test] fn single() { let indices = prep_indices("single"); prepare_indices(&indices, &[("github.com", "1ecc6299db9ec823")]); assert_eq!(assert_index_path(&indices, "https://github.com/rust-lang/crates.io-index", false), Ok(indices.join("registry").join("index").join("github.com-1ecc6299db9ec823"))); } #[test] fn double() { let indices = prep_indices("double"); prepare_indices(&indices, &[("github.com", "1ecc6299db9ec823"), ("github.com", "48ad6e4054423464")]); assert_eq!(assert_index_path(&indices, "https://github.com/rust-lang/crates.io-index", false), Ok(indices.join("registry").join("index").join("github.com-1ecc6299db9ec823"))); } #[test] fn two() { let indices = prep_indices("two"); prepare_indices(&indices, &[("github.com", "1ecc6299db9ec823"), ("", "72ffea3e1e10b7e3"), ("github.com", "48ad6e4054423464")]); assert_eq!(assert_index_path(&indices, "https://github.com/rust-lang/crates.io-index", false), Ok(indices.join("registry").join("index").join("github.com-1ecc6299db9ec823"))); assert_eq!(assert_index_path(&indices, "file:///usr/local/share/cargo", false), Ok(indices.join("registry").join("index").join("-72ffea3e1e10b7e3"))); } fn prep_indices(subname: &str) -> PathBuf { let td = temp_dir().join("cargo_update-test").join(format!("assert_index_path-{}", subname)); let _ = fs::create_dir_all(&td); td } fn prepare_indices(index: &Path, shortnames: &[(&str, &str)]) { let index = index.join("registry").join("index"); let _ = fs::create_dir_all(&index); for (name, hash) in shortnames { let _ = fs::create_dir(index.join(format!("{}-{}", name, hash))); } }