use std::path::PathBuf;
use crate::checksum::MULTIHASH_SHA256_CHUNKED;
use aws_smithy_types::base64;
use multihash::Multihash;
use crate::Error;
use crate::Res;
pub mod top_hash;
fn local_uri(key: &str) -> Res<PathBuf> {
Ok(std::env::current_dir()?.join(key))
}
pub mod manifest {
use super::local_uri;
use std::path::PathBuf;
use crate::Res;
const MANIFEST_LOCATION: &str = "fixtures/packages/checksummed.jsonl";
pub const TOP_HASH: &str = "87c4c6caa2eaeb346ea8c3a5c3650a54b9ae93ed5229db67eac7449fc198f0c5";
pub fn path() -> Res<PathBuf> {
local_uri(MANIFEST_LOCATION)
}
}
pub fn create_multihash(b64_str: &str) -> Res<Multihash<256>> {
Ok(Multihash::wrap(
MULTIHASH_SHA256_CHUNKED,
&base64::decode(b64_str).map_err(|e| Error::Checksum(e.to_string()))?,
)?)
}
pub mod manifest_with_objects_all_sizes {
use std::path::PathBuf;
use super::create_multihash;
use super::local_uri;
use super::objects;
use crate::manifest::Manifest;
use crate::manifest::ManifestRow;
use crate::Res;
const JSONL: &str = "fixtures/ref-manifest-sizes.jsonl";
pub const TOP_HASH: &str = "a8287f20eb1e315a08ce08d9488dc1e8c75ba45d4549bb4351a74c92b217c3c0";
pub fn jsonl_path() -> Res<PathBuf> {
local_uri(JSONL)
}
pub async fn manifest() -> Res<Manifest> {
let mut manifest = Manifest::default();
manifest
.insert_record(ManifestRow {
logical_key: PathBuf::from("0mb.bin"),
size: 0,
hash: create_multihash(objects::ZERO_HASH_B64)?.try_into()?,
..ManifestRow::default()
})
.await?;
manifest
.insert_record(ManifestRow {
logical_key: PathBuf::from("bigger-than-8mb.txt"),
size: 18874368,
hash: create_multihash(objects::MORE_THAN_8MB_HASH_B64)?.try_into()?,
..ManifestRow::default()
})
.await?;
manifest
.insert_record(ManifestRow {
logical_key: PathBuf::from("equal-to-8mb.txt"),
size: 8388608,
hash: create_multihash(objects::EQUAL_TO_8MB_HASH_B64)?.try_into()?,
..ManifestRow::default()
})
.await?;
manifest
.insert_record(ManifestRow {
logical_key: PathBuf::from("less-then-8mb.txt"),
size: 16,
hash: create_multihash(objects::LESS_THAN_8MB_HASH_B64)?.try_into()?,
..ManifestRow::default()
})
.await?;
manifest
.insert_record(ManifestRow {
logical_key: PathBuf::from("one/two two/three three three/READ ME.md"),
size: 20,
hash: create_multihash(objects::NESTED_HASH_B64)?.try_into()?,
..ManifestRow::default()
})
.await?;
Ok(manifest)
}
}
pub mod objects {
pub const ZERO_HASH_B64: &str = "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=";
pub const ZERO_HASH_HEX: &str =
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
pub fn zero_bytes<'a>() -> &'a [u8] {
&[]
}
pub const LESS_THAN_8MB_HASH_B64: &str = "Xb1PbjJeWof4zD7zuHc9PI7sLiz/Ykj4gphlaZEt3xA=";
pub const LESS_THAN_8MB_HASH_HEX: &str =
"5dbd4f6e325e5a87f8cc3ef3b8773d3c8eec2e2cff6248f882986569912ddf10";
pub fn less_than_8mb<'a>() -> &'a [u8] {
"0123456789abcdef".as_bytes()
}
pub const EQUAL_TO_8MB_HASH_B64: &str = "7V3rZ3Q/AmAYax2wsQBZbc7N1EMIxlxRyMiMthGRdwg=";
pub const EQUAL_TO_8MB_HASH_HEX: &str =
"ed5deb67743f0260186b1db0b100596dcecdd44308c65c51c8c88cb611917708";
pub fn equal_to_8mb() -> Vec<u8> {
"12345678".as_bytes().repeat(1024 * 1024)
}
pub const MORE_THAN_8MB_HASH_B64: &str = "T+rt/HKRJOiAkEGXKvc+DhCwRcrZiDrFkjKonDT1zgs=";
pub const MORE_THAN_8MB_HASH_HEX: &str =
"4feaedfc729124e8809041972af73e0e10b045cad9883ac59232a89c34f5ce0b";
pub fn more_than_8mb() -> Vec<u8> {
"1234567890abcdefgh".as_bytes().repeat(1024 * 1024)
}
pub const NESTED_HASH_B64: &str = "J6TS3FqxN+VOhVoaoPU5OsYMUsq6652ykBrlW7krP/k=";
pub fn nested<'a>() -> &'a [u8] {
"This is the README.".as_bytes()
}
}