summaryrefslogtreecommitdiff
path: root/src/user/app/tests/kernel/path.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/app/tests/kernel/path.c')
-rw-r--r--src/user/app/tests/kernel/path.c108
1 files changed, 0 insertions, 108 deletions
diff --git a/src/user/app/tests/kernel/path.c b/src/user/app/tests/kernel/path.c
deleted file mode 100644
index 5a22c36..0000000
--- a/src/user/app/tests/kernel/path.c
+++ /dev/null
@@ -1,108 +0,0 @@
-#include "../tests.h"
-#include <camellia/path.h>
-#include <string.h>
-#include <camellia/compat.h>
-#include <camellia/fs/misc.h>
-
-static void test_path_simplify(void) {
- const char *testcases[][2] = {
- {"/", "/"},
- {"/.", "/"},
- {"//", "/"},
- {"/asdf", "/asdf"},
- {"/asdf/", "/asdf/"},
- {"/asdf//", "/asdf/"},
- {"/asdf/./", "/asdf/"},
- {"/a/./b", "/a/b"},
- {"/a/./b/", "/a/b/"},
-
- // some slightly less easy cases
- {"/asdf/..", "/"},
- {"/asdf/../", "/"},
- {"/asdf/.", "/asdf/"},
- {"/asdf//.", "/asdf/"},
-
- {"/foo/bar/..", "/foo/"},
- {"/foo/bar/../baz", "/foo/baz"},
- {"/foo/bar/../baz/", "/foo/baz/"},
- {"/foo/bar/xyz/..", "/foo/bar/"},
- {"/foo/bar/xyz/../", "/foo/bar/"},
-
- // going under the root or close to it
- {"/..", NULL},
- {"/../asdf", NULL},
- {"/../asdf/", NULL},
- {"/./a/../..", NULL},
- {"/a/a/../..", "/"},
- {"/a/../a/..", "/"},
- {"/a/../../a", NULL},
- {"/../a/../a", NULL},
- {"/../../a/a", NULL},
- {"/////../..", NULL},
- {"//a//../..", NULL},
-
- // relative paths aren't allowed
- {"relative", NULL},
- {"some/stuff", NULL},
- {"./stuff", NULL},
- {"../stuff", NULL},
- {"", NULL},
- };
-
- char buf[256];
- for (size_t i = 0; i < sizeof(testcases) / sizeof(testcases[0]); i++) {
- const char *input = testcases[i][0];
- const char *expected = testcases[i][1];
- int len = path_simplify(input, buf, strlen(input));
- if (expected == NULL) {
- test(len == 0);
- } else {
- // TODO an argument for printing info on test failure
- test(len == (int)strlen(expected) && !memcmp(expected, buf, len));
- }
- }
-}
-
-static void mount_resolve_drv(const char *path) {
- if (mount_at(path) != 0) return;
-
- struct ufs_request res;
- while (!c0_fs_wait(NULL, 0, &res)) {
- // TODO does the first argument of c0_fs_respond need to be non-const?
- c0_fs_respond((void*)path, strlen(path), 0);
- }
- exit(1);
-}
-
-static void test_mount_resolve(void) {
- const char *testcases[][2] = {
- {"/", "/"},
- {"/test", "/"},
- {"/dir", "/dir"},
- {"/dir/..", "/"},
- {"/dir/../dir", "/dir"},
- {"/dirry", "/"},
- {"/dir/", "/dir"},
- {"/dir/shadowed", "/dir"},
- {"/dir/shadowed/", "/dir"},
- };
- mount_resolve_drv("/");
- mount_resolve_drv("/dir/shadowed");
- mount_resolve_drv("/dir");
-
- char buf[16];
- for (size_t i = 0; i < sizeof(testcases) / sizeof(testcases[0]); i++) {
- const char *input = testcases[i][0];
- const char *expected = testcases[i][1];
- hid_t h = _sys_open(input, strlen(input), 0);
- test(h >= 0);
- int len = _sys_read(h, buf, sizeof buf, 0);
- test(len == (int)strlen(expected) && !memcmp(expected, buf, len));
- _sys_close(h);
- }
-}
-
-void r_k_path(void) {
- run_test(test_path_simplify);
- run_test(test_mount_resolve);
-}