use pkgsrc::digest::*;
use std::fs::File;
use std::path::PathBuf;
use std::str::FromStr;

#[test]
fn test_digest_file() -> DigestResult<()> {
    let mut file = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
    file.push("tests/data/digest.txt");

    let mut f = File::open(&file)?;
    let d = Digest::from_str("BLAKE2s")?;
    let h = d.hash_file(&mut f)?;
    assert_eq!(
        h,
        "555e56e8177159b7d7fe96d5068dcf5335b554b917c8daaa4c893ec4f04b5303"
    );

    let mut f = File::open(&file)?;
    let d = Digest::from_str("RMD160")?;
    let h = d.hash_file(&mut f)?;
    assert_eq!(h, "f20aa3e2ffd45a2915c663e46be79d97e10dd6a5");

    let mut f = File::open(&file)?;
    let d = Digest::from_str("SHA1")?;
    let h = d.hash_file(&mut f)?;
    assert_eq!(h, "5289ee33f2b9a205fdefa2633d568681100e94fc");

    let mut f = File::open(&file)?;
    let d = Digest::from_str("SHA256")?;
    let h = d.hash_file(&mut f)?;
    assert_eq!(
        h,
        "89f85dcb8da0c75cff33a7a63eddb72b1122cfa4f5b6003a872f0fd5b63725e2"
    );

    let mut f = File::open(&file)?;
    let d = Digest::from_str("SHA512")?;
    let h = d.hash_file(&mut f)?;
    assert_eq!(
        h,
        "1b8bd4264ac86f9535376965b3e94a622a4da4daf1f516184609541f9a12139e0accf24fd41bfab95114d0ba3fcfc589fa911e2597b29c3221b66898ae4cfa13"
    );

    Ok(())
}
