sim: Test software rollback protection
Signed-off-by: Håkon Øye Amundsen <haakon.amundsen@nordicsemi.no>
Signed-off-by: David Brown <david.brown@linaro.org>
diff --git a/sim/tests/core.rs b/sim/tests/core.rs
index 86736b3..07a8449 100644
--- a/sim/tests/core.rs
+++ b/sim/tests/core.rs
@@ -12,6 +12,7 @@
ImagesBuilder,
Images,
NO_DEPS,
+ REV_DEPS,
testlog,
};
use std::{
@@ -54,6 +55,7 @@
sim_test!(norevert, make_image(&NO_DEPS, true), run_norevert());
sim_test!(status_write_fails_complete, make_image(&NO_DEPS, true), run_with_status_fails_complete());
sim_test!(status_write_fails_with_reset, make_image(&NO_DEPS, true), run_with_status_fails_with_reset());
+sim_test!(downgrade_prevention, make_image(&REV_DEPS, true), run_nodowngrade());
// Test various combinations of incorrect dependencies.
test_shell!(dependency_combos, r, {
@@ -75,18 +77,21 @@
DepTest {
depends: [DepType::Nothing, DepType::Nothing],
upgrades: [UpgradeInfo::Upgraded, UpgradeInfo::Upgraded],
+ downgrade: false,
},
// If all of the dependencies are met, we should also upgrade.
DepTest {
depends: [DepType::Correct, DepType::Correct],
upgrades: [UpgradeInfo::Upgraded, UpgradeInfo::Upgraded],
+ downgrade: false,
},
// If none of the dependencies are met, the images should be held.
DepTest {
depends: [DepType::Newer, DepType::Newer],
upgrades: [UpgradeInfo::Held, UpgradeInfo::Held],
+ downgrade: false,
},
// If the first image is not met, we should hold back on the
@@ -95,12 +100,14 @@
DepTest {
depends: [DepType::Newer, DepType::Correct],
upgrades: [UpgradeInfo::Held, UpgradeInfo::Held],
+ downgrade: false,
},
// Test the variant in the other direction.
DepTest {
depends: [DepType::Correct, DepType::Newer],
upgrades: [UpgradeInfo::Held, UpgradeInfo::Held],
+ downgrade: false,
},
// Test where only the first image is upgraded, and there are no
@@ -108,18 +115,21 @@
DepTest {
depends: [DepType::Nothing, DepType::NoUpgrade],
upgrades: [UpgradeInfo::Upgraded, UpgradeInfo::Held],
+ downgrade: false,
},
// Test one image with a valid dependency on the first image.
DepTest {
depends: [DepType::OldCorrect, DepType::NoUpgrade],
upgrades: [UpgradeInfo::Upgraded, UpgradeInfo::Held],
+ downgrade: false,
},
// Test one image with an invalid dependency on the first image.
DepTest {
depends: [DepType::Newer, DepType::NoUpgrade],
upgrades: [UpgradeInfo::Held, UpgradeInfo::Held],
+ downgrade: false,
},
// Test where only the second image is upgraded, and there are no
@@ -127,18 +137,21 @@
DepTest {
depends: [DepType::NoUpgrade, DepType::Nothing],
upgrades: [UpgradeInfo::Held, UpgradeInfo::Upgraded],
+ downgrade: false,
},
// Test one image with a valid dependency on the second image.
DepTest {
depends: [DepType::NoUpgrade, DepType::OldCorrect],
upgrades: [UpgradeInfo::Held, UpgradeInfo::Upgraded],
+ downgrade: false,
},
// Test one image with an invalid dependency on the second image.
DepTest {
depends: [DepType::NoUpgrade, DepType::Newer],
upgrades: [UpgradeInfo::Held, UpgradeInfo::Held],
+ downgrade: false,
},
];