burrow/tun/tests/configure.rs
Conrad Kramer ff5736a817
Some checks failed
Build Site / Next.js Build (push) Successful in 1m31s
Build Apple / Build App (macOS) (push) Has been cancelled
Build Rust / Cargo Test (push) Has been cancelled
Build Apple / Build App (iOS Simulator) (push) Has been cancelled
Skip tun configure tests without tun access
2026-03-19 04:33:54 -07:00

110 lines
2.3 KiB
Rust

use std::{
io::{Error, ErrorKind},
net::Ipv4Addr,
};
use tun::TunInterface;
fn open_test_tun() -> Result<Option<TunInterface>, Error> {
match TunInterface::new() {
Ok(tun) => Ok(Some(tun)),
Err(error) if matches!(error.kind(), ErrorKind::NotFound | ErrorKind::PermissionDenied) => {
eprintln!("skipping test: {}", error);
Ok(None)
}
Err(error) => Err(error),
}
}
#[test]
fn test_create() -> Result<(), Error> {
if open_test_tun()?.is_none() {
return Ok(());
}
Ok(())
}
#[test]
#[cfg(not(any(target_os = "windows", target_vendor = "apple")))]
fn test_set_get_broadcast_addr() -> Result<(), Error> {
let Some(tun) = open_test_tun()? else {
return Ok(());
};
let addr = Ipv4Addr::new(10, 0, 0, 1);
tun.set_ipv4_addr(addr)?;
let broadcast_addr = Ipv4Addr::new(255, 255, 255, 0);
tun.set_broadcast_addr(broadcast_addr)?;
let result = tun.broadcast_addr()?;
assert_eq!(broadcast_addr, result);
Ok(())
}
#[test]
#[cfg(not(target_os = "windows"))]
fn test_set_get_ipv4() -> Result<(), Error> {
let Some(tun) = open_test_tun()? else {
return Ok(());
};
let addr = Ipv4Addr::new(10, 0, 0, 1);
tun.set_ipv4_addr(addr)?;
let result = tun.ipv4_addr()?;
assert_eq!(addr, result);
Ok(())
}
#[test]
#[cfg(not(any(target_os = "windows", target_vendor = "apple")))]
fn test_set_get_ipv6() -> Result<(), Error> {
use std::net::Ipv6Addr;
let Some(tun) = open_test_tun()? else {
return Ok(());
};
let addr = Ipv6Addr::new(1, 1, 1, 1, 1, 1, 1, 1);
tun.add_ipv6_addr(addr, 128)?;
// let result = tun.ipv6_addr()?;
// assert_eq!(addr, result);
Ok(())
}
#[test]
#[cfg(not(target_os = "windows"))]
fn test_set_get_mtu() -> Result<(), Error> {
let Some(interf) = open_test_tun()? else {
return Ok(());
};
interf.set_mtu(500)?;
assert_eq!(interf.mtu().unwrap(), 500);
Ok(())
}
#[test]
#[cfg(not(target_os = "windows"))]
fn test_set_get_netmask() -> Result<(), Error> {
let Some(interf) = open_test_tun()? else {
return Ok(());
};
let netmask = Ipv4Addr::new(255, 0, 0, 0);
let addr = Ipv4Addr::new(192, 168, 1, 1);
interf.set_ipv4_addr(addr)?;
interf.set_netmask(netmask)?;
assert_eq!(interf.netmask()?, netmask);
Ok(())
}