use std::io::Write;
use std::os::unix::net::UnixStream;
use std::thread;
use nerve_protocol::codec::encode;
use nerve_protocol::types::{FrameFlags, MessageType, RequestId};
#[test]
fn socket_read_frame_roundtrip() {
let (mut client, mut server) = UnixStream::pair().expect("socket pair failed");
let payload = b"hello nerve";
let encoded = encode(
MessageType::Ping,
FrameFlags::empty(),
RequestId(42),
payload,
)
.expect("encode failed");
let writer = thread::spawn(move || {
client.write_all(&encoded).expect("write failed");
});
let owned = nerve_ipc_core::server::read_frame(&mut server).expect("read_frame failed");
let frame = owned.as_borrowed();
assert_eq!(frame.header.request_id, 42);
assert_eq!(frame.header.payload_length as usize, payload.len());
assert_eq!(frame.payload, payload);
writer.join().unwrap();
}