From 20391f2689e08dc0a3bcbfa30c1fae985c20fc7e Mon Sep 17 00:00:00 2001 From: murex971 Date: Thu, 30 Mar 2023 04:04:13 +0530 Subject: [PATCH] test: replace lo interface with dummy interface Fixes: #422 Signed-off-by: murex971 --- test/integration-test/src/tests/load.rs | 25 ++++++++++++++++------ test/integration-test/src/tests/mod.rs | 1 + test/integration-test/src/tests/smoke.rs | 11 +++++++--- test/integration-test/src/tests/util.rs | 27 ++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 test/integration-test/src/tests/util.rs diff --git a/test/integration-test/src/tests/load.rs b/test/integration-test/src/tests/load.rs index 8bb9dd0e..d42d0c03 100644 --- a/test/integration-test/src/tests/load.rs +++ b/test/integration-test/src/tests/load.rs @@ -11,7 +11,7 @@ use aya::{ }; use log::warn; -use crate::tests::kernel_version; +use crate::tests::{kernel_version, util::DummyInterface}; use super::{integration_test, IntegrationTest}; @@ -28,7 +28,10 @@ fn long_name() { .try_into() .unwrap(); name_prog.load().unwrap(); - name_prog.attach("lo", XdpFlags::default()).unwrap(); + let _iface = DummyInterface::new(); + name_prog + .attach(DummyInterface::TEST_DUMMY, XdpFlags::default()) + .unwrap(); // We used to be able to assert with bpftool that the program name was short. // It seem though that it now uses the name from the ELF symbol table instead. @@ -94,7 +97,10 @@ fn unload_xdp() { .unwrap(); prog.load().unwrap(); assert_loaded!("test_unload_xdp", true); - let link = prog.attach("lo", XdpFlags::default()).unwrap(); + let _iface = DummyInterface::new(); + let link = prog + .attach(DummyInterface::TEST_DUMMY, XdpFlags::default()) + .unwrap(); { let _link_owned = prog.take_link(link).unwrap(); prog.unload().unwrap(); @@ -105,7 +111,8 @@ fn unload_xdp() { prog.load().unwrap(); assert_loaded!("test_unload_xdp", true); - prog.attach("lo", XdpFlags::default()).unwrap(); + prog.attach(DummyInterface::TEST_DUMMY, XdpFlags::default()) + .unwrap(); assert_loaded!("test_unload_xdp", true); prog.unload().unwrap(); @@ -158,7 +165,10 @@ fn pin_link() { .try_into() .unwrap(); prog.load().unwrap(); - let link_id = prog.attach("lo", XdpFlags::default()).unwrap(); + let _iface = DummyInterface::new(); + let link_id = prog + .attach(DummyInterface::TEST_DUMMY, XdpFlags::default()) + .unwrap(); let link = prog.take_link(link_id).unwrap(); assert_loaded!("test_unload_xdp", true); @@ -207,9 +217,12 @@ fn pin_lifecycle() { assert_loaded!("pass", true); // 3. Load program from bpffs and attach + let _iface = DummyInterface::new(); { let mut prog = Xdp::from_pin("/sys/fs/bpf/aya-xdp-test-prog").unwrap(); - let link_id = prog.attach("lo", XdpFlags::default()).unwrap(); + let link_id = prog + .attach(DummyInterface::TEST_DUMMY, XdpFlags::default()) + .unwrap(); let link = prog.take_link(link_id).unwrap(); let fd_link: FdLink = link.try_into().unwrap(); fd_link.pin("/sys/fs/bpf/aya-xdp-test-lo").unwrap(); diff --git a/test/integration-test/src/tests/mod.rs b/test/integration-test/src/tests/mod.rs index ddb1b504..f11f1f40 100644 --- a/test/integration-test/src/tests/mod.rs +++ b/test/integration-test/src/tests/mod.rs @@ -9,6 +9,7 @@ pub mod load; pub mod rbpf; pub mod relocations; pub mod smoke; +mod util; pub use integration_test_macros::integration_test; #[derive(Debug)] diff --git a/test/integration-test/src/tests/smoke.rs b/test/integration-test/src/tests/smoke.rs index a7450064..47c95e43 100644 --- a/test/integration-test/src/tests/smoke.rs +++ b/test/integration-test/src/tests/smoke.rs @@ -5,7 +5,7 @@ use aya::{ }; use log::info; -use super::{integration_test, kernel_version, IntegrationTest}; +use super::{integration_test, kernel_version, util::DummyInterface, IntegrationTest}; #[integration_test] fn xdp() { @@ -13,7 +13,10 @@ fn xdp() { let mut bpf = Bpf::load(bytes).unwrap(); let dispatcher: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap(); dispatcher.load().unwrap(); - dispatcher.attach("lo", XdpFlags::default()).unwrap(); + let _iface = DummyInterface::new(); + dispatcher + .attach(DummyInterface::TEST_DUMMY, XdpFlags::default()) + .unwrap(); } #[integration_test] @@ -32,7 +35,9 @@ fn extension() { let mut bpf = Bpf::load(main_bytes).unwrap(); let pass: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap(); pass.load().unwrap(); - pass.attach("lo", XdpFlags::default()).unwrap(); + let _iface = DummyInterface::new(); + pass.attach(DummyInterface::TEST_DUMMY, XdpFlags::default()) + .unwrap(); let ext_bytes = include_bytes_aligned!("../../../../target/bpfel-unknown-none/debug/ext.bpf.o"); let mut bpf = BpfLoader::new().extension("drop").load(ext_bytes).unwrap(); diff --git a/test/integration-test/src/tests/util.rs b/test/integration-test/src/tests/util.rs new file mode 100644 index 00000000..e8a2ed8a --- /dev/null +++ b/test/integration-test/src/tests/util.rs @@ -0,0 +1,27 @@ +use std::process::Command; + +pub(crate) struct DummyInterface; + +impl DummyInterface { + pub const TEST_DUMMY: &str = "aya-dummy"; + + pub fn new() -> Self { + let output = Command::new("ip") + .args(["link", "add", Self::TEST_DUMMY, "type", "dummy"]) + .output() + .expect("failed to run ip command"); + + assert!(output.status.success()); + Self + } +} + +impl Drop for DummyInterface { + fn drop(&mut self) { + let output = Command::new("ip") + .args(["link", "del", Self::TEST_DUMMY]) + .output() + .expect("failed to run ip command"); + assert!(output.status.success()) + } +}