summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Jeffery <andrew@aj.id.au>2018-03-29 10:41:41 +1030
committerAndrew Jeffery <andrew@aj.id.au>2018-04-04 07:56:23 +0000
commit8b9102389718f639434253be3fa99f8f6d38d9a6 (patch)
treed04917f61b8abe6e6407646eb8560320ac4d64b8
parente32f2c15b96980f0d3e0962b0fe545788e94f7ce (diff)
downloadphosphor-mboxd-8b9102389718f639434253be3fa99f8f6d38d9a6.zip
phosphor-mboxd-8b9102389718f639434253be3fa99f8f6d38d9a6.tar.gz
test: vpnor: Add create_write_window_unmapped
Deny attempts to open write windows to flash space that is unmapped in the ToC. This gives explicit feedback that any data written would not be persisted if it were possible create the write window in the first place. Change-Id: I0e7967247b122aa8d0c1de38af43162ba0ccc8fa Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
-rw-r--r--test/vpnor/Makefile.am.include17
-rw-r--r--test/vpnor/create_write_window_unmapped.cpp65
2 files changed, 81 insertions, 1 deletions
diff --git a/test/vpnor/Makefile.am.include b/test/vpnor/Makefile.am.include
index 96f0421..0abb82c 100644
--- a/test/vpnor/Makefile.am.include
+++ b/test/vpnor/Makefile.am.include
@@ -315,6 +315,19 @@ test_vpnor_create_write_window_rw_partition_SOURCES = \
test_vpnor_create_write_window_rw_partition_LDFLAGS = $(OESDK_TESTCASE_FLAGS)
test_vpnor_create_write_window_rw_partition_LDADD = $(VPNOR_LDADD)
+test_vpnor_create_write_window_unmapped_SOURCES = \
+ $(TEST_MBOX_VPNOR_SRCS) $(TEST_MOCK_SRCS) \
+ mboxd_msg.c \
+ mboxd_windows.c \
+ mboxd_lpc.c \
+ mboxd_lpc_virtual.cpp \
+ mboxd_pnor_partition_table.cpp \
+ mboxd_flash_virtual.cpp \
+ pnor_partition.cpp \
+ %reldir%/create_write_window_unmapped.cpp
+test_vpnor_create_write_window_unmapped_LDFLAGS = $(OESDK_TESTCASE_FLAGS)
+test_vpnor_create_write_window_unmapped_LDADD = $(VPNOR_LDADD)
+
if VIRTUAL_PNOR_ENABLED
check_PROGRAMS += \
%reldir%/create_pnor_partition_table \
@@ -343,7 +356,9 @@ check_PROGRAMS += \
%reldir%/create_read_window_size \
%reldir%/create_read_window_remap \
%reldir%/create_write_window_ro_partition \
- %reldir%/create_write_window_rw_partition
+ %reldir%/create_write_window_rw_partition \
+ %reldir%/create_write_window_unmapped
XFAIL_TESTS += %reldir%/create_write_window_ro_partition
+XFAIL_TESTS += %reldir%/create_write_window_unmapped
endif
diff --git a/test/vpnor/create_write_window_unmapped.cpp b/test/vpnor/create_write_window_unmapped.cpp
new file mode 100644
index 0000000..b493fad
--- /dev/null
+++ b/test/vpnor/create_write_window_unmapped.cpp
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: Apache-2.0
+// Copyright (C) 2018 IBM Corp.
+
+#include <assert.h>
+
+#include "config.h"
+#include "mboxd_pnor_partition_table.h"
+
+extern "C" {
+#include "test/mbox.h"
+#include "test/system.h"
+}
+
+#include "test/vpnor/tmpd.hpp"
+
+static constexpr auto BLOCK_SIZE = 0x1000;
+static constexpr auto ERASE_SIZE = BLOCK_SIZE;
+static constexpr auto N_WINDOWS = 1;
+static constexpr auto WINDOW_SIZE = BLOCK_SIZE;
+static constexpr auto MEM_SIZE = WINDOW_SIZE;
+static constexpr auto PNOR_SIZE = 3 * BLOCK_SIZE;
+
+const std::string toc[] = {
+ "partition01=HBB,00001000,00002000,80,ECC,READWRITE",
+};
+
+static const uint8_t get_info[] = {0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00};
+
+// offset 0x100 and size 6
+static const uint8_t create_write_window[] = {
+ 0x06, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+static const uint8_t response[] = {0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07};
+
+namespace test = openpower::virtual_pnor::test;
+
+int main()
+{
+ struct mbox_context *ctx;
+
+ system_set_reserved_size(MEM_SIZE);
+ system_set_mtd_sizes(PNOR_SIZE, ERASE_SIZE);
+
+ ctx = mbox_create_test_context(N_WINDOWS, WINDOW_SIZE);
+
+ test::VpnorRoot root(ctx, toc, BLOCK_SIZE);
+
+ init_vpnor_from_paths(ctx);
+
+ int rc = mbox_command_dispatch(ctx, get_info, sizeof(get_info));
+ assert(rc == MBOX_R_SUCCESS);
+
+ rc = mbox_command_dispatch(ctx, create_write_window,
+ sizeof(create_write_window));
+ assert(rc == MBOX_R_WINDOW_ERROR);
+
+ rc = mbox_cmp(ctx, response, sizeof(response));
+ assert(rc == 0);
+
+ return rc;
+}
OpenPOWER on IntegriCloud