aboutsummaryrefslogtreecommitdiff
path: root/kernel/tests
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-01 12:15:25 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-01 12:15:25 +0200
commit1f652b8b5ca5dbea588975466801cb1479f3dda8 (patch)
tree2852f1d7cc6d33d0cb06c66fcfcf8c03dac2a112 /kernel/tests
parent0369fb7c4baa543dfb36ebb39ab53ac7560994ba (diff)
downloadteachos-1f652b8b5ca5dbea588975466801cb1479f3dda8.tar.xz
teachos-1f652b8b5ca5dbea588975466801cb1479f3dda8.zip
kernel/tests: dissolve tests into source tree
Diffstat (limited to 'kernel/tests')
-rw-r--r--kernel/tests/CMakeLists.txt64
-rw-r--r--kernel/tests/include/kernel/tests/cpu.hpp18
-rw-r--r--kernel/tests/include/kernel/tests/log_buffer.hpp32
-rw-r--r--kernel/tests/include/kernel/tests/simulated_memory.hpp19
-rw-r--r--kernel/tests/kapi/cio.cpp38
-rw-r--r--kernel/tests/kapi/cpu.cpp29
-rw-r--r--kernel/tests/kapi/interrupts.cpp11
-rw-r--r--kernel/tests/kapi/memory.cpp86
-rw-r--r--kernel/tests/src/log_buffer.cpp39
-rw-r--r--kernel/tests/src/main.cpp38
-rw-r--r--kernel/tests/src/simulated_memory.cpp33
-rw-r--r--kernel/tests/src/test_support.tests.cpp51
12 files changed, 0 insertions, 458 deletions
diff --git a/kernel/tests/CMakeLists.txt b/kernel/tests/CMakeLists.txt
deleted file mode 100644
index 0855520..0000000
--- a/kernel/tests/CMakeLists.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-#[============================================================================[
-# Kernel Test Support (Fakes, Stubs, Mocks, etc.)
-#]============================================================================]
-
-add_library("kernel_test_support"
- "kapi/cio.cpp"
- "kapi/cpu.cpp"
- "kapi/interrupts.cpp"
- "kapi/memory.cpp"
-
- "src/log_buffer.cpp"
- "src/main.cpp"
- "src/simulated_memory.cpp"
-)
-
-file(GLOB_RECURSE KERNEL_TEST_SUPPORT_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp")
-
-target_sources("kernel_test_support" PUBLIC
- FILE_SET HEADERS
- BASE_DIRS "include"
- FILES
- ${KERNEL_TEST_SUPPORT_HEADERS}
-)
-
-target_include_directories("kernel_test_support" PUBLIC
- "include"
-)
-
-target_link_libraries("kernel_test_support" PUBLIC
- "os::kapi"
- "os::kernel"
- "Catch2::Catch2"
-)
-
-add_library("os::kernel_test_support" ALIAS "kernel_test_support")
-
-#[============================================================================[
-# Kernel Tests
-#]============================================================================]
-
-add_executable("kernel_tests"
- "src/test_support.tests.cpp"
-)
-
-target_include_directories("kernel_tests" PRIVATE
- "include"
-)
-
-target_link_libraries("kernel_tests" PRIVATE
- "os::kernel_test_support"
- "libs::kstd"
-)
-
-set_target_properties("kernel_tests" PROPERTIES
- C_CLANG_TIDY ""
- CXX_CLANG_TIDY ""
- EXCLUDE_FROM_ALL NO
-)
-
-enable_coverage("kernel_tests")
-
-add_executable("os::kernel_tests" ALIAS "kernel_tests")
-
-catch_discover_tests("os::kernel_tests") \ No newline at end of file
diff --git a/kernel/tests/include/kernel/tests/cpu.hpp b/kernel/tests/include/kernel/tests/cpu.hpp
deleted file mode 100644
index 81c0c6f..0000000
--- a/kernel/tests/include/kernel/tests/cpu.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef TEACHOS_KERNEL_TESTS_CPU_HPP
-#define TEACHOS_KERNEL_TESTS_CPU_HPP
-
-#include <stdexcept>
-
-namespace kernel::tests::cpu
-{
-
- struct halt : std::runtime_error
- {
- halt()
- : std::runtime_error{"CPU halt requested!"}
- {}
- };
-
-} // namespace kernel::tests::cpu
-
-#endif \ No newline at end of file
diff --git a/kernel/tests/include/kernel/tests/log_buffer.hpp b/kernel/tests/include/kernel/tests/log_buffer.hpp
deleted file mode 100644
index 5f2a1a7..0000000
--- a/kernel/tests/include/kernel/tests/log_buffer.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef KERNEL_TESTS_LOG_BUFFER_HPP
-#define KERNEL_TESTS_LOG_BUFFER_HPP
-
-#include <string>
-#include <vector>
-
-namespace kernel::tests::log_buffer
-{
-
- //! Append a message to the testing log buffer.
- //!
- //! @param message The message to append.
- auto append(std::string const & message) -> void;
-
- //! Clear the testing log buffer.
- auto clear() -> void;
-
- //! Get the testing log buffer as a single string.
- //!
- //! @return The testing log buffer as a single string.
- auto flat_messages() -> std::string;
-
- //! Get the testing log buffer.
- //!
- //! @note Messages may be split across multiple entries if they are longer than the internal kernel print buffer size.
- //!
- //! @return The testing log buffer.
- auto messages() -> std::vector<std::string> const &;
-
-} // namespace kernel::tests::log_buffer
-
-#endif \ No newline at end of file
diff --git a/kernel/tests/include/kernel/tests/simulated_memory.hpp b/kernel/tests/include/kernel/tests/simulated_memory.hpp
deleted file mode 100644
index 156b1e1..0000000
--- a/kernel/tests/include/kernel/tests/simulated_memory.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef TEACHOS_KERNEL_TESTS_SIMULATED_MEMORY_HPP
-#define TEACHOS_KERNEL_TESTS_SIMULATED_MEMORY_HPP
-
-#include <kstd/units>
-
-#include <cstddef>
-
-namespace kernel::tests::simulated_memory
-{
-
- auto init(kstd::units::bytes size) -> void;
-
- auto pmm_metadata_base() -> std::byte *;
-
- auto ram_base() -> std::byte *;
-
-} // namespace kernel::tests::simulated_memory
-
-#endif \ No newline at end of file
diff --git a/kernel/tests/kapi/cio.cpp b/kernel/tests/kapi/cio.cpp
deleted file mode 100644
index 6359fa8..0000000
--- a/kernel/tests/kapi/cio.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <kapi/cio.hpp>
-
-#include "kernel/tests/log_buffer.hpp"
-
-#include <iostream>
-#include <string>
-#include <string_view>
-
-namespace kapi::cio
-{
-
- namespace
- {
-
- class test_output_device : public output_device
- {
- public:
- test_output_device() = default;
-
- auto write(output_stream stream, std::string_view text) -> void override
- {
- auto & standard_stream = stream == output_stream::stdout ? std::cout : std::cerr;
- standard_stream << text;
- if (text != "\n")
- {
- kernel::tests::log_buffer::append(std::string{text});
- }
- }
- } device{};
-
- } // namespace
-
- auto init() -> void
- {
- set_output_device(device);
- }
-
-} // namespace kapi::cio \ No newline at end of file
diff --git a/kernel/tests/kapi/cpu.cpp b/kernel/tests/kapi/cpu.cpp
deleted file mode 100644
index 3ecaadc..0000000
--- a/kernel/tests/kapi/cpu.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "kernel/tests/cpu.hpp"
-
-#include <kapi/cpu.hpp>
-
-#include <atomic>
-#include <stdexcept>
-
-namespace kapi::cpu
-{
-
- auto init() -> void
- {
- auto static initialized = std::atomic_flag{};
- if (initialized.test_and_set())
- {
- throw std::logic_error("kapi::cpu::init() called more than once");
- }
-
- // TODO: make sure that simulated interrupt can run.
-
- return;
- }
-
- auto halt() -> void
- {
- throw kernel::tests::cpu::halt{};
- }
-
-} // namespace kapi::cpu \ No newline at end of file
diff --git a/kernel/tests/kapi/interrupts.cpp b/kernel/tests/kapi/interrupts.cpp
deleted file mode 100644
index 0077266..0000000
--- a/kernel/tests/kapi/interrupts.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <kapi/interrupts.hpp>
-
-namespace kapi::interrupts
-{
-
- auto enable() -> void
- {
- // TODO: enable simulated interrupts.
- }
-
-} // namespace kapi::interrupts \ No newline at end of file
diff --git a/kernel/tests/kapi/memory.cpp b/kernel/tests/kapi/memory.cpp
deleted file mode 100644
index 6de2f60..0000000
--- a/kernel/tests/kapi/memory.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-#include "kapi/memory.hpp"
-
-#include <kapi/memory.hpp>
-
-#include "kernel/tests/simulated_memory.hpp"
-
-#include <kstd/print>
-#include <kstd/units>
-
-#include <cstddef>
-#include <cstdint>
-#include <optional>
-#include <utility>
-
-namespace kapi::memory
-{
-
- namespace
- {
- //! The size of the simulated RAM.
- constexpr auto simulate_memory_size = kstd::units::MiB(32);
-
- struct test_boostrap_frame_allocator : frame_allocator
- {
- auto mark_used(frame) -> void override {}
-
- auto allocate_many(std::size_t count) noexcept -> std::optional<std::pair<frame, std::size_t>> override
- {
- auto start = next_free_frame;
- next_free_frame += count;
- return std::pair{frame{start}, count};
- }
-
- auto release_many(std::pair<frame, std::size_t>) -> void override {}
-
- std::size_t next_free_frame{};
- } boostrap_allocator;
-
- struct test_page_mapper : page_mapper
- {
- auto map(page page, frame frame, flags flags) -> std::byte * override
- {
- kstd::println("mapping page {} onto frame {} with flags {}", page.number(), frame.number(),
- static_cast<std::uint64_t>(flags));
-
- if ((page.start_address() & pmm_metadata_base.raw()) == pmm_metadata_base.raw())
- {
- auto offset = page.start_address() & ~pmm_metadata_base.raw();
- return kernel::tests::simulated_memory::pmm_metadata_base() + offset;
- }
-
- return nullptr;
- }
-
- auto unmap(page page) -> void override
- {
- kstd::println("unmapping page {}", page.number());
- }
-
- auto try_unmap(page page) noexcept -> bool override
- {
- kstd::println("trying to unmap page {}", page.number());
- return false;
- }
- } test_mapper;
-
- auto handoff_to_kernel_pmm(frame_allocator & new_allocator) -> void
- {
- for (auto i = 0uz; i < boostrap_allocator.next_free_frame; ++i)
- {
- new_allocator.mark_used(frame{i});
- }
- }
-
- } // namespace
-
- auto init() -> void
- {
- kernel::tests::simulated_memory::init(simulate_memory_size);
- set_frame_allocator(boostrap_allocator);
- set_page_mapper(test_mapper);
-
- init_pmm(simulate_memory_size / frame::size, handoff_to_kernel_pmm);
- }
-
-} // namespace kapi::memory \ No newline at end of file
diff --git a/kernel/tests/src/log_buffer.cpp b/kernel/tests/src/log_buffer.cpp
deleted file mode 100644
index 9e30afb..0000000
--- a/kernel/tests/src/log_buffer.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "kernel/tests/log_buffer.hpp"
-
-#include <algorithm>
-#include <string>
-#include <vector>
-
-namespace kernel::tests::log_buffer
-{
-
- namespace
- {
- std::vector<std::string> recorded_messages{};
- }
-
- auto append(std::string const & message) -> void
- {
- recorded_messages.push_back(message);
- }
-
- auto clear() -> void
- {
- recorded_messages.clear();
- }
-
- auto flat_messages() -> std::string
- {
- return std::ranges::fold_left(recorded_messages, std::string{},
- [](std::string accumulator, std::string const & message) {
- accumulator += message;
- return accumulator;
- });
- }
-
- auto messages() -> std::vector<std::string> const &
- {
- return recorded_messages;
- }
-
-} // namespace kernel::tests::log_buffer
diff --git a/kernel/tests/src/main.cpp b/kernel/tests/src/main.cpp
deleted file mode 100644
index b3ae142..0000000
--- a/kernel/tests/src/main.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "kapi/interrupts.hpp"
-#include "kapi/memory.hpp"
-#include <kapi/cio.hpp>
-#include <kapi/cpu.hpp>
-
-#include <catch2/catch_session.hpp>
-
-auto main(int argc, char ** argv) -> int
-{
- auto session = Catch::Session{};
-
- if (auto result = session.applyCommandLine(argc, argv); result != 0)
- {
- return result;
- }
-
- auto const & config = session.configData();
- auto skip_init = config.listTests || //
- config.listTags || //
- config.listReporters || //
- config.listListeners || //
- config.showHelp;
-
- if (!skip_init)
- {
- kapi::cio::init();
- kapi::cpu::init();
- kapi::interrupts::enable();
-
- kapi::memory::init();
- // note: no kernel heap is created, since we are in the test environment. Nonetheless, we still initialize the
- // memory subsystem, so that components that rely on it can be tested. No component must ever rely on the heap
- // allocator directly, rather they have to go through the new and delete. However, some components may use the frame
- // allocator and page mapper in order to perform their tasks.
- }
-
- return session.run();
-}
diff --git a/kernel/tests/src/simulated_memory.cpp b/kernel/tests/src/simulated_memory.cpp
deleted file mode 100644
index 9a9b354..0000000
--- a/kernel/tests/src/simulated_memory.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "kernel/tests/simulated_memory.hpp"
-
-#include <kstd/units>
-
-#include <cstddef>
-#include <vector>
-
-namespace kernel::tests::simulated_memory
-{
-
- namespace
- {
- auto constinit ram_storage = std::vector<std::byte>{};
- auto constinit pmm_storage = std::vector<std::byte>{};
- } // namespace
-
- auto init(kstd::units::bytes size) -> void
- {
- ram_storage.resize(size / kstd::units::bytes{1});
- pmm_storage.resize(size / kstd::units::bytes{1});
- }
-
- auto pmm_metadata_base() -> std::byte *
- {
- return pmm_storage.data();
- }
-
- auto ram_base() -> std::byte *
- {
- return ram_storage.data();
- }
-
-} // namespace kernel::tests::simulated_memory \ No newline at end of file
diff --git a/kernel/tests/src/test_support.tests.cpp b/kernel/tests/src/test_support.tests.cpp
deleted file mode 100644
index f835e65..0000000
--- a/kernel/tests/src/test_support.tests.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "kapi/cpu.hpp"
-#include "kapi/system.hpp"
-
-#include "kernel/tests/cpu.hpp"
-#include "kernel/tests/log_buffer.hpp"
-
-#include <kstd/print>
-
-#include <catch2/catch_test_macros.hpp>
-
-SCENARIO("Kernel test support infrastructure", "[support]")
-{
- GIVEN("the test support infrastructure is initialized")
- {
- WHEN("a CPU halt is requested")
- {
- THEN("the correct exception is thrown")
- {
- REQUIRE_THROWS_AS(kapi::cpu::halt(), kernel::tests::cpu::halt);
- }
- }
-
- WHEN("a the system panics")
- {
- kernel::tests::log_buffer::clear();
-
- THEN("the correct exception is thrown")
- {
- REQUIRE_THROWS_AS(kapi::system::panic("[kernel:tests] Test Panic"), kernel::tests::cpu::halt);
- }
-
- THEN("the message is appended to the log buffer")
- {
- CHECK_THROWS(kapi::system::panic("[kernel:tests] Test Panic"));
- REQUIRE(kernel::tests::log_buffer::flat_messages().contains("[kernel:tests] Test Panic"));
- }
- }
-
- WHEN("a regular print is issued")
- {
- kernel::tests::log_buffer::clear();
-
- kstd::println("[kernel:tests] Test Print");
-
- THEN("the message is appended to the log buffer")
- {
- REQUIRE(kernel::tests::log_buffer::flat_messages().contains("[kernel:tests] Test Print"));
- }
- }
- }
-} \ No newline at end of file