aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2021-10-09 20:24:59 +0200
committerMel <einebeere@gmail.com>2021-10-09 20:24:59 +0200
commitbf87336cbd5225ba9468d840de0c61f764cc23c4 (patch)
tree4c400784fd01467e71aca95ed1af33700d174339
parent37636d7a180551e2040a20395d767ce89267090c (diff)
downloadka-bf87336cbd5225ba9468d840de0c61f764cc23c4.tar.zst
ka-bf87336cbd5225ba9468d840de0c61f764cc23c4.zip
Test and fix mock directory traversal.
-rw-r--r--src/filesystem.rs30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/filesystem.rs b/src/filesystem.rs
index f8d498c..9ba2bf2 100644
--- a/src/filesystem.rs
+++ b/src/filesystem.rs
@@ -528,8 +528,8 @@ pub mod mock {
let directory_entries = self
.entries
.iter()
- .filter(|&(path, _)| {
- if let Some(parent) = path.parent() {
+ .filter(|&(p, _)| {
+ if let Some(parent) = p.parent() {
parent == path
} else {
false
@@ -649,6 +649,32 @@ pub mod mock {
]))
}
+ #[test]
+ fn directory_traversal() {
+ let mock = FsMock::new();
+
+ mock.create_file(Path::new("./folder/file")).unwrap();
+ mock.create_file(Path::new("./folder/another_file")).unwrap();
+ mock.create_file(Path::new("./folder/nested/file_too_deep")).unwrap();
+
+ let entries = mock.read_directory(Path::new("./folder")).unwrap();
+
+ // Diffing is easier when we do it from FsState, so we use it here for the test,
+ // even though it isn't an actual filesystem state, which is sort of hacky.
+ let expected_read_files = FsState::new(vec![
+ EntryMock::file("./folder/file", &vec![]),
+ EntryMock::file("./folder/another_file", &vec![]),
+ EntryMock::dir("./folder/nested"),
+ ]);
+
+ let actual_read_files = FsState::new(entries);
+
+ let diff = expected_read_files.diff(&actual_read_files);
+ if !diff.is_empty() {
+ panic!("{}", diff.join("\n"));
+ }
+ }
+
// TODO: Add more test coverage for FsMock, as it has to be as robust as possible
// to ensure that tests depending on it are sane.
}