diff options
author | Andrew Jeffery <andrew@aj.id.au> | 2018-03-29 10:41:41 +1030 |
---|---|---|
committer | Andrew Jeffery <andrew@aj.id.au> | 2018-04-04 07:56:23 +0000 |
commit | 8b9102389718f639434253be3fa99f8f6d38d9a6 (patch) | |
tree | d04917f61b8abe6e6407646eb8560320ac4d64b8 /test | |
parent | e32f2c15b96980f0d3e0962b0fe545788e94f7ce (diff) | |
download | phosphor-mboxd-8b9102389718f639434253be3fa99f8f6d38d9a6.tar.gz phosphor-mboxd-8b9102389718f639434253be3fa99f8f6d38d9a6.zip |
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>
Diffstat (limited to 'test')
-rw-r--r-- | test/vpnor/Makefile.am.include | 17 | ||||
-rw-r--r-- | test/vpnor/create_write_window_unmapped.cpp | 65 |
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; +} |