use super::*;
#[test]
fn ifds_vyre_resident_download_resident_success() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let data = a.download_resident(&r).unwrap();
assert_eq!(data.len(), 64);
}
#[test]
fn ifds_vyre_resident_download_resident_into_success() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let mut out = vec![99u8; 128];
a.download_resident_into(&r, &mut out).unwrap();
assert_eq!(out.len(), 64);
}
#[test]
fn ifds_vyre_resident_download_resident_range_success() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let data = a.download_resident_range(&r, 16, 8).unwrap();
assert_eq!(data.len(), 8);
}
#[test]
fn ifds_vyre_resident_download_resident_range_into_success() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let mut out = Vec::new();
a.download_resident_range_into(&r, 8, 4, &mut out).unwrap();
assert_eq!(out.len(), 4);
}
#[test]
fn ifds_vyre_resident_download_resident_range_zero_len() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let data = a.download_resident_range(&r, 64, 0).unwrap();
assert_eq!(data.len(), 0);
}
#[test]
fn ifds_vyre_resident_download_resident_range_at_end() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let data = a.download_resident_range(&r, 56, 8).unwrap();
assert_eq!(data.len(), 8);
}
#[test]
fn ifds_vyre_resident_download_resident_ranges_into_empty() {
let b = backend();
let a = adapter(&b);
let mut outputs: Vec<&mut Vec<u8>> = vec![];
a.download_resident_ranges_into(&[], &mut outputs).unwrap();
}
#[test]
fn ifds_vyre_resident_download_resident_ranges_into_single() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let mut out = Vec::new();
a.download_resident_ranges_into(&[(&r, 0, 8)], &mut [&mut out])
.unwrap();
assert_eq!(out.len(), 8);
}
#[test]
fn ifds_vyre_resident_download_resident_ranges_into_three() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let mut out1 = Vec::new();
let mut out2 = Vec::new();
let mut out3 = Vec::new();
a.download_resident_ranges_into(
&[(&r, 0, 8), (&r, 16, 8), (&r, 32, 8)],
&mut [&mut out1, &mut out2, &mut out3],
)
.unwrap();
assert_eq!(out1.len(), 8);
assert_eq!(out2.len(), 8);
assert_eq!(out3.len(), 8);
}
#[test]
fn ifds_vyre_resident_download_resident_ranges_into_mismatch_count() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let mut out = Vec::new();
let err = a
.download_resident_ranges_into(&[(&r, 0, 8), (&r, 8, 8)], &mut [&mut out])
.unwrap_err();
assert!(err.contains("2 range(s) and 1 output(s)"));
}
#[test]
fn ifds_vyre_resident_download_err_device_oom() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
b.inject_next_download(InjectedFailure::DeviceOutOfMemory {
requested: 64,
available: 32,
});
let err = a.download_resident(&r).unwrap_err();
assert!(err.contains("device out of memory"));
}
#[test]
fn ifds_vyre_resident_download_range_overflow_rejected() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let err = a.download_resident_range(&r, 60, 8).unwrap_err();
assert!(err.contains("exceeds allocation"));
}
#[test]
fn ifds_vyre_resident_download_range_into_overflow_rejected() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let mut out = Vec::new();
let err = a
.download_resident_range_into(&r, 60, 8, &mut out)
.unwrap_err();
assert!(err.contains("exceeds allocation"));
}
#[test]
fn ifds_vyre_resident_download_ranges_into_err_propagates() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
b.inject_next_download(InjectedFailure::UnsupportedFeature {
name: "multi_range".into(),
});
let mut out = Vec::new();
let err = a
.download_resident_ranges_into(&[(&r, 0, 8)], &mut [&mut out])
.unwrap_err();
assert!(err.contains("multi_range"));
}