use nvd_cve::cache::{search_by_id, CacheConfig};
use std::fs;
mod util;
use home::home_dir;
use nvd_cve::cache::sync_blocking;
use nvd_cve::cve::CveFeed;
use std::env;
use std::path::PathBuf;
use util::MockBlockingClient;
#[test]
fn test_sync_config_defaults() {
env::set_var("XDG_CACHE_HOME", "./tests/files/.cache");
let config = CacheConfig::default();
let mut db_path = PathBuf::from("./tests/files/.cache");
db_path.push("nvd");
db_path.push("nvd.sqlite3");
assert_eq!(config.db.as_str(), db_path.to_str().unwrap());
env::remove_var("XDG_CACHE_HOME");
env::set_var("HOME", "./tests/files");
let config = CacheConfig::default();
let mut db_path = home_dir().unwrap();
db_path.push(".cache");
db_path.push("nvd");
db_path.push("nvd.sqlite3");
assert_eq!(config.db.as_str(), db_path.to_str().unwrap());
}
#[test]
fn test_sync_blocking() {
let mut config = CacheConfig::default();
config.db = "./tests/files/.cache/nvd/nvd2.sqlite3".to_string();
config.url = "http://nowhere.nope".to_string();
fs::remove_file(&config.db).ok();
config.feeds = vec![String::from("recent")];
let mut client = MockBlockingClient::default();
let metafile = fs::read_to_string("./tests/files/nvdcve-1.1-recent.meta")
.expect("Failed reading metafile");
client.get_metafile_response = Ok(metafile);
let body = fs::read_to_string("./tests/files/nvdcve-1.1-recent.json")
.expect("Failed reading feed json");
let cve_feed: CveFeed = serde_json::from_str(&*body).expect("Failed parsing cve feed json");
client.get_feed_response = Ok(cve_feed);
sync_blocking(&config, client).expect("Failed to sync to local cache");
if let Err(error) = search_by_id(&config, "CVE-2021-43437") {
assert!(false, "failed to find CVE: {:?}", error);
}
if let Err(e) = fs::remove_file(&config.db) {
assert!(false, "{:?}", e);
}
}