use assert_cmd::cargo_bin_cmd;
use jiff::{SignedDuration, Timestamp};
use std::path::{Path, PathBuf};
use tough::IntoVec;
use url::Url;
#[allow(unused)]
pub fn test_data() -> PathBuf {
let mut p = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
p.pop();
p.join("tough").join("tests").join("data")
}
#[allow(unused)]
pub fn dir_url<P: AsRef<Path>>(path: P) -> Url {
Url::from_directory_path(path).unwrap()
}
#[allow(unused)]
pub async fn read_to_end<E, S>(mut stream: S) -> Vec<u8>
where
E: std::fmt::Debug,
S: IntoVec<E>,
{
stream.into_vec().await.unwrap()
}
#[allow(unused)]
pub fn days(value: i64) -> SignedDuration {
SignedDuration::from_hours(value * 24)
}
#[allow(unused)]
pub fn create_expired_repo<P: AsRef<Path>>(repo_dir: P) {
let timestamp_expiration = Timestamp::now() + days(-1);
let timestamp_version: u64 = 31;
let snapshot_expiration = Timestamp::now() + days(2);
let snapshot_version: u64 = 25;
let targets_expiration = Timestamp::now() + days(3);
let targets_version: u64 = 17;
let targets_input_dir = test_data().join("tuf-reference-impl").join("targets");
let root_json = test_data().join("simple-rsa").join("root.json");
let root_key = test_data().join("snakeoil.pem");
cargo_bin_cmd!("tuftool")
.args([
"create",
"-t",
targets_input_dir.to_str().unwrap(),
"-o",
repo_dir.as_ref().to_str().unwrap(),
"-k",
root_key.to_str().unwrap(),
"--root",
root_json.to_str().unwrap(),
"--targets-expires",
targets_expiration.to_string().as_str(),
"--targets-version",
format!("{}", targets_version).as_str(),
"--snapshot-expires",
snapshot_expiration.to_string().as_str(),
"--snapshot-version",
format!("{}", snapshot_version).as_str(),
"--timestamp-expires",
timestamp_expiration.to_string().as_str(),
"--timestamp-version",
format!("{}", timestamp_version).as_str(),
])
.assert()
.success();
}