test: Move vpnor tests to vpnor directory

In the spirit of things that are together should be kept together. The
repository layout now better corresponds to upstream with the exception
of the vpnor directory and some modifications to Makefile.am

Change-Id: I16d59a3c9ee846065f6a8c83eb4459715d525f3f
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/vpnor/test/write_patch_resize.cpp b/vpnor/test/write_patch_resize.cpp
new file mode 100644
index 0000000..8d67683
--- /dev/null
+++ b/vpnor/test/write_patch_resize.cpp
@@ -0,0 +1,74 @@
+// SPDX-License-Identifier: Apache-2.0
+// Copyright (C) 2018 IBM Corp.
+
+#include <assert.h>
+#include <experimental/filesystem>
+#include <fcntl.h>
+#include <stdint.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <sys/syslog.h>
+#include <unistd.h>
+
+#include "config.h"
+#include "common.h"
+#include "mbox.h"
+#include "mboxd_flash.h"
+
+#include "vpnor/test/tmpd.hpp"
+
+static constexpr auto BLOCK_SIZE = 0x1000;
+static constexpr auto PART_SIZE = BLOCK_SIZE;
+static constexpr auto PATCH_SIZE = BLOCK_SIZE / 2;
+static constexpr auto UPDATE_SIZE = BLOCK_SIZE;
+
+const std::string toc[] = {
+    "partition01=TEST1,00001000,00002000,80,ECC,READWRITE",
+};
+
+int main(void)
+{
+    namespace fs = std::experimental::filesystem;
+    namespace test = openpower::virtual_pnor::test;
+
+    struct mbox_context _ctx, *ctx = &_ctx;
+    void *map;
+    int rc;
+    int fd;
+
+    /* Setup */
+    memset(ctx, 0, sizeof(mbox_context));
+
+    mbox_vlog = &mbox_log_console;
+    verbosity = (verbose)2;
+
+    test::VpnorRoot root(ctx, toc, BLOCK_SIZE);
+    std::vector<uint8_t> roContent(PART_SIZE, 0xff);
+    root.write("TEST1", roContent.data(), roContent.size());
+    /* write_flash doesn't copy the file for us */
+    std::vector<uint8_t> patchContent(PATCH_SIZE, 0xaa);
+    root.patch("TEST1", patchContent.data(), patchContent.size());
+
+    init_vpnor_from_paths(ctx);
+
+    /* Test */
+    std::vector<uint8_t> update(UPDATE_SIZE, 0x55);
+    rc = write_flash(ctx, 0x1000, update.data(), update.size());
+    assert(rc == 0);
+
+    /* Check that PATCH is modified with the new data */
+    fs::path patch = root.patch() / "TEST1";
+    assert(UPDATE_SIZE == fs::file_size(patch));
+    fd = open(patch.c_str(), O_RDONLY);
+    map = mmap(NULL, UPDATE_SIZE, PROT_READ, MAP_SHARED, fd, 0);
+    assert(map != MAP_FAILED);
+    rc = memcmp(update.data(), map, update.size());
+    assert(rc == 0);
+    munmap(map, update.size());
+    close(fd);
+
+    destroy_vpnor(ctx);
+    free(ctx->flash_bmap);
+
+    return rc;
+}