aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/ext2/inode.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/src/filesystem/ext2/inode.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/src/filesystem/ext2/inode.tests.cpp')
-rw-r--r--kernel/src/filesystem/ext2/inode.tests.cpp65
1 files changed, 52 insertions, 13 deletions
diff --git a/kernel/src/filesystem/ext2/inode.tests.cpp b/kernel/src/filesystem/ext2/inode.tests.cpp
index 4d61790..49ba21b 100644
--- a/kernel/src/filesystem/ext2/inode.tests.cpp
+++ b/kernel/src/filesystem/ext2/inode.tests.cpp
@@ -23,13 +23,50 @@ SCENARIO("Ext2 inode initialization and properties", "[filesystem][ext2][inode]"
GIVEN("an ext2 filesystem")
{
auto fs = kernel::filesystem::ext2::filesystem{};
+ auto data = kernel::filesystem::ext2::inode_data{};
- THEN("the inode is initialized and has the kind regular")
+ THEN("the inode is initialized with regular file mode in data and has the kind regular")
{
- auto inode = kernel::filesystem::ext2::inode{&fs};
+ data.mode = kernel::filesystem::ext2::constants::mode_regular;
+ auto inode = kernel::filesystem::ext2::inode(&fs, data);
+
REQUIRE(inode.is_regular());
- REQUIRE(!inode.is_directory());
- REQUIRE(!inode.is_device());
+ REQUIRE_FALSE(inode.is_directory());
+ REQUIRE_FALSE(inode.is_device());
+ REQUIRE_FALSE(inode.is_symbolic_link());
+ }
+
+ THEN("the inode is initialized with directory mode in data and has the kind directory")
+ {
+ data.mode = kernel::filesystem::ext2::constants::mode_directory;
+ auto inode = kernel::filesystem::ext2::inode(&fs, data);
+
+ REQUIRE_FALSE(inode.is_regular());
+ REQUIRE(inode.is_directory());
+ REQUIRE_FALSE(inode.is_device());
+ REQUIRE_FALSE(inode.is_symbolic_link());
+ }
+
+ THEN("the inode is initialized with symbolic link mode in data and has the kind symbolic link")
+ {
+ data.mode = kernel::filesystem::ext2::constants::mode_symbolic_link;
+ auto inode = kernel::filesystem::ext2::inode(&fs, data);
+
+ REQUIRE_FALSE(inode.is_regular());
+ REQUIRE_FALSE(inode.is_directory());
+ REQUIRE_FALSE(inode.is_device());
+ REQUIRE(inode.is_symbolic_link());
+ }
+
+ THEN("the inode is initialized with zero mode in data and has no specific kind")
+ {
+ data.mode = 0;
+ auto inode = kernel::filesystem::ext2::inode(&fs, data);
+
+ REQUIRE_FALSE(inode.is_regular());
+ REQUIRE_FALSE(inode.is_directory());
+ REQUIRE_FALSE(inode.is_device());
+ REQUIRE_FALSE(inode.is_symbolic_link());
}
}
@@ -37,7 +74,7 @@ SCENARIO("Ext2 inode initialization and properties", "[filesystem][ext2][inode]"
{
THEN("constructing an inode with a null filesystem pointer panics")
{
- REQUIRE_THROWS_AS(kernel::filesystem::ext2::inode{nullptr}, kernel::tests::cpu::halt);
+ REQUIRE_THROWS_AS(kernel::filesystem::ext2::inode(nullptr, {}), kernel::tests::cpu::halt);
}
}
}
@@ -102,9 +139,10 @@ SCENARIO("Ext2 inode read stops when block mapping resolves to zero", "[filesyst
auto fs = kernel::filesystem::ext2::filesystem{};
REQUIRE(fs.mount(dev_inode) == kernel::filesystem::filesystem::operation_result::success);
- auto inode = kernel::filesystem::ext2::inode{&fs};
- inode.m_data.blocks = 2;
- inode.m_data.block[0] = 0;
+ auto data = kernel::filesystem::ext2::inode_data{};
+ data.blocks = 2;
+ data.block[0] = 0;
+ auto inode = kernel::filesystem::ext2::inode{&fs, data};
auto buffer = kstd::vector<std::byte>(32, std::byte{0xAB});
@@ -130,12 +168,13 @@ SCENARIO("Ext2 inode read across block boundaries", "[filesystem][ext2][inode]")
auto fs = kernel::filesystem::ext2::filesystem{};
REQUIRE(fs.mount(dev_inode) == kernel::filesystem::filesystem::operation_result::success);
- auto inode = kernel::filesystem::ext2::inode{&fs};
- inode.m_data.blocks = 2;
- inode.m_data.block[0] = 20;
+ auto inode_data = kernel::filesystem::ext2::inode_data{};
+ inode_data.blocks = 2;
+ inode_data.block[0] = 20;
kernel::tests::filesystem::ext2::write_bytes(*device, 21 * block_size - 6, "Hello ", 6);
- inode.m_data.block[1] = 21;
+ inode_data.block[1] = 21;
kernel::tests::filesystem::ext2::write_bytes(*device, 21 * block_size, "World!", 6);
+ auto inode = kernel::filesystem::ext2::inode{&fs, inode_data};
auto buffer = kstd::vector<std::byte>(12, std::byte{0x00});
@@ -155,7 +194,7 @@ SCENARIO("Ext2 inode write is not implemented", "[filesystem][ext2][inode]")
GIVEN("an ext2 inode")
{
auto fs = kernel::filesystem::ext2::filesystem{};
- auto inode = kernel::filesystem::ext2::inode{&fs};
+ auto inode = kernel::filesystem::ext2::inode{&fs, kernel::filesystem::ext2::inode_data{}};
THEN("writing to the inode panics")
{