Skip to content

Commit cc3a4a7

Browse files
committed
uefi: mem: unit test for MemoryMapOwned + streamline test usage
Simplify MemoryMapOwned::from_initialized_mem to simplify and streamline the construction in unit tests.
1 parent 54fdfb2 commit cc3a4a7

File tree

2 files changed

+46
-30
lines changed

2 files changed

+46
-30
lines changed

uefi/src/mem/memory_map/impl_.rs

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -300,10 +300,12 @@ impl MemoryMapBackingMemory {
300300
Self(slice)
301301
}
302302

303+
/// INTERNAL, for unit tests.
304+
///
303305
/// Creates an instance from the provided memory, which is not necessarily
304306
/// on the UEFI heap.
305307
#[cfg(test)]
306-
fn from_slice(buffer: &mut [u8]) -> Self {
308+
pub(crate) fn from_slice(buffer: &mut [u8]) -> Self {
307309
let len = buffer.len();
308310
unsafe { Self::from_raw(buffer.as_mut_ptr(), len) }
309311
}
@@ -346,6 +348,10 @@ impl Drop for MemoryMapBackingMemory {
346348
log::error!("Failed to deallocate memory map: {e:?}");
347349
}
348350
} else {
351+
#[cfg(test)]
352+
log::debug!("Boot services are not available in unit tests.");
353+
354+
#[cfg(not(test))]
349355
log::debug!("Boot services are excited. Memory map won't be freed using the UEFI boot services allocator.");
350356
}
351357
}
@@ -361,30 +367,13 @@ pub struct MemoryMapOwned {
361367
}
362368

363369
impl MemoryMapOwned {
364-
/// Creates a [`MemoryMapOwned`] from the give initialized memory map behind
365-
/// the buffer and the reported `desc_size` from UEFI.
370+
/// Creates a [`MemoryMapOwned`] from the given **initialized** memory map
371+
/// (stored inside the provided buffer) and the corresponding
372+
/// [`MemoryMapMeta`].
366373
pub(crate) fn from_initialized_mem(buf: MemoryMapBackingMemory, meta: MemoryMapMeta) -> Self {
367374
assert!(meta.desc_size >= mem::size_of::<MemoryDescriptor>());
368375
let len = meta.entry_count();
369-
MemoryMapOwned {
370-
buf,
371-
meta,
372-
len,
373-
}
374-
}
375-
376-
#[cfg(test)]
377-
pub(super) fn from_raw(buf: &mut [u8], desc_size: usize) -> Self {
378-
let mem = MemoryMapBackingMemory::from_slice(buf);
379-
Self::from_initialized_mem(
380-
mem,
381-
MemoryMapMeta {
382-
map_size: buf.len(),
383-
desc_size,
384-
map_key: MemoryMapKey(0),
385-
desc_version: MemoryDescriptor::VERSION,
386-
},
387-
)
376+
MemoryMapOwned { buf, meta, len }
388377
}
389378
}
390379

@@ -496,7 +485,7 @@ mod tests {
496485
fn memory_map_ref() {
497486
let mut memory = new_mmap_memory();
498487
let (mmap, meta) = mmap_raw(&mut memory);
499-
let mmap = MemoryMapRef::new(mmap, meta, None).unwrap();
488+
let mmap = MemoryMapRef::new(mmap, meta).unwrap();
500489

501490
assert_eq!(mmap.entries().count(), 3);
502491
assert_eq!(
@@ -511,7 +500,25 @@ mod tests {
511500
fn memory_map_ref_mut() {
512501
let mut memory = new_mmap_memory();
513502
let (mmap, meta) = mmap_raw(&mut memory);
514-
let mut mmap = MemoryMapRefMut::new(mmap, meta, None).unwrap();
503+
let mut mmap = MemoryMapRefMut::new(mmap, meta).unwrap();
504+
505+
assert_eq!(mmap.entries().count(), 3);
506+
assert_eq!(
507+
mmap.entries().copied().collect::<Vec<_>>().as_slice(),
508+
&BASE_MMAP_UNSORTED
509+
);
510+
assert!(!mmap.is_sorted());
511+
mmap.sort();
512+
assert!(mmap.is_sorted());
513+
}
514+
515+
/// Basic sanity checks for the type [`MemoryMapOwned`].
516+
#[test]
517+
fn memory_map_owned() {
518+
let mut memory = new_mmap_memory();
519+
let (mmap, meta) = mmap_raw(&mut memory);
520+
let mmap = MemoryMapBackingMemory::from_slice(mmap);
521+
let mut mmap = MemoryMapOwned::from_initialized_mem(mmap, meta);
515522

516523
assert_eq!(mmap.entries().count(), 3);
517524
assert_eq!(

uefi/src/mem/memory_map/mod.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,21 @@ mod tests_mmap_artificial {
105105
use core::mem::{size_of, size_of_val};
106106

107107
fn buffer_to_map(buffer: &mut [MemoryDescriptor]) -> MemoryMapOwned {
108-
let byte_buffer = {
109-
unsafe {
110-
core::slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut u8, size_of_val(buffer))
111-
}
108+
let mmap_len = size_of_val(buffer);
109+
let mmap = {
110+
unsafe { core::slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut u8, mmap_len) }
112111
};
113112

114-
MemoryMapOwned::from_raw(byte_buffer, size_of::<MemoryDescriptor>())
113+
let mmap = MemoryMapBackingMemory::from_slice(mmap);
114+
MemoryMapOwned::from_initialized_mem(
115+
mmap,
116+
MemoryMapMeta {
117+
map_size: mmap_len,
118+
desc_size: size_of::<MemoryDescriptor>(),
119+
map_key: Default::default(),
120+
desc_version: MemoryDescriptor::VERSION,
121+
},
122+
)
115123
}
116124

117125
#[test]
@@ -258,7 +266,8 @@ mod tests_mmap_real {
258266
let mut buf = MMAP_RAW;
259267
let buf =
260268
unsafe { slice::from_raw_parts_mut(buf.as_mut_ptr().cast::<u8>(), MMAP_META.map_size) };
261-
let mut mmap = MemoryMapOwned::from_raw(buf, MMAP_META.desc_size);
269+
let buf = MemoryMapBackingMemory::from_slice(buf);
270+
let mut mmap = MemoryMapOwned::from_initialized_mem(buf, MMAP_META);
262271
mmap.sort();
263272

264273
let entries = mmap.entries().copied().collect::<Vec<_>>();

0 commit comments

Comments
 (0)