From 5d61fb9bbc4b4971963345159a976d38d1ec5a92 Mon Sep 17 00:00:00 2001 From: Jonathan Klimt Date: Tue, 4 Feb 2025 14:02:27 +0100 Subject: [PATCH] Added tests for removing files --- tests/fs-test.rs | 46 ++++++++++++++++++++++- tests/test-kernels/src/bin/remove_file.rs | 10 +++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 tests/test-kernels/src/bin/remove_file.rs diff --git a/tests/fs-test.rs b/tests/fs-test.rs index 94d1ed5a..cedf68c5 100644 --- a/tests/fs-test.rs +++ b/tests/fs-test.rs @@ -1,9 +1,12 @@ mod common; -use std::{fs::read_to_string, path::PathBuf}; +use std::{ + fs::{read_to_string, File}, + path::PathBuf, +}; use byte_unit::{Byte, Unit}; -use common::{build_hermit_bin, check_result, remove_file_if_exists}; +use common::{build_hermit_bin, check_result, remove_file_if_exists, run_simple_vm}; use uhyvelib::{ params::{Output, Params}, vm::UhyveVm, @@ -67,3 +70,42 @@ fn uhyvefilemap_test() { check_result(&res); verify_file_equals(&output_path, "Hello, world!"); } + +#[test] +fn remove_file_test() { + env_logger::try_init().ok(); + let output_path = PathBuf::from("/tmp/file_to_remove.txt"); + remove_file_if_exists(&output_path); + File::create(&output_path).unwrap(); + + let bin_path = build_hermit_bin("remove_file"); + + let params = Params { + cpu_count: 2.try_into().unwrap(), + memory_size: Byte::from_u64_with_unit(64, Unit::MiB) + .unwrap() + .try_into() + .unwrap(), + file_mapping: vec!["/tmp/file_to_remove.txt:/root/file_to_remove.txt".to_string()], + output: Output::Buffer, + stats: true, + ..Default::default() + }; + + assert!(output_path.exists()); + + let vm = UhyveVm::new(bin_path.clone(), params.clone()).unwrap(); + let res = vm.run(None); + check_result(&res); + assert!(!output_path.exists()); +} + +#[test] +fn remove_non_present_file_test() { + // kernel tries to open a non-present file, so uhyve will reject the hypercall and the kernel + // will panic. + env_logger::try_init().ok(); + let bin_path = build_hermit_bin("remove_file"); + let res = run_simple_vm(bin_path); + assert_ne!(res.code, 0); +} diff --git a/tests/test-kernels/src/bin/remove_file.rs b/tests/test-kernels/src/bin/remove_file.rs new file mode 100644 index 00000000..77396ae5 --- /dev/null +++ b/tests/test-kernels/src/bin/remove_file.rs @@ -0,0 +1,10 @@ +use std::fs; + +#[cfg(target_os = "hermit")] +use hermit as _; + +fn main() { + println!("Hello from remove_file!"); + + fs::remove_file("/root/file_to_remove.txt").unwrap(); +}