diff --git a/tests/database-fixture.hpp b/tests/database-fixture.hpp
index ffe00b0..c7e04bb 100644
--- a/tests/database-fixture.hpp
+++ b/tests/database-fixture.hpp
@@ -1,34 +1,27 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2019, Regents of the University of California,
- *                          Arizona Board of Regents,
- *                          Colorado State University,
- *                          University Pierre & Marie Curie, Sorbonne University,
- *                          Washington University in St. Louis,
- *                          Beijing Institute of Technology,
- *                          The University of Memphis.
+/*
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
- * This file, originally written as part of NFD (Named Data Networking Forwarding Daemon),
- * is a part of ndncert, a certificate management system based on NDN.
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
- * ndncert is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
  *
- * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
+ * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  *
- * You should have received copies of the GNU General Public License along with
- * ndncert, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
  *
- * See AUTHORS.md for complete list of ndncert authors and contributors.
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
 #ifndef NDNCERT_TESTS_DATABASE_FIXTURE_HPP
 #define NDNCERT_TESTS_DATABASE_FIXTURE_HPP
 
-#include "test-common.hpp"
 #include "identity-management-fixture.hpp"
 #include <boost/filesystem.hpp>
 
@@ -41,7 +34,14 @@
 public:
   DatabaseFixture()
   {
-    dbDir = boost::filesystem::path(getenv("HOME")) / ".ndn";
+    auto parentDir = boost::filesystem::path(getenv("TEST_HOME"));
+    if (!boost::filesystem::exists(parentDir)) {
+      boost::filesystem::create_directory(parentDir);
+    }
+    dbDir = parentDir / ".ndncert";
+    if (!boost::filesystem::exists(dbDir)) {
+      boost::filesystem::create_directory(dbDir);
+    }
   }
 
   ~DatabaseFixture()
diff --git a/tests/identity-management-fixture.cpp b/tests/identity-management-fixture.cpp
index a152f73..e26b30c 100644
--- a/tests/identity-management-fixture.cpp
+++ b/tests/identity-management-fixture.cpp
@@ -1,32 +1,26 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2019, Regents of the University of California,
- *                          Arizona Board of Regents,
- *                          Colorado State University,
- *                          University Pierre & Marie Curie, Sorbonne University,
- *                          Washington University in St. Louis,
- *                          Beijing Institute of Technology,
- *                          The University of Memphis.
+/*
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
- * This file, originally written as part of NFD (Named Data Networking Forwarding Daemon),
- * is a part of ndncert, a certificate management system based on NDN.
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
- * ndncert is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
  *
- * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
+ * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  *
- * You should have received copies of the GNU General Public License along with
- * ndncert, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
  *
- * See AUTHORS.md for complete list of ndncert authors and contributors.
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
 #include "identity-management-fixture.hpp"
-
+#include <ndn-cxx/security/v2/additional-description.hpp>
 #include <ndn-cxx/util/io.hpp>
 #include <boost/filesystem.hpp>
 
@@ -134,4 +128,4 @@
 
 } // namespace tests
 } // namespace ndncert
-} // namespace ndn
+} // namespace ndn
\ No newline at end of file
diff --git a/tests/identity-management-fixture.hpp b/tests/identity-management-fixture.hpp
index d287fc9..c83bf30 100644
--- a/tests/identity-management-fixture.hpp
+++ b/tests/identity-management-fixture.hpp
@@ -1,38 +1,33 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2019, Regents of the University of California,
- *                          Arizona Board of Regents,
- *                          Colorado State University,
- *                          University Pierre & Marie Curie, Sorbonne University,
- *                          Washington University in St. Louis,
- *                          Beijing Institute of Technology,
- *                          The University of Memphis.
+/*
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
- * This file, originally written as part of NFD (Named Data Networking Forwarding Daemon),
- * is a part of ndncert, a certificate management system based on NDN.
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
- * ndncert is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
  *
- * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
+ * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  *
- * You should have received copies of the GNU General Public License along with
- * ndncert, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
  *
- * See AUTHORS.md for complete list of ndncert authors and contributors.
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDNCERT_TESTS_IDENTITY_MANAGEMENT_FIXTURE_HPP
-#define NDNCERT_TESTS_IDENTITY_MANAGEMENT_FIXTURE_HPP
+#ifndef NDN_TESTS_IDENTITY_MANAGEMENT_FIXTURE_HPP
+#define NDN_TESTS_IDENTITY_MANAGEMENT_FIXTURE_HPP
 
-#include "test-common.hpp"
 #include "test-home-fixture.hpp"
+#include "unit-test-time-fixture.hpp"
+#include "boost-test.hpp"
 #include <ndn-cxx/security/v2/key-chain.hpp>
-#include <ndn-cxx/security/v2/additional-description.hpp>
 #include <ndn-cxx/security/signing-helpers.hpp>
+#include <vector>
 
 namespace ndn {
 namespace ndncert {
@@ -51,7 +46,6 @@
   std::set<std::string> m_certFiles;
 };
 
-
 /**
  * @brief A test suite level fixture to help with identity management
  *
@@ -103,9 +97,6 @@
   KeyChain m_keyChain;
 };
 
-/** \brief convenience base class for inheriting from both UnitTestTimeFixture
- *         and IdentityManagementV2Fixture
- */
 class IdentityManagementTimeFixture : public UnitTestTimeFixture
                                     , public IdentityManagementFixture
 {
@@ -115,4 +106,4 @@
 } // namespace ndncert
 } // namespace ndn
 
-#endif // NDNCERT_TESTS_IDENTITY_MANAGEMENT_FIXTURE_HPP
+#endif // NDN_TESTS_IDENTITY_MANAGEMENT_FIXTURE_HPP
diff --git a/tests/test-home-fixture.hpp b/tests/test-home-fixture.hpp
index 775e38a..858cf23 100644
--- a/tests/test-home-fixture.hpp
+++ b/tests/test-home-fixture.hpp
@@ -22,12 +22,10 @@
 #ifndef NDN_TESTS_TEST_HOME_FIXTURE_HPP
 #define NDN_TESTS_TEST_HOME_FIXTURE_HPP
 
-#include "ndn-cxx/security/v2/key-chain.hpp"
-
+#include <ndn-cxx/security/v2/key-chain.hpp>
 #include <cstdlib>
 #include <fstream>
 #include <initializer_list>
-
 #include <boost/algorithm/string.hpp>
 #include <boost/filesystem.hpp>
 
@@ -36,69 +34,16 @@
 namespace tests {
 
 /**
- * @brief Fixture to adjust/restore NDN_CLIENT_PIB and NDN_CLIENT_TPM paths
- *
- * Note that the specified PATH will be removed after fixture is destroyed.
- * **Do not specify non-temporary paths.**
+ * @brief TestHomeFixture to set TEST_HOME variable and allow config file creation
  */
 template<class Path>
-class PibDirFixture
-{
-public:
-  PibDirFixture()
-    : m_pibDir(Path().PATH)
-  {
-    if (std::getenv("NDN_CLIENT_PIB") != nullptr) {
-      m_oldPib = std::getenv("NDN_CLIENT_PIB");
-    }
-    if (std::getenv("NDN_CLIENT_TPM") != nullptr) {
-      m_oldTpm = std::getenv("NDN_CLIENT_TPM");
-    }
-
-    /// @todo Consider change to an in-memory PIB/TPM
-    setenv("NDN_CLIENT_PIB", ("pib-sqlite3:" + m_pibDir).c_str(), true);
-    setenv("NDN_CLIENT_TPM", ("tpm-file:" + m_pibDir).c_str(), true);
-  }
-
-  ~PibDirFixture()
-  {
-    if (!m_oldPib.empty()) {
-      setenv("NDN_CLIENT_PIB", m_oldPib.data(), true);
-    }
-    else {
-      unsetenv("NDN_CLIENT_PIB");
-    }
-
-    if (!m_oldTpm.empty()) {
-      setenv("NDN_CLIENT_TPM", m_oldTpm.data(), true);
-    }
-    else {
-      unsetenv("NDN_CLIENT_TPM");
-    }
-
-    boost::filesystem::remove_all(m_pibDir);
-    // const_cast<std::string&>(security::v2::KeyChain::getDefaultPibLocator()).clear();
-    // const_cast<std::string&>(security::v2::KeyChain::getDefaultTpmLocator()).clear();
-  }
-
-protected:
-  const std::string m_pibDir;
-
-private:
-  std::string m_oldPib;
-  std::string m_oldTpm;
-};
-
-/**
- * @brief Extension of PibDirFixture to set TEST_HOME variable and allow config file creation
- */
-template<class Path>
-class TestHomeFixture : public PibDirFixture<Path>
+class TestHomeFixture
 {
 public:
   TestHomeFixture()
+    : m_testHomeDir(Path().PATH)
   {
-    setenv("TEST_HOME", this->m_pibDir.c_str(), true);
+    setenv("TEST_HOME", m_testHomeDir.c_str(), true);
   }
 
   ~TestHomeFixture()
@@ -109,13 +54,16 @@
   void
   createClientConf(std::initializer_list<std::string> lines) const
   {
-    boost::filesystem::create_directories(boost::filesystem::path(this->m_pibDir) / ".ndn");
-    std::ofstream of((boost::filesystem::path(this->m_pibDir) / ".ndn" / "client.conf").c_str());
+    boost::filesystem::create_directories(boost::filesystem::path(m_testHomeDir) / ".ndn");
+    std::ofstream of((boost::filesystem::path(m_testHomeDir) / ".ndn" / "client.conf").c_str());
     for (auto line : lines) {
-      boost::replace_all(line, "%PATH%", this->m_pibDir);
+      boost::replace_all(line, "%PATH%", m_testHomeDir);
       of << line << std::endl;
     }
   }
+
+protected:
+  std::string m_testHomeDir;
 };
 
 struct DefaultPibDir
diff --git a/tests/test-common.hpp b/tests/unit-test-time-fixture.hpp
similarity index 63%
rename from tests/test-common.hpp
rename to tests/unit-test-time-fixture.hpp
index 11d7feb..f934a12 100644
--- a/tests/test-common.hpp
+++ b/tests/unit-test-time-fixture.hpp
@@ -1,36 +1,29 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2019, Regents of the University of California,
- *                          Arizona Board of Regents,
- *                          Colorado State University,
- *                          University Pierre & Marie Curie, Sorbonne University,
- *                          Washington University in St. Louis,
- *                          Beijing Institute of Technology,
- *                          The University of Memphis.
+/*
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
- * This file, originally written as part of NFD (Named Data Networking Forwarding Daemon),
- * is a part of ndncert, a certificate management system based on NDN.
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
- * ndncert is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
  *
- * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY
+ * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  *
- * You should have received copies of the GNU General Public License along with
- * ndncert, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
  *
- * See AUTHORS.md for complete list of ndncert authors and contributors.
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDNCERT_TESTS_TEST_COMMON_HPP
-#define NDNCERT_TESTS_TEST_COMMON_HPP
+#ifndef NDN_TESTS_UNIT_UNIT_TEST_TIME_FIXTURE_HPP
+#define NDN_TESTS_UNIT_UNIT_TEST_TIME_FIXTURE_HPP
 
-#include "boost-test.hpp"
-#include <boost/asio/io_service.hpp>
 #include <ndn-cxx/util/time-unit-test-clock.hpp>
+#include <boost/asio/io_service.hpp>
 
 namespace ndn {
 namespace ndncert {
@@ -95,20 +88,20 @@
         remaining = time::nanoseconds::zero();
       }
 
-      if (m_io.stopped())
-        m_io.reset();
-      m_io.poll();
+      if (io.stopped())
+        io.reset();
+      io.poll();
     }
   }
 
 public:
   shared_ptr<time::UnitTestSteadyClock> steadyClock;
   shared_ptr<time::UnitTestSystemClock> systemClock;
-  boost::asio::io_service m_io;
+  boost::asio::io_service io;
 };
 
 } // namespace tests
 } // namespace ndncert
 } // namespace ndn
 
-#endif // NDNCERT_TESTS_TEST_COMMON_HPP
+#endif // NDN_TESTS_UNIT_UNIT_TEST_TIME_FIXTURE_HPP
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index a3fa150..b1d8777 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -38,8 +38,8 @@
 
 BOOST_AUTO_TEST_CASE(Initialization)
 {
-  util::DummyClientFace face(m_io, {true, true});
-  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test");
+  util::DummyClientFace face(io, {true, true});
+  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test", "ca-storage-memory");
   BOOST_CHECK_EQUAL(ca.getCaConf().m_caName.toUri(), "/ndn");
 
   auto identity = addIdentity(Name("/ndn/site2"));
@@ -59,8 +59,8 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  util::DummyClientFace face(m_io, {true, true});
-  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test");
+  util::DummyClientFace face(io, {true, true});
+  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test", "ca-storage-memory");
   ca.setProbeHandler([&] (const JsonSection& probeInfo) {
       return "example";
     });
@@ -91,8 +91,8 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  util::DummyClientFace face(m_io, {true, true});
-  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test");
+  util::DummyClientFace face(io, {true, true});
+  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test", "ca-storage-memory");
   ca.setProbeHandler([&] (const JsonSection& probeInfo) {
       return "example";
     });
@@ -124,8 +124,8 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  util::DummyClientFace face(m_io, {true, true});
-  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test");
+  util::DummyClientFace face(io, {true, true});
+  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
   Interest interest("/ndn/CA/_PROBE");
@@ -153,8 +153,8 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  util::DummyClientFace face(m_io, {true, true});
-  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test");
+  util::DummyClientFace face(io, {true, true});
+  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
   ClientModule client(m_keyChain);
@@ -193,8 +193,8 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  util::DummyClientFace face(m_io, {true, true});
-  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test");
+  util::DummyClientFace face(io, {true, true});
+  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test", "ca-storage-memory");
   ca.m_config.m_probe = "email";
   advanceClocks(time::milliseconds(20), 60);
 
@@ -228,8 +228,8 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  util::DummyClientFace face(m_io, {true, true});
-  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test");
+  util::DummyClientFace face(io, {true, true});
+  CaModule ca(face, m_keyChain, "tests/unit-tests/ca.conf.test", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
   // generate NEW Interest
diff --git a/tests/unit-tests/ca-sqlite.t.cpp b/tests/unit-tests/ca-sqlite.t.cpp
index e1c8495..16dbfe8 100644
--- a/tests/unit-tests/ca-sqlite.t.cpp
+++ b/tests/unit-tests/ca-sqlite.t.cpp
@@ -20,6 +20,7 @@
 
 #include "ca-detail/ca-sqlite.hpp"
 #include "database-fixture.hpp"
+#include <iostream>
 
 namespace ndn {
 namespace ndncert {
diff --git a/tests/unit-tests/crypto-helper.t.cpp b/tests/unit-tests/crypto-helper.t.cpp
index 4576942..385dbbd 100644
--- a/tests/unit-tests/crypto-helper.t.cpp
+++ b/tests/unit-tests/crypto-helper.t.cpp
@@ -19,7 +19,7 @@
  */
 
 #include "crypto-support/crypto-helper.hpp"
-#include "test-common.hpp"
+#include "identity-management-fixture.hpp"
 #include <iostream>
 
 namespace ndn {
diff --git a/tests/unit-tests/dummy-test.t.cpp b/tests/unit-tests/dummy-test.t.cpp
index 70d3f50..0992583 100644
--- a/tests/unit-tests/dummy-test.t.cpp
+++ b/tests/unit-tests/dummy-test.t.cpp
@@ -18,7 +18,8 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "test-common.hpp"
+#include "identity-management-fixture.hpp"
+#include "boost-test.hpp"
 
 namespace ndn {
 namespace ndncert {
diff --git a/tests/unit-tests/enc-tlv.t.cpp b/tests/unit-tests/enc-tlv.t.cpp
index 9ba62e7..10e59d9 100644
--- a/tests/unit-tests/enc-tlv.t.cpp
+++ b/tests/unit-tests/enc-tlv.t.cpp
@@ -20,7 +20,7 @@
 
 #include "crypto-support/enc-tlv.hpp"
 #include "crypto-support/crypto-helper.hpp"
-#include "test-common.hpp"
+#include "boost-test.hpp"
 
 namespace ndn {
 namespace ndncert {
