Skip to content

Commit 561fccb

Browse files
committed
uefi: add public API unit test for memory_map module
Add a test that imitates how a public API user would utilize our abstractions to parse a chunk of memory as UEFI memory map.
1 parent 2abe692 commit 561fccb

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

uefi/tests/memory_map.rs

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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+
// This scenario is similar to what a kernel parsing a boot information
45+
// would do.
46+
47+
let mmap = MemoryMapRefMut::new(mmap, meta).unwrap();
48+
assert_eq!(mmap.entries().copied().collect::<Vec<_>>(), mmap_source);
49+
}

0 commit comments

Comments
 (0)