From 1b24bb01dae10e226a3daaa08e9b47d4724e47a2 Mon Sep 17 00:00:00 2001 From: Marcel Braun Date: Sat, 30 May 2026 10:58:59 +0200 Subject: Add tests --- kernel/kapi/filesystem.tests.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'kernel/kapi') diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp index d1e01db6..2c2a8d1e 100644 --- a/kernel/kapi/filesystem.tests.cpp +++ b/kernel/kapi/filesystem.tests.cpp @@ -39,6 +39,30 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap REQUIRE(kapi::filesystem::close(fd)); } + THEN("files can be opened, written to, read from and closed again") + { + auto write_fd = kapi::filesystem::open("/information/info_1.txt"); + REQUIRE(write_fd >= 0); + + auto write_buffer = std::vector{std::byte{'H'}, std::byte{'e'}}; + + auto const bytes_written = kapi::filesystem::write(write_fd, write_buffer.data(), write_buffer.size()); + REQUIRE(bytes_written == 2); + + auto read_fd = kapi::filesystem::open("/information/info_1.txt"); + REQUIRE(read_fd >= 0); + + auto read_buffer = std::vector(6); + auto const bytes_read = kapi::filesystem::read(read_fd, read_buffer.data(), read_buffer.size()); + REQUIRE(bytes_read >= 0); + + std::string_view buffer_as_str{reinterpret_cast(read_buffer.data()), static_cast(bytes_read)}; + REQUIRE(buffer_as_str == "Hefo_1"); + + REQUIRE(kapi::filesystem::close(write_fd) == 0); + REQUIRE(kapi::filesystem::close(read_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").value(); -- cgit v1.2.3 From 4c519c8e8852fd719bdf1cabf3fb7699e2cf6525 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sat, 30 May 2026 19:31:34 +0200 Subject: update inode size correctly, --- kernel/kapi/filesystem.tests.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'kernel/kapi') diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp index 2c2a8d1e..b339f19f 100644 --- a/kernel/kapi/filesystem.tests.cpp +++ b/kernel/kapi/filesystem.tests.cpp @@ -42,25 +42,25 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap THEN("files can be opened, written to, read from and closed again") { auto write_fd = kapi::filesystem::open("/information/info_1.txt"); - REQUIRE(write_fd >= 0); + REQUIRE(write_fd); auto write_buffer = std::vector{std::byte{'H'}, std::byte{'e'}}; - auto const bytes_written = kapi::filesystem::write(write_fd, write_buffer.data(), write_buffer.size()); + auto const bytes_written = kapi::filesystem::write(*write_fd, write_buffer.data(), write_buffer.size()); REQUIRE(bytes_written == 2); auto read_fd = kapi::filesystem::open("/information/info_1.txt"); - REQUIRE(read_fd >= 0); + REQUIRE(read_fd); auto read_buffer = std::vector(6); - auto const bytes_read = kapi::filesystem::read(read_fd, read_buffer.data(), read_buffer.size()); - REQUIRE(bytes_read >= 0); + auto const bytes_read = kapi::filesystem::read(*read_fd, read_buffer.data(), read_buffer.size()); + REQUIRE(bytes_read); - std::string_view buffer_as_str{reinterpret_cast(read_buffer.data()), static_cast(bytes_read)}; + std::string_view buffer_as_str{reinterpret_cast(read_buffer.data()), static_cast(*bytes_read)}; REQUIRE(buffer_as_str == "Hefo_1"); - REQUIRE(kapi::filesystem::close(write_fd) == 0); - REQUIRE(kapi::filesystem::close(read_fd) == 0); + REQUIRE(kapi::filesystem::close(*write_fd)); + REQUIRE(kapi::filesystem::close(*read_fd)); } THEN("files can be opened through absolute symbolic link, read and closed again") -- cgit v1.2.3 From c09ef501e1baf293d92b166e5e38e29a41cf64c2 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 9 Jun 2026 11:06:25 +0200 Subject: implement mkdir and create function in kapi::filesystem that calls the vfs and then the underlying filesystem --- kernel/kapi/filesystem.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'kernel/kapi') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index efde1336..822095e6 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -53,4 +54,15 @@ namespace kapi::filesystem return descriptor->write(buffer, size); }); } + + auto mkdir(std::string_view path) -> kstd::result + { + return kernel::filesystem::vfs::get().mkdir(path); + } + + auto create(std::string_view path) -> kstd::result + { + return kernel::filesystem::vfs::get().create(path); + } + } // namespace kapi::filesystem \ No newline at end of file -- cgit v1.2.3 From 918e6eecfaefd94ccb2995cc526b2673263733b4 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 9 Jun 2026 11:40:45 +0200 Subject: add tests --- kernel/kapi/filesystem.tests.cpp | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'kernel/kapi') diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp index b339f19f..595d73e8 100644 --- a/kernel/kapi/filesystem.tests.cpp +++ b/kernel/kapi/filesystem.tests.cpp @@ -211,5 +211,63 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap auto bytes_written = kapi::filesystem::write(invalid_fd, buffer.data(), buffer.size()); REQUIRE(!bytes_written); } + + THEN("a new file can be created, written to, read from, and closed again") + { + auto new_file_path = "/information/new_information.txt"; + + REQUIRE(kapi::filesystem::open(new_file_path) < 0); + + REQUIRE(kapi::filesystem::create(new_file_path) == 0); + + auto fd = kapi::filesystem::open(new_file_path); + REQUIRE(fd >= 0); + + auto write_buffer = std::vector{std::byte{'T'}, std::byte{'e'}, std::byte{'s'}, std::byte{'t'}}; + kapi::filesystem::write(fd, write_buffer.data(), write_buffer.size()); + + REQUIRE(kapi::filesystem::close(fd) == 0); + + fd = kapi::filesystem::open(new_file_path); + REQUIRE(fd >= 0); + + auto read_buffer = std::vector(4); + auto bytes_read = kapi::filesystem::read(fd, read_buffer.data(), read_buffer.size()); + + std::string_view buffer_as_str{reinterpret_cast(read_buffer.data()), static_cast(bytes_read)}; + REQUIRE(buffer_as_str == "Test"); + + REQUIRE(kapi::filesystem::close(fd) == 0); + } + + THEN("a new directory can be created and a file within can be created, opened, and closed again") + { + auto new_directory_path = "/information/new_directory"; + auto new_file_path = "/information/new_directory/new_information.txt"; + + REQUIRE(kapi::filesystem::open(new_file_path) < 0); + + REQUIRE(kapi::filesystem::mkdir(new_directory_path) == 0); + REQUIRE(kapi::filesystem::create(new_file_path) == 0); + + auto fd = kapi::filesystem::open(new_file_path); + REQUIRE(fd >= 0); + REQUIRE(kapi::filesystem::close(fd) == 0); + } + + THEN("a file can be created in a mounted filesystem, opened, and closed again") + { + kapi::filesystem::mount("/dev/ram16", "/information"); + + auto new_file_path = "/information/monkey_house/monkey_4.txt"; + REQUIRE(kapi::filesystem::open(new_file_path) < 0); + REQUIRE(kapi::filesystem::create(new_file_path) == 0); + + auto fd = kapi::filesystem::open(new_file_path); + REQUIRE(fd >= 0); + REQUIRE(kapi::filesystem::close(fd) == 0); + + REQUIRE(kapi::filesystem::umount("/information") == 0); + } } } -- cgit v1.2.3 From 1b17e5de9d5a949dc4da6b312af19b06c96e0f2f Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 9 Jun 2026 22:58:49 +0200 Subject: check whether the target already exists when creating an inode --- kernel/kapi/filesystem.tests.cpp | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'kernel/kapi') diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp index 595d73e8..f2a6a988 100644 --- a/kernel/kapi/filesystem.tests.cpp +++ b/kernel/kapi/filesystem.tests.cpp @@ -216,28 +216,28 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap { auto new_file_path = "/information/new_information.txt"; - REQUIRE(kapi::filesystem::open(new_file_path) < 0); + REQUIRE(!kapi::filesystem::open(new_file_path)); - REQUIRE(kapi::filesystem::create(new_file_path) == 0); + REQUIRE(kapi::filesystem::create(new_file_path)); auto fd = kapi::filesystem::open(new_file_path); - REQUIRE(fd >= 0); + REQUIRE(fd); auto write_buffer = std::vector{std::byte{'T'}, std::byte{'e'}, std::byte{'s'}, std::byte{'t'}}; - kapi::filesystem::write(fd, write_buffer.data(), write_buffer.size()); + CHECK(kapi::filesystem::write(*fd, write_buffer.data(), write_buffer.size())); - REQUIRE(kapi::filesystem::close(fd) == 0); + REQUIRE(kapi::filesystem::close(*fd)); fd = kapi::filesystem::open(new_file_path); - REQUIRE(fd >= 0); + REQUIRE(fd); auto read_buffer = std::vector(4); - auto bytes_read = kapi::filesystem::read(fd, read_buffer.data(), read_buffer.size()); + auto bytes_read = kapi::filesystem::read(*fd, read_buffer.data(), read_buffer.size()); - std::string_view buffer_as_str{reinterpret_cast(read_buffer.data()), static_cast(bytes_read)}; + std::string_view buffer_as_str{reinterpret_cast(read_buffer.data()), static_cast(*bytes_read)}; REQUIRE(buffer_as_str == "Test"); - REQUIRE(kapi::filesystem::close(fd) == 0); + REQUIRE(kapi::filesystem::close(*fd)); } THEN("a new directory can be created and a file within can be created, opened, and closed again") @@ -245,29 +245,29 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap auto new_directory_path = "/information/new_directory"; auto new_file_path = "/information/new_directory/new_information.txt"; - REQUIRE(kapi::filesystem::open(new_file_path) < 0); + REQUIRE(!kapi::filesystem::open(new_file_path)); - REQUIRE(kapi::filesystem::mkdir(new_directory_path) == 0); - REQUIRE(kapi::filesystem::create(new_file_path) == 0); + REQUIRE(kapi::filesystem::mkdir(new_directory_path)); + REQUIRE(kapi::filesystem::create(new_file_path)); auto fd = kapi::filesystem::open(new_file_path); - REQUIRE(fd >= 0); - REQUIRE(kapi::filesystem::close(fd) == 0); + REQUIRE(fd); + REQUIRE(kapi::filesystem::close(*fd)); } THEN("a file can be created in a mounted filesystem, opened, and closed again") { - kapi::filesystem::mount("/dev/ram16", "/information"); + CHECK(kapi::filesystem::mount("/dev/ram16", "/information")); auto new_file_path = "/information/monkey_house/monkey_4.txt"; - REQUIRE(kapi::filesystem::open(new_file_path) < 0); - REQUIRE(kapi::filesystem::create(new_file_path) == 0); + REQUIRE(!kapi::filesystem::open(new_file_path)); + REQUIRE(kapi::filesystem::create(new_file_path)); auto fd = kapi::filesystem::open(new_file_path); - REQUIRE(fd >= 0); - REQUIRE(kapi::filesystem::close(fd) == 0); + REQUIRE(fd); + REQUIRE(kapi::filesystem::close(*fd)); - REQUIRE(kapi::filesystem::umount("/information") == 0); + REQUIRE(kapi::filesystem::umount("/information")); } } } -- cgit v1.2.3