107830764SLei YU #include <string>
207830764SLei YU #include <utility>
307830764SLei YU
407830764SLei YU #include <gtest/gtest.h>
507830764SLei YU
607830764SLei YU using PartClear = std::pair<std::string, bool>;
707830764SLei YU namespace utils
807830764SLei YU {
907830764SLei YU extern std::vector<PartClear> getPartsToClear(const std::string& info);
1007830764SLei YU }
1107830764SLei YU
TEST(TestItemUpdaterStatic,getPartsToClearOK)1207830764SLei YU TEST(TestItemUpdaterStatic, getPartsToClearOK)
1307830764SLei YU {
1407830764SLei YU constexpr auto info =
1507830764SLei YU "Flash info:\n"
1607830764SLei YU "-----------\n"
1707830764SLei YU "Name = /dev/mtd6\n"
1807830764SLei YU "Total size = 64MB Flags E:ECC, P:PRESERVED, R:READONLY, "
1907830764SLei YU "B:BACKUP\n"
2007830764SLei YU "Erase granule = 64KB F:REPROVISION, V:VOLATILE, C:CLEARECC\n"
2107830764SLei YU "\n"
2207830764SLei YU "TOC@0x00000000 Partitions:\n"
2307830764SLei YU "-----------\n"
2407830764SLei YU "ID=00 part 0x00000000..0x00002000 (actual=0x00002000) "
2507830764SLei YU "[----------]\n"
2607830764SLei YU "ID=01 HBEL 0x00008000..0x0002c000 (actual=0x00024000) "
2707830764SLei YU "[E-----F-C-]\n"
2807830764SLei YU "ID=02 GUARD 0x0002c000..0x00031000 (actual=0x00005000) "
2907830764SLei YU "[E--P--F-C-]\n"
3007830764SLei YU "ID=03 NVRAM 0x00031000..0x000c1000 (actual=0x00090000) "
3107830764SLei YU "[---P--F---]\n"
3207830764SLei YU "ID=04 SECBOOT 0x000c1000..0x000e5000 (actual=0x00024000) "
3307830764SLei YU "[E--P------]\n"
3407830764SLei YU "ID=05 DJVPD 0x000e5000..0x0012d000 (actual=0x00048000) "
3507830764SLei YU "[E--P--F-C-]\n"
3607830764SLei YU "ID=06 MVPD 0x0012d000..0x001bd000 (actual=0x00090000) "
3707830764SLei YU "[E--P--F-C-]\n"
3807830764SLei YU "ID=07 CVPD 0x001bd000..0x00205000 (actual=0x00048000) "
3907830764SLei YU "[E--P--F-C-]\n"
4007830764SLei YU "ID=08 HBB 0x00205000..0x00305000 (actual=0x00100000) "
4107830764SLei YU "[EL--R-----]\n"
4207830764SLei YU "ID=09 HBD 0x00305000..0x00425000 (actual=0x00120000) "
4307830764SLei YU "[EL--------]\n"
4407830764SLei YU "ID=10 HBI 0x00425000..0x013e5000 (actual=0x00fc0000) "
4507830764SLei YU "[EL--R-----]\n"
4607830764SLei YU "ID=11 SBE 0x013e5000..0x014a1000 (actual=0x000bc000) "
4707830764SLei YU "[ELI-R-----]\n"
4807830764SLei YU "ID=12 HCODE 0x014a1000..0x015c1000 (actual=0x00120000) "
4907830764SLei YU "[EL--R-----]\n"
5007830764SLei YU "ID=13 HBRT 0x015c1000..0x01bc1000 (actual=0x00600000) "
5107830764SLei YU "[EL--R-----]\n"
5207830764SLei YU "ID=14 PAYLOAD 0x01bc1000..0x01cc1000 (actual=0x00100000) "
5307830764SLei YU "[-L--R-----]\n"
5407830764SLei YU "ID=15 BOOTKERNEL 0x01cc1000..0x02bc1000 (actual=0x00f00000) "
5507830764SLei YU "[-L--R-----]\n"
5607830764SLei YU "ID=16 OCC 0x02bc1000..0x02ce1000 (actual=0x00120000) "
5707830764SLei YU "[EL--R-----]\n"
5807830764SLei YU "ID=17 FIRDATA 0x02ce1000..0x02ce4000 (actual=0x00003000) "
5907830764SLei YU "[E-----F-C-]\n"
6007830764SLei YU "ID=18 CAPP 0x02ce4000..0x02d08000 (actual=0x00024000) "
6107830764SLei YU "[EL--R-----]\n"
6207830764SLei YU "ID=19 BMC_INV 0x02d08000..0x02d11000 (actual=0x00009000) "
6307830764SLei YU "[------F---]\n"
6407830764SLei YU "ID=20 HBBL 0x02d11000..0x02d18000 (actual=0x00007000) "
6507830764SLei YU "[EL--R-----]\n"
6607830764SLei YU "ID=21 ATTR_TMP 0x02d18000..0x02d20000 (actual=0x00008000) "
6707830764SLei YU "[------F---]\n"
6807830764SLei YU "ID=22 ATTR_PERM 0x02d20000..0x02d28000 (actual=0x00008000) "
6907830764SLei YU "[E-----F-C-]\n"
7007830764SLei YU "ID=23 VERSION 0x02d28000..0x02d2a000 (actual=0x00002000) "
7107830764SLei YU "[-L--R-----]\n"
7207830764SLei YU "ID=24 IMA_CATALOG 0x02d2a000..0x02d6a000 (actual=0x00040000) "
7307830764SLei YU "[EL--R-----]\n"
7407830764SLei YU "ID=25 RINGOVD 0x02d6a000..0x02d8a000 (actual=0x00020000) "
7507830764SLei YU "[----------]\n"
7607830764SLei YU "ID=26 WOFDATA 0x02d8a000..0x0308a000 (actual=0x00300000) "
7707830764SLei YU "[EL--R-----]\n"
7807830764SLei YU "ID=27 HB_VOLATILE 0x0308a000..0x0308f000 (actual=0x00005000) "
7907830764SLei YU "[E-----F-CV]\n"
8007830764SLei YU "ID=28 MEMD 0x0308f000..0x0309d000 (actual=0x0000e000) "
8107830764SLei YU "[EL--R-----]\n"
8207830764SLei YU "ID=29 SBKT 0x0309d000..0x030a1000 (actual=0x00004000) "
8307830764SLei YU "[EL--R-----]\n"
8407830764SLei YU "ID=30 HDAT 0x030a1000..0x030a9000 (actual=0x00008000) "
8507830764SLei YU "[EL--R-----]\n"
8607830764SLei YU "ID=31 UVISOR 0x030a9000..0x031a9000 (actual=0x00100000) "
8707830764SLei YU "[-L--R-----]\n"
8807830764SLei YU "ID=32 OCMBFW 0x031a9000..0x031f4000 (actual=0x0004b000) "
8907830764SLei YU "[EL--R-----]\n"
9007830764SLei YU "ID=33 UVBWLIST 0x031f4000..0x03204000 (actual=0x00010000) "
9107830764SLei YU "[-L--R-----]\n"
9207830764SLei YU "ID=34 BACKUP_PART 0x03ff7000..0x03fff000 (actual=0x00000000) "
9307830764SLei YU "[-----B----]";
9407830764SLei YU auto parts = utils::getPartsToClear(info);
9507830764SLei YU EXPECT_EQ(11, parts.size());
9607830764SLei YU
9707830764SLei YU EXPECT_EQ("HBEL", parts[0].first);
9807830764SLei YU EXPECT_TRUE(parts[0].second);
9907830764SLei YU
10007830764SLei YU EXPECT_EQ("GUARD", parts[1].first);
10107830764SLei YU EXPECT_TRUE(parts[1].second);
10207830764SLei YU
10307830764SLei YU EXPECT_EQ("NVRAM", parts[2].first);
10407830764SLei YU EXPECT_FALSE(parts[2].second);
10507830764SLei YU
10607830764SLei YU EXPECT_EQ("HB_VOLATILE", parts[10].first);
10707830764SLei YU EXPECT_TRUE(parts[10].second);
10807830764SLei YU }
10907830764SLei YU
TEST(TestItemUpdaterStatic,getPartsToClearNotOK)11007830764SLei YU TEST(TestItemUpdaterStatic, getPartsToClearNotOK)
11107830764SLei YU {
11207830764SLei YU // Verify the it does not crash on malformed texts
11307830764SLei YU constexpr auto info =
11407830764SLei YU "0x0308a000..0x0308f000(actual=0x00005000)"
11507830764SLei YU "[E-----F-CV]\n" // missing ID and name with F
11607830764SLei YU "ID=27 HB_VOLATILE 0x0308a000..0x0308f000 (actual=0x00005000) "
11707830764SLei YU "E-----F-CV]\n" // missing [
11807830764SLei YU "ID=22 ATTR_PERM 0x02d20000..0x02d28000 (actual=0x00008000) "
11907830764SLei YU "[E-----F-C-]\n" // The only valid one
12007830764SLei YU "ID=28 MEMD 0x0308f000..0x0309d000 (actual=0x0000e000) "
12107830764SLei YU "[----]\n" // missing flags
12207830764SLei YU "SBKT 0x0309d000..0x030a1000 (actual=0x00004000) "
12307830764SLei YU "[EL--R-----]\n"; // missing ID
12407830764SLei YU
12507830764SLei YU auto parts = utils::getPartsToClear(info);
12607830764SLei YU EXPECT_EQ(1, parts.size());
12707830764SLei YU EXPECT_EQ("ATTR_PERM", parts[0].first);
12807830764SLei YU EXPECT_TRUE(parts[0].second);
12907830764SLei YU }
130*fa9a6becSAlexander Filippov
TEST(TestItemUpdaterStatic,getPartsToClearP8BasedOK)131*fa9a6becSAlexander Filippov TEST(TestItemUpdaterStatic, getPartsToClearP8BasedOK)
132*fa9a6becSAlexander Filippov {
133*fa9a6becSAlexander Filippov // NOTE: P8 doesn't support CLEARECC flags.
134*fa9a6becSAlexander Filippov constexpr auto info = R"(
135*fa9a6becSAlexander Filippov Flash info:
136*fa9a6becSAlexander Filippov -----------
137*fa9a6becSAlexander Filippov Name = /dev/mtd6
138*fa9a6becSAlexander Filippov Total size = 64MB Flags E:ECC, P:PRESERVED, R:READONLY, B:BACKUP
139*fa9a6becSAlexander Filippov Erase granule = 64KB F:REPROVISION, V:VOLATILE, C:CLEARECC
140*fa9a6becSAlexander Filippov
141*fa9a6becSAlexander Filippov TOC@0x00000000 Partitions:
142*fa9a6becSAlexander Filippov -----------
143*fa9a6becSAlexander Filippov ID=00 part 0x00000000..0x00001000 (actual=0x00001000) [----R-----]
144*fa9a6becSAlexander Filippov ID=01 HBEL 0x00008000..0x0002c000 (actual=0x00024000) [E-----F---]
145*fa9a6becSAlexander Filippov ID=02 GUARD 0x0002c000..0x00031000 (actual=0x00005000) [E--P--F---]
146*fa9a6becSAlexander Filippov ID=03 HBD 0x00031000..0x0008b000 (actual=0x0005a000) [E---R-----]
147*fa9a6becSAlexander Filippov ID=04 HBD_RW 0x0008b000..0x00091000 (actual=0x00006000) [E---------]
148*fa9a6becSAlexander Filippov ID=05 DJVPD 0x00091000..0x000d9000 (actual=0x00048000) [E-----F---]
149*fa9a6becSAlexander Filippov ID=06 MVPD 0x000d9000..0x00169000 (actual=0x00090000) [E-----F---]
150*fa9a6becSAlexander Filippov ID=07 CVPD 0x00169000..0x001b1000 (actual=0x00048000) [E-----F---]
151*fa9a6becSAlexander Filippov ID=08 HBI 0x001b1000..0x00751000 (actual=0x005a0000) [EL--R-----]
152*fa9a6becSAlexander Filippov ID=09 SBEC 0x00751000..0x007e1000 (actual=0x00090000) [E-I-R-----]
153*fa9a6becSAlexander Filippov ID=10 SBE 0x007e1000..0x00829000 (actual=0x00048000) [E-I-R-----]
154*fa9a6becSAlexander Filippov ID=11 WINK 0x00829000..0x00949000 (actual=0x00120000) [EL--R-----]
155*fa9a6becSAlexander Filippov ID=12 HBRT 0x00949000..0x00ca9000 (actual=0x00360000) [EL--R-----]
156*fa9a6becSAlexander Filippov ID=13 PAYLOAD 0x00ca9000..0x00d29000 (actual=0x00080000) [----R-----]
157*fa9a6becSAlexander Filippov ID=14 BOOTKERNEL 0x00d29000..0x01ca9000 (actual=0x00f80000) [----R-----]
158*fa9a6becSAlexander Filippov ID=15 ATTR_TMP 0x01ca9000..0x01cb1000 (actual=0x00008000) [------F---]
159*fa9a6becSAlexander Filippov ID=16 ATTR_PERM 0x01cb1000..0x01cb9000 (actual=0x00008000) [E-----F---]
160*fa9a6becSAlexander Filippov ID=17 OCC 0x01cb9000..0x01dd9000 (actual=0x00120000) [E---R-----]
161*fa9a6becSAlexander Filippov ID=18 TEST 0x01dd9000..0x01de2000 (actual=0x00009000) [E---------]
162*fa9a6becSAlexander Filippov ID=19 NVRAM 0x01de2000..0x01e72000 (actual=0x00090000) [---P--F---]
163*fa9a6becSAlexander Filippov ID=20 FIRDATA 0x01e72000..0x01e75000 (actual=0x00003000) [E-----F---]
164*fa9a6becSAlexander Filippov ID=21 BMC_INV 0x01e75000..0x01e7e000 (actual=0x00009000) [------F---]
165*fa9a6becSAlexander Filippov ID=22 CAPP 0x01e7e000..0x01ea2000 (actual=0x00024000) [E---R-----]
166*fa9a6becSAlexander Filippov ID=23 SECBOOT 0x01ea2000..0x01ec6000 (actual=0x00024000) [E--P------]
167*fa9a6becSAlexander Filippov ID=24 IMA_CATALOG 0x01ec6000..0x01ecf000 (actual=0x00009000) [E---R-F---]
168*fa9a6becSAlexander Filippov ID=25 HBB 0x01f60000..0x01ff0000 (actual=0x00090000) [EL--R-----]
169*fa9a6becSAlexander Filippov ID=26 VERSION 0x01ff7000..0x01ff8000 (actual=0x00001000) [----R-----]
170*fa9a6becSAlexander Filippov ID=27 BACKUP_PART 0x01ff8000..0x02000000 (actual=0x00000000) [----RB----]
171*fa9a6becSAlexander Filippov ID=28 OTHER_SIDE 0x02000000..0x02008000 (actual=0x00000000) [----RB----]
172*fa9a6becSAlexander Filippov )";
173*fa9a6becSAlexander Filippov
174*fa9a6becSAlexander Filippov auto parts = utils::getPartsToClear(info);
175*fa9a6becSAlexander Filippov EXPECT_EQ(11, parts.size());
176*fa9a6becSAlexander Filippov
177*fa9a6becSAlexander Filippov EXPECT_EQ("HBEL", parts[0].first);
178*fa9a6becSAlexander Filippov EXPECT_TRUE(parts[0].second);
179*fa9a6becSAlexander Filippov
180*fa9a6becSAlexander Filippov EXPECT_EQ("GUARD", parts[1].first);
181*fa9a6becSAlexander Filippov EXPECT_TRUE(parts[1].second);
182*fa9a6becSAlexander Filippov
183*fa9a6becSAlexander Filippov EXPECT_EQ("NVRAM", parts[7].first);
184*fa9a6becSAlexander Filippov EXPECT_FALSE(parts[7].second);
185*fa9a6becSAlexander Filippov
186*fa9a6becSAlexander Filippov EXPECT_EQ("IMA_CATALOG", parts[10].first);
187*fa9a6becSAlexander Filippov EXPECT_TRUE(parts[10].second);
188*fa9a6becSAlexander Filippov }
189