blob: f8c4764d15478138ea6e8affd617ddf7eb680309 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#include "kernel/filesystem/devfs/filesystem.hpp"
#include "kernel/filesystem/filesystem.hpp"
#include "kernel/test_support/filesystem/storage_boot_module_fixture.hpp"
#include <catch2/catch_test_macros.hpp>
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);
}
}
}
|