48 lines
1.6 KiB
Rust
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());
|
|
}
|
|
}
|
|
}
|
|
}
|