Files
k-os/crates/kernel/src/tests/memory.rs

50 lines
1.4 KiB
Rust

use super::*;
use crate::{SyscallOutcome, SyscallResult};
use domain::syscall::Syscall;
use types::bounded::PageCount;
use types::address::VirtualAddress;
#[test]
fn request_pages_allocates_and_grants_cap() {
let (mut k, _) = kernel_with_process();
let outcome = k.handle_syscall(Syscall::RequestPages {
count: PageCount::new(4).unwrap(),
});
assert!(matches!(
outcome,
SyscallOutcome::Complete(SyscallResult::Slot(_))
));
}
#[test]
fn request_pages_reduces_pool() {
let (mut k, _) = kernel_with_process();
let before = k.free_page_count();
k.handle_syscall(Syscall::RequestPages {
count: PageCount::new(10).unwrap(),
});
assert_eq!(k.free_page_count(), before - 10);
}
#[test]
fn release_pages_frees_and_restores_pool() {
let (mut k, _) = kernel_with_process();
let before = k.free_page_count();
let slot = match k.handle_syscall(Syscall::RequestPages {
count: PageCount::new(4).unwrap(),
}) {
SyscallOutcome::Complete(SyscallResult::Slot(s)) => s,
_ => panic!("expected slot"),
};
let outcome = k.handle_syscall(Syscall::ReleasePages {
addr: VirtualAddress::from_raw(0x8000_0000),
count: PageCount::new(4).unwrap(),
});
assert!(matches!(
outcome,
SyscallOutcome::Complete(SyscallResult::Ok)
));
assert_eq!(k.free_page_count(), before);
}