aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/open_file_descriptor.tests.cpp
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-05-16 14:20:38 +0200
committerMarcel Braun <marcel.braun@ost.ch>2026-05-16 14:20:38 +0200
commit106e9731aaf856f940592c02953e49a496555822 (patch)
treef3916a9865d03ebb574bac7d5496f6ec85d638ed /kernel/src/filesystem/open_file_descriptor.tests.cpp
parentd22812dbf54a9fd8ecd558a94bf4ee789caf8011 (diff)
parent5b40e4a28307eed814adb46188c3f6783651d286 (diff)
downloadkernel-106e9731aaf856f940592c02953e49a496555822.tar.xz
kernel-106e9731aaf856f940592c02953e49a496555822.zip
Merge branch 'mount-reference-count' into 'develop-BA-FS26'
Mount reference count See merge request teachos/kernel!37
Diffstat (limited to 'kernel/src/filesystem/open_file_descriptor.tests.cpp')
-rw-r--r--kernel/src/filesystem/open_file_descriptor.tests.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/kernel/src/filesystem/open_file_descriptor.tests.cpp b/kernel/src/filesystem/open_file_descriptor.tests.cpp
index 53835ba..1910b8b 100644
--- a/kernel/src/filesystem/open_file_descriptor.tests.cpp
+++ b/kernel/src/filesystem/open_file_descriptor.tests.cpp
@@ -1,5 +1,7 @@
#include <kernel/filesystem/open_file_descriptor.hpp>
+#include <kernel/filesystem/dentry.hpp>
+#include <kernel/filesystem/inode.hpp>
#include <kernel/filesystem/vfs.hpp>
#include <kernel/test_support/filesystem/inode.hpp>
#include <kernel/test_support/filesystem/storage_boot_module_vfs_fixture.hpp>
@@ -16,51 +18,53 @@
SCENARIO("Open file descriptor construction", "[filesystem][open_file_descriptor]")
{
- GIVEN("an inode and an open file descriptor for that inode")
+ GIVEN("a dentry and an open file descriptor for that dentry")
{
auto inode = kstd::make_shared<kernel::tests::filesystem::inode>();
- auto file_descriptor = kernel::filesystem::open_file_descriptor{inode};
+ auto dentry = kstd::make_shared<kernel::filesystem::dentry>(nullptr, inode, "test_dentry");
+ auto file_descriptor = kernel::filesystem::open_file_descriptor{dentry};
THEN("the initial offset is zero")
{
- REQUIRE(file_descriptor.offset() == 0);
+ REQUIRE(file_descriptor.get_offset() == 0);
}
}
}
SCENARIO("Open file descriptor read/write offset management", "[filesystem][open_file_descriptor]")
{
- GIVEN("an inode that tracks read/write calls and an open file descriptor for that inode")
+ GIVEN("a dentry that tracks read/write calls and an open file descriptor for that dentry")
{
auto inode = kstd::make_shared<kernel::tests::filesystem::inode>();
- auto file_descriptor = kernel::filesystem::open_file_descriptor{inode};
+ auto dentry = kstd::make_shared<kernel::filesystem::dentry>(nullptr, inode, "test_dentry");
+ auto file_descriptor = kernel::filesystem::open_file_descriptor{dentry};
THEN("the offset is updated correctly after reads")
{
REQUIRE(file_descriptor.read(nullptr, 100) == 100);
- REQUIRE(file_descriptor.offset() == 100);
+ REQUIRE(file_descriptor.get_offset() == 100);
REQUIRE(file_descriptor.read(nullptr, 50) == 50);
- REQUIRE(file_descriptor.offset() == 150);
+ REQUIRE(file_descriptor.get_offset() == 150);
}
THEN("the offset is updated correctly after writes")
{
REQUIRE(file_descriptor.write(nullptr, 200) == 200);
- REQUIRE(file_descriptor.offset() == 200);
+ REQUIRE(file_descriptor.get_offset() == 200);
REQUIRE(file_descriptor.write(nullptr, 25) == 25);
- REQUIRE(file_descriptor.offset() == 225);
+ REQUIRE(file_descriptor.get_offset() == 225);
}
THEN("reads and writes both update the same offset")
{
REQUIRE(file_descriptor.read(nullptr, 10) == 10);
- REQUIRE(file_descriptor.offset() == 10);
+ REQUIRE(file_descriptor.get_offset() == 10);
REQUIRE(file_descriptor.write(nullptr, 20) == 20);
- REQUIRE(file_descriptor.offset() == 30);
+ REQUIRE(file_descriptor.get_offset() == 30);
REQUIRE(file_descriptor.read(nullptr, 5) == 5);
- REQUIRE(file_descriptor.offset() == 35);
+ REQUIRE(file_descriptor.get_offset() == 35);
REQUIRE(file_descriptor.write(nullptr, 15) == 15);
- REQUIRE(file_descriptor.offset() == 50);
+ REQUIRE(file_descriptor.get_offset() == 50);
}
}
}
@@ -78,14 +82,14 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Ope
auto & vfs = kernel::filesystem::vfs::get();
auto dentry = vfs.open("/information/info_1.txt");
REQUIRE(dentry != nullptr);
- auto ofd = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dentry->get_inode());
+ auto ofd = kstd::make_shared<kernel::filesystem::open_file_descriptor>(dentry);
THEN("the file can be read and the offset is updated")
{
kstd::vector<std::byte> buffer(32);
auto bytes_read = ofd->read(buffer.data(), buffer.size());
REQUIRE(bytes_read == 7);
- REQUIRE(ofd->offset() == 7);
+ REQUIRE(ofd->get_offset() == 7);
std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), static_cast<size_t>(bytes_read)};
REQUIRE(buffer_as_str == "info_1\n");
@@ -96,11 +100,11 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Ope
kstd::vector<std::byte> buffer(4);
auto bytes_read_1 = ofd->read(buffer.data(), buffer.size() / 2);
REQUIRE(bytes_read_1 == buffer.size() / 2);
- REQUIRE(ofd->offset() == buffer.size() / 2);
+ REQUIRE(ofd->get_offset() == buffer.size() / 2);
auto bytes_read_2 = ofd->read(buffer.data() + buffer.size() / 2, buffer.size() / 2);
REQUIRE(bytes_read_2 == buffer.size() / 2);
- REQUIRE(ofd->offset() == buffer.size());
+ REQUIRE(ofd->get_offset() == buffer.size());
std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), bytes_read_1 + bytes_read_2};
REQUIRE(buffer_as_str == "info");