summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/vpnor/Makefile.am.include12
-rw-r--r--test/vpnor/toc_flags.cpp77
2 files changed, 88 insertions, 1 deletions
diff --git a/test/vpnor/Makefile.am.include b/test/vpnor/Makefile.am.include
index 68eeb7b..4defe01 100644
--- a/test/vpnor/Makefile.am.include
+++ b/test/vpnor/Makefile.am.include
@@ -100,6 +100,13 @@ test_vpnor_toc_no_version_SOURCES = \
test_vpnor_toc_no_version_LDFLAGS = $(OESDK_TESTCASE_FLAGS)
test_vpnor_toc_no_version_LDADD = $(VPNOR_LDADD)
+test_vpnor_toc_flags_SOURCES = \
+ common.c \
+ pnor_partition_table.cpp \
+ %reldir%/toc_flags.cpp
+test_vpnor_toc_flags_LDFLAGS = $(OESDK_TESTCASE_FLAGS)
+test_vpnor_toc_flags_LDADD = $(VPNOR_LDADD)
+
if VIRTUAL_PNOR_ENABLED
check_PROGRAMS += \
%reldir%/create_pnor_partition_table \
@@ -112,5 +119,8 @@ check_PROGRAMS += \
%reldir%/toc_start_gt_end \
%reldir%/toc_no_start \
%reldir%/toc_no_end \
- %reldir%/toc_no_version
+ %reldir%/toc_no_version \
+ %reldir%/toc_flags
+
+XFAIL_TESTS += %reldir%/toc_flags
endif
diff --git a/test/vpnor/toc_flags.cpp b/test/vpnor/toc_flags.cpp
new file mode 100644
index 0000000..6e134e5
--- /dev/null
+++ b/test/vpnor/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 "pnor_partition_defs.h"
+#include "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