aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kapi/filesystem.tests.cpp24
-rw-r--r--kernel/kernel/filesystem/open_file_descriptor.tests.cpp22
2 files changed, 45 insertions, 1 deletions
diff --git a/kernel/kapi/filesystem.tests.cpp b/kernel/kapi/filesystem.tests.cpp
index d1e01db6..2c2a8d1e 100644
--- a/kernel/kapi/filesystem.tests.cpp
+++ b/kernel/kapi/filesystem.tests.cpp
@@ -39,6 +39,30 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Kap
REQUIRE(kapi::filesystem::close(fd));
}
+ THEN("files can be opened, written to, read from and closed again")
+ {
+ auto write_fd = kapi::filesystem::open("/information/info_1.txt");
+ REQUIRE(write_fd >= 0);
+
+ auto write_buffer = std::vector<std::byte>{std::byte{'H'}, std::byte{'e'}};
+
+ auto const bytes_written = kapi::filesystem::write(write_fd, write_buffer.data(), write_buffer.size());
+ REQUIRE(bytes_written == 2);
+
+ auto read_fd = kapi::filesystem::open("/information/info_1.txt");
+ REQUIRE(read_fd >= 0);
+
+ auto read_buffer = std::vector<std::byte>(6);
+ auto const bytes_read = kapi::filesystem::read(read_fd, read_buffer.data(), read_buffer.size());
+ REQUIRE(bytes_read >= 0);
+
+ std::string_view buffer_as_str{reinterpret_cast<char *>(read_buffer.data()), static_cast<size_t>(bytes_read)};
+ REQUIRE(buffer_as_str == "Hefo_1");
+
+ REQUIRE(kapi::filesystem::close(write_fd) == 0);
+ REQUIRE(kapi::filesystem::close(read_fd) == 0);
+ }
+
THEN("files can be opened through absolute symbolic link, read and closed again")
{
auto fd = kapi::filesystem::open("/symlinks/information_directory_absolute/info_1.txt").value();
diff --git a/kernel/kernel/filesystem/open_file_descriptor.tests.cpp b/kernel/kernel/filesystem/open_file_descriptor.tests.cpp
index 06488ba0..daf9327f 100644
--- a/kernel/kernel/filesystem/open_file_descriptor.tests.cpp
+++ b/kernel/kernel/filesystem/open_file_descriptor.tests.cpp
@@ -95,7 +95,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Ope
REQUIRE(buffer_as_str == "info_1\n");
}
- THEN("the file can be read multiple times")
+ THEN("the file can be read multiple times and the offset is updated")
{
kstd::vector<std::byte> buffer(4);
auto bytes_read_1 = ofd->read(buffer.data(), buffer.size() / 2);
@@ -109,5 +109,25 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Ope
std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), *bytes_read_1 + *bytes_read_2};
REQUIRE(buffer_as_str == "info");
}
+
+ THEN("the file can be written to and the offset is updated")
+ {
+ auto write_buffer = kstd::vector<std::byte>(12, std::byte{0xAA});
+ auto const bytes_written = ofd->write(write_buffer.data(), write_buffer.size());
+ REQUIRE(bytes_written == 7);
+ REQUIRE(ofd->offset() == 7);
+ }
+
+ THEN("the file can be written to multiple times and the offset is updated")
+ {
+ auto write_buffer = kstd::vector<std::byte>(8, std::byte{0xAA});
+ auto const bytes_written_1 = ofd->write(write_buffer.data(), write_buffer.size() / 2);
+ REQUIRE(bytes_written_1 == write_buffer.size() / 2);
+ REQUIRE(ofd->offset() == write_buffer.size() / 2);
+
+ auto const bytes_written_2 = ofd->write(write_buffer.data() + write_buffer.size() / 2, write_buffer.size() / 2);
+ REQUIRE(bytes_written_2 == 3);
+ REQUIRE(ofd->offset() == 7);
+ }
}
}