diff --git a/tests/unit/db/db-mgr.cpp b/tests/unit/db/db-mgr.cpp
new file mode 100644
index 0000000..198a851
--- /dev/null
+++ b/tests/unit/db/db-mgr.cpp
@@ -0,0 +1,46 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
+ *
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
+ *
+ * NDNS 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.
+ *
+ * NDNS 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.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "db/db-mgr.hpp"
+#include "../../boost-test.hpp"
+
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+BOOST_AUTO_TEST_SUITE(DbMgr)
+
+BOOST_AUTO_TEST_CASE(Basic)
+{
+  ndns::DbMgr mgr(BUILDDIR "/tests/unit/db/dbmgr-ndns.db");
+  BOOST_CHECK_EQUAL(mgr.getStatus(), ndns::DbMgr::DB_CONNECTED);
+
+  mgr.close();
+  BOOST_CHECK_EQUAL(mgr.getStatus(), ndns::DbMgr::DB_CLOSED);
+
+  // reopen
+  mgr.open();
+  BOOST_CHECK_EQUAL(mgr.getStatus(), ndns::DbMgr::DB_CONNECTED);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace ndns
+} // namespace ndn
diff --git a/tests/unit/logger.cpp b/tests/unit/logger.cpp
new file mode 100644
index 0000000..100aa5b
--- /dev/null
+++ b/tests/unit/logger.cpp
@@ -0,0 +1,231 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California.
+ *
+ * This file is part of NDNS (Named Data Networking Domain Name Service).
+ * See AUTHORS.md for complete list of NDNS authors and contributors.
+ *
+ * NDNS 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.
+ *
+ * NDNS 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.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "logger.hpp"
+#include "../boost-test.hpp"
+
+#include <fstream>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/filesystem.hpp>
+
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+BOOST_AUTO_TEST_SUITE(Logger)
+
+class Fixture
+{
+public:
+  Fixture()
+    : m_logConfigFilename(boost::filesystem::unique_path().native())
+    , m_logFilename(boost::filesystem::unique_path().native())
+  {
+  }
+
+  ~Fixture()
+  {
+    boost::filesystem::remove(boost::filesystem::path(getLogConfigFilename()));
+    boost::filesystem::remove(boost::filesystem::path(getLogFilename()));
+
+    log::init("unit-tests.log4cxx");
+  }
+
+  const std::string&
+  getLogConfigFilename()
+  {
+    return m_logConfigFilename;
+  }
+
+  const std::string&
+  getLogFilename()
+  {
+    return m_logFilename;
+  }
+
+  void
+  verifyOutput(const std::string expected[], size_t nExpected)
+  {
+    std::ifstream is(getLogFilename().c_str());
+    std::string buffer((std::istreambuf_iterator<char>(is)),
+                       (std::istreambuf_iterator<char>()));
+
+    std::vector<std::string> components;
+    boost::split(components, buffer, boost::is_any_of(" ,\n"));
+
+    // expected + number of timestamps (one per log statement) + trailing newline of last statement
+    BOOST_REQUIRE_EQUAL(components.size(), nExpected);
+
+    for (size_t i = 0; i < nExpected; ++i) {
+      if (expected[i] == "")
+        continue;
+
+      BOOST_CHECK_EQUAL(components[i], expected[i]);
+    }
+  }
+
+private:
+  std::string m_logConfigFilename;
+  std::string m_logFilename;
+};
+
+BOOST_FIXTURE_TEST_CASE(AllLevels, Fixture)
+{
+  {
+    std::ofstream of(getLogConfigFilename().c_str());
+    of << "log4j.rootLogger=TRACE, FILE\n"
+       << "log4j.appender.FILE=org.apache.log4j.FileAppender\n"
+       << "log4j.appender.FILE.layout=org.apache.log4j.PatternLayout\n"
+       << "log4j.appender.FILE.File=" << getLogFilename() << "\n"
+       << "log4j.appender.FILE.ImmediateFlush=true\n"
+       << "log4j.appender.FILE.layout.ConversionPattern=%d{HH:mm:ss} %p %c{1} - %m%n\n";
+  }
+
+  log::init(getLogConfigFilename());
+
+  NDNS_LOG_INIT("DefaultConfig");
+
+  NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+  NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+  NDNS_LOG_INFO("info-message-Jjxjshj13");
+  NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+  NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+  NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+
+  const std::string EXPECTED[] =
+    {
+      "", "TRACE", "DefaultConfig", "-", "trace-message-JHGFDSR^1",
+      "", "DEBUG", "DefaultConfig", "-", "debug-message-IGg2474fdksd-fo-151617",
+      "", "INFO",  "DefaultConfig", "-", "info-message-Jjxjshj13",
+      "", "WARN",  "DefaultConfig", "-", "warning-message-XXXhdhd111x",
+      "", "ERROR", "DefaultConfig", "-", "error-message-!#$&^%$#@",
+      "", "FATAL", "DefaultConfig", "-", "fatal-message-JJSjaamcng",
+      "",
+    };
+
+  verifyOutput(EXPECTED, sizeof(EXPECTED) / sizeof(std::string));
+}
+
+BOOST_FIXTURE_TEST_CASE(UpToInfo, Fixture)
+{
+  {
+    std::ofstream of(getLogConfigFilename().c_str());
+    of << "log4j.rootLogger=INFO, FILE\n"
+       << "log4j.appender.FILE=org.apache.log4j.FileAppender\n"
+       << "log4j.appender.FILE.layout=org.apache.log4j.PatternLayout\n"
+       << "log4j.appender.FILE.File=" << getLogFilename() << "\n"
+       << "log4j.appender.FILE.ImmediateFlush=true\n"
+       << "log4j.appender.FILE.layout.ConversionPattern=%d{HH:mm:ss} %p %c{1} - %m%n\n";
+  }
+
+  log::init(getLogConfigFilename());
+
+  NDNS_LOG_INIT("DefaultConfig");
+
+  NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+  NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+  NDNS_LOG_INFO("info-message-Jjxjshj13");
+  NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+  NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+  NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+
+  const std::string EXPECTED[] =
+    {
+      "", "INFO",  "DefaultConfig", "-", "info-message-Jjxjshj13",
+      "", "WARN",  "DefaultConfig", "-", "warning-message-XXXhdhd111x",
+      "", "ERROR", "DefaultConfig", "-", "error-message-!#$&^%$#@",
+      "", "FATAL", "DefaultConfig", "-", "fatal-message-JJSjaamcng",
+      "",
+    };
+
+  verifyOutput(EXPECTED, sizeof(EXPECTED) / sizeof(std::string));
+}
+
+BOOST_FIXTURE_TEST_CASE(OnlySelectedModule, Fixture)
+{
+  {
+    std::ofstream of(getLogConfigFilename().c_str());
+    of << "log4j.rootLogger=OFF, FILE\n"
+       << "log4j.appender.FILE=org.apache.log4j.FileAppender\n"
+       << "log4j.appender.FILE.layout=org.apache.log4j.PatternLayout\n"
+       << "log4j.appender.FILE.File=" << getLogFilename() << "\n"
+       << "log4j.appender.FILE.ImmediateFlush=true\n"
+       << "log4j.appender.FILE.layout.ConversionPattern=%d{HH:mm:ss} %p %c - %m%n\n"
+       << "log4j.logger.SelectedModule=TRACE\n"
+       << "log4j.logger.SelectedModule.Submodule=FATAL\n";
+  }
+
+  log::init(getLogConfigFilename());
+
+  {
+    NDNS_LOG_INIT("DefaultConfig");
+
+    NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+    NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+    NDNS_LOG_INFO("info-message-Jjxjshj13");
+    NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+    NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+    NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+  }
+
+  {
+    NDNS_LOG_INIT("SelectedModule");
+
+    NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+    NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+    NDNS_LOG_INFO("info-message-Jjxjshj13");
+    NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+    NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+    NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+  }
+
+  {
+    NDNS_LOG_INIT("SelectedModule.Submodule");
+
+    NDNS_LOG_TRACE("trace-message-JHGFDSR^1");
+    NDNS_LOG_DEBUG("debug-message-IGg2474fdksd-fo-" << 15 << 16 << 17);
+    NDNS_LOG_INFO("info-message-Jjxjshj13");
+    NDNS_LOG_WARN("warning-message-XXXhdhd11" << 1 <<"x");
+    NDNS_LOG_ERROR("error-message-!#$&^%$#@");
+    NDNS_LOG_FATAL("fatal-message-JJSjaamcng");
+  }
+
+  const std::string EXPECTED[] =
+    {
+      "", "TRACE", "SelectedModule", "-", "trace-message-JHGFDSR^1",
+      "", "DEBUG", "SelectedModule", "-", "debug-message-IGg2474fdksd-fo-151617",
+      "", "INFO",  "SelectedModule", "-", "info-message-Jjxjshj13",
+      "", "WARN",  "SelectedModule", "-", "warning-message-XXXhdhd111x",
+      "", "ERROR", "SelectedModule", "-", "error-message-!#$&^%$#@",
+      "", "FATAL", "SelectedModule", "-", "fatal-message-JJSjaamcng",
+      "", "FATAL", "SelectedModule.Submodule", "-", "fatal-message-JJSjaamcng",
+      "",
+    };
+
+  verifyOutput(EXPECTED, sizeof(EXPECTED) / sizeof(std::string));
+}
+
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace ndns
+} // namespace ndn
diff --git a/tests/unit/zone.cpp b/tests/unit/zone.cpp
index 0a26e76..f533d2e 100644
--- a/tests/unit/zone.cpp
+++ b/tests/unit/zone.cpp
@@ -26,13 +26,12 @@
 namespace ndns {
 namespace tests {
 
+BOOST_AUTO_TEST_SUITE(Zone)
 
-BOOST_AUTO_TEST_SUITE(ZoneTest)
-
-BOOST_AUTO_TEST_CASE(TestCase)
+BOOST_AUTO_TEST_CASE(Basic)
 {
   Name zoneName("/net/ndnsim");
-  Zone zone1;
+  ndns::Zone zone1;
   zone1.setName(zoneName);
   zone1.setId(2);
   zone1.setTtl(time::seconds(4000));
@@ -41,11 +40,11 @@
   BOOST_CHECK_EQUAL(zone1.getName(), zoneName);
   BOOST_CHECK_EQUAL(zone1.getTtl(), time::seconds(4000));
 
-  Zone zone2(zoneName);
+  ndns::Zone zone2(zoneName);
   BOOST_CHECK_EQUAL(zone1, zone2);
   BOOST_CHECK_EQUAL(zone2.getName(), zone1.getName());
 
-  BOOST_CHECK_NE(zone1, Zone("/net/ndnsim2"));
+  BOOST_CHECK_NE(zone1, ndns::Zone("/net/ndnsim2"));
 }
 
 BOOST_AUTO_TEST_SUITE_END()
