aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi/filesystem.tests.cpp
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-05-05 23:25:47 +0200
committerMarcel Braun <marcel.braun@ost.ch>2026-05-05 23:25:47 +0200
commitea450f4ed742a37b40a4e1dcaf8d17328d635472 (patch)
treecd9511ff9145dd993f257c2fcca4d8d06e857625 /kernel/kapi/filesystem.tests.cpp
parent3082340fa8ab3c7c0da5d2f9d321d2367d399b20 (diff)
parent4522374b902ee9a30c83c2ec23880522e80febea (diff)
downloadkernel-ea450f4ed742a37b40a4e1dcaf8d17328d635472.tar.xz
kernel-ea450f4ed742a37b40a4e1dcaf8d17328d635472.zip
Merge branch 'symbolic-links' into 'develop-BA-FS26'
Symbolic links See merge request teachos/kernel!29
Diffstat (limited to 'kernel/kapi/filesystem.tests.cpp')
-rw-r--r--kernel/kapi/filesystem.tests.cpp55
1 files changed, 52 insertions, 3 deletions
diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp
index baa8613..1d1f8ee 100644
--- a/kernel/kapi/filesystem.tests.cpp
+++ b/kernel/kapi/filesystem.tests.cpp
@@ -16,7 +16,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap
auto const image_path_1 = std::filesystem::path{KERNEL_TEST_ASSETS_DIR} / "ext2_1KB_fs.img";
auto const image_path_2 = std::filesystem::path{KERNEL_TEST_ASSETS_DIR} / "ext2_2KB_fs.img";
- GIVEN("a real image file")
+ GIVEN("Two real image files")
{
REQUIRE(std::filesystem::exists(image_path_1));
REQUIRE(std::filesystem::exists(image_path_2));
@@ -38,6 +38,53 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap
REQUIRE(kapi::filesystem::close(fd) == 0);
}
+ THEN("files can be opened through absolute symbolic link, read and closed again")
+ {
+ auto fd = kapi::filesystem::open("/symlinks/information_directory_absolute/info_1.txt");
+ REQUIRE(fd >= 0);
+
+ auto buffer = std::vector<std::byte>(6);
+ auto bytes_read = kapi::filesystem::read(fd, buffer.data(), buffer.size());
+ REQUIRE(bytes_read >= 0);
+
+ std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), static_cast<size_t>(bytes_read)};
+ REQUIRE(buffer_as_str == "info_1");
+
+ REQUIRE(kapi::filesystem::close(fd) == 0);
+ }
+
+ THEN("files can be opened through relative symbolic link, read and closed again")
+ {
+ auto fd = kapi::filesystem::open("/symlinks/information_directory_relative/info_1.txt");
+ REQUIRE(fd >= 0);
+
+ auto buffer = std::vector<std::byte>(6);
+ auto bytes_read = kapi::filesystem::read(fd, buffer.data(), buffer.size());
+ REQUIRE(bytes_read >= 0);
+
+ std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), static_cast<size_t>(bytes_read)};
+ REQUIRE(buffer_as_str == "info_1");
+
+ REQUIRE(kapi::filesystem::close(fd) == 0);
+ }
+
+ THEN("files can be opened through relative symbolic link over multiple mount points, read and closed again")
+ {
+ kapi::filesystem::mount("/archiv/2024.img", "/information");
+
+ auto fd = kapi::filesystem::open("/information/symlinks/traverse_back_twice/information/sheep_1.txt");
+ REQUIRE(fd >= 0);
+
+ auto buffer = std::vector<std::byte>(7);
+ auto bytes_read = kapi::filesystem::read(fd, buffer.data(), buffer.size());
+ REQUIRE(bytes_read >= 0);
+
+ std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), static_cast<size_t>(bytes_read)};
+ REQUIRE(buffer_as_str == "sheep_1");
+
+ REQUIRE(kapi::filesystem::close(fd) == 0);
+ }
+
THEN("a filesystem can be mounted, files can be opened, read and closed again and unmounted")
{
REQUIRE(kapi::filesystem::mount("/dev/ram16", "/information") == 0);
@@ -114,14 +161,16 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap
THEN("not opened files cannot be read from")
{
std::vector<std::byte> buffer(10);
- auto bytes_read = kapi::filesystem::read(999, buffer.data(), buffer.size());
+ auto const invalid_fd = 999uz;
+ auto bytes_read = kapi::filesystem::read(invalid_fd, buffer.data(), buffer.size());
REQUIRE(bytes_read < 0);
}
THEN("not opened files cannot be written to")
{
std::vector<std::byte> buffer(10);
- auto bytes_written = kapi::filesystem::write(999, buffer.data(), buffer.size());
+ auto const invalid_fd = 999uz;
+ auto bytes_written = kapi::filesystem::write(invalid_fd, buffer.data(), buffer.size());
REQUIRE(bytes_written < 0);
}
}