diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-03 09:32:30 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-03 09:32:30 +0200 |
| commit | 3012fa5dfe5dfed5e83baf9b40934ed8e8317627 (patch) | |
| tree | 00d1c60a3d5d1cdfa55e0ff1691cd3362b6064ee /kernel/src/filesystem/mount_table.tests.cpp | |
| parent | 5d8a58d538515ffc57ddf82ba40ba763990a8696 (diff) | |
| download | kernel-3012fa5dfe5dfed5e83baf9b40934ed8e8317627.tar.xz kernel-3012fa5dfe5dfed5e83baf9b40934ed8e8317627.zip | |
kernel: rearrange sources according to p1204
Diffstat (limited to 'kernel/src/filesystem/mount_table.tests.cpp')
| -rw-r--r-- | kernel/src/filesystem/mount_table.tests.cpp | 184 |
1 files changed, 0 insertions, 184 deletions
diff --git a/kernel/src/filesystem/mount_table.tests.cpp b/kernel/src/filesystem/mount_table.tests.cpp deleted file mode 100644 index 19b47b23..00000000 --- a/kernel/src/filesystem/mount_table.tests.cpp +++ /dev/null @@ -1,184 +0,0 @@ -#include <kernel/filesystem/mount_table.hpp> - -#include <kernel/filesystem/dentry.hpp> -#include <kernel/filesystem/mount.hpp> -#include <kernel/test_support/filesystem/filesystem.hpp> -#include <kernel/test_support/filesystem/inode.hpp> - -#include <kstd/memory> -#include <kstd/print> -#include <kstd/vector> - -#include <catch2/catch_test_macros.hpp> - -#include <string_view> - -SCENARIO("Mount table construction", "[filesystem][mount_table]") -{ - GIVEN("an empty mount table") - { - kernel::filesystem::mount_table table; - - THEN("removing any mount returns mount_not_found") - { - REQUIRE(table.remove_mount("/") == kernel::filesystem::mount_table::operation_result::mount_not_found); - REQUIRE(table.remove_mount("/any/path") == kernel::filesystem::mount_table::operation_result::mount_not_found); - } - } -} - -SCENARIO("Adding, finding and removing mounts in the mount table", "[filesystem][mount_table]") -{ - GIVEN("a mount table and some mounts") - { - kernel::filesystem::mount_table table; - - auto fs1 = kstd::make_shared<kernel::tests::filesystem::filesystem>(); - auto root_dentry1 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount_dentry1 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount1 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry1, root_dentry1, fs1, nullptr, nullptr); - - auto fs2 = kstd::make_shared<kernel::tests::filesystem::filesystem>(); - auto root_dentry2 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount_dentry2 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/mnt"); - auto mount2 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry2, root_dentry2, fs2, nullptr, nullptr); - - table.add_mount(mount1); - table.add_mount(mount2); - - THEN("dentry flags are set correctly for mounted dentries") - { - REQUIRE(mount_dentry1->has_flag(kernel::filesystem::dentry::dentry_flags::is_mount_point)); - REQUIRE(mount_dentry2->has_flag(kernel::filesystem::dentry::dentry_flags::is_mount_point)); - } - - THEN("finding mounts by exact valid path returns the correct mount") - { - REQUIRE(table.find_mount("/") == mount1); - REQUIRE(table.find_mount("/mnt") == mount2); - } - - THEN("finding mounts by exact invalid path returns null") - { - REQUIRE(table.find_mount("/nonexistent") == nullptr); - REQUIRE(table.find_mount("/mnt/file") == nullptr); - } - - THEN("removing a mount that has no child mounts succeeds") - { - REQUIRE(table.remove_mount("/mnt") == kernel::filesystem::mount_table::operation_result::removed); - REQUIRE_FALSE(root_dentry2->has_flag(kernel::filesystem::dentry::dentry_flags::is_mount_point)); - } - - THEN("removing a mount that does not exist returns mount_not_found") - { - REQUIRE(table.remove_mount("/nonexistent") == kernel::filesystem::mount_table::operation_result::mount_not_found); - } - } - - GIVEN("multiple mounts with the same path") - { - kernel::filesystem::mount_table table; - - auto fs1 = kstd::make_shared<kernel::tests::filesystem::filesystem>(); - auto root_dentry1 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount_dentry1 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount1 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry1, root_dentry1, fs1, nullptr, nullptr); - - auto fs2 = kstd::make_shared<kernel::tests::filesystem::filesystem>(); - auto root_dentry2 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount_dentry2 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount2 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry2, root_dentry2, fs2, nullptr, nullptr); - - table.add_mount(mount1); - table.add_mount(mount2); - - THEN("finding mounts by exact valid path returns the correct mount") - { - REQUIRE(table.find_mount("/") == mount2); - } - - THEN("removing the topmost mount with the same path succeeds") - { - REQUIRE(table.remove_mount("/") == kernel::filesystem::mount_table::operation_result::removed); - REQUIRE_FALSE(root_dentry2->has_flag(kernel::filesystem::dentry::dentry_flags::is_mount_point)); - } - } - - GIVEN("a mount with child mounts") - { - kernel::filesystem::mount_table table; - - auto fs1 = kstd::make_shared<kernel::tests::filesystem::filesystem>(); - auto root_dentry1 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount_dentry1 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount1 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry1, root_dentry1, fs1, nullptr, nullptr); - - auto fs2 = kstd::make_shared<kernel::tests::filesystem::filesystem>(); - auto root_dentry2 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount_dentry2 = kstd::make_shared<kernel::filesystem::dentry>( - mount_dentry1, kstd::make_shared<kernel::tests::filesystem::inode>(), "mnt"); - auto mount2 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry2, root_dentry2, fs2, mount1, nullptr); - - auto fs3 = kstd::make_shared<kernel::tests::filesystem::filesystem>(); - auto root_dentry3 = kstd::make_shared<kernel::filesystem::dentry>( - nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/"); - auto mount_dentry3 = kstd::make_shared<kernel::filesystem::dentry>( - mount_dentry2, kstd::make_shared<kernel::tests::filesystem::inode>(), "submnt"); - auto mount3 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry3, root_dentry3, fs3, mount2, nullptr); - - table.add_mount(mount1); - table.add_mount(mount2); - table.add_mount(mount3); - - THEN("removing a mount with child mounts returns has_child_mounts") - { - REQUIRE(table.remove_mount("/") == kernel::filesystem::mount_table::operation_result::has_child_mounts); - REQUIRE(table.remove_mount("/mnt") == kernel::filesystem::mount_table::operation_result::has_child_mounts); - } - - THEN("removing a leaf mount succeeds") - { - REQUIRE(table.remove_mount("/mnt/submnt") == kernel::filesystem::mount_table::operation_result::removed); - REQUIRE_FALSE(root_dentry3->has_flag(kernel::filesystem::dentry::dentry_flags::is_mount_point)); - } - } -} - -SCENARIO("Mount reference counting", "[filesystem][mount_table]") -{ - kernel::filesystem::mount_table table; - - GIVEN("a filesystem and a root dentry") - { - auto fs = kstd::make_shared<kernel::tests::filesystem::filesystem>(); - auto root_inode = kstd::make_shared<kernel::tests::filesystem::inode>(); - auto root_dentry = kstd::make_shared<kernel::filesystem::dentry>(nullptr, root_inode, "/"); - - auto source_mount = kstd::make_shared<kernel::filesystem::mount>(root_dentry, root_dentry, fs, nullptr, nullptr); - auto mount = kstd::make_shared<kernel::filesystem::mount>(root_dentry, root_dentry, fs, nullptr, source_mount); - - THEN("reference count of source mount is incremented when a mount is added to the mount table and decremented when " - "the mount is removed") - { - REQUIRE(source_mount->ref_count() == 0); - - table.add_mount(mount); - REQUIRE(source_mount->ref_count() == 1); - - REQUIRE(table.remove_mount("/") == kernel::filesystem::mount_table::operation_result::removed); - REQUIRE(source_mount->ref_count() == 0); - } - } -} |
