Skip to content

Commit 472f059

Browse files
committed
uefi: MemoryMap: more realistic unit tests
1 parent bea0abd commit 472f059

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

Diff for: uefi/src/table/boot.rs

+29-23
Original file line numberDiff line numberDiff line change
@@ -1999,21 +1999,27 @@ pub struct ProtocolSearchKey(NonNull<c_void>);
19991999

20002000
#[cfg(test)]
20012001
mod tests {
2002-
use core::mem::{size_of, size_of_val};
2003-
use uefi::table::boot::MemoryMapKey;
2004-
2005-
use crate::table::boot::{MemoryAttribute, MemoryMap, MemoryType};
2006-
2007-
use super::{MemoryDescriptor, MemoryMapIter};
2008-
2009-
fn buffer_to_map(buffer: &mut [MemoryDescriptor]) -> MemoryMap {
2010-
let byte_buffer = {
2011-
unsafe {
2012-
core::slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut u8, size_of_val(buffer))
2013-
}
2014-
};
2015-
2016-
MemoryMap::from_raw(byte_buffer.len(), byte_buffer, size_of::<MemoryDescriptor>(), MemoryMapKey(0))
2002+
use super::*;
2003+
2004+
/// Builds an EFI memory map buffer from the provider [`MemoryDescriptor`]s
2005+
/// that is close to a real world structure. This means that the reference
2006+
/// for an entry is not `size_of::<MemoryDescriptor>` but `desc_size`,
2007+
/// which is usually a few byte larger.
2008+
fn descs_to_buffer(descs: &[MemoryDescriptor]) -> (Vec<u8>, usize) {
2009+
let desc_size = unsafe { MemoryDescriptor::uefi_desc_size() };
2010+
let diff = desc_size - mem::size_of::<MemoryDescriptor>();
2011+
2012+
let mut buf = Vec::with_capacity(descs.len() * desc_size);
2013+
2014+
for desc in descs {
2015+
let bytes = unsafe {
2016+
let ptr = ptr::addr_of!(*desc);
2017+
slice::from_raw_parts(ptr.cast::<u8>(), mem::size_of::<MemoryDescriptor>())
2018+
};
2019+
buf.extend(bytes);
2020+
buf.extend([0].repeat(diff));
2021+
}
2022+
(buf, desc_size)
20172023
}
20182024

20192025
#[test]
@@ -2029,7 +2035,7 @@ mod tests {
20292035
att: MemoryAttribute::empty(),
20302036
};
20312037

2032-
let mut buffer = [
2038+
let descs = [
20332039
MemoryDescriptor {
20342040
phys_start: 2000,
20352041
..BASE
@@ -2045,7 +2051,8 @@ mod tests {
20452051
},
20462052
];
20472053

2048-
let mut mem_map = buffer_to_map(&mut buffer);
2054+
let (mut buffer, desc_size) = descs_to_buffer(&descs);
2055+
let mut mem_map = MemoryMap::from_raw(&mut buffer, desc_size, MemoryMapKey(0));
20492056

20502057
mem_map.sort();
20512058

@@ -2067,7 +2074,7 @@ mod tests {
20672074
att: MemoryAttribute::empty(),
20682075
};
20692076

2070-
const BUFFER: [MemoryDescriptor; 4] = [
2077+
let descs = [
20712078
MemoryDescriptor {
20722079
phys_start: 2000,
20732080
..BASE
@@ -2083,12 +2090,11 @@ mod tests {
20832090
},
20842091
];
20852092

2086-
let mut buffer = BUFFER;
2087-
2088-
let mut mem_map = buffer_to_map(&mut buffer);
2093+
let (mut buffer, desc_size) = descs_to_buffer(&descs);
2094+
let mut mem_map = MemoryMap::from_raw(&mut buffer, desc_size, MemoryMapKey(0));
20892095

20902096
for index in 0..3 {
2091-
assert_eq!(mem_map.get(index), BUFFER.get(index))
2097+
assert_eq!(mem_map.get(index), descs.get(index))
20922098
}
20932099

20942100
let mut_desc = mem_map.get_mut(2).unwrap();
@@ -2097,7 +2103,7 @@ mod tests {
20972103

20982104
let desc = mem_map.get(2).unwrap();
20992105

2100-
assert_ne!(*desc, BUFFER[2]);
2106+
assert_ne!(*desc, descs[2]);
21012107
}
21022108

21032109
// Added for debug purposes on test failure

0 commit comments

Comments
 (0)