use vsf::verification::parse_full_header;
use vsf::vsf_builder::VsfBuilder;
use vsf::{VsfType, VSF_BACKWARD_COMPAT, VSF_VERSION};
fn minimal_file(builder: VsfBuilder) -> Vec<u8> {
builder
.add_inline_field("probe", vec![VsfType::u3(42)])
.build()
.expect("build must succeed regardless of claimed version")
}
#[test]
fn default_markers_are_the_crate_constants() {
let bytes = minimal_file(VsfBuilder::new());
let header = parse_full_header(&bytes).expect("current-era file must parse");
assert_eq!(header.version, VSF_VERSION);
assert_eq!(header.backward_compat, VSF_BACKWARD_COMPAT);
}
#[test]
fn future_floor_is_rejected() {
let future = VSF_VERSION + 1;
let bytes = minimal_file(VsfBuilder::new().version(future, future));
let err = match parse_full_header(&bytes) {
Err(e) => e,
Ok(_) => panic!("future floor must be rejected"),
};
assert!(
err.contains(&format!("requires VSF v{future}")),
"wrong error: {err}"
);
}
#[test]
fn future_version_with_current_floor_is_accepted() {
let bytes = minimal_file(VsfBuilder::new().version(VSF_VERSION + 1, VSF_VERSION));
let header = parse_full_header(&bytes).expect("y at our version must be readable");
assert_eq!(header.version, VSF_VERSION + 1);
assert_eq!(header.backward_compat, VSF_VERSION);
}
#[test]
fn below_floor_is_rejected() {
let old = VSF_BACKWARD_COMPAT - 1;
let bytes = minimal_file(VsfBuilder::new().version(old, old));
let err = match parse_full_header(&bytes) {
Err(e) => e,
Ok(_) => panic!("below-floor file must be rejected"),
};
assert!(
err.contains(&format!("compat-v{old}")),
"wrong error: {err}"
);
}