use super::*;
#[test]
fn ifds_vyre_resident_upload_resident_success() {
let b = backend();
let a = adapter(&b);
let res = a.allocate_resident(64).unwrap();
a.upload_resident(&res, &[1u8; 32]).unwrap();
assert_eq!(b.upload_count(), 1);
let uploads = b.take_uploads();
assert_eq!(uploads[0].byte_len, 32);
assert_eq!(uploads[0].offset, None);
}
#[test]
fn ifds_vyre_resident_upload_resident_empty_bytes() {
let b = backend();
let a = adapter(&b);
let res = a.allocate_resident(64).unwrap();
a.upload_resident(&res, &[]).unwrap();
assert_eq!(b.upload_count(), 1);
}
#[test]
fn ifds_vyre_resident_upload_resident_many_empty() {
let b = backend();
let a = adapter(&b);
a.upload_resident_many(&[]).unwrap();
assert_eq!(b.upload_count(), 0);
}
#[test]
fn ifds_vyre_resident_upload_resident_many_single() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
a.upload_resident_many(&[(&r, &[2u8; 16])]).unwrap();
assert_eq!(b.upload_count(), 1);
}
#[test]
fn ifds_vyre_resident_upload_resident_many_three() {
let b = backend();
let a = adapter(&b);
let r1 = a.allocate_resident(64).unwrap();
let r2 = a.allocate_resident(64).unwrap();
let r3 = a.allocate_resident(64).unwrap();
a.upload_resident_many(&[(&r1, &[1u8; 8]), (&r2, &[2u8; 16]), (&r3, &[3u8; 24])])
.unwrap();
assert_eq!(b.upload_count(), 3);
let uploads = b.take_uploads();
assert_eq!(
uploads.iter().map(|u| u.byte_len).sum::<usize>(),
8 + 16 + 24
);
}
#[test]
fn ifds_vyre_resident_upload_resident_at_many_empty() {
let b = backend();
let a = adapter(&b);
a.upload_resident_at_many(&[]).unwrap();
assert_eq!(b.upload_count(), 0);
}
#[test]
fn ifds_vyre_resident_upload_resident_at_many_zero_offset() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
a.upload_resident_at_many(&[(&r, 0, &[5u8; 10])]).unwrap();
assert_eq!(b.upload_count(), 1);
assert_eq!(b.take_uploads()[0].offset, Some(0));
}
#[test]
fn ifds_vyre_resident_upload_resident_at_many_nonzero_offset() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
a.upload_resident_at_many(&[(&r, 32, &[6u8; 8])]).unwrap();
assert_eq!(b.upload_count(), 1);
assert_eq!(b.take_uploads()[0].offset, Some(32));
}
#[test]
fn ifds_vyre_resident_upload_resident_at_many_three_offsets() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(128).unwrap();
a.upload_resident_at_many(&[(&r, 0, &[1u8; 4]), (&r, 16, &[2u8; 4]), (&r, 32, &[3u8; 4])])
.unwrap();
assert_eq!(b.upload_count(), 3);
}
#[test]
fn ifds_vyre_resident_upload_resident_at_many_boundary_exact() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
a.upload_resident_at_many(&[(&r, 56, &[0u8; 8])]).unwrap();
}
#[test]
fn ifds_vyre_resident_upload_resident_at_many_overflow_rejected() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
let err = a
.upload_resident_at_many(&[(&r, 60, &[0u8; 8])])
.unwrap_err();
assert!(err.contains("exceeds allocation"));
}
#[test]
fn ifds_vyre_resident_upload_err_device_oom() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
b.inject_next_upload(InjectedFailure::DeviceOutOfMemory {
requested: 128,
available: 64,
});
let err = a.upload_resident(&r, &[1u8; 32]).unwrap_err();
assert!(err.contains("device out of memory"));
}
#[test]
fn ifds_vyre_resident_upload_many_err_propagates() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
b.inject_next_upload(InjectedFailure::DispatchFailed {
code: None,
message: "upload batch failed".into(),
});
let err = a.upload_resident_many(&[(&r, &[1u8; 8])]).unwrap_err();
assert!(err.contains("upload batch failed"));
}
#[test]
fn ifds_vyre_resident_upload_at_many_err_propagates() {
let b = backend();
let a = adapter(&b);
let r = a.allocate_resident(64).unwrap();
b.inject_next_upload(InjectedFailure::PoisonedLock {
lock_error: "upload_at lock".into(),
});
let err = a
.upload_resident_at_many(&[(&r, 0, &[1u8; 8])])
.unwrap_err();
assert!(err.contains("upload_at lock"));
}