From aa3ce9383da78a83b64160d5c64ecd077d0b36ef Mon Sep 17 00:00:00 2001
From: dzwdz
Date: Fri, 27 Aug 2021 19:23:10 +0200
Subject: basic vfs_mount_resolve tests

---
 src/kernel/tests/vfs.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

(limited to 'src/kernel')

diff --git a/src/kernel/tests/vfs.c b/src/kernel/tests/vfs.c
index bc95541..cfbf86b 100644
--- a/src/kernel/tests/vfs.c
+++ b/src/kernel/tests/vfs.c
@@ -1,5 +1,7 @@
+#include <kernel/mem.h>
 #include <kernel/tests/base.h>
 #include <kernel/util.h>
+#include <kernel/vfs/mount.h>
 #include <kernel/vfs/path.h>
 
 TEST(path_simplify) {
@@ -57,6 +59,41 @@ TEST(path_simplify) {
 #undef TEST_WRAPPER
 }
 
+TEST(vfs_mount_resolve) {
+	struct vfs_mount *mount = NULL;
+
+#define ADD_MOUNT(path) do { \
+		struct vfs_mount *mount2 = kmalloc(sizeof(struct vfs_mount)); \
+		mount2->prefix = path; \
+		mount2->prefix_len = sizeof(path) - 1; \
+		mount2->prev = mount; \
+		mount = mount2; \
+	} while (0)
+
+	ADD_MOUNT("/");
+	ADD_MOUNT("/dir/shadowed");
+	ADD_MOUNT("/dir");
+
+#undef ADD_MOUNT
+
+#define TEST_WRAPPER(path, expected) do { \
+		struct vfs_mount *mount2 = vfs_mount_resolve(mount, path, sizeof(path) - 1); \
+		TEST_COND((mount2->prefix_len == sizeof(expected) - 1) \
+		       && (0 == memcmp(mount2->prefix, expected, mount2->prefix_len))); \
+	} while (0)
+
+	TEST_WRAPPER("/",              "/");
+	TEST_WRAPPER("/test",          "/");
+	TEST_WRAPPER("/dir",           "/dir");
+	TEST_WRAPPER("/dirry",         "/");
+	TEST_WRAPPER("/dir/",          "/dir");
+	TEST_WRAPPER("/dir/shadowed",  "/dir");
+	TEST_WRAPPER("/dir/shadowed/", "/dir");
+
+#undef TEST_WRAPPER
+}
+
 void tests_vfs(void) {
 	TEST_RUN(path_simplify);
+	TEST_RUN(vfs_mount_resolve);
 }
-- 
cgit v1.2.3