use std::fs::File;
use tempfile::TempDir;
use test_utils::{dir_url, test_data};
use tough::error::Error::ExpiredMetadata;
use tough::schema::RoleType;
use tough::{ExpirationEnforcement, FilesystemTransport, Limits, Repository, Settings};
mod test_utils;
#[test]
fn test_expiration_enforcement_safe() {
let base = test_data().join("expired-repository");
let datastore = TempDir::new().unwrap();
let metadata_base_url = &dir_url(base.join("metadata"));
let targets_base_url = &dir_url(base.join("targets"));
let result = Repository::load(
&FilesystemTransport,
Settings {
root: File::open(base.join("metadata").join("1.root.json")).unwrap(),
datastore: datastore.as_ref(),
metadata_base_url,
targets_base_url,
limits: Limits::default(),
expiration_enforcement: ExpirationEnforcement::Safe,
},
);
if let Err(err) = result {
match err {
ExpiredMetadata { role, backtrace: _ } => {
assert_eq!(role, RoleType::Timestamp);
}
_ => {
panic!(
"Expected an error type of 'ExpiredMetadata' but received a different error."
);
}
}
} else {
panic!("Repository::load was expected to return an error.")
}
}
#[test]
fn test_expiration_enforcement_unsafe() {
let base = test_data().join("expired-repository");
let datastore = TempDir::new().unwrap();
let metadata_base_url = &dir_url(base.join("metadata"));
let targets_base_url = &dir_url(base.join("targets"));
let result = Repository::load(
&FilesystemTransport,
Settings {
root: File::open(base.join("metadata").join("1.root.json")).unwrap(),
datastore: datastore.as_ref(),
metadata_base_url,
targets_base_url,
limits: Limits::default(),
expiration_enforcement: ExpirationEnforcement::Unsafe,
},
);
assert!(result.is_ok())
}