blob: 0b4ba7dc34c0991f94b878fcb645470f3ed773cb [file] [log] [blame]
From d7a5ccfa9ef25f476deb4e5dac58d164e3c4e0fb Mon Sep 17 00:00:00 2001
From: Martin Geisler <mgeisler@google.com>
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 <mgeisler@google.com>
---
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<T>() -> Result<T> {
#[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<u8> = 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]