summaryrefslogtreecommitdiffstats
path: root/vpnor/test/toc_flags.cpp
blob: c30f7ad7c8dd23764724230e58624cb7970f798f (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
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2018 IBM Corp.

#include "config.h"
#include <assert.h>

#include "common.h"
#include "vpnor/pnor_partition_defs.h"
#include "vpnor/pnor_partition_table.hpp"

static constexpr auto BLOCK_SIZE = 4 * 1024;
static constexpr auto DATA_MASK = ((1 << 24) - 1);

int main()
{
    namespace vpnor = openpower::virtual_pnor;

    struct pnor_partition part;
    std::string line;

    mbox_vlog = mbox_log_console;
    verbosity = MBOX_LOG_DEBUG;

    line = "partition01=FOO,00001000,00002000,80,ECC";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert((part.data.user.data[0]) == PARTITION_ECC_PROTECTED);
    assert(!(part.data.user.data[1] & DATA_MASK));

    line = "partition01=FOO,00001000,00002000,80,PRESERVED";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert((part.data.user.data[1] & DATA_MASK) == PARTITION_PRESERVED);

    line = "partition01=FOO,00001000,00002000,80,READONLY";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert((part.data.user.data[1] & DATA_MASK) == PARTITION_READONLY);

    /* BACKUP is unimplemented */
    line = "partition01=FOO,00001000,00002000,80,BACKUP";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert(!(part.data.user.data[1] & DATA_MASK));

    line = "partition01=FOO,00001000,00002000,80,REPROVISION";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert((part.data.user.data[1] & DATA_MASK) == PARTITION_REPROVISION);

    line = "partition01=FOO,00001000,00002000,80,VOLATILE";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert((part.data.user.data[1] & DATA_MASK) == PARTITION_VOLATILE);

    line = "partition01=FOO,00001000,00002000,80,CLEARECC";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert((part.data.user.data[1] & DATA_MASK) == PARTITION_CLEARECC);

    line = "partition01=FOO,00001000,00002000,80,READWRITE";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert(((part.data.user.data[1] & DATA_MASK) ^ PARTITION_READONLY) ==
           PARTITION_READONLY);

    line = "partition01=FOO,00001000,00002000,80,";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert(!(part.data.user.data[1] & DATA_MASK));

    line = "partition01=FOO,00001000,00002000,80,junk";
    vpnor::parseTocLine(line, BLOCK_SIZE, part);
    assert(!(part.data.user.data[0]));
    assert(!(part.data.user.data[1] & DATA_MASK));

    return 0;
}
OpenPOWER on IntegriCloud