Lei YU | 0783076 | 2019-03-01 17:17:28 +0800 | [diff] [blame] | 1 | #include <string> |
| 2 | #include <utility> |
| 3 | |
| 4 | #include <gtest/gtest.h> |
| 5 | |
| 6 | using PartClear = std::pair<std::string, bool>; |
| 7 | namespace utils |
| 8 | { |
| 9 | extern std::vector<PartClear> getPartsToClear(const std::string& info); |
| 10 | } |
| 11 | |
| 12 | TEST(TestItemUpdaterStatic, getPartsToClearOK) |
| 13 | { |
| 14 | constexpr auto info = |
| 15 | "Flash info:\n" |
| 16 | "-----------\n" |
| 17 | "Name = /dev/mtd6\n" |
| 18 | "Total size = 64MB Flags E:ECC, P:PRESERVED, R:READONLY, " |
| 19 | "B:BACKUP\n" |
| 20 | "Erase granule = 64KB F:REPROVISION, V:VOLATILE, C:CLEARECC\n" |
| 21 | "\n" |
| 22 | "TOC@0x00000000 Partitions:\n" |
| 23 | "-----------\n" |
| 24 | "ID=00 part 0x00000000..0x00002000 (actual=0x00002000) " |
| 25 | "[----------]\n" |
| 26 | "ID=01 HBEL 0x00008000..0x0002c000 (actual=0x00024000) " |
| 27 | "[E-----F-C-]\n" |
| 28 | "ID=02 GUARD 0x0002c000..0x00031000 (actual=0x00005000) " |
| 29 | "[E--P--F-C-]\n" |
| 30 | "ID=03 NVRAM 0x00031000..0x000c1000 (actual=0x00090000) " |
| 31 | "[---P--F---]\n" |
| 32 | "ID=04 SECBOOT 0x000c1000..0x000e5000 (actual=0x00024000) " |
| 33 | "[E--P------]\n" |
| 34 | "ID=05 DJVPD 0x000e5000..0x0012d000 (actual=0x00048000) " |
| 35 | "[E--P--F-C-]\n" |
| 36 | "ID=06 MVPD 0x0012d000..0x001bd000 (actual=0x00090000) " |
| 37 | "[E--P--F-C-]\n" |
| 38 | "ID=07 CVPD 0x001bd000..0x00205000 (actual=0x00048000) " |
| 39 | "[E--P--F-C-]\n" |
| 40 | "ID=08 HBB 0x00205000..0x00305000 (actual=0x00100000) " |
| 41 | "[EL--R-----]\n" |
| 42 | "ID=09 HBD 0x00305000..0x00425000 (actual=0x00120000) " |
| 43 | "[EL--------]\n" |
| 44 | "ID=10 HBI 0x00425000..0x013e5000 (actual=0x00fc0000) " |
| 45 | "[EL--R-----]\n" |
| 46 | "ID=11 SBE 0x013e5000..0x014a1000 (actual=0x000bc000) " |
| 47 | "[ELI-R-----]\n" |
| 48 | "ID=12 HCODE 0x014a1000..0x015c1000 (actual=0x00120000) " |
| 49 | "[EL--R-----]\n" |
| 50 | "ID=13 HBRT 0x015c1000..0x01bc1000 (actual=0x00600000) " |
| 51 | "[EL--R-----]\n" |
| 52 | "ID=14 PAYLOAD 0x01bc1000..0x01cc1000 (actual=0x00100000) " |
| 53 | "[-L--R-----]\n" |
| 54 | "ID=15 BOOTKERNEL 0x01cc1000..0x02bc1000 (actual=0x00f00000) " |
| 55 | "[-L--R-----]\n" |
| 56 | "ID=16 OCC 0x02bc1000..0x02ce1000 (actual=0x00120000) " |
| 57 | "[EL--R-----]\n" |
| 58 | "ID=17 FIRDATA 0x02ce1000..0x02ce4000 (actual=0x00003000) " |
| 59 | "[E-----F-C-]\n" |
| 60 | "ID=18 CAPP 0x02ce4000..0x02d08000 (actual=0x00024000) " |
| 61 | "[EL--R-----]\n" |
| 62 | "ID=19 BMC_INV 0x02d08000..0x02d11000 (actual=0x00009000) " |
| 63 | "[------F---]\n" |
| 64 | "ID=20 HBBL 0x02d11000..0x02d18000 (actual=0x00007000) " |
| 65 | "[EL--R-----]\n" |
| 66 | "ID=21 ATTR_TMP 0x02d18000..0x02d20000 (actual=0x00008000) " |
| 67 | "[------F---]\n" |
| 68 | "ID=22 ATTR_PERM 0x02d20000..0x02d28000 (actual=0x00008000) " |
| 69 | "[E-----F-C-]\n" |
| 70 | "ID=23 VERSION 0x02d28000..0x02d2a000 (actual=0x00002000) " |
| 71 | "[-L--R-----]\n" |
| 72 | "ID=24 IMA_CATALOG 0x02d2a000..0x02d6a000 (actual=0x00040000) " |
| 73 | "[EL--R-----]\n" |
| 74 | "ID=25 RINGOVD 0x02d6a000..0x02d8a000 (actual=0x00020000) " |
| 75 | "[----------]\n" |
| 76 | "ID=26 WOFDATA 0x02d8a000..0x0308a000 (actual=0x00300000) " |
| 77 | "[EL--R-----]\n" |
| 78 | "ID=27 HB_VOLATILE 0x0308a000..0x0308f000 (actual=0x00005000) " |
| 79 | "[E-----F-CV]\n" |
| 80 | "ID=28 MEMD 0x0308f000..0x0309d000 (actual=0x0000e000) " |
| 81 | "[EL--R-----]\n" |
| 82 | "ID=29 SBKT 0x0309d000..0x030a1000 (actual=0x00004000) " |
| 83 | "[EL--R-----]\n" |
| 84 | "ID=30 HDAT 0x030a1000..0x030a9000 (actual=0x00008000) " |
| 85 | "[EL--R-----]\n" |
| 86 | "ID=31 UVISOR 0x030a9000..0x031a9000 (actual=0x00100000) " |
| 87 | "[-L--R-----]\n" |
| 88 | "ID=32 OCMBFW 0x031a9000..0x031f4000 (actual=0x0004b000) " |
| 89 | "[EL--R-----]\n" |
| 90 | "ID=33 UVBWLIST 0x031f4000..0x03204000 (actual=0x00010000) " |
| 91 | "[-L--R-----]\n" |
| 92 | "ID=34 BACKUP_PART 0x03ff7000..0x03fff000 (actual=0x00000000) " |
| 93 | "[-----B----]"; |
| 94 | auto parts = utils::getPartsToClear(info); |
| 95 | EXPECT_EQ(11, parts.size()); |
| 96 | |
| 97 | EXPECT_EQ("HBEL", parts[0].first); |
| 98 | EXPECT_TRUE(parts[0].second); |
| 99 | |
| 100 | EXPECT_EQ("GUARD", parts[1].first); |
| 101 | EXPECT_TRUE(parts[1].second); |
| 102 | |
| 103 | EXPECT_EQ("NVRAM", parts[2].first); |
| 104 | EXPECT_FALSE(parts[2].second); |
| 105 | |
| 106 | EXPECT_EQ("HB_VOLATILE", parts[10].first); |
| 107 | EXPECT_TRUE(parts[10].second); |
| 108 | } |
| 109 | |
| 110 | TEST(TestItemUpdaterStatic, getPartsToClearNotOK) |
| 111 | { |
| 112 | // Verify the it does not crash on malformed texts |
| 113 | constexpr auto info = |
| 114 | "0x0308a000..0x0308f000(actual=0x00005000)" |
| 115 | "[E-----F-CV]\n" // missing ID and name with F |
| 116 | "ID=27 HB_VOLATILE 0x0308a000..0x0308f000 (actual=0x00005000) " |
| 117 | "E-----F-CV]\n" // missing [ |
| 118 | "ID=22 ATTR_PERM 0x02d20000..0x02d28000 (actual=0x00008000) " |
| 119 | "[E-----F-C-]\n" // The only valid one |
| 120 | "ID=28 MEMD 0x0308f000..0x0309d000 (actual=0x0000e000) " |
| 121 | "[----]\n" // missing flags |
| 122 | "SBKT 0x0309d000..0x030a1000 (actual=0x00004000) " |
| 123 | "[EL--R-----]\n"; // missing ID |
| 124 | |
| 125 | auto parts = utils::getPartsToClear(info); |
| 126 | EXPECT_EQ(1, parts.size()); |
| 127 | EXPECT_EQ("ATTR_PERM", parts[0].first); |
| 128 | EXPECT_TRUE(parts[0].second); |
| 129 | } |
Alexander Filippov | fa9a6be | 2019-12-18 12:06:47 +0300 | [diff] [blame^] | 130 | |
| 131 | TEST(TestItemUpdaterStatic, getPartsToClearP8BasedOK) |
| 132 | { |
| 133 | // NOTE: P8 doesn't support CLEARECC flags. |
| 134 | constexpr auto info = R"( |
| 135 | Flash info: |
| 136 | ----------- |
| 137 | Name = /dev/mtd6 |
| 138 | Total size = 64MB Flags E:ECC, P:PRESERVED, R:READONLY, B:BACKUP |
| 139 | Erase granule = 64KB F:REPROVISION, V:VOLATILE, C:CLEARECC |
| 140 | |
| 141 | TOC@0x00000000 Partitions: |
| 142 | ----------- |
| 143 | ID=00 part 0x00000000..0x00001000 (actual=0x00001000) [----R-----] |
| 144 | ID=01 HBEL 0x00008000..0x0002c000 (actual=0x00024000) [E-----F---] |
| 145 | ID=02 GUARD 0x0002c000..0x00031000 (actual=0x00005000) [E--P--F---] |
| 146 | ID=03 HBD 0x00031000..0x0008b000 (actual=0x0005a000) [E---R-----] |
| 147 | ID=04 HBD_RW 0x0008b000..0x00091000 (actual=0x00006000) [E---------] |
| 148 | ID=05 DJVPD 0x00091000..0x000d9000 (actual=0x00048000) [E-----F---] |
| 149 | ID=06 MVPD 0x000d9000..0x00169000 (actual=0x00090000) [E-----F---] |
| 150 | ID=07 CVPD 0x00169000..0x001b1000 (actual=0x00048000) [E-----F---] |
| 151 | ID=08 HBI 0x001b1000..0x00751000 (actual=0x005a0000) [EL--R-----] |
| 152 | ID=09 SBEC 0x00751000..0x007e1000 (actual=0x00090000) [E-I-R-----] |
| 153 | ID=10 SBE 0x007e1000..0x00829000 (actual=0x00048000) [E-I-R-----] |
| 154 | ID=11 WINK 0x00829000..0x00949000 (actual=0x00120000) [EL--R-----] |
| 155 | ID=12 HBRT 0x00949000..0x00ca9000 (actual=0x00360000) [EL--R-----] |
| 156 | ID=13 PAYLOAD 0x00ca9000..0x00d29000 (actual=0x00080000) [----R-----] |
| 157 | ID=14 BOOTKERNEL 0x00d29000..0x01ca9000 (actual=0x00f80000) [----R-----] |
| 158 | ID=15 ATTR_TMP 0x01ca9000..0x01cb1000 (actual=0x00008000) [------F---] |
| 159 | ID=16 ATTR_PERM 0x01cb1000..0x01cb9000 (actual=0x00008000) [E-----F---] |
| 160 | ID=17 OCC 0x01cb9000..0x01dd9000 (actual=0x00120000) [E---R-----] |
| 161 | ID=18 TEST 0x01dd9000..0x01de2000 (actual=0x00009000) [E---------] |
| 162 | ID=19 NVRAM 0x01de2000..0x01e72000 (actual=0x00090000) [---P--F---] |
| 163 | ID=20 FIRDATA 0x01e72000..0x01e75000 (actual=0x00003000) [E-----F---] |
| 164 | ID=21 BMC_INV 0x01e75000..0x01e7e000 (actual=0x00009000) [------F---] |
| 165 | ID=22 CAPP 0x01e7e000..0x01ea2000 (actual=0x00024000) [E---R-----] |
| 166 | ID=23 SECBOOT 0x01ea2000..0x01ec6000 (actual=0x00024000) [E--P------] |
| 167 | ID=24 IMA_CATALOG 0x01ec6000..0x01ecf000 (actual=0x00009000) [E---R-F---] |
| 168 | ID=25 HBB 0x01f60000..0x01ff0000 (actual=0x00090000) [EL--R-----] |
| 169 | ID=26 VERSION 0x01ff7000..0x01ff8000 (actual=0x00001000) [----R-----] |
| 170 | ID=27 BACKUP_PART 0x01ff8000..0x02000000 (actual=0x00000000) [----RB----] |
| 171 | ID=28 OTHER_SIDE 0x02000000..0x02008000 (actual=0x00000000) [----RB----] |
| 172 | )"; |
| 173 | |
| 174 | auto parts = utils::getPartsToClear(info); |
| 175 | EXPECT_EQ(11, parts.size()); |
| 176 | |
| 177 | EXPECT_EQ("HBEL", parts[0].first); |
| 178 | EXPECT_TRUE(parts[0].second); |
| 179 | |
| 180 | EXPECT_EQ("GUARD", parts[1].first); |
| 181 | EXPECT_TRUE(parts[1].second); |
| 182 | |
| 183 | EXPECT_EQ("NVRAM", parts[7].first); |
| 184 | EXPECT_FALSE(parts[7].second); |
| 185 | |
| 186 | EXPECT_EQ("IMA_CATALOG", parts[10].first); |
| 187 | EXPECT_TRUE(parts[10].second); |
| 188 | } |