Files
sausage/vfs/tests/devices.rs
T

48 lines
1.6 KiB
Rust

//! Standard generated devices discard writes and retain their read behavior across opens.
use sausage_vfs::{Device, Generated, Layer, Open};
#[tokio::test]
async fn generated_devices() {
let mut layer = Generated::default();
for (name, device) in [
("null", Device::Null),
("zero", Device::Zero),
("urandom", Device::Random),
] {
layer.insert_device(&format!("/{name}"), device);
}
assert_eq!(layer.list("/").await.unwrap().len(), 3);
for name in ["null", "zero", "urandom"] {
let file = layer
.open(
&format!("/{name}"),
Open {
write: true,
create: true,
truncate: true,
..Default::default()
},
)
.await
.unwrap();
assert_eq!(file.write(100, b"discard".to_vec()).await.unwrap(), 7);
assert_eq!(file.append(b"discard".to_vec()).await.unwrap(), 7);
file.set_size(100).await.unwrap();
file.sync().await.unwrap();
assert_eq!(file.stat().await.unwrap().size, 0);
let reopened = layer
.open(&format!("/{name}"), Open::default())
.await
.unwrap();
let bytes = reopened.read(100, 64).await.unwrap();
match name {
"null" => assert!(bytes.is_empty()),
"zero" => assert_eq!(bytes, vec![0; 64]),
_ => {
assert_eq!(bytes.len(), 64);
assert_ne!(bytes, reopened.read(0, 64).await.unwrap());
}
}
}
}