aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-01 22:52:22 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-01 22:52:22 +0200
commit3eb680cf5bcef626505cac82820996d8db4170d7 (patch)
tree9bf034f544ae773b653554a54edfce232f835754
parentf8456a8709b6894166865eb4ca067604f480eb7f (diff)
downloadteachos-3eb680cf5bcef626505cac82820996d8db4170d7.tar.xz
teachos-3eb680cf5bcef626505cac82820996d8db4170d7.zip
kernel/tests: prevent double mapping of pages
-rw-r--r--kernel/src/memory/block_list_allocator.tests.cpp13
-rw-r--r--kernel/src/test_support/page_mapper.cpp7
-rw-r--r--vgcore.1625255bin0 -> 13705216 bytes
3 files changed, 19 insertions, 1 deletions
diff --git a/kernel/src/memory/block_list_allocator.tests.cpp b/kernel/src/memory/block_list_allocator.tests.cpp
index 5f6f382..8ca426d 100644
--- a/kernel/src/memory/block_list_allocator.tests.cpp
+++ b/kernel/src/memory/block_list_allocator.tests.cpp
@@ -1,5 +1,7 @@
#include "kernel/memory/block_list_allocator.hpp"
+#include "kapi/memory.hpp"
+
#include "kernel/test_support/memory.hpp"
#include <kstd/units>
@@ -10,10 +12,21 @@
using namespace kstd::units_literals;
+namespace kapi
+{
+ namespace memory
+ {
+ auto reset() -> void;
+ }
+} // namespace kapi
+
SCENARIO("Block List Allocator Operations", "[memory][allocator]")
{
GIVEN("A newly initialized block list allocator mapped via the test sandbox")
{
+ kapi::memory::reset();
+ kapi::memory::init();
+
auto sandbox_base = kernel::tests::memory::heap_base();
kernel::memory::block_list_allocator allocator{sandbox_base};
diff --git a/kernel/src/test_support/page_mapper.cpp b/kernel/src/test_support/page_mapper.cpp
index 805998b..abdcae5 100644
--- a/kernel/src/test_support/page_mapper.cpp
+++ b/kernel/src/test_support/page_mapper.cpp
@@ -18,7 +18,12 @@ namespace kernel::tests
auto page_mapper::map(kapi::memory::page page, kapi::memory::frame frame, flags) -> std::byte *
{
- page_mappings.insert({page.number(), frame});
+ auto result = page_mappings.insert({page.number(), frame});
+ if (!result.second)
+ {
+ auto error = std::format("Page {} was already mapped!", page.number());
+ throw std::invalid_argument{error};
+ }
auto page_address = page.start_address();
auto sandbox_start = memory.heap_base();
diff --git a/vgcore.1625255 b/vgcore.1625255
new file mode 100644
index 0000000..de22445
--- /dev/null
+++ b/vgcore.1625255
Binary files differ