diff --git a/test/vpnor/create_pnor_partition_table.cpp b/test/vpnor/create_pnor_partition_table.cpp
index 6b47bb9..1d4b126 100644
--- a/test/vpnor/create_pnor_partition_table.cpp
+++ b/test/vpnor/create_pnor_partition_table.cpp
@@ -8,6 +8,8 @@
 #include <fstream>
 #include <experimental/filesystem>
 
+#include "test/vpnor/tmpd.hpp"
+
 static const auto BLOCK_SIZE = 4 * 1024;
 static const auto PNOR_SIZE = 64 * 1024 * 1024;
 
@@ -18,36 +20,6 @@
 
 namespace fs = std::experimental::filesystem;
 
-template <std::size_t N>
-static void createVpnorTree(fs::path& root, const std::string (&toc)[N],
-                            size_t blockSize)
-{
-    fs::path tocFilePath{root};
-    tocFilePath /= PARTITION_TOC_FILE;
-    std::ofstream tocFile(tocFilePath.c_str());
-
-    for (const std::string& line : toc)
-    {
-        pnor_partition part;
-
-        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();
-
-        /* Update the ToC if the partition file was created */
-        tocFile.write(line.c_str(), line.length());
-        tocFile.write("\n", 1);
-    }
-
-    tocFile.close();
-}
-
 int main()
 {
     char tmplt[] = "/tmp/vpnor_partitions.XXXXXX";
@@ -55,7 +27,7 @@
     assert(tmpdir != nullptr);
     fs::path root{tmpdir};
 
-    createVpnorTree(root, toc, BLOCK_SIZE);
+    openpower::virtual_pnor::test::createVpnorTree(root, toc, BLOCK_SIZE);
 
     const openpower::virtual_pnor::partition::Table table(
         fs::path{tmpdir}, BLOCK_SIZE, PNOR_SIZE);
diff --git a/test/vpnor/tmpd.hpp b/test/vpnor/tmpd.hpp
new file mode 100644
index 0000000..ab27377
--- /dev/null
+++ b/test/vpnor/tmpd.hpp
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: Apache-2.0 */
+/* Copyright (C) 2018 IBM Corp. */
+
+#include <assert.h>
+#include <string.h>
+#include <vector>
+#include <fstream>
+#include <experimental/filesystem>
+
+#include "config.h"
+#include "pnor_partition_table.hpp"
+
+namespace fs = std::experimental::filesystem;
+
+namespace openpower
+{
+namespace virtual_pnor
+{
+namespace test
+{
+
+template <std::size_t N>
+void createVpnorTree(fs::path &root, const std::string (&toc)[N],
+                     size_t blockSize)
+{
+    fs::path tocFilePath{root};
+    tocFilePath /= PARTITION_TOC_FILE;
+    std::ofstream tocFile(tocFilePath.c_str());
+
+    for (const std::string &line : toc)
+    {
+        pnor_partition part;
+
+        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();
+
+        /* Update the ToC if the partition file was created */
+        tocFile.write(line.c_str(), line.length());
+        tocFile.write("\n", 1);
+    }
+
+    tocFile.close();
+}
+
+} // test
+} // virtual_pnor
+} // openpower
