aboutsummaryrefslogtreecommitdiff
path: root/kernel/src
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-04-09 08:32:51 +0200
committerLukas Oesch <lukasoesch20@gmail.com>2026-04-11 08:05:52 +0200
commit3c9ad45492d7417c65594fa7fa2fb9a8d5439276 (patch)
treec198818f2ba3f66d1dc7d8ce6ca783d43e4e70ca /kernel/src
parent9ce8ed3dd3aa5f6e21b53d02bac4f62eb8b3f337 (diff)
downloadteachos-3c9ad45492d7417c65594fa7fa2fb9a8d5439276.tar.xz
teachos-3c9ad45492d7417c65594fa7fa2fb9a8d5439276.zip
add deinit functions for singletons in tests
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/devices/storage/management.cpp28
-rw-r--r--kernel/src/filesystem/file_descriptor_table.cpp25
-rw-r--r--kernel/src/filesystem/file_descriptor_table.tests.cpp46
-rw-r--r--kernel/src/filesystem/vfs.cpp24
-rw-r--r--kernel/src/test_support/state_reset_listener.cpp12
5 files changed, 63 insertions, 72 deletions
diff --git a/kernel/src/devices/storage/management.cpp b/kernel/src/devices/storage/management.cpp
index d440bf0..14a045a 100644
--- a/kernel/src/devices/storage/management.cpp
+++ b/kernel/src/devices/storage/management.cpp
@@ -1,9 +1,9 @@
#include "kernel/devices/storage/management.hpp"
#include "kapi/boot_modules.hpp"
+#include "kapi/devices/device.hpp"
#include "kapi/system.hpp"
-#include "kapi/devices/device.hpp"
#include "kernel/devices/storage/controller.hpp"
#include "kernel/devices/storage/ram_disk/controller.hpp"
@@ -14,17 +14,17 @@
#include <cstddef>
#include <optional>
-namespace kernel::devices::storage
+namespace
{
- namespace
- {
- constexpr size_t static MINORS_PER_DEVICE = 16;
- constexpr size_t static START_MAJOR = 1;
- constinit size_t static next_free_major = START_MAJOR;
+ constexpr size_t static MINORS_PER_DEVICE = 16;
+ constexpr size_t static START_MAJOR = 1;
+ constinit size_t static next_free_major = START_MAJOR;
- constinit auto static active_storage_management = std::optional<management>{};
- } // namespace
+ constinit auto static active_storage_management = std::optional<kernel::devices::storage::management>{};
+} // namespace
+namespace kernel::devices::storage
+{
auto management::init() -> void
{
if (active_storage_management)
@@ -81,5 +81,13 @@ namespace kernel::devices::storage
{
return device_by_major_minor(START_MAJOR, 0);
}
+} // namespace kernel::devices::storage
-} // namespace kernel::devices::storage \ No newline at end of file
+namespace kernel::tests::devices::storage
+{
+ auto deinit() -> void
+ {
+ active_storage_management.reset();
+ next_free_major = START_MAJOR;
+ }
+} // namespace kernel::tests::devices::storage
diff --git a/kernel/src/filesystem/file_descriptor_table.cpp b/kernel/src/filesystem/file_descriptor_table.cpp
index a31e2e6..1c062a1 100644
--- a/kernel/src/filesystem/file_descriptor_table.cpp
+++ b/kernel/src/filesystem/file_descriptor_table.cpp
@@ -10,13 +10,13 @@
#include <cstddef>
#include <optional>
-namespace kernel::filesystem
+namespace
{
- namespace
- {
- constinit auto static global_file_descriptor_table = std::optional<file_descriptor_table>{};
- } // namespace
+ constinit auto static global_file_descriptor_table = std::optional<kernel::filesystem::file_descriptor_table>{};
+} // namespace
+namespace kernel::filesystem
+{
auto file_descriptor_table::init() -> void
{
if (global_file_descriptor_table)
@@ -37,11 +37,6 @@ namespace kernel::filesystem
return *global_file_descriptor_table;
}
- auto file_descriptor_table::reset() -> void
- {
- global_file_descriptor_table.reset();
- }
-
auto file_descriptor_table::add_file(kstd::shared_ptr<open_file_description> const & file_description) -> int
{
if (!file_description)
@@ -92,4 +87,12 @@ namespace kernel::filesystem
m_open_files.at(index) = nullptr;
}
-} // namespace kernel::filesystem \ No newline at end of file
+} // namespace kernel::filesystem
+
+namespace kernel::tests::filesystem::file_descriptor_table
+{
+ auto deinit() -> void
+ {
+ global_file_descriptor_table.reset();
+ }
+} // namespace kernel::tests::filesystem::file_descriptor_table
diff --git a/kernel/src/filesystem/file_descriptor_table.tests.cpp b/kernel/src/filesystem/file_descriptor_table.tests.cpp
index d8c05ca..5aeadb2 100644
--- a/kernel/src/filesystem/file_descriptor_table.tests.cpp
+++ b/kernel/src/filesystem/file_descriptor_table.tests.cpp
@@ -1,7 +1,6 @@
#include "kernel/filesystem/file_descriptor_table.hpp"
#include "kernel/filesystem/open_file_description.hpp"
-#include "kernel/test_support/cpu.hpp"
#include "kernel/test_support/filesystem/inode.hpp"
#include <kstd/memory>
@@ -10,48 +9,7 @@
#include <catch2/catch_test_macros.hpp>
-struct file_descriptor_table_RAII
-{
- file_descriptor_table_RAII()
- {
- kernel::filesystem::file_descriptor_table::init();
- }
- ~file_descriptor_table_RAII()
- {
- kernel::filesystem::file_descriptor_table::reset();
- }
-};
-
-struct file_descriptor_table_reset_only
-{
- ~file_descriptor_table_reset_only()
- {
- kernel::filesystem::file_descriptor_table::reset();
- }
-};
-
-SCENARIO_METHOD(file_descriptor_table_reset_only, "File descriptor table initialization",
- "[filesystem][file_descriptor_table]")
-{
- THEN("accessing the file descriptor table before initialization panics")
- {
- REQUIRE_THROWS_AS(kernel::filesystem::file_descriptor_table::get(), kernel::tests::cpu::halt);
- }
-
- THEN("the file descriptor table can be initialized and accessed")
- {
- kernel::filesystem::file_descriptor_table::init();
- REQUIRE_NOTHROW(kernel::filesystem::file_descriptor_table::get());
- }
-
- THEN("initializing the file descriptor table more than once panics")
- {
- kernel::filesystem::file_descriptor_table::init();
- REQUIRE_THROWS_AS(kernel::filesystem::file_descriptor_table::init(), kernel::tests::cpu::halt);
- }
-}
-
-SCENARIO_METHOD(file_descriptor_table_RAII, "File descriptor table add/get file", "[filesystem][file_descriptor_table]")
+SCENARIO("File descriptor table add/get file", "[filesystem][file_descriptor_table]")
{
GIVEN("a file descriptor table and an open file description")
{
@@ -105,7 +63,7 @@ SCENARIO_METHOD(file_descriptor_table_RAII, "File descriptor table add/get file"
}
}
-SCENARIO_METHOD(file_descriptor_table_RAII, "File descriptor table remove file", "[filesystem][file_descriptor_table]")
+SCENARIO("File descriptor table remove file", "[filesystem][file_descriptor_table]")
{
GIVEN("a file descriptor table with an open file description")
{
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 45ae053..67d1af2 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -17,13 +17,13 @@
#include <ranges>
#include <string_view>
-namespace kernel::filesystem
+namespace
{
- namespace
- {
- constinit auto static active_vfs = std::optional<vfs>{};
- } // namespace
+ constinit auto static active_vfs = std::optional<kernel::filesystem::vfs>{};
+} // namespace
+namespace kernel::filesystem
+{
auto vfs::init() -> void
{
if (active_vfs)
@@ -47,7 +47,10 @@ namespace kernel::filesystem
if (auto boot_device = storage_mgmt.determine_boot_device())
{
auto boot_root_fs = kernel::filesystem::filesystem::probe_and_mount(boot_device);
- do_mount_internal("/", root_fs_root_dentry, boot_root_fs);
+ if (boot_root_fs)
+ {
+ do_mount_internal("/", root_fs_root_dentry, boot_root_fs);
+ }
}
auto device_fs = kstd::make_shared<devfs::filesystem>();
@@ -172,5 +175,12 @@ namespace kernel::filesystem
return current_dentry;
}
+} // namespace kernel::filesystem
-} // namespace kernel::filesystem \ No newline at end of file
+namespace kernel::tests::filesystem::vfs
+{
+ auto deinit() -> void
+ {
+ active_vfs.reset();
+ }
+} // namespace kernel::tests::filesystem::vfs
diff --git a/kernel/src/test_support/state_reset_listener.cpp b/kernel/src/test_support/state_reset_listener.cpp
index 8c95cc8..af1091c 100644
--- a/kernel/src/test_support/state_reset_listener.cpp
+++ b/kernel/src/test_support/state_reset_listener.cpp
@@ -2,8 +2,13 @@
#include "kapi/cpu.hpp"
#include "kapi/memory.hpp"
+#include "kernel/filesystem/file_descriptor_table.hpp"
+#include "kernel/test_support/boot_modules.hpp"
#include "kernel/test_support/cio.hpp"
#include "kernel/test_support/cpu.hpp"
+#include "kernel/test_support/devices/storage/management.hpp"
+#include "kernel/test_support/filesystem/file_descriptor_table.hpp"
+#include "kernel/test_support/filesystem/vfs.hpp"
#include "kernel/test_support/memory.hpp"
#include <catch2/catch_test_case_info.hpp>
@@ -17,6 +22,8 @@ struct state_reset_listener : Catch::EventListenerBase
void testCaseStarting(Catch::TestCaseInfo const &) override
{
+ kernel::filesystem::file_descriptor_table::init();
+
kapi::cio::init();
kapi::cpu::init();
kapi::memory::init();
@@ -24,6 +31,11 @@ struct state_reset_listener : Catch::EventListenerBase
void testCaseEnded(Catch::TestCaseStats const &) override
{
+ kernel::tests::filesystem::file_descriptor_table::deinit();
+ kernel::tests::filesystem::vfs::deinit();
+ kernel::tests::devices::storage::deinit();
+ kernel::tests::boot_modules::deinit();
+
kernel::tests::memory::deinit();
kernel::tests::cpu::deinit();
kernel::tests::cio::deinit();