5 #include "sw/device/silicon_creator/lib/manifest.h"
7 #include "gtest/gtest.h"
8 #include "sw/device/silicon_creator/testing/rom_test.h"
10 namespace manifest_unittest {
16 manifest_.manifest_version.major = kManifestVersionMajor2;
17 manifest_.length =
sizeof(
manifest_t) + 0x1000;
18 manifest_.signed_region_end =
sizeof(
manifest_t) + 0x900;
20 manifest_.code_end =
sizeof(
manifest_t) + 0x800;
21 manifest_.entry_point = 0x500;
29 manifest_digest_region_get(&manifest_);
33 size_t digest_region_offset = offsetof(
manifest_t, usage_constraints) +
35 EXPECT_EQ(digest_region.
start,
36 reinterpret_cast<const char *
>(&manifest_) + digest_region_offset);
37 EXPECT_EQ(digest_region.
length,
38 manifest_.signed_region_end - digest_region_offset);
41 TEST_F(ManifestTest, CodeRegionGet) {
42 epmp_region_t code_region = manifest_code_region_get(&manifest_);
44 EXPECT_EQ(code_region.start,
45 reinterpret_cast<uintptr_t
>(&manifest_) + manifest_.code_start);
46 EXPECT_EQ(code_region.end,
47 reinterpret_cast<uintptr_t
>(&manifest_) + manifest_.code_end);
50 TEST_F(ManifestTest, EntryPointGet) {
51 uintptr_t entry_point = manifest_entry_point_get(&manifest_);
53 EXPECT_EQ(entry_point,
54 reinterpret_cast<uintptr_t
>(&manifest_) + manifest_.entry_point);
57 TEST_F(ManifestTest, CodeRegionEmpty) {
58 manifest_.code_start = manifest_.code_end;
59 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadCodeRegion);
62 TEST_F(ManifestTest, CodeRegionInsideManifest) {
63 manifest_.code_start =
sizeof(manifest_) - 1;
64 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadCodeRegion);
67 TEST_F(ManifestTest, CodeRegionOutsideImage) {
68 manifest_.code_end = manifest_.length + 1;
69 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadCodeRegion);
72 TEST_F(ManifestTest, CodeRegionUnalignedStart) {
73 ++manifest_.code_start;
74 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadCodeRegion);
77 TEST_F(ManifestTest, CodeRegionUnalignedEnd) {
79 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadCodeRegion);
82 TEST_F(ManifestTest, ExtensionOffsetUnaligned) {
83 manifest_.extensions.entries[1].offset = 1;
84 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadExtension);
87 TEST_F(ManifestTest, EntryPointBeforeCodeStart) {
88 manifest_.entry_point = manifest_.code_start - 1;
89 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadEntryPoint);
92 TEST_F(ManifestTest, EntryPointAfterCodeEnd) {
93 manifest_.entry_point = manifest_.code_end;
94 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadEntryPoint);
97 TEST_F(ManifestTest, EntryPointOutsideImage) {
98 manifest_.entry_point = manifest_.length;
99 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadEntryPoint);
102 TEST_F(ManifestTest, EntryPointUnaligned) {
103 ++manifest_.entry_point;
104 EXPECT_EQ(manifest_check(&manifest_), kErrorManifestBadEntryPoint);
107 TEST_F(ManifestTest, ExtSpxKeyGet) {
108 char flash[CHIP_ROM_EXT_RESIZABLE_SIZE_MAX];
109 memset(flash, 0,
sizeof(flash));
110 size_t ext_offset = CHIP_ROM_EXT_SIZE_MAX;
118 entry->offset = ext_offset;
123 header->
name = kManifestExtNameSpxKey;
126 EXPECT_EQ(manifest_ext_get_spx_key(
manifest, &result), kErrorOk);
127 EXPECT_EQ(&result->
header, header);