From d7a5ccfa9ef25f476deb4e5dac58d164e3c4e0fb Mon Sep 17 00:00:00 2001 From: Martin Geisler Date: Wed, 17 Apr 2024 13:02:31 +0200 Subject: [PATCH] fix: use random temporary directory in test While trying to enable the unit tests in Android (see https://r.android.com/3044134), I noticed test failures saying: thread 'errno::tests::test_errno' panicked at external/rust/crates/vmm-sys-util/src/errno.rs:156:14: called `Result::unwrap()` on an `Err` value: Os { code: 21, kind: IsADirectory, message: "Is a directory" } I believe this is because of the hard-coded name for the temporary file in the `test_errno` unit test. Using a randomized path should fix this. Signed-off-by: Martin Geisler --- src/errno.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/errno.rs b/src/errno.rs index 27b9bcf..3478b7c 100644 --- a/src/errno.rs +++ b/src/errno.rs @@ -132,7 +132,7 @@ pub fn errno_result() -> Result { #[cfg(test)] mod tests { use super::*; - use std::env::temp_dir; + use crate::tempfile::TempFile; use std::error::Error as _; use std::fs::OpenOptions; use std::io::{self, Read}; @@ -145,14 +145,16 @@ mod tests { let expected_errno = libc::EIO; // try to read from a file without read permissions - let mut path = temp_dir(); - path.push("test"); + let temp_file = TempFile::new().unwrap(); + let path = temp_file.as_path().to_owned(); + // Drop temp_file so we can cleanly reuse path below. + std::mem::drop(temp_file); let mut file = OpenOptions::new() .read(false) .write(true) .create(true) .truncate(true) - .open(path) + .open(&path) .unwrap(); let mut buf: Vec = Vec::new(); assert!(file.read_to_end(&mut buf).is_err()); @@ -174,6 +176,8 @@ mod tests { let last_err: io::Error = last_err.into(); // Test creating a `std::io::Error` from an `Error` assert_eq!(io::Error::last_os_error().kind(), last_err.kind()); + + assert!(std::fs::remove_file(&path).is_ok()); } #[test]