use nlink::{Result, netlink::config::NetworkConfig};
use crate::common::TestNamespace;
const MAC: [u8; 6] = [0x02, 0x00, 0x00, 0xbe, 0xef, 0x01];
#[tokio::test]
async fn declared_mtu_survives_create_for_every_link_kind() -> Result<()> {
require_root!();
nlink::require_modules!("dummy", "ifb");
let ns = TestNamespace::new("declmtu")?;
let conn = ns.connection()?;
let cfg = NetworkConfig::new()
.link("ifb-mtu", |l| l.ifb().mtu(1400));
let result = cfg.apply(&conn).await?;
assert!(result.is_success(), "apply failed: {}", result.summary_text());
let link = conn
.get_link_by_name("ifb-mtu")
.await?
.expect("ifb-mtu created");
assert_eq!(
link.mtu(),
Some(1400),
"declared MTU was dropped on create (#275)"
);
let diff = cfg.diff(&conn).await?;
assert!(
diff.is_empty(),
"apply reported success but left a non-empty diff: {diff}"
);
Ok(())
}
#[tokio::test]
async fn declared_mac_is_applied_and_then_converges() -> Result<()> {
require_root!();
nlink::require_module!("dummy");
let ns = TestNamespace::new("declmac")?;
let conn = ns.connection()?;
conn.add_link(nlink::netlink::link::DummyLink::new("mac0"))
.await?;
let cfg = NetworkConfig::new()
.link("mac0", |l| l.dummy().address(MAC));
let diff = cfg.diff(&conn).await?;
assert!(
!diff.is_empty(),
"a declared MAC that differs from the kernel's must show as drift (#275)"
);
let result = cfg.apply(&conn).await?;
assert!(result.is_success(), "apply failed: {}", result.summary_text());
let link = conn.get_link_by_name("mac0").await?.expect("mac0 exists");
assert_eq!(
link.address(),
Some(&MAC[..]),
"declared MAC never reached the interface (#275)"
);
let diff = cfg.diff(&conn).await?;
assert!(diff.is_empty(), "MAC did not converge: {diff}");
Ok(())
}
#[tokio::test]
async fn declared_mac_survives_create() -> Result<()> {
require_root!();
nlink::require_modules!("dummy", "ifb");
let ns = TestNamespace::new("declmac2")?;
let conn = ns.connection()?;
let cfg = NetworkConfig::new()
.link("ifb-mac", |l| l.ifb().address(MAC));
let result = cfg.apply(&conn).await?;
assert!(result.is_success(), "apply failed: {}", result.summary_text());
let link = conn
.get_link_by_name("ifb-mac")
.await?
.expect("ifb-mac created");
assert_eq!(
link.address(),
Some(&MAC[..]),
"declared MAC was dropped on create (#275)"
);
Ok(())
}