summaryrefslogtreecommitdiffstats
path: root/vpnor/test/toc_flags.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vpnor/test/toc_flags.cpp')
-rw-r--r--vpnor/test/toc_flags.cpp77
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;
+}
OpenPOWER on IntegriCloud