aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/include/kernel/filesystem/file_descriptor_table.hpp6
-rw-r--r--kernel/include/kernel/test_support/boot_modules.hpp10
-rw-r--r--kernel/include/kernel/test_support/devices/storage/management.hpp10
-rw-r--r--kernel/include/kernel/test_support/filesystem/file_descriptor_table.hpp10
-rw-r--r--kernel/include/kernel/test_support/filesystem/vfs.hpp10
-rw-r--r--kernel/kapi/boot_modules.cpp19
-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
11 files changed, 116 insertions, 84 deletions
diff --git a/kernel/include/kernel/filesystem/file_descriptor_table.hpp b/kernel/include/kernel/filesystem/file_descriptor_table.hpp
index cc31511..5d52c19 100644
--- a/kernel/include/kernel/filesystem/file_descriptor_table.hpp
+++ b/kernel/include/kernel/filesystem/file_descriptor_table.hpp
@@ -29,12 +29,6 @@ namespace kernel::filesystem
auto static get() -> file_descriptor_table &;
/**
- @brief Reset the file descriptor table to an empty state. This method is intended for testing purposes to allow
- resetting the state of the file descriptor table between test cases.
- */
- auto static reset() -> void;
-
- /**
@brief Destructor for the file descriptor table.
*/
~file_descriptor_table() = default;
diff --git a/kernel/include/kernel/test_support/boot_modules.hpp b/kernel/include/kernel/test_support/boot_modules.hpp
new file mode 100644
index 0000000..2343a10
--- /dev/null
+++ b/kernel/include/kernel/test_support/boot_modules.hpp
@@ -0,0 +1,10 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_BOOT_MODULES_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_BOOT_MODULES_HPP
+
+namespace kernel::tests::boot_modules
+{
+ //! Deinitialize the boot module registry.
+ auto deinit() -> void;
+} // namespace kernel::tests::boot_modules
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/test_support/devices/storage/management.hpp b/kernel/include/kernel/test_support/devices/storage/management.hpp
new file mode 100644
index 0000000..7c0d304
--- /dev/null
+++ b/kernel/include/kernel/test_support/devices/storage/management.hpp
@@ -0,0 +1,10 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_DEVICES_STORAGE_MANAGEMENT_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_DEVICES_STORAGE_MANAGEMENT_HPP
+
+namespace kernel::tests::devices::storage
+{
+ //! Deinitialize the storage management singleton.
+ auto deinit() -> void;
+} // namespace kernel::tests::devices::storage
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/test_support/filesystem/file_descriptor_table.hpp b/kernel/include/kernel/test_support/filesystem/file_descriptor_table.hpp
new file mode 100644
index 0000000..bbc0f4a
--- /dev/null
+++ b/kernel/include/kernel/test_support/filesystem/file_descriptor_table.hpp
@@ -0,0 +1,10 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_FILESYSTEM_FILE_DESCRIPTOR_TABLE_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_FILESYSTEM_FILE_DESCRIPTOR_TABLE_HPP
+
+namespace kernel::tests::filesystem::file_descriptor_table
+{
+ //! Deinitialize the file descriptor table singleton.
+ auto deinit() -> void;
+} // namespace kernel::tests::filesystem::file_descriptor_table
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/test_support/filesystem/vfs.hpp b/kernel/include/kernel/test_support/filesystem/vfs.hpp
new file mode 100644
index 0000000..739e353
--- /dev/null
+++ b/kernel/include/kernel/test_support/filesystem/vfs.hpp
@@ -0,0 +1,10 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_FILESYSTEM_VFS_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_FILESYSTEM_VFS_HPP
+
+namespace kernel::tests::filesystem::vfs
+{
+ //! Deinitialize the VFS singleton.
+ auto deinit() -> void;
+} // namespace kernel::tests::filesystem::vfs
+
+#endif \ No newline at end of file
diff --git a/kernel/kapi/boot_modules.cpp b/kernel/kapi/boot_modules.cpp
index 5a0ef7f..0549368 100644
--- a/kernel/kapi/boot_modules.cpp
+++ b/kernel/kapi/boot_modules.cpp
@@ -4,14 +4,13 @@
#include <optional>
-namespace kapi::boot_modules
+namespace
{
+ constinit auto static registry = std::optional<kapi::boot_modules::boot_module_registry>{};
+} // namespace
- namespace
- {
- constinit auto static registry = std::optional<kapi::boot_modules::boot_module_registry>{};
- } // namespace
-
+namespace kapi::boot_modules
+{
auto set_boot_module_registry(boot_module_registry & new_registry) -> void
{
if (registry)
@@ -32,3 +31,11 @@ namespace kapi::boot_modules
return *registry;
}
} // namespace kapi::boot_modules
+
+namespace kernel::tests::boot_modules
+{
+ auto deinit() -> void
+ {
+ registry.reset();
+ }
+} // namespace kernel::tests::boot_modules
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();