mod addr;
pub mod blocking;
#[cfg(target_os = "macos")]
pub(crate) mod darwin;
#[cfg(target_os = "linux")]
pub(crate) mod linux;
mod listener;
pub(crate) mod stream;
mod transport;
pub use addr::{DEFAULT_AGENT_PORT, VsockAddr};
pub use blocking::BlockingVsockTransport;
#[cfg(target_os = "macos")]
pub use darwin::IncomingVsockConnection;
pub use listener::VsockListener;
pub use stream::{VsockShutdown, VsockStream};
pub use transport::{VsockReceiver, VsockSender, VsockTransport};
#[cfg(test)]
mod tests {
use super::*;
use crate::Transport;
#[test]
fn test_vsock_addr() {
let addr = VsockAddr::new(3, 1234);
assert_eq!(addr.cid, 3);
assert_eq!(addr.port, 1234);
let host = VsockAddr::host(DEFAULT_AGENT_PORT);
assert_eq!(host.cid, VsockAddr::CID_HOST);
assert_eq!(host.port, DEFAULT_AGENT_PORT);
}
#[test]
fn test_vsock_transport_not_connected() {
let transport = VsockTransport::new(VsockAddr::host(1234));
assert!(!transport.is_connected());
}
#[test]
fn test_into_split_not_connected() {
let transport = VsockTransport::new(VsockAddr::host(1234));
assert!(transport.into_split().is_err());
}
#[cfg(target_os = "macos")]
#[test]
fn test_vsock_listener_from_channel() {
use tokio::sync::mpsc;
let (tx, rx) = mpsc::unbounded_channel();
let listener = VsockListener::from_channel(1024, rx);
assert_eq!(listener.port(), 1024);
let conn = IncomingVsockConnection {
fd: 42,
source_port: 2000,
destination_port: 1024,
};
assert!(tx.send(conn).is_ok());
}
}