integration-test: kernel_assert anti-condition

Rather than emitting a warning, assert the inverse of the condition when
the current kernel version is lower than required. This strengthens the
assertions made by our tests (provided we run them over kernel versions
before and after the listed version, which is not yet the case).
reviewable/pr1222/r3
Tamir Duberstein 1 month ago
parent 509032f195
commit f890bb3dce

@ -71,59 +71,31 @@ impl Drop for NetNsGuard {
} }
} }
/// Performs `assert!` macro. If the assertion fails and host kernel version /// If the `KernelVersion::current >= $version`, `assert!($cond)`, else `assert!(!$cond)`.
/// is above feature version, then fail test.
macro_rules! kernel_assert { macro_rules! kernel_assert {
($cond:expr, $version:expr $(,)?) => { ($cond:expr, $version:expr $(,)?) => {
let pass: bool = $cond;
if !pass {
let feat_version: aya::util::KernelVersion = $version;
let current = aya::util::KernelVersion::current().unwrap(); let current = aya::util::KernelVersion::current().unwrap();
let cond_literal = stringify!($cond); let required: aya::util::KernelVersion = $version;
if current >= feat_version { if current >= required {
// Host kernel is expected to have the feat but does not assert!($cond, "{current} >= {required}");
panic!(
r#" assertion `{cond_literal}` failed: expected host kernel v{current} to have v{feat_version} feature"#,
);
} else { } else {
// Continue with tests since host is not expected to have feat assert!(!$cond, "{current} < {required}");
eprintln!(
r#"ignoring assertion at {}:{}
assertion `{cond_literal}` failed: continuing since host kernel v{current} is not expected to have v{feat_version} feature"#,
file!(), line!(),
);
}
} }
}; };
} }
pub(crate) use kernel_assert; pub(crate) use kernel_assert;
/// Performs `assert_eq!` macro. If the assertion fails and host kernel version /// If the `KernelVersion::current >= $version`, `assert_eq!($left, $right)`, else
/// is above feature version, then fail test. /// `assert_ne!($left, $right)`.
macro_rules! kernel_assert_eq { macro_rules! kernel_assert_eq {
($left:expr, $right:expr, $version:expr $(,)?) => { ($left:expr, $right:expr, $version:expr $(,)?) => {
if $left != $right {
let feat_version: aya::util::KernelVersion = $version;
let current = aya::util::KernelVersion::current().unwrap(); let current = aya::util::KernelVersion::current().unwrap();
if current >= feat_version { let required: aya::util::KernelVersion = $version;
// Host kernel is expected to have the feat but does not if current >= required {
panic!( assert_eq!($left, $right, "{current} >= {required}");
r#" assertion `left == right` failed: expected host kernel v{current} to have v{feat_version} feature
left: {:?}
right: {:?}"#,
$left, $right,
);
} else { } else {
// Continue with tests since host is not expected to have feat assert_ne!($left, $right, "{current} < {required}");
eprintln!(
r#"ignoring assertion at {}:{}
assertion `left == right` failed: continuing since host kernel v{current} is not expected to have v{feat_version} feature
left: {:?}
right: {:?}"#,
file!(), line!(), $left, $right,
);
}
} }
}; };
} }

Loading…
Cancel
Save