From aedc586e148a74e779c463e182e0482069d2cd29 Mon Sep 17 00:00:00 2001 From: xuejun-xj Date: Wed, 5 Jul 2023 16:56:18 +0800 Subject: [PATCH 1/6] dragonball: Makefile: add coverage target Add "coverage" target to compute code coverage for dragonball. Fixes: #7284 Signed-off-by: xuejun-xj --- src/dragonball/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/dragonball/Makefile b/src/dragonball/Makefile index ab8e5b6947..68ee3bd46d 100644 --- a/src/dragonball/Makefile +++ b/src/dragonball/Makefile @@ -39,12 +39,15 @@ clean: test: ifdef SUPPORT_VIRTUALIZATION - cargo test --all-features --target $(TRIPLE) -- --nocapture + RUST_BACKTRACE=1 cargo test --all-features --target $(TRIPLE) -- --nocapture --test-threads=1 else @echo "INFO: skip testing dragonball, it need virtualization support." exit 0 endif +coverage: + RUST_BACKTRACE=1 cargo llvm-cov --all-features --target $(TRIPLE) -- --nocapture --test-threads=1 + endif # ifeq ($(ARCH), s390x) .DEFAULT_GOAL := default From 883b4db380aad82b43b64daa03d5a31cc77ef190 Mon Sep 17 00:00:00 2001 From: xuejun-xj Date: Wed, 5 Jul 2023 17:31:29 +0800 Subject: [PATCH 2/6] dragonball: fix cargo test on aarch64 1. Update memory end assert because address space layout differs between x86 and arm. 2. Set guest_addr for aarch64 in test_handler_insert_region case. Fixes: #7284 TODO: #7290 Signed-off-by: xuejun-xj --- src/dragonball/src/device_manager/mod.rs | 4 ++++ src/dragonball/src/vm/mod.rs | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/dragonball/src/device_manager/mod.rs b/src/dragonball/src/device_manager/mod.rs index b007270c94..fefdf4f77c 100644 --- a/src/dragonball/src/device_manager/mod.rs +++ b/src/dragonball/src/device_manager/mod.rs @@ -1240,7 +1240,11 @@ mod tests { Some(vm.vm_config().clone()), vm.shared_info().clone(), ); + #[cfg(target_arch = "x86_64")] let guest_addr = GuestAddress(0x200000000000); + // TODO: #7290 - https://github.com/kata-containers/kata-containers/issues/7290 + #[cfg(target_arch = "aarch64")] + let guest_addr = GuestAddress(0xF800000000); let cache_len = 1024 * 1024 * 1024; let mmap_region = MmapRegion::build( diff --git a/src/dragonball/src/vm/mod.rs b/src/dragonball/src/vm/mod.rs index 9af046c43b..48a5a5e897 100644 --- a/src/dragonball/src/vm/mod.rs +++ b/src/dragonball/src/vm/mod.rs @@ -873,6 +873,8 @@ impl Vm { #[cfg(test)] pub mod tests { + #[cfg(target_arch = "aarch64")] + use dbs_boot::layout::GUEST_MEM_START; #[cfg(target_arch = "x86_64")] use kvm_ioctls::VcpuExit; use linux_loader::cmdline::Cmdline; @@ -936,7 +938,13 @@ pub mod tests { let vm_memory = vm.address_space.vm_memory().unwrap(); assert_eq!(vm_memory.num_regions(), 1); + #[cfg(target_arch = "x86_64")] assert_eq!(vm_memory.last_addr(), GuestAddress(0xffffff)); + #[cfg(target_arch = "aarch64")] + assert_eq!( + vm_memory.last_addr(), + GuestAddress(GUEST_MEM_START + 0xffffff) + ); // Reconfigure an already configured vm will be ignored and just return OK. let vm_config = VmConfigInfo { @@ -959,9 +967,18 @@ pub mod tests { assert!(vm.init_guest_memory().is_ok()); let vm_memory = vm.address_space.vm_memory().unwrap(); assert_eq!(vm_memory.num_regions(), 1); + #[cfg(target_arch = "x86_64")] assert_eq!(vm_memory.last_addr(), GuestAddress(0xffffff)); + #[cfg(target_arch = "aarch64")] + assert_eq!( + vm_memory.last_addr(), + GuestAddress(GUEST_MEM_START + 0xffffff) + ); + #[cfg(target_arch = "x86_64")] let obj_addr = GuestAddress(0xf0); + #[cfg(target_arch = "aarch64")] + let obj_addr = GuestAddress(GUEST_MEM_START + 0xf0); vm_memory.write_obj(67u8, obj_addr).unwrap(); let read_val: u8 = vm_memory.read_obj(obj_addr).unwrap(); assert_eq!(read_val, 67u8); @@ -1001,7 +1018,13 @@ pub mod tests { let vm_memory = vm.address_space.vm_memory().unwrap(); assert_eq!(vm_memory.num_regions(), 1); + #[cfg(target_arch = "x86_64")] assert_eq!(vm_memory.last_addr(), GuestAddress(0xffffff)); + #[cfg(target_arch = "aarch64")] + assert_eq!( + vm_memory.last_addr(), + GuestAddress(GUEST_MEM_START + 0xffffff) + ); let kernel_file = TempFile::new().unwrap(); let cmd_line = Cmdline::new(64); From a88212e2c5fb76f063a7110091c4af7379653174 Mon Sep 17 00:00:00 2001 From: xuejun-xj Date: Wed, 5 Jul 2023 19:06:17 +0800 Subject: [PATCH 3/6] utils.mk: update BUILD_TYPE argument Enable to dynamically set BUILD_TYPE argument. Fixes: #7284 Signed-off-by: xuejun-xj --- utils.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.mk b/utils.mk index f382990dc2..3c809cf544 100644 --- a/utils.mk +++ b/utils.mk @@ -130,7 +130,7 @@ endef ##VAR BUILD_TYPE=release|debug type of rust build -BUILD_TYPE = release +BUILD_TYPE ?= release ##VAR ARCH=arch target to build (format: uname -m) HOST_ARCH = $(shell uname -m) From c4771d9e89c5a0270a5312d6c3dd9f741a07a4fb Mon Sep 17 00:00:00 2001 From: xuejun-xj Date: Mon, 10 Jul 2023 14:56:32 +0800 Subject: [PATCH 4/6] agent: Makefile: enable set SECCOMP dynamically Change ":=" to "?:". Fixes: #7284 Signed-off-by: xuejun-xj --- src/agent/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/agent/Makefile b/src/agent/Makefile index 69423eddae..ba065b4d04 100644 --- a/src/agent/Makefile +++ b/src/agent/Makefile @@ -26,7 +26,7 @@ export VERSION_COMMIT := $(if $(COMMIT),$(VERSION)-$(COMMIT),$(VERSION)) EXTRA_RUSTFEATURES := ##VAR SECCOMP=yes|no define if agent enables seccomp feature -SECCOMP := yes +SECCOMP ?= yes # Enable seccomp feature of rust build ifeq ($(SECCOMP),yes) From 46b81dd7d22f7f7e0e317565f15a4b688ed3a83d Mon Sep 17 00:00:00 2001 From: xuejun-xj Date: Mon, 10 Jul 2023 15:53:41 +0800 Subject: [PATCH 5/6] agent: clippy: fix cargo clippy warnings Replace "if let Ok(_) = ..." with ".is_ok()" method. Fixes: #7284 Signed-off-by: xuejun-xj --- src/agent/src/linux_abi.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/agent/src/linux_abi.rs b/src/agent/src/linux_abi.rs index de131faf02..b87da3ceb6 100644 --- a/src/agent/src/linux_abi.rs +++ b/src/agent/src/linux_abi.rs @@ -33,7 +33,7 @@ pub fn create_pci_root_bus_path() -> String { // check if there is pci bus path for acpi acpi_sysfs_dir.push_str(&acpi_root_bus_path); - if let Ok(_) = fs::metadata(&acpi_sysfs_dir) { + if fs::metadata(&acpi_sysfs_dir).is_ok() { return acpi_root_bus_path; } From a65291ad72e441d45c5d48bcce766170a3031e51 Mon Sep 17 00:00:00 2001 From: xuejun-xj Date: Tue, 11 Jul 2023 11:24:38 +0800 Subject: [PATCH 6/6] agent: rustjail: update test_mknod_dev When running cargo test in container, test_mknod_dev may fail sometimes because of "Operation not permitted". Change the device path to "/dev/fifo-test" to avoid this case. Fixes: #7284 Signed-off-by: xuejun-xj --- src/agent/rustjail/src/mount.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/agent/rustjail/src/mount.rs b/src/agent/rustjail/src/mount.rs index d9ba15041d..b822736dcf 100644 --- a/src/agent/rustjail/src/mount.rs +++ b/src/agent/rustjail/src/mount.rs @@ -1118,6 +1118,7 @@ mod tests { use std::fs::create_dir; use std::fs::create_dir_all; use std::fs::remove_dir_all; + use std::fs::remove_file; use std::io; use std::os::unix::fs; use std::os::unix::io::AsRawFd; @@ -1333,14 +1334,9 @@ mod tests { fn test_mknod_dev() { skip_if_not_root!(); - let tempdir = tempdir().unwrap(); - - let olddir = unistd::getcwd().unwrap(); - defer!(let _ = unistd::chdir(&olddir);); - let _ = unistd::chdir(tempdir.path()); - + let path = "/dev/fifo-test"; let dev = oci::LinuxDevice { - path: "/fifo".to_string(), + path: path.to_string(), r#type: "c".to_string(), major: 0, minor: 0, @@ -1348,13 +1344,16 @@ mod tests { uid: Some(unistd::getuid().as_raw()), gid: Some(unistd::getgid().as_raw()), }; - let path = Path::new("fifo"); - let ret = mknod_dev(&dev, path); + let ret = mknod_dev(&dev, Path::new(path)); assert!(ret.is_ok(), "Should pass. Got: {:?}", ret); let ret = stat::stat(path); assert!(ret.is_ok(), "Should pass. Got: {:?}", ret); + + // clear test device node + let ret = remove_file(path); + assert!(ret.is_ok(), "Should pass, Got: {:?}", ret); } #[test]