#include "kernel/filesystem/devfs/filesystem.hpp" #include "kernel/filesystem/filesystem.hpp" #include "kernel/test_support/filesystem/storage_boot_module_fixture.hpp" #include SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, "Devfs filesystem lookup uses storage management devices", "[filesystem][devfs][filesystem]") { GIVEN("a boot module registry with one module") { setup_modules(1); auto fs = kernel::filesystem::devfs::filesystem{}; auto result = fs.mount(nullptr); THEN("mount succeeds") { REQUIRE(result == kernel::filesystem::filesystem::operation_result::success); REQUIRE(fs.root_inode() != nullptr); } THEN("lookup on root finds ram0 device inode") { auto inode = fs.lookup(fs.root_inode(), "ram0"); REQUIRE(inode != nullptr); REQUIRE(inode->is_device()); } THEN("lookup of an unknown device returns null") { auto inode = fs.lookup(fs.root_inode(), "ram99"); REQUIRE(inode == nullptr); } THEN("lookup with wrong parent returns null") { auto other_fs = kernel::filesystem::devfs::filesystem{}; other_fs.mount(nullptr); auto inode = fs.lookup(other_fs.root_inode(), "ram0"); REQUIRE(inode == nullptr); } THEN("lookup with a non-directory parent returns null") { auto non_directory_inode = fs.lookup(fs.root_inode(), "ram0"); REQUIRE(non_directory_inode != nullptr); REQUIRE(!non_directory_inode->is_directory()); auto result = fs.lookup(non_directory_inode, "anything"); REQUIRE(result == nullptr); } } GIVEN("a boot module registry with three modules") { setup_modules(3, 2048); auto fs = kernel::filesystem::devfs::filesystem{}; auto result = fs.mount(nullptr); REQUIRE(result == kernel::filesystem::filesystem::operation_result::success); THEN("lookup finds all generated RAM devices") { REQUIRE(fs.lookup(fs.root_inode(), "ram0") != nullptr); REQUIRE(fs.lookup(fs.root_inode(), "ram16") != nullptr); REQUIRE(fs.lookup(fs.root_inode(), "ram32") != nullptr); } } }