@@ -813,6 +813,56 @@ fn test_skeleton_builder_basic() {
813813 assert ! ( status. success( ) ) ;
814814}
815815
816+ #[ test]
817+ fn test_skeleton_builder_custom_opts ( ) {
818+ let bpf_c = indoc ! { r#"
819+ #include "vmlinux.h"
820+ #include <bpf/bpf_helpers.h>
821+
822+ struct {
823+ __uint(type, BPF_MAP_TYPE_HASH);
824+ __type(key, u32);
825+ __type(value, u32);
826+ __uint(max_entries, 1);
827+ __uint(pinning, LIBBPF_PIN_BY_NAME);
828+ } auto_pin_map SEC(".maps");
829+ "# }
830+ . to_string ( ) ;
831+
832+ let rust = indoc ! { r#"
833+ #![warn(elided_lifetimes_in_paths)]
834+ mod bpf;
835+ use std::mem::MaybeUninit;
836+ use bpf::*;
837+ use libbpf_rs::skel::OpenSkel as _;
838+ use libbpf_rs::skel::SkelBuilder;
839+
840+ fn main() {
841+ let mut builder = ProgSkelBuilder::default();
842+ builder
843+ .obj_builder
844+ .pin_root_path("/sys/fs/bpf/test_skel_builder_opts_namespace")
845+ .expect("root_pin_path failed");
846+ let mut open_object = MaybeUninit::uninit();
847+ let skel = builder
848+ .open(&mut open_object)
849+ .expect("failed to open skel")
850+ .load()
851+ .expect("failed to load object");
852+ let expected_path = "/sys/fs/bpf/test_skel_builder_opts_namespace/auto_pin_map";
853+ let auto_pin_map = &skel
854+ .maps
855+ .auto_pin_map;
856+ assert!(auto_pin_map.is_pinned());
857+
858+ let pin_path = auto_pin_map.get_pin_path().expect("get map pin path failed");
859+ assert_eq!(expected_path, pin_path.to_str().unwrap());
860+ }
861+ "# }
862+ . to_string ( ) ;
863+ run_rust_project_from_bpf_c ( & bpf_c, & rust) ;
864+ }
865+
816866#[ test]
817867fn test_skeleton_builder_clang_opts ( ) {
818868 let ( _dir, proj_dir, _cargo_toml) = setup_temp_project ( ) ;
0 commit comments