The Pedigree Project 0.1
modules/system/swap-vm-tests/main.cc
1/* Copyright (c) 2026, Pedigree Developers. */
2#include "pedigree/kernel/Log.h"
3#include "pedigree/kernel/linker/KernelElf.h"
4#include "pedigree/kernel/process/Scheduler.h"
5#include "pedigree/kernel/process/Thread.h"
6#include "pedigree/kernel/time/Time.h"
7
8#include "modules/Module.h"
9#if !HOSTED || !PEDIGREE_HOSTED_SMOKE_TESTS || !THREADS
10#error "The swap VM fixture requires hosted smoke tests with threads"
11#endif
12extern bool runSwapRegressions();
13extern void system_reset();
14namespace {
15int worker(void*) {
16 char name[] = "swap-vm-tests";
17 const auto deadline = Time::getTicks() + 10 * Time::Multiplier::Second;
18 while (!KernelElf::instance().moduleIsLoaded(name)) {
19 if (Time::getTicks() >= deadline) {
20 ERROR("SWAP-VM-TEST: FAIL fixture did not become active");
21 NOTICE("SWAP-VM-TEST: END FAIL");
22 system_reset();
23 return 1;
24 }
26 }
27 const bool passed = runSwapRegressions();
28 if (!passed)
29 NOTICE("SWAP-VM-TEST: END FAIL");
30 system_reset();
31 return passed ? 0 : 1;
32}
33bool entry() {
34 auto* thread = new Thread(Scheduler::instance().getKernelProcess(), worker, nullptr);
35 if (!thread)
36 return false;
37 thread->setName("Swap VM contracts");
38 thread->detach();
39 return true;
40}
41void exit() {}
42} // namespace
43MODULE_INFO_NON_UNLOADABLE("swap-vm-tests", &entry, &exit, "vfs");
static KernelElf & instance()
Definition KernelElf.h:135
static Scheduler & instance()
Definition Scheduler.h:96
void yield()
Definition Scheduler.cc:236