Skip to content

Commit

Permalink
Rollup merge of rust-lang#103258 - SUPERCILEX:miri, r=RalfJung
Browse files Browse the repository at this point in the history
Make miri read_dir test a little more robust

r? `@RalfJung`
  • Loading branch information
matthiaskrgr authored Oct 19, 2022
2 parents 952c156 + b0f6935 commit 652417e
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions src/tools/miri/tests/pass-dep/shims/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
#![feature(io_error_more)]
#![feature(io_error_uncategorized)]

use std::ffi::CString;
use std::collections::HashMap;
use std::ffi::{CString, OsString};
use std::fs::{
create_dir, read_dir, read_link, remove_dir, remove_dir_all, remove_file, rename, File,
OpenOptions,
Expand Down Expand Up @@ -394,29 +395,34 @@ fn test_directory() {
// Creating a directory when it already exists should fail.
assert_eq!(ErrorKind::AlreadyExists, create_dir(&dir_path).unwrap_err().kind());

// Create some files inside the directory
// Create some files and dirs inside the directory
let path_1 = dir_path.join("test_file_1");
drop(File::create(&path_1).unwrap());
let path_2 = dir_path.join("test_file_2");
drop(File::create(&path_2).unwrap());
// Test that the files are present inside the directory
let dir_iter = read_dir(&dir_path).unwrap();
let mut file_names = dir_iter.map(|e| e.unwrap().file_name()).collect::<Vec<_>>();
file_names.sort_unstable();
assert_eq!(file_names, vec!["test_file_1", "test_file_2"]);
let dir_1 = dir_path.join("test_dir_1");
create_dir(&dir_1).unwrap();
// Test that read_dir metadata calls succeed
assert_eq!(
&[true, true],
&*read_dir(&dir_path)
HashMap::from([
(OsString::from("test_file_1"), true),
(OsString::from("test_file_2"), true),
(OsString::from("test_dir_1"), false)
]),
read_dir(&dir_path)
.unwrap()
.map(|e| e.unwrap().metadata().unwrap().is_file())
.collect::<Vec<_>>()
.map(|e| {
let e = e.unwrap();
(e.file_name(), e.metadata().unwrap().is_file())
})
.collect::<HashMap<_, _>>()
);
// Deleting the directory should fail, since it is not empty.
assert_eq!(ErrorKind::DirectoryNotEmpty, remove_dir(&dir_path).unwrap_err().kind());
// Clean up the files in the directory
remove_file(&path_1).unwrap();
remove_file(&path_2).unwrap();
remove_dir(&dir_1).unwrap();
// Now there should be nothing left in the directory.
let dir_iter = read_dir(&dir_path).unwrap();
let file_names = dir_iter.map(|e| e.unwrap().file_name()).collect::<Vec<_>>();
Expand Down

0 comments on commit 652417e

Please sign in to comment.