summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Jeffery <andrew@aj.id.au>2018-02-22 11:36:13 +1030
committerAndrew Jeffery <andrew@aj.id.au>2018-03-24 13:59:32 +1030
commit097495c6278d3139dfd41f7a1265c004fe34d454 (patch)
tree20023149a2836d327e7ee383db547fae55584b6c
parent0b657f4d5d211fef6051be6ad97e85b1ba58473d (diff)
downloadphosphor-mboxd-097495c6278d3139dfd41f7a1265c004fe34d454.tar.gz
phosphor-mboxd-097495c6278d3139dfd41f7a1265c004fe34d454.zip
test: tmpd: Make VpnorRoot the parent of ro/rw/prsv/patch
Previously it represented any one of the ro/rw/prsv/patch directories. It's better if we can deal with all of them at once, so rework the abstraction. In the process, the patch exploits other features of std::experimental::filesystem to increase readability of the code. Change-Id: I06000709622dd66945cc88cb5333847c69215dc7 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
-rw-r--r--test/vpnor/create_pnor_partition_table.cpp13
-rw-r--r--test/vpnor/create_read_window_vpnor.cpp2
-rw-r--r--test/vpnor/tmpd.cpp8
-rw-r--r--test/vpnor/tmpd.hpp41
4 files changed, 35 insertions, 29 deletions
diff --git a/test/vpnor/create_pnor_partition_table.cpp b/test/vpnor/create_pnor_partition_table.cpp
index fb371cb..98d474b 100644
--- a/test/vpnor/create_pnor_partition_table.cpp
+++ b/test/vpnor/create_pnor_partition_table.cpp
@@ -1,12 +1,10 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2018 IBM Corp.
-#include "pnor_partition_table.hpp"
-#include "config.h"
#include <assert.h>
#include <string.h>
-#include <vector>
-#include <fstream>
-#include <experimental/filesystem>
+
+#include "config.h"
+#include "pnor_partition_table.hpp"
#include "test/vpnor/tmpd.hpp"
@@ -18,15 +16,14 @@ const std::string toc[] = {
};
constexpr auto partitionName = "HBB";
-namespace fs = std::experimental::filesystem;
namespace test = openpower::virtual_pnor::test;
int main()
{
test::VpnorRoot root(toc, BLOCK_SIZE);
- const openpower::virtual_pnor::partition::Table table(
- fs::path{root.path()}, BLOCK_SIZE, PNOR_SIZE);
+ const openpower::virtual_pnor::partition::Table table(root.ro(), BLOCK_SIZE,
+ PNOR_SIZE);
pnor_partition_table expectedTable{};
expectedTable.data.magic = PARTITION_HEADER_MAGIC;
diff --git a/test/vpnor/create_read_window_vpnor.cpp b/test/vpnor/create_read_window_vpnor.cpp
index f4c80de..5adb044 100644
--- a/test/vpnor/create_read_window_vpnor.cpp
+++ b/test/vpnor/create_read_window_vpnor.cpp
@@ -71,7 +71,7 @@ int main()
test::VpnorRoot root(toc, BLOCK_SIZE);
root.write("HBB", data, sizeof(data));
- path = root.path();
+ path = root.ro();
cpath = path.c_str();
system_set_reserved_size(MEM_SIZE);
diff --git a/test/vpnor/tmpd.cpp b/test/vpnor/tmpd.cpp
index 16a4c2b..6bdfa09 100644
--- a/test/vpnor/tmpd.cpp
+++ b/test/vpnor/tmpd.cpp
@@ -14,16 +14,14 @@ namespace fs = std::experimental::filesystem;
size_t VpnorRoot::write(const std::string &name, const void *data, size_t len)
{
- fs::path path{root};
- path /= name;
+ // write() is for test environment setup - always write to ro section
+ fs::path path = root / "ro" / name;
if (!fs::exists(path))
/* It's not in the ToC */
throw std::invalid_argument(name);
- std::ofstream partitionFile(path.c_str());
- partitionFile.write((const char *)data, len);
- partitionFile.close();
+ std::ofstream(path).write((const char *)data, len);
return len;
}
diff --git a/test/vpnor/tmpd.hpp b/test/vpnor/tmpd.hpp
index d684706..28d27c9 100644
--- a/test/vpnor/tmpd.hpp
+++ b/test/vpnor/tmpd.hpp
@@ -29,9 +29,12 @@ class VpnorRoot
char* tmpdir = mkdtemp(tmplt);
root = fs::path{tmpdir};
- fs::path tocFilePath{root};
- tocFilePath /= PARTITION_TOC_FILE;
- std::ofstream tocFile(tocFilePath.c_str());
+ for (const auto& attr : attributes)
+ {
+ fs::create_directory(root / attr);
+ }
+
+ fs::path tocFilePath = root / "ro" / PARTITION_TOC_FILE;
for (const std::string& line : toc)
{
@@ -40,19 +43,14 @@ class VpnorRoot
openpower::virtual_pnor::parseTocLine(line, blockSize, part);
/* Populate the partition in the tree */
- fs::path partitionFilePath{root};
- partitionFilePath /= part.data.name;
- std::ofstream partitionFile(partitionFilePath.c_str());
- std::vector<char> empty(part.data.size, 0);
- partitionFile.write(empty.data(), empty.size());
- partitionFile.close();
+ std::vector<char> zeroed(part.data.actual, 0);
+ fs::path partitionFilePath = root / "ro" / part.data.name;
+ std::ofstream(partitionFilePath)
+ .write(zeroed.data(), zeroed.size());
/* Update the ToC if the partition file was created */
- tocFile.write(line.c_str(), line.length());
- tocFile.write("\n", 1);
+ std::ofstream(tocFilePath, std::ofstream::app) << line << "\n";
}
-
- tocFile.close();
}
VpnorRoot(const VpnorRoot&) = delete;
@@ -64,14 +62,27 @@ class VpnorRoot
{
fs::remove_all(root);
}
- const fs::path& path()
+ fs::path ro()
+ {
+ return fs::path{root} / "ro";
+ }
+ fs::path rw()
+ {
+ return fs::path{root} / "rw";
+ }
+ fs::path prsv()
+ {
+ return fs::path{root} / "prsv";
+ }
+ fs::path patch()
{
- return root;
+ return fs::path{root} / "patch";
}
size_t write(const std::string& name, const void* data, size_t len);
private:
fs::path root;
+ const std::string attributes[4] = {"ro", "rw", "prsv", "patch"};
};
} // test
OpenPOWER on IntegriCloud