sim: Added test for over-sized image update
Added test which checks whether too big update image
will be rejected.
Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
diff --git a/sim/src/image.rs b/sim/src/image.rs
index e8aacc1..568cf0a 100644
--- a/sim/src/image.rs
+++ b/sim/src/image.rs
@@ -291,6 +291,29 @@
}
}
+ pub fn make_oversized_secondary_slot_image(self) -> Images {
+ let mut bad_flash = self.flash;
+ let ram = self.ram.clone(); // TODO: Avoid this clone.
+ let images = self.slots.into_iter().enumerate().map(|(image_num, slots)| {
+ let dep = BoringDep::new(image_num, &NO_DEPS);
+ let primaries = install_image(&mut bad_flash, &slots[0],
+ maximal(32784), &ram, &dep, false);
+ let upgrades = install_image(&mut bad_flash, &slots[1],
+ ImageSize::Oversized, &ram, &dep, false);
+ OneImage {
+ slots,
+ primaries,
+ upgrades,
+ }}).collect();
+ Images {
+ flash: bad_flash,
+ areadesc: self.areadesc,
+ images,
+ total_count: None,
+ ram: self.ram,
+ }
+ }
+
pub fn make_erased_secondary_image(self) -> Images {
let mut flash = self.flash;
let ram = self.ram.clone(); // TODO: Avoid this clone.
@@ -779,6 +802,53 @@
fails > 0
}
+ // Test taht too big upgrade image will be rejected
+ pub fn run_oversizefail_upgrade(&self) -> bool {
+ let mut flash = self.flash.clone();
+ let mut fails = 0;
+
+ info!("Try upgrade image with to big size");
+
+ // Only perform this test if an upgrade is expected to happen.
+ if !Caps::modifies_flash() {
+ info!("Skipping upgrade image with bad signature");
+ return false;
+ }
+
+ self.mark_upgrades(&mut flash, 0);
+ self.mark_permanent_upgrades(&mut flash, 0);
+ self.mark_upgrades(&mut flash, 1);
+
+ if !self.verify_trailers(&flash, 0, BOOT_MAGIC_GOOD,
+ BOOT_FLAG_SET, BOOT_FLAG_UNSET) {
+ warn!("1. Mismatched trailer for the primary slot");
+ fails += 1;
+ }
+
+ // Run the bootloader...
+ if !c::boot_go(&mut flash, &self.areadesc, None, None, false).success() {
+ warn!("Failed first boot");
+ fails += 1;
+ }
+
+ // State should not have changed
+ if !self.verify_images(&flash, 0, 0) {
+ warn!("Failed image verification");
+ fails += 1;
+ }
+ if !self.verify_trailers(&flash, 0, BOOT_MAGIC_GOOD,
+ BOOT_FLAG_SET, BOOT_FLAG_UNSET) {
+ warn!("2. Mismatched trailer for the primary slot");
+ fails += 1;
+ }
+
+ if fails > 0 {
+ error!("Expected an upgrade failure when image has to big size");
+ }
+
+ fails > 0
+ }
+
// Test that an upgrade is rejected. Assumes that the image was build
// such that the upgrade is instead a downgrade.
pub fn run_nodowngrade(&self) -> bool {