MCPcopy Create free account
hub / github.com/bytecodealliance/rustix / test_raw_dir

Function test_raw_dir

tests/fs/readdir.rs:56–111  ·  view source on GitHub ↗
(buf: &mut [MaybeUninit<u8>])

Source from the content-addressed store, hash-verified

54
55#[cfg(linux_kernel)]
56fn test_raw_dir(buf: &mut [MaybeUninit<u8>]) {
57 use std::collections::HashSet;
58 use std::io::{Seek as _, SeekFrom};
59
60 use rustix::fd::AsFd;
61 use rustix::fs::RawDir;
62
63 fn read_raw_entries<Fd: AsFd>(dir: &mut RawDir<'_, Fd>) -> HashSet<String> {
64 let mut out = HashSet::new();
65 while let Some(entry) = dir.next() {
66 let entry = entry.expect("non-error entry");
67 let name = entry
68 .file_name()
69 .to_str()
70 .expect("utf8 filename")
71 .to_owned();
72 if name != "." && name != ".." {
73 out.insert(name);
74 }
75 }
76 out
77 }
78
79 let tmpdir = tempfile::tempdir().expect("construct tempdir");
80 let mut dirfd = File::open(tmpdir.path()).expect("open tempdir as file");
81 let mut dir = RawDir::new(dirfd.try_clone().unwrap(), buf);
82
83 let entries = read_raw_entries(&mut dir);
84 assert_eq!(entries.len(), 0, "no files in directory");
85
86 let _f1 = File::create(tmpdir.path().join("file1")).expect("create file1");
87
88 dirfd.seek(SeekFrom::Start(0)).unwrap();
89 let entries = read_raw_entries(&mut dir);
90 assert!(
91 entries.contains("file1"),
92 "directory contains `file1`: {:?}",
93 entries
94 );
95 assert_eq!(entries.len(), 1);
96
97 let _f2 = File::create(tmpdir.path().join("file2")).expect("create file1");
98 dirfd.seek(SeekFrom::Start(0)).unwrap();
99 let entries = read_raw_entries(&mut dir);
100 assert!(
101 entries.contains("file1"),
102 "directory contains `file1`: {:?}",
103 entries
104 );
105 assert!(
106 entries.contains("file2"),
107 "directory contains `file2`: {:?}",
108 entries
109 );
110 assert_eq!(entries.len(), 2);
111}
112
113#[test]

Callers 3

raw_dir_entries_heapFunction · 0.85
raw_dir_entries_stackFunction · 0.85

Calls 6

read_raw_entriesFunction · 0.85
try_cloneMethod · 0.80
openFunction · 0.50
createFunction · 0.50
pathMethod · 0.45
seekMethod · 0.45

Tested by

no test coverage detected