#![allow(clippy::unwrap_used, clippy::expect_used)]
use sqlite_forensic::blob::{identify_media_type, sha256_hex};
#[test]
fn identifies_common_media_types_from_magic() {
let png = b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR";
let jpeg = b"\xFF\xD8\xFF\xE0\x00\x10JFIF";
let gif = b"GIF89a\x01\x00";
let pdf = b"%PDF-1.7\n";
let gzip = b"\x1f\x8b\x08\x00";
let zip = b"PK\x03\x04\x14\x00";
assert_eq!(identify_media_type(png), Some("image/png"));
assert_eq!(identify_media_type(jpeg), Some("image/jpeg"));
assert_eq!(identify_media_type(gif), Some("image/gif"));
assert_eq!(identify_media_type(pdf), Some("application/pdf"));
assert_eq!(identify_media_type(gzip), Some("application/gzip"));
assert_eq!(identify_media_type(zip), Some("application/zip"));
let webp = b"RIFF\x24\x00\x00\x00WEBPVP8 ";
let wav = b"RIFF\x24\x00\x00\x00WAVEfmt ";
assert_eq!(identify_media_type(webp), Some("image/webp"));
assert_eq!(identify_media_type(wav), Some("audio/wav"));
let mp4 = b"\x00\x00\x00\x18ftypmp42";
assert_eq!(identify_media_type(mp4), Some("video/mp4"));
let sqlite = b"SQLite format 3\x00rest";
assert_eq!(identify_media_type(sqlite), Some("application/vnd.sqlite3"));
let bmp = b"BM\x8a\x00\x00\x00";
assert_eq!(identify_media_type(bmp), Some("image/bmp"));
}
#[test]
fn unknown_or_short_blobs_return_none() {
assert_eq!(identify_media_type(b"not a known magic"), None);
assert_eq!(identify_media_type(b""), None);
assert_eq!(identify_media_type(b"\x89P"), None); }
#[test]
fn sha256_matches_the_nist_test_vector() {
assert_eq!(
sha256_hex(b"abc"),
"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
);
assert_eq!(
sha256_hex(b""),
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
);
}