blob: d4385c2c28525b2da3882bccbecfc55b893902f4 [file] [log] [blame]
Lei YU07830762019-03-01 17:17:28 +08001#include <string>
2#include <utility>
3
4#include <gtest/gtest.h>
5
6using PartClear = std::pair<std::string, bool>;
7namespace utils
8{
9extern std::vector<PartClear> getPartsToClear(const std::string& info);
10}
11
12TEST(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
110TEST(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}