Skip to content

Commit 00a7496

Browse files
crab2313andreeaflorescu
authored andcommitted
tests: add simple test case for ARM64 Image loader
The test_image.bin is a cut of the first 4096 bytes of a pre-compiled linux kernel ARM64 Image. You can generate by: make Image head -c 4096 arch/arm64/boot/Image > test_image.bin Signed-off-by: Qiu Wenbo <qiuwenbo@phytium.com.cn>
1 parent ede7e4c commit 00a7496

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/loader/aarch64/pe/mod.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,41 @@ impl KernelLoader for PE {
146146
Ok(loader_result)
147147
}
148148
}
149+
150+
#[cfg(test)]
151+
mod tests {
152+
use super::*;
153+
use std::io::Cursor;
154+
use vm_memory::{Address, GuestAddress, GuestMemoryMmap};
155+
156+
const MEM_SIZE: u64 = 0x1000000;
157+
158+
fn create_guest_mem() -> GuestMemoryMmap {
159+
GuestMemoryMmap::from_ranges(&[(GuestAddress(0x0), (MEM_SIZE as usize))]).unwrap()
160+
}
161+
162+
fn make_image_bin() -> Vec<u8> {
163+
let mut v = Vec::new();
164+
v.extend_from_slice(include_bytes!("test_image.bin"));
165+
v
166+
}
167+
168+
#[test]
169+
fn load_image() {
170+
let gm = create_guest_mem();
171+
let mut image = make_image_bin();
172+
let kernel_addr = GuestAddress(0x200000);
173+
174+
let loader_result =
175+
PE::load(&gm, Some(kernel_addr), &mut Cursor::new(&image), None).unwrap();
176+
assert_eq!(loader_result.kernel_load.raw_value(), 0x280000);
177+
assert_eq!(loader_result.kernel_end, 0x281000);
178+
179+
image[0x39] = 0x0;
180+
let loader_result = PE::load(&gm, Some(kernel_addr), &mut Cursor::new(&image), None);
181+
assert_eq!(
182+
loader_result,
183+
Err(KernelLoaderError::Pe(Error::InvalidImageMagicNumber))
184+
);
185+
}
186+
}

src/loader/aarch64/pe/test_image.bin

4 KB
Binary file not shown.

0 commit comments

Comments
 (0)