5 #include "sw/device/silicon_creator/rom/boot_policy.h"
7 #include "gtest/gtest.h"
9 #include "sw/device/silicon_creator/lib/mock_manifest.h"
10 #include "sw/device/silicon_creator/lib/mock_shutdown.h"
11 #include "sw/device/silicon_creator/rom/mock_boot_policy_ptrs.h"
12 #include "sw/device/silicon_creator/testing/rom_test.h"
14 namespace manifest_unittest {
16 using ::testing::Return;
20 rom_test::MockBootPolicyPtrs boot_policy_ptrs_;
21 rom_test::MockManifest mock_manifest_;
31 public testing::WithParamInterface<ManifestLengthTestCase> {};
39 if (GetParam().result == kErrorOk) {
40 EXPECT_CALL(mock_manifest_, Check(&
manifest)).WillOnce(Return(kErrorOk));
47 INSTANTIATE_TEST_SUITE_P(
48 GoodLengths, ManifestCheckLengthTest,
51 ManifestLengthTestCase{CHIP_ROM_EXT_SIZE_MAX >> 1, kErrorOk},
52 ManifestLengthTestCase{CHIP_ROM_EXT_SIZE_MAX, kErrorOk},
53 ManifestLengthTestCase{CHIP_ROM_EXT_RESIZABLE_SIZE_MAX, kErrorOk},
55 kErrorBootPolicyBadLength},
56 ManifestLengthTestCase{CHIP_ROM_EXT_RESIZABLE_SIZE_MAX + 1,
57 kErrorBootPolicyBadLength}));
59 TEST_F(BootPolicyTest, ManifestCheckBadIdentifier) {
64 kErrorBootPolicyBadIdentifier);
67 TEST_F(BootPolicyTest, ManifestCheckBadManifest) {
73 EXPECT_CALL(mock_manifest_, Check(&
manifest))
74 .WillOnce(Return(kErrorManifestBadEntryPoint));
76 kErrorManifestBadEntryPoint);
79 TEST_F(BootPolicyTest, ManifestCheckRollback) {
86 EXPECT_CALL(mock_manifest_, Check(&
manifest)).WillOnce(Return(kErrorOk));
88 kErrorBootPolicyRollback);
105 public testing::WithParamInterface<ManifestOrderTestCase> {};
111 .version_minor = param.version_a.minor,
112 .security_version = param.version_a.security,
116 .version_minor = param.version_b.minor,
117 .security_version = param.version_b.security,
120 EXPECT_CALL(boot_policy_ptrs_, ManifestA).WillOnce(Return(&manifest_a));
121 EXPECT_CALL(boot_policy_ptrs_, ManifestB).WillOnce(Return(&manifest_b));
124 if (param.is_a_first) {
125 EXPECT_EQ(res.
ordered[0], &manifest_a);
126 EXPECT_EQ(res.
ordered[1], &manifest_b);
128 EXPECT_EQ(res.
ordered[0], &manifest_b);
129 EXPECT_EQ(res.
ordered[1], &manifest_a);
133 INSTANTIATE_TEST_SUITE_P(
134 SecurityVersionCases, ManifestOrderTest,
137 ManifestOrderTestCase{
138 .version_a = {0, 0, 0},
139 .version_b = {0, 0, 0},
143 ManifestOrderTestCase{
144 .version_a = {1, 0, 0},
145 .version_b = {0, 0, 0},
149 ManifestOrderTestCase{
150 .version_a = {0, 0, 0},
151 .version_b = {1, 0, 0},
155 ManifestOrderTestCase{
156 .version_a = {0, 1, 0},
157 .version_b = {0, 0, 0},
161 ManifestOrderTestCase{
162 .version_a = {0, 1, 0},
163 .version_b = {0, 2, 0},
167 ManifestOrderTestCase{
168 .version_a = {0, 3, 1},
169 .version_b = {0, 3, 0},
173 ManifestOrderTestCase{
174 .version_a = {0, 3, 1},
175 .version_b = {0, 3, 5},
179 ManifestOrderTestCase{
180 .version_a = {std::numeric_limits<int32_t>::max(), 0, 0},
182 {
static_cast<uint32_t
>(std::numeric_limits<int32_t>::max()) + 1,