aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/open_file_description.tests.cpp
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-04-08 21:38:50 +0200
committerLukas Oesch <lukasoesch20@gmail.com>2026-04-11 08:05:52 +0200
commitaf048d3e550bc2a7a6526f4c9714871e32bf7cf4 (patch)
treec209f580663f32dc200174089ecc248b6d157856 /kernel/src/filesystem/open_file_description.tests.cpp
parent7a7c0106257665358e68bbbc99b41acc0c87c0ba (diff)
downloadteachos-af048d3e550bc2a7a6526f4c9714871e32bf7cf4.tar.xz
teachos-af048d3e550bc2a7a6526f4c9714871e32bf7cf4.zip
add open_file_description tests
Diffstat (limited to 'kernel/src/filesystem/open_file_description.tests.cpp')
-rw-r--r--kernel/src/filesystem/open_file_description.tests.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/kernel/src/filesystem/open_file_description.tests.cpp b/kernel/src/filesystem/open_file_description.tests.cpp
new file mode 100644
index 0000000..f045094
--- /dev/null
+++ b/kernel/src/filesystem/open_file_description.tests.cpp
@@ -0,0 +1,60 @@
+#include "kernel/filesystem/open_file_description.hpp"
+
+#include "kernel/test_support/filesystem/inode.hpp"
+
+#include <kstd/memory>
+#include <kstd/print>
+#include <kstd/vector>
+
+#include <catch2/catch_test_macros.hpp>
+
+SCENARIO("Open file description construction", "[filesystem][open_file_description]")
+{
+ GIVEN("an inode and an open file description for that inode")
+ {
+ auto inode = kstd::make_shared<kernel::tests::filesystem::inode>();
+ auto file_description = kernel::filesystem::open_file_description{inode};
+
+ THEN("the initial offset is zero")
+ {
+ REQUIRE(file_description.offset() == 0);
+ }
+ }
+}
+
+SCENARIO("Open file description read/write offset management", "[filesystem][open_file_description]")
+{
+ GIVEN("an inode that tracks read/write calls and an open file description for that inode")
+ {
+ auto inode = kstd::make_shared<kernel::tests::filesystem::inode>();
+ auto file_description = kernel::filesystem::open_file_description{inode};
+
+ THEN("the offset is updated correctly after reads")
+ {
+ REQUIRE(file_description.read(nullptr, 100) == 100);
+ REQUIRE(file_description.offset() == 100);
+ REQUIRE(file_description.read(nullptr, 50) == 50);
+ REQUIRE(file_description.offset() == 150);
+ }
+
+ THEN("the offset is updated correctly after writes")
+ {
+ REQUIRE(file_description.write(nullptr, 200) == 200);
+ REQUIRE(file_description.offset() == 200);
+ REQUIRE(file_description.write(nullptr, 25) == 25);
+ REQUIRE(file_description.offset() == 225);
+ }
+
+ THEN("reads and writes both update the same offset")
+ {
+ REQUIRE(file_description.read(nullptr, 10) == 10);
+ REQUIRE(file_description.offset() == 10);
+ REQUIRE(file_description.write(nullptr, 20) == 20);
+ REQUIRE(file_description.offset() == 30);
+ REQUIRE(file_description.read(nullptr, 5) == 5);
+ REQUIRE(file_description.offset() == 35);
+ REQUIRE(file_description.write(nullptr, 15) == 15);
+ REQUIRE(file_description.offset() == 50);
+ }
+ }
+}