Merge pull request #699 from aya-rs/cache-again-god-damn-it

Misc testing improvements
pull/696/head
Tamir Duberstein 1 year ago committed by GitHub
commit e95f76a5b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -135,7 +135,7 @@ pub enum BtfError {
#[source] #[source]
io_error: std::io::Error, io_error: std::io::Error,
/// The error log produced by the kernel verifier. /// The error log produced by the kernel verifier.
verifier_log: String, verifier_log: crate::VerifierLog,
}, },
/// offset not found for symbol /// offset not found for symbol

@ -89,3 +89,28 @@ mod util;
pub use maps::Map; pub use maps::Map;
pub use obj::*; pub use obj::*;
/// An error returned from the verifier.
///
/// Provides a [`Debug`] implementation that doesn't escape newlines.
pub struct VerifierLog(alloc::string::String);
impl VerifierLog {
/// Create a new verifier log.
pub fn new(log: alloc::string::String) -> Self {
Self(log)
}
}
impl std::fmt::Debug for VerifierLog {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let Self(log) = self;
f.write_str(log)
}
}
impl std::fmt::Display for VerifierLog {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
<Self as std::fmt::Debug>::fmt(self, f)
}
}

@ -107,7 +107,7 @@ pub use xdp::{Xdp, XdpError, XdpFlags};
use crate::{ use crate::{
generated::{bpf_attach_type, bpf_prog_info, bpf_prog_type}, generated::{bpf_attach_type, bpf_prog_info, bpf_prog_type},
maps::MapError, maps::MapError,
obj::{self, btf::BtfError, Function}, obj::{self, btf::BtfError, Function, VerifierLog},
pin::PinError, pin::PinError,
sys::{ sys::{
bpf_btf_get_fd_by_id, bpf_get_object, bpf_load_program, bpf_pin_object, bpf_btf_get_fd_by_id, bpf_get_object, bpf_load_program, bpf_pin_object,
@ -143,7 +143,7 @@ pub enum ProgramError {
#[source] #[source]
io_error: io::Error, io_error: io::Error,
/// The error log produced by the kernel verifier. /// The error log produced by the kernel verifier.
verifier_log: String, verifier_log: VerifierLog,
}, },
/// A syscall failed. /// A syscall failed.

@ -11,7 +11,7 @@ use crate::util::KernelVersion;
use libc::{c_char, c_long, close, ENOENT, ENOSPC}; use libc::{c_char, c_long, close, ENOENT, ENOSPC};
use obj::{ use obj::{
maps::{bpf_map_def, LegacyMap}, maps::{bpf_map_def, LegacyMap},
BpfSectionKind, BpfSectionKind, VerifierLog,
}; };
use crate::{ use crate::{
@ -1008,7 +1008,7 @@ pub(crate) fn bpf_prog_get_next_id(id: u32) -> Result<Option<u32>, (c_long, io::
pub(crate) fn retry_with_verifier_logs<T>( pub(crate) fn retry_with_verifier_logs<T>(
max_retries: usize, max_retries: usize,
f: impl Fn(&mut [u8]) -> SysResult<T>, f: impl Fn(&mut [u8]) -> SysResult<T>,
) -> (SysResult<T>, String) { ) -> (SysResult<T>, VerifierLog) {
const MIN_LOG_BUF_SIZE: usize = 1024 * 10; const MIN_LOG_BUF_SIZE: usize = 1024 * 10;
const MAX_LOG_BUF_SIZE: usize = (std::u32::MAX >> 8) as usize; const MAX_LOG_BUF_SIZE: usize = (std::u32::MAX >> 8) as usize;
@ -1034,7 +1034,7 @@ pub(crate) fn retry_with_verifier_logs<T>(
} }
let log_buf = String::from_utf8(log_buf).unwrap(); let log_buf = String::from_utf8(log_buf).unwrap();
break (ret, log_buf); break (ret, VerifierLog::new(log_buf));
} }
} }

@ -135,13 +135,21 @@ fn main() {
let Package { manifest_path, .. } = integration_ebpf_package; let Package { manifest_path, .. } = integration_ebpf_package;
let integration_ebpf_dir = manifest_path.parent().unwrap(); let integration_ebpf_dir = manifest_path.parent().unwrap();
// We have a build-dependency on `integration-ebpf`, so cargo will automatically rebuild us
// if `integration-ebpf`'s *library* target or any of its dependencies change. Since we
// depend on `integration-ebpf`'s *binary* targets, that only gets us half of the way. This
// stanza ensures cargo will rebuild us on changes to the binaries too, which gets us the
// rest of the way.
println!("cargo:rerun-if-changed={}", integration_ebpf_dir.as_str());
let mut cmd = Command::new("cargo"); let mut cmd = Command::new("cargo");
cmd.args([ cmd.args([
"build", "build",
"-Z", "-Z",
"build-std=core", "build-std=core",
"--release", "--bins",
"--message-format=json", "--message-format=json",
"--release",
"--target", "--target",
&target, &target,
]); ]);

@ -25,7 +25,7 @@ pub aya_obj::btf::BtfError::InvalidTypeKind
pub aya_obj::btf::BtfError::InvalidTypeKind::kind: u32 pub aya_obj::btf::BtfError::InvalidTypeKind::kind: u32
pub aya_obj::btf::BtfError::LoadError pub aya_obj::btf::BtfError::LoadError
pub aya_obj::btf::BtfError::LoadError::io_error: std::io::error::Error pub aya_obj::btf::BtfError::LoadError::io_error: std::io::error::Error
pub aya_obj::btf::BtfError::LoadError::verifier_log: alloc::string::String pub aya_obj::btf::BtfError::LoadError::verifier_log: aya_obj::VerifierLog
pub aya_obj::btf::BtfError::MaximumTypeDepthReached pub aya_obj::btf::BtfError::MaximumTypeDepthReached
pub aya_obj::btf::BtfError::MaximumTypeDepthReached::type_id: u32 pub aya_obj::btf::BtfError::MaximumTypeDepthReached::type_id: u32
pub aya_obj::btf::BtfError::SymbolOffsetNotFound pub aya_obj::btf::BtfError::SymbolOffsetNotFound
@ -6813,5 +6813,35 @@ impl<T> core::borrow::BorrowMut<T> for aya_obj::Program where T: core::marker::S
pub fn aya_obj::Program::borrow_mut(&mut self) -> &mut T pub fn aya_obj::Program::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya_obj::Program impl<T> core::convert::From<T> for aya_obj::Program
pub fn aya_obj::Program::from(t: T) -> T pub fn aya_obj::Program::from(t: T) -> T
pub struct aya_obj::VerifierLog(_)
impl aya_obj::VerifierLog
pub fn aya_obj::VerifierLog::new(log: alloc::string::String) -> Self
impl core::fmt::Debug for aya_obj::VerifierLog
pub fn aya_obj::VerifierLog::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
impl core::fmt::Display for aya_obj::VerifierLog
pub fn aya_obj::VerifierLog::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
impl core::marker::Send for aya_obj::VerifierLog
impl core::marker::Sync for aya_obj::VerifierLog
impl core::marker::Unpin for aya_obj::VerifierLog
impl core::panic::unwind_safe::RefUnwindSafe for aya_obj::VerifierLog
impl core::panic::unwind_safe::UnwindSafe for aya_obj::VerifierLog
impl<T, U> core::convert::Into<U> for aya_obj::VerifierLog where U: core::convert::From<T>
pub fn aya_obj::VerifierLog::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya_obj::VerifierLog where U: core::convert::Into<T>
pub type aya_obj::VerifierLog::Error = core::convert::Infallible
pub fn aya_obj::VerifierLog::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya_obj::VerifierLog where U: core::convert::TryFrom<T>
pub type aya_obj::VerifierLog::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya_obj::VerifierLog::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> alloc::string::ToString for aya_obj::VerifierLog where T: core::fmt::Display + core::marker::Sized
pub fn aya_obj::VerifierLog::to_string(&self) -> alloc::string::String
impl<T> core::any::Any for aya_obj::VerifierLog where T: 'static + core::marker::Sized
pub fn aya_obj::VerifierLog::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya_obj::VerifierLog where T: core::marker::Sized
pub fn aya_obj::VerifierLog::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya_obj::VerifierLog where T: core::marker::Sized
pub fn aya_obj::VerifierLog::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya_obj::VerifierLog
pub fn aya_obj::VerifierLog::from(t: T) -> T
pub fn aya_obj::copy_instructions(data: &[u8]) -> core::result::Result<alloc::vec::Vec<aya_obj::generated::bpf_insn>, aya_obj::ParseError> pub fn aya_obj::copy_instructions(data: &[u8]) -> core::result::Result<alloc::vec::Vec<aya_obj::generated::bpf_insn>, aya_obj::ParseError>
pub fn aya_obj::parse_map_info(info: aya_obj::generated::bpf_map_info, pinned: aya_obj::maps::PinningType) -> aya_obj::maps::Map pub fn aya_obj::parse_map_info(info: aya_obj::generated::bpf_map_info, pinned: aya_obj::maps::PinningType) -> aya_obj::maps::Map

@ -5169,7 +5169,7 @@ pub aya::programs::ProgramError::InvalidName::name: alloc::string::String
pub aya::programs::ProgramError::KProbeError(aya::programs::kprobe::KProbeError) pub aya::programs::ProgramError::KProbeError(aya::programs::kprobe::KProbeError)
pub aya::programs::ProgramError::LoadError pub aya::programs::ProgramError::LoadError
pub aya::programs::ProgramError::LoadError::io_error: std::io::error::Error pub aya::programs::ProgramError::LoadError::io_error: std::io::error::Error
pub aya::programs::ProgramError::LoadError::verifier_log: alloc::string::String pub aya::programs::ProgramError::LoadError::verifier_log: aya_obj::VerifierLog
pub aya::programs::ProgramError::MapError(aya::maps::MapError) pub aya::programs::ProgramError::MapError(aya::maps::MapError)
pub aya::programs::ProgramError::NotAttached pub aya::programs::ProgramError::NotAttached
pub aya::programs::ProgramError::NotLoaded pub aya::programs::ProgramError::NotLoaded

Loading…
Cancel
Save