test: vpnor: Add dump_flash test

The test is intended to read and verify the content of the flash, and
verify that the read completes without error in the face of unusual
flash size with respect to the window configuration.

Specifically, the test is arranged such that the reserved memory exceeds
the flash size, and the flash layout conspires such that the final
request is for a window whose flash offset and window size exceed the
flash size. This currently triggers an error condition in the mbox
window handling, and causes the host to receive an error response to its
CREATE_READ_WINDOW request. On the host side this results in the reading
process receiving an EIO.

Due to what is probably an oversight in the mbox window handling, some
care needs to be taken in the test configuration: The current behaviour
is that copy_flash() will return a length that may be less than the size
of the reserved memory window. The returned value is aligned up to the
next block and assigned as the current window's size. However, when
evicting a window, we do not reset the size to the default size. As a
consequence, windows can shrink and remain at a size below the default
window size. Without careful control of the test parameters this can
lead to the appearance that there is no bug in the window handling as,
serendipitously, a window of the correct size can be evicted for the
final CREATE_READ_WINDOW request.

Change-Id: I436595f428bf4e93392315ec1110b6b6f4a11821
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/test/vpnor/Makefile.am.include b/test/vpnor/Makefile.am.include
index 09a4cc8..0d24807 100644
--- a/test/vpnor/Makefile.am.include
+++ b/test/vpnor/Makefile.am.include
@@ -250,6 +250,19 @@
 test_vpnor_write_patch_resize_LDFLAGS = $(OESDK_TESTCASE_FLAGS)
 test_vpnor_write_patch_resize_LDADD = $(VPNOR_LDADD)
 
+test_vpnor_dump_flash_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%/dump_flash.cpp
+test_vpnor_dump_flash_LDFLAGS = $(OESDK_TESTCASE_FLAGS)
+test_vpnor_dump_flash_LDADD = $(VPNOR_LDADD)
+
 if VIRTUAL_PNOR_ENABLED
 check_PROGRAMS += \
 	%reldir%/create_pnor_partition_table \
@@ -273,5 +286,8 @@
 	%reldir%/create_read_window_straddle_partitions \
 	%reldir%/create_read_window_partition_invalid \
 	%reldir%/read_patch \
-	%reldir%/write_patch_resize
+	%reldir%/write_patch_resize \
+	%reldir%/dump_flash
+
+XFAIL_TESTS += %reldir%/dump_flash
 endif