#![cfg(all(feature = "compression", feature = "checksum", feature = "messagepack"))]
use cachekit_core::{ByteStorage, StorageEnvelope};
use serde::Deserialize;
const FIXTURE: &str = include_str!("vectors/wire-format.json");
#[derive(Deserialize, PartialEq, Debug)]
struct StorageEnvelopeLegacy {
compressed_data: Vec<u8>,
checksum: [u8; 8],
original_size: u32,
format: String,
}
#[derive(serde::Deserialize)]
struct WireFormatFixture {
vectors: Vec<Vector>,
}
#[derive(serde::Deserialize)]
struct Vector {
name: String,
input_hex: String,
envelope_hex: String,
envelope_encoding: Option<String>,
}
fn load_vectors() -> Vec<Vector> {
serde_json::from_str::<WireFormatFixture>(FIXTURE)
.expect("fixture parses")
.vectors
}
fn assert_all_readers_decode(name: &str, wire: &[u8], expected_payload: &[u8]) {
let legacy: StorageEnvelopeLegacy = rmp_serde::from_slice(wire)
.unwrap_or_else(|e| panic!("[{name}] legacy reader (plain Vec<u8>) failed: {e}"));
let shipped: StorageEnvelope = rmp_serde::from_slice(wire)
.unwrap_or_else(|e| panic!("[{name}] shipped reader (serde_bytes) failed: {e}"));
assert_eq!(legacy.compressed_data, shipped.compressed_data, "[{name}]");
assert_eq!(legacy.checksum, shipped.checksum, "[{name}]");
assert_eq!(legacy.original_size, shipped.original_size, "[{name}]");
assert_eq!(legacy.format, shipped.format, "[{name}]");
let storage = ByteStorage::new(None);
let (payload, _format) = storage
.retrieve(wire)
.unwrap_or_else(|e| panic!("[{name}] shipped retrieve() rejected envelope: {e:?}"));
assert_eq!(
payload, expected_payload,
"[{name}] payload mismatch via retrieve()"
);
}
#[test]
fn dual_decode_matrix_against_legacy_vectors() {
let vectors = load_vectors();
let legacy: Vec<&Vector> = vectors
.iter()
.filter(|v| v.envelope_encoding.is_none())
.collect();
assert!(legacy.len() >= 6, "expected the pinned legacy vector set");
for v in legacy {
let old_wire = hex::decode(&v.envelope_hex)
.unwrap_or_else(|e| panic!("[{}] envelope_hex must decode: {e}", v.name));
let input = hex::decode(&v.input_hex)
.unwrap_or_else(|e| panic!("[{}] input_hex must decode: {e}", v.name));
assert_all_readers_decode(&v.name, &old_wire, &input);
let new_from_old: StorageEnvelope = rmp_serde::from_slice(&old_wire)
.unwrap_or_else(|e| panic!("[{}] shipped reader must decode legacy wire: {e}", v.name));
let new_wire = rmp_serde::to_vec(&new_from_old)
.unwrap_or_else(|e| panic!("[{}] shipped shape must serialize: {e}", v.name));
assert_eq!(
new_wire[0], 0x94,
"[{}] outer fixarray(4) preserved",
v.name
);
assert_eq!(
new_wire[1],
0xc4,
"[{}] compressed_data not bin8-encoded: 0x{:02x}",
v.name,
new_wire[1]
);
assert!(
new_wire.len() <= old_wire.len() + 1,
"[{}] new wire exceeds the +1 B bin8-header ceiling",
v.name
);
assert_all_readers_decode(&v.name, &new_wire, &input);
}
}
#[test]
fn dual_decode_matrix_against_bin_vectors() {
let vectors = load_vectors();
let bin: Vec<&Vector> = vectors
.iter()
.filter(|v| v.envelope_encoding.is_some())
.collect();
assert!(bin.len() >= 6, "expected the pinned *_bin twin set");
for v in bin {
let wire = hex::decode(&v.envelope_hex)
.unwrap_or_else(|e| panic!("[{}] envelope_hex must decode: {e}", v.name));
let input = hex::decode(&v.input_hex)
.unwrap_or_else(|e| panic!("[{}] input_hex must decode: {e}", v.name));
assert_all_readers_decode(&v.name, &wire, &input);
}
}
fn incompressible(len: usize) -> Vec<u8> {
let mut state: u64 = 0x9e3779b97f4a7c15;
let mut out = Vec::with_capacity(len + 8);
while out.len() < len {
state ^= state << 13;
state ^= state >> 7;
state ^= state << 17;
out.extend_from_slice(&state.wrapping_mul(0x2545f4914f6cdd1d).to_le_bytes());
}
out.truncate(len);
out
}
fn assert_width_tier(name: &str, payload_len: usize, expected_marker: u8) {
let payload = incompressible(payload_len);
let env = StorageEnvelope::new(&payload, "msgpack".to_string())
.unwrap_or_else(|e| panic!("[{name}] envelope construction failed: {e:?}"));
let compressed_len = env.compressed_data.len();
let wire = rmp_serde::to_vec(&env)
.unwrap_or_else(|e| panic!("[{name}] shipped shape must serialize: {e}"));
assert_eq!(wire[0], 0x94, "[{name}] outer fixarray(4) preserved");
assert_eq!(
wire[1], expected_marker,
"[{name}] expected bin marker 0x{expected_marker:02x} for compressed_data of {compressed_len} B, got 0x{:02x}",
wire[1]
);
assert_all_readers_decode(name, &wire, &payload);
}
#[test]
fn width_boundary_bin8_bin16() {
let mut seen_bin8 = false;
let mut seen_bin16 = false;
for payload_len in 230..=270 {
let payload = incompressible(payload_len);
let env = StorageEnvelope::new(&payload, "msgpack".to_string()).unwrap_or_else(|e| {
panic!("[sweep len={payload_len}] envelope construction failed: {e:?}")
});
let expected = if env.compressed_data.len() <= 255 {
seen_bin8 = true;
0xc4 } else {
seen_bin16 = true;
0xc5 };
assert_width_tier(
&format!("bin8/bin16 sweep len={payload_len}"),
payload_len,
expected,
);
}
assert!(
seen_bin8 && seen_bin16,
"sweep must land on both sides of the 255 B boundary (bin8 seen: {seen_bin8}, bin16 seen: {seen_bin16})"
);
}
#[test]
fn width_boundary_bin16_bin32() {
assert_width_tier("bin16 tier", 4 * 1024, 0xc5);
assert_width_tier("bin32 tier", 68 * 1024, 0xc6);
}