From 8b9102389718f639434253be3fa99f8f6d38d9a6 Mon Sep 17 00:00:00 2001 From: Andrew Jeffery Date: Thu, 29 Mar 2018 10:41:41 +1030 Subject: 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 --- test/vpnor/Makefile.am.include | 17 +++++++- test/vpnor/create_write_window_unmapped.cpp | 65 +++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 test/vpnor/create_write_window_unmapped.cpp 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 + +#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; +} -- cgit v1.2.1