Skip to content

Commit 0fe7e51

Browse files
committed
uefi: add public API unit test
Add a test that imitates how an public API user would utilize our abstractions to parse a chunk of memory as UEFI memory map.
1 parent 3e5c882 commit 0fe7e51

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

uefi/tests/memory_map.rs

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use uefi::mem::memory_map::*;
2+
3+
/// This test imitates a kernel that receives the UEFI memory map as boot
4+
/// information.
5+
#[test]
6+
fn parse_boot_information_efi_mmap() {
7+
let desc_size = size_of::<MemoryDescriptor>();
8+
let mut mmap_source = [
9+
MemoryDescriptor {
10+
ty: MemoryType::CONVENTIONAL,
11+
phys_start: 0x3000,
12+
virt_start: 0x3000,
13+
page_count: 1,
14+
att: MemoryAttribute::WRITE_BACK,
15+
},
16+
MemoryDescriptor {
17+
ty: MemoryType::CONVENTIONAL,
18+
phys_start: 0x2000,
19+
virt_start: 0x2000,
20+
page_count: 1,
21+
att: MemoryAttribute::WRITE_BACK,
22+
},
23+
MemoryDescriptor {
24+
ty: MemoryType::CONVENTIONAL,
25+
phys_start: 0x1000,
26+
virt_start: 0x1000,
27+
page_count: 1,
28+
att: MemoryAttribute::WRITE_BACK,
29+
},
30+
];
31+
let map_size = mmap_source.len() * desc_size;
32+
let meta = MemoryMapMeta {
33+
map_size,
34+
desc_size,
35+
map_key: Default::default(),
36+
desc_version: MemoryDescriptor::VERSION,
37+
};
38+
let mmap =
39+
unsafe { core::slice::from_raw_parts_mut(mmap_source.as_mut_ptr().cast::<u8>(), map_size) };
40+
41+
// BOOT INFORMATION END
42+
//
43+
// BEGIN PARSING
44+
45+
let mmap = MemoryMapRefMut::new(mmap, meta).unwrap();
46+
assert_eq!(mmap.entries().copied().collect::<Vec<_>>(), mmap_source);
47+
}

0 commit comments

Comments
 (0)