summaryrefslogtreecommitdiffstats
path: root/test/test_item_updater_static.cpp
blob: 80c2fd2a64dcc8726ca2afd55779d733bfe54e17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include <string>
#include <utility>

#include <gtest/gtest.h>

using PartClear = std::pair<std::string, bool>;
namespace utils
{
extern std::vector<PartClear> getPartsToClear(const std::string& info);
}

TEST(TestItemUpdaterStatic, getPartsToClearOK)
{
    constexpr auto info =
        "Flash info:\n"
        "-----------\n"
        "Name          = /dev/mtd6\n"
        "Total size    = 64MB     Flags E:ECC, P:PRESERVED, R:READONLY, "
        "B:BACKUP\n"
        "Erase granule = 64KB           F:REPROVISION, V:VOLATILE, C:CLEARECC\n"
        "\n"
        "TOC@0x00000000 Partitions:\n"
        "-----------\n"
        "ID=00        part 0x00000000..0x00002000 (actual=0x00002000) "
        "[----------]\n"
        "ID=01        HBEL 0x00008000..0x0002c000 (actual=0x00024000) "
        "[E-----F-C-]\n"
        "ID=02       GUARD 0x0002c000..0x00031000 (actual=0x00005000) "
        "[E--P--F-C-]\n"
        "ID=03       NVRAM 0x00031000..0x000c1000 (actual=0x00090000) "
        "[---P--F---]\n"
        "ID=04     SECBOOT 0x000c1000..0x000e5000 (actual=0x00024000) "
        "[E--P------]\n"
        "ID=05       DJVPD 0x000e5000..0x0012d000 (actual=0x00048000) "
        "[E--P--F-C-]\n"
        "ID=06        MVPD 0x0012d000..0x001bd000 (actual=0x00090000) "
        "[E--P--F-C-]\n"
        "ID=07        CVPD 0x001bd000..0x00205000 (actual=0x00048000) "
        "[E--P--F-C-]\n"
        "ID=08         HBB 0x00205000..0x00305000 (actual=0x00100000) "
        "[EL--R-----]\n"
        "ID=09         HBD 0x00305000..0x00425000 (actual=0x00120000) "
        "[EL--------]\n"
        "ID=10         HBI 0x00425000..0x013e5000 (actual=0x00fc0000) "
        "[EL--R-----]\n"
        "ID=11         SBE 0x013e5000..0x014a1000 (actual=0x000bc000) "
        "[ELI-R-----]\n"
        "ID=12       HCODE 0x014a1000..0x015c1000 (actual=0x00120000) "
        "[EL--R-----]\n"
        "ID=13        HBRT 0x015c1000..0x01bc1000 (actual=0x00600000) "
        "[EL--R-----]\n"
        "ID=14     PAYLOAD 0x01bc1000..0x01cc1000 (actual=0x00100000) "
        "[-L--R-----]\n"
        "ID=15  BOOTKERNEL 0x01cc1000..0x02bc1000 (actual=0x00f00000) "
        "[-L--R-----]\n"
        "ID=16         OCC 0x02bc1000..0x02ce1000 (actual=0x00120000) "
        "[EL--R-----]\n"
        "ID=17     FIRDATA 0x02ce1000..0x02ce4000 (actual=0x00003000) "
        "[E-----F-C-]\n"
        "ID=18        CAPP 0x02ce4000..0x02d08000 (actual=0x00024000) "
        "[EL--R-----]\n"
        "ID=19     BMC_INV 0x02d08000..0x02d11000 (actual=0x00009000) "
        "[------F---]\n"
        "ID=20        HBBL 0x02d11000..0x02d18000 (actual=0x00007000) "
        "[EL--R-----]\n"
        "ID=21    ATTR_TMP 0x02d18000..0x02d20000 (actual=0x00008000) "
        "[------F---]\n"
        "ID=22   ATTR_PERM 0x02d20000..0x02d28000 (actual=0x00008000) "
        "[E-----F-C-]\n"
        "ID=23     VERSION 0x02d28000..0x02d2a000 (actual=0x00002000) "
        "[-L--R-----]\n"
        "ID=24 IMA_CATALOG 0x02d2a000..0x02d6a000 (actual=0x00040000) "
        "[EL--R-----]\n"
        "ID=25     RINGOVD 0x02d6a000..0x02d8a000 (actual=0x00020000) "
        "[----------]\n"
        "ID=26     WOFDATA 0x02d8a000..0x0308a000 (actual=0x00300000) "
        "[EL--R-----]\n"
        "ID=27 HB_VOLATILE 0x0308a000..0x0308f000 (actual=0x00005000) "
        "[E-----F-CV]\n"
        "ID=28        MEMD 0x0308f000..0x0309d000 (actual=0x0000e000) "
        "[EL--R-----]\n"
        "ID=29        SBKT 0x0309d000..0x030a1000 (actual=0x00004000) "
        "[EL--R-----]\n"
        "ID=30        HDAT 0x030a1000..0x030a9000 (actual=0x00008000) "
        "[EL--R-----]\n"
        "ID=31      UVISOR 0x030a9000..0x031a9000 (actual=0x00100000) "
        "[-L--R-----]\n"
        "ID=32      OCMBFW 0x031a9000..0x031f4000 (actual=0x0004b000) "
        "[EL--R-----]\n"
        "ID=33    UVBWLIST 0x031f4000..0x03204000 (actual=0x00010000) "
        "[-L--R-----]\n"
        "ID=34 BACKUP_PART 0x03ff7000..0x03fff000 (actual=0x00000000) "
        "[-----B----]";
    auto parts = utils::getPartsToClear(info);
    EXPECT_EQ(11, parts.size());

    EXPECT_EQ("HBEL", parts[0].first);
    EXPECT_TRUE(parts[0].second);

    EXPECT_EQ("GUARD", parts[1].first);
    EXPECT_TRUE(parts[1].second);

    EXPECT_EQ("NVRAM", parts[2].first);
    EXPECT_FALSE(parts[2].second);

    EXPECT_EQ("HB_VOLATILE", parts[10].first);
    EXPECT_TRUE(parts[10].second);
}

TEST(TestItemUpdaterStatic, getPartsToClearNotOK)
{
    // Verify the it does not crash on malformed texts
    constexpr auto info =
        "0x0308a000..0x0308f000(actual=0x00005000)"
        "[E-----F-CV]\n" // missing ID and name with F
        "ID=27 HB_VOLATILE 0x0308a000..0x0308f000 (actual=0x00005000) "
        "E-----F-CV]\n" // missing [
        "ID=22   ATTR_PERM 0x02d20000..0x02d28000 (actual=0x00008000) "
        "[E-----F-C-]\n" // The only valid one
        "ID=28        MEMD 0x0308f000..0x0309d000 (actual=0x0000e000) "
        "[----]\n" // missing flags
        "SBKT 0x0309d000..0x030a1000 (actual=0x00004000) "
        "[EL--R-----]\n"; // missing ID

    auto parts = utils::getPartsToClear(info);
    EXPECT_EQ(1, parts.size());
    EXPECT_EQ("ATTR_PERM", parts[0].first);
    EXPECT_TRUE(parts[0].second);
}

TEST(TestItemUpdaterStatic, getPartsToClearP8BasedOK)
{
    // NOTE: P8 doesn't support CLEARECC flags.
    constexpr auto info = R"(
Flash info:
-----------
Name          = /dev/mtd6
Total size    = 64MB	 Flags E:ECC, P:PRESERVED, R:READONLY, B:BACKUP
Erase granule = 64KB           F:REPROVISION, V:VOLATILE, C:CLEARECC

TOC@0x00000000 Partitions:
-----------
ID=00            part 0x00000000..0x00001000 (actual=0x00001000) [----R-----]
ID=01            HBEL 0x00008000..0x0002c000 (actual=0x00024000) [E-----F---]
ID=02           GUARD 0x0002c000..0x00031000 (actual=0x00005000) [E--P--F---]
ID=03             HBD 0x00031000..0x0008b000 (actual=0x0005a000) [E---R-----]
ID=04          HBD_RW 0x0008b000..0x00091000 (actual=0x00006000) [E---------]
ID=05           DJVPD 0x00091000..0x000d9000 (actual=0x00048000) [E-----F---]
ID=06            MVPD 0x000d9000..0x00169000 (actual=0x00090000) [E-----F---]
ID=07            CVPD 0x00169000..0x001b1000 (actual=0x00048000) [E-----F---]
ID=08             HBI 0x001b1000..0x00751000 (actual=0x005a0000) [EL--R-----]
ID=09            SBEC 0x00751000..0x007e1000 (actual=0x00090000) [E-I-R-----]
ID=10             SBE 0x007e1000..0x00829000 (actual=0x00048000) [E-I-R-----]
ID=11            WINK 0x00829000..0x00949000 (actual=0x00120000) [EL--R-----]
ID=12            HBRT 0x00949000..0x00ca9000 (actual=0x00360000) [EL--R-----]
ID=13         PAYLOAD 0x00ca9000..0x00d29000 (actual=0x00080000) [----R-----]
ID=14      BOOTKERNEL 0x00d29000..0x01ca9000 (actual=0x00f80000) [----R-----]
ID=15        ATTR_TMP 0x01ca9000..0x01cb1000 (actual=0x00008000) [------F---]
ID=16       ATTR_PERM 0x01cb1000..0x01cb9000 (actual=0x00008000) [E-----F---]
ID=17             OCC 0x01cb9000..0x01dd9000 (actual=0x00120000) [E---R-----]
ID=18            TEST 0x01dd9000..0x01de2000 (actual=0x00009000) [E---------]
ID=19           NVRAM 0x01de2000..0x01e72000 (actual=0x00090000) [---P--F---]
ID=20         FIRDATA 0x01e72000..0x01e75000 (actual=0x00003000) [E-----F---]
ID=21         BMC_INV 0x01e75000..0x01e7e000 (actual=0x00009000) [------F---]
ID=22            CAPP 0x01e7e000..0x01ea2000 (actual=0x00024000) [E---R-----]
ID=23         SECBOOT 0x01ea2000..0x01ec6000 (actual=0x00024000) [E--P------]
ID=24     IMA_CATALOG 0x01ec6000..0x01ecf000 (actual=0x00009000) [E---R-F---]
ID=25             HBB 0x01f60000..0x01ff0000 (actual=0x00090000) [EL--R-----]
ID=26         VERSION 0x01ff7000..0x01ff8000 (actual=0x00001000) [----R-----]
ID=27     BACKUP_PART 0x01ff8000..0x02000000 (actual=0x00000000) [----RB----]
ID=28      OTHER_SIDE 0x02000000..0x02008000 (actual=0x00000000) [----RB----]
    )";

    auto parts = utils::getPartsToClear(info);
    EXPECT_EQ(11, parts.size());

    EXPECT_EQ("HBEL", parts[0].first);
    EXPECT_TRUE(parts[0].second);

    EXPECT_EQ("GUARD", parts[1].first);
    EXPECT_TRUE(parts[1].second);

    EXPECT_EQ("NVRAM", parts[7].first);
    EXPECT_FALSE(parts[7].second);

    EXPECT_EQ("IMA_CATALOG", parts[10].first);
    EXPECT_TRUE(parts[10].second);
}
OpenPOWER on IntegriCloud