#![allow(missing_docs)]
use std::fs::File;
use std::time::Duration;
use wireshift_core::backend::{Backend, BackendSubmission};
use wireshift_core::buffer::Buffer;
use wireshift_core::config::RingConfig;
use wireshift_core::op::OpDescriptor;
use wireshift_uring::UringBackend;
#[test]
fn test_adversarial_dev_zero() {
let config = RingConfig::default();
let (tx, rx) = std::sync::mpsc::channel();
let backend = UringBackend::new(&config, tx).unwrap();
let file = File::open("/dev/zero").expect("failed to open /dev/zero");
let buffer = Buffer::from_vec(vec![0u8; 1024 * 1024]).unwrap();
let submission = BackendSubmission { timeout: None,
id: 1,
descriptor: OpDescriptor::Read {
file,
offset: 0,
buffer,
len: None,
},
};
backend.submit(submission).unwrap();
let completion = rx
.recv_timeout(Duration::from_secs(5))
.expect("read from /dev/zero timed out");
assert_eq!(completion.id, 1);
assert!(
completion.result.is_ok(),
"read from /dev/zero failed: {:?}",
completion.result
);
}