Skip to content

Commit cd52e71

Browse files
phip1611nicholasbishop
authored andcommitted
integration test for is_file() and is_directory()
1 parent 9978743 commit cd52e71

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed

src/proto/media/file/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,13 @@ impl FileHandle {
257257
pub fn into_type(self) -> Result<FileType> {
258258
use FileType::*;
259259

260-
if self.is_regular_file()? {
261-
unsafe { Ok(Regular(RegularFile::new(self))) }
262-
} else {
263-
unsafe { Ok(Dir(Directory::new(self))) }
264-
}
260+
self.is_regular_file().map(|is_file| {
261+
if is_file {
262+
unsafe { Regular(RegularFile::new(self)) }
263+
} else {
264+
unsafe { Dir(Directory::new(self)) }
265+
}
266+
})
265267
}
266268

267269
/// If the handle represents a directory, convert it into a
@@ -294,7 +296,8 @@ impl File for FileHandle {
294296
fn is_regular_file(&self) -> Result<bool> {
295297
let this = unsafe { self.0.as_mut().unwrap() };
296298

297-
// get_position fails with EFI_UNSUPPORTED on directories
299+
// - get_position fails with EFI_UNSUPPORTED on directories
300+
// - result is an error if the underlying file was already closed or deleted.
298301
let mut pos = 0;
299302
match (this.get_position)(this, &mut pos) {
300303
Status::SUCCESS => Ok(true),

uefi-test-runner/src/proto/media/known_disk.rs

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ fn test_existing_dir(directory: &mut Directory) {
1515
info!("Testing existing directory");
1616

1717
let input_dir_path = cstr16!("test_dir");
18-
let mut dir = directory
18+
let dir = directory
1919
.open(input_dir_path, FileMode::Read, FileAttribute::empty())
20-
.expect("failed to open directory")
21-
.into_directory()
22-
.expect("not a directory");
20+
.expect("failed to open directory");
21+
22+
assert!(dir.is_directory().unwrap());
23+
24+
let mut dir = dir.into_directory().expect("not a directory");
2325

2426
// Collect and validate the directory entries.
2527
let mut entry_names = vec![];
@@ -129,15 +131,17 @@ fn test_create_file(directory: &mut Directory) {
129131
info!("Testing file creation");
130132

131133
// Create a new file.
132-
let mut file = directory
134+
let file = directory
133135
.open(
134136
cstr16!("new_test_file.txt"),
135137
FileMode::CreateReadWrite,
136138
FileAttribute::empty(),
137139
)
138-
.expect("failed to create file")
139-
.into_regular_file()
140-
.expect("not a regular file");
140+
.expect("failed to create file");
141+
142+
assert!(file.is_regular_file().unwrap());
143+
144+
let mut file = file.into_regular_file().expect("not a regular file");
141145
file.write(b"test output data").unwrap();
142146
}
143147

@@ -261,10 +265,21 @@ pub fn test_known_disk(bt: &BootServices) {
261265
let mut sfs = bt
262266
.open_protocol_exclusive::<SimpleFileSystem>(handle)
263267
.expect("Failed to get simple file system");
264-
let mut directory = sfs.open_volume().unwrap();
268+
let mut root_directory = sfs.open_volume().unwrap();
269+
270+
// test is_directory() and is_regular_file() from the File trait which is the
271+
// base for into_type() used later in the test.
272+
{
273+
// because File is "Sized", we cannot cast it to &dyn
274+
fn test_is_directory(file: &impl File) {
275+
assert_eq!(Ok(true), file.is_directory());
276+
assert_eq!(Ok(false), file.is_regular_file());
277+
}
278+
test_is_directory(&root_directory);
279+
}
265280

266281
let mut fs_info_buf = vec![0; 128];
267-
let fs_info = directory
282+
let fs_info = root_directory
268283
.get_info::<FileSystemInfo>(&mut fs_info_buf)
269284
.unwrap();
270285

@@ -281,13 +296,13 @@ pub fn test_known_disk(bt: &BootServices) {
281296
assert_eq!(fs_info.block_size(), 512);
282297

283298
// Check that `get_boxed_info` returns the same info.
284-
let boxed_fs_info = directory.get_boxed_info::<FileSystemInfo>().unwrap();
299+
let boxed_fs_info = root_directory.get_boxed_info::<FileSystemInfo>().unwrap();
285300
assert_eq!(*fs_info, *boxed_fs_info);
286301

287-
test_existing_dir(&mut directory);
288-
test_delete_warning(&mut directory);
289-
test_existing_file(&mut directory);
290-
test_create_file(&mut directory);
302+
test_existing_dir(&mut root_directory);
303+
test_delete_warning(&mut root_directory);
304+
test_existing_file(&mut root_directory);
305+
test_create_file(&mut root_directory);
291306
}
292307

293308
test_raw_disk_io(handle, bt);

0 commit comments

Comments
 (0)