diff options
Diffstat (limited to 'vpnor/test/toc_flags.cpp')
-rw-r--r-- | vpnor/test/toc_flags.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/vpnor/test/toc_flags.cpp b/vpnor/test/toc_flags.cpp new file mode 100644 index 0000000..c30f7ad --- /dev/null +++ b/vpnor/test/toc_flags.cpp @@ -0,0 +1,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; +} |