diff --git a/tests/unit/app/name-caching-resolver.cpp b/tests/unit/app/name-caching-resolver.cpp
new file mode 100644
index 0000000..d886aee
--- /dev/null
+++ b/tests/unit/app/name-caching-resolver.cpp
@@ -0,0 +1,77 @@
+/* -*- 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/>.
+ */
+
+
+/* -*- 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 "app/name-caching-resolver.hpp"
+#include "../boost-test.hpp"
+
+//#include <boost/test/test_tools.hpp>
+//#include <string>
+
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(nameCachingResolver)
+
+BOOST_AUTO_TEST_CASE(Protocol)
+{
+  string label = "nameCachingResolver::Protocol";
+  printbegin(label);
+
+  Name name = "/DNS-R/net/ndnsim/www/TXT";
+  Interest interest;
+  interest.setName(name);
+
+  NameCachingResolver resolver("resolver", "/DNS-R");
+  cout<<"onInterest"<<endl;
+  resolver.onInterest(name, interest);
+
+
+
+  printend(label);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace ndns
+} // namespace ndn
+
diff --git a/tests/unit/app/name-server.cpp b/tests/unit/app/name-server.cpp
new file mode 100644
index 0000000..da0dbfa
--- /dev/null
+++ b/tests/unit/app/name-server.cpp
@@ -0,0 +1,84 @@
+/* -*- 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/>.
+ */
+
+
+/* -*- 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 "app/name-server.hpp"
+#include "../boost-test.hpp"
+#include <time.h>
+
+//#include <boost/test/test_tools.hpp>
+//#include <string>
+
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(nameServer)
+
+BOOST_AUTO_TEST_CASE(Protocol)
+{
+  string label = "nameServer::Protocol";
+  printbegin(label);
+
+  Name name("/DNS/net/NS");
+  Interest interest;
+  interest.setName(name);
+
+
+  string program = "name-server-daemon";
+  string prefix = "/";
+
+  const char* pro = program.c_str();
+  const char * pre = prefix.c_str();
+  NameServer server(pro, pre, pre);
+
+  server.onInterest(name, interest);
+
+
+
+  printend(label);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace ndns
+} // namespace ndn
+
diff --git a/tests/unit/boost-test.hpp b/tests/unit/boost-test.hpp
new file mode 100644
index 0000000..793d0f7
--- /dev/null
+++ b/tests/unit/boost-test.hpp
@@ -0,0 +1,35 @@
+#ifndef NDNS_TESTS_BOOST_TEST_HPP
+#define NDNS_TESTS_BOOST_TEST_HPP
+
+// suppress warnings from Boost.Test
+#pragma GCC system_header
+#pragma clang system_header
+
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/test/output_test_stream.hpp>
+
+#include <ndn-cxx/name.hpp>
+#include <ndn-cxx/data.hpp>
+#include <ndn-cxx/interest.hpp>
+
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+  void inline
+  printbegin(std::string label)
+  {
+    std::cout<<std::endl<<"-->>>>>>>>>>>>>>"<<label<<" begins:"<<std::endl;
+  }
+
+  void inline
+  printend(std::string label)
+  {
+    std::cout<<"<<<<<<<<<<<<<<--"<<label<<" ends."<<std::endl;
+  }
+}//tests
+}//ndns
+}//ndn
+#endif // NDN_TESTS_BOOST_TEST_HPP
diff --git a/tests/unit/nameserver.cpp b/tests/unit/db/rr-mgr.cpp
similarity index 61%
copy from tests/unit/nameserver.cpp
copy to tests/unit/db/rr-mgr.cpp
index de9f726..4fd5d7d 100644
--- a/tests/unit/nameserver.cpp
+++ b/tests/unit/db/rr-mgr.cpp
@@ -17,12 +17,53 @@
  * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "tool/nameServer.h"
+#include "../boost-test.hpp"
 
+#include "db/rr-mgr.hpp"
+
+//#include <ndn-cxx/name.hpp>
 namespace ndn {
 namespace ndns {
 namespace tests {
 
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(rrMgr)
+
+BOOST_AUTO_TEST_CASE(db)
+{
+
+  string label = "rrMgr::db";
+  printbegin(label);
+
+  ndns::Query q;
+  Name n1("/net");
+  Name n2("/ndnsim");
+  q.setAuthorityZone(n1);
+  q.setRrLabel(n2);
+  q.setQueryType(ndns::Query::QUERY_DNS_R);
+
+
+  Zone zone;
+  zone.setAuthorizedName(Name("/net"));
+  zone.setId(2);
+
+  Response re;
+
+  RRMgr mgr(zone, q, re);
+  BOOST_CHECK_EQUAL(mgr.lookup(), 0);
+
+
+  zone.setId(23);
+  RRMgr mgr2(zone, q, re);
+  BOOST_CHECK_EQUAL(mgr2.lookup(), 0);
+
+
+
+  printend(label);
+}
+BOOST_AUTO_TEST_SUITE_END()
+
 } // namespace tests
 } // namespace ndns
 } // namespace ndn
diff --git a/tests/unit/db/zone-mgr.cpp b/tests/unit/db/zone-mgr.cpp
new file mode 100644
index 0000000..3d2bc0c
--- /dev/null
+++ b/tests/unit/db/zone-mgr.cpp
@@ -0,0 +1,68 @@
+/* -*- 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 "../boost-test.hpp"
+
+#include "db/zone-mgr.hpp"
+#include "zone.hpp"
+
+//#include <ndn-cxx/name.hpp>
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(zoneMgr)
+
+BOOST_AUTO_TEST_CASE(db)
+{
+  string label = "zoneMgr::db";
+  printbegin(label);
+  Zone zone;
+  zone.setAuthorizedName(Name("/net"));
+  zone.setId(11);
+
+  ZoneMgr mgr(zone); //the construction will lookup zone.id, /net's id is 2
+  BOOST_CHECK_EQUAL(mgr.getZone().getId(), 2);
+  BOOST_CHECK_EQUAL(zone.getId(), 2);
+
+
+  zone.setId(11);
+  BOOST_CHECK_EQUAL(mgr.getZone().getId(), 11);
+
+  zone.setId(12);
+  BOOST_CHECK_EQUAL(mgr.getZone().getId(), 12);
+
+  mgr.lookupId();
+  cout<<"zone.name="<<mgr.getZone().getAuthorizedName()<<endl;
+  cout<<"zone.id="<<mgr.getZone().getId()<<endl;
+  cout<<"zone.id="<<mgr.getZone().getId()<<endl;
+  cout<<"&zone="<<&zone<<endl;
+  cout<<"&mgr.getZone()"<<&(mgr.getZone())<<endl;
+  BOOST_CHECK_EQUAL(mgr.getZone().getId(), 2);
+  BOOST_CHECK_EQUAL(zone.getId(), 2);
+
+  printend(label);
+}
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace ndns
+} // namespace ndn
diff --git a/tests/unit/nameserver.cpp b/tests/unit/iterative-query.cpp
similarity index 75%
rename from tests/unit/nameserver.cpp
rename to tests/unit/iterative-query.cpp
index de9f726..a904cee 100644
--- a/tests/unit/nameserver.cpp
+++ b/tests/unit/iterative-query.cpp
@@ -17,12 +17,34 @@
  * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "tool/nameServer.h"
+#include "iterative-query.hpp"
+#include "boost-test.hpp"
+
+//#include <boost/test/test_tools.hpp>
+//#include <string>
 
 namespace ndn {
 namespace ndns {
 namespace tests {
 
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(iQuery)
+
+BOOST_AUTO_TEST_CASE(Protocol)
+{
+  string label = "iQuery::Protocol";
+  printbegin(label);
+
+  Query q;
+
+
+
+  printend(label);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
 } // namespace tests
 } // namespace ndns
 } // namespace ndn
diff --git a/tests/unit/query.cpp b/tests/unit/query.cpp
index a92a5d1..aa2fe9b 100644
--- a/tests/unit/query.cpp
+++ b/tests/unit/query.cpp
@@ -17,12 +17,44 @@
  * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "src/query.h"
+#include "query.hpp"
+
+#include "boost-test.hpp"
 
 namespace ndn {
 namespace ndns {
 namespace tests {
 
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(query)
+
+BOOST_AUTO_TEST_CASE(UnderstandInterest)
+{
+  printbegin("query::UnderstandInterst");
+  ndns::Query q;
+  Name n1("/dns.google.com");
+  Name n2("/www.baidu.com");
+  q.setAuthorityZone(n1);
+  q.setRrLabel(n2);
+  q.setQueryType(ndns::Query::QUERY_DNS_R);
+
+  Interest interest = q.toInterest();
+  cout<<"InterestName="<<interest.getName()<<endl;
+
+
+  ndns::Query q2;
+  Name name;
+  q2.fromInterest(name, interest);
+  cout<<"AuthZone="<<q2.getAuthorityZone()<<" RRLable="<<q2.getRrLabel()<<endl;
+  BOOST_CHECK_EQUAL(q.getAuthorityZone(), q2.getAuthorityZone());
+  BOOST_CHECK_EQUAL(q.getRrLabel(), q2.getRrLabel());
+  BOOST_CHECK_EQUAL(q.getQueryType(), q2.getQueryType());
+  printend("query:UnderstandInterst");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
 } // namespace tests
 } // namespace ndns
 } // namespace ndn
diff --git a/tests/unit/resolver.cpp b/tests/unit/resolver.cpp
index 959a58e..0c3a728 100644
--- a/tests/unit/resolver.cpp
+++ b/tests/unit/resolver.cpp
@@ -17,7 +17,7 @@
  * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "resolver.h"
+// #include "resolver.h"
 
 namespace ndn {
 namespace ndns {
diff --git a/tests/unit/response.cpp b/tests/unit/response.cpp
new file mode 100644
index 0000000..bb976a0
--- /dev/null
+++ b/tests/unit/response.cpp
@@ -0,0 +1,104 @@
+/* -*- 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 "response.hpp"
+#include "rr.hpp"
+#include "query.hpp"
+#include "rr.hpp"
+
+#include "boost-test.hpp"
+#include <string>
+
+
+namespace ndn {
+namespace ndns {
+namespace tests {
+
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(response)
+
+BOOST_AUTO_TEST_CASE(Encode)
+{
+
+  printbegin("response:Encode");
+
+  Response re, re2;
+  cout<<"construct a Response Instance"<<endl;
+  vector<RR> vec;
+
+  RR rr;
+  std::string ex3 = "www3.ex.com";
+  uint32_t id = 203;
+  rr.setRrdata(ex3);
+  rr.setId(id);
+  vec.push_back(rr);
+
+
+  RR rr2;
+  std::string ex4 = "www4.ex.com";
+  id = 204;
+  rr2.setRrdata(ex4);
+  rr2.setId(id);
+  vec.push_back(rr2);
+
+  ndns::Query q;
+  Name n1("/dns.google.com");
+  Name n2("/www.baidu.com");
+  q.setAuthorityZone(n1);
+  q.setRrLabel(n2);
+  q.setQueryType(ndns::Query::QUERY_DNS_R);
+  Interest interest = q.toInterest();
+  Name n3(q.toInterest().getName());
+  n3.appendNumber((uint64_t)1313344);
+
+  re.setQueryName(n3);
+  re.setFreshness(time::milliseconds(4444));
+  re.setRrs(vec);
+
+
+
+  cout<<"before encode"<<endl;
+  //ndn::Block block = re.wireEncode();
+  //re.wireEncode();
+  Data data = re.toData();
+  cout<<re.toData()<<endl;
+
+  cout<<"Encode finishes"<<endl;
+
+
+  re2.fromData(n2, data);
+  BOOST_CHECK_EQUAL(re.getQueryName(), re2.getQueryName());
+  BOOST_CHECK_EQUAL(re.getContentType(), re2.getContentType());
+  BOOST_CHECK_EQUAL(re.getResponseType(), re2.getResponseType());
+  BOOST_CHECK_EQUAL(re.getRrs().size(), re2.getRrs().size());
+  BOOST_CHECK_EQUAL(re.getRrs()[0], re2.getRrs()[0]);
+  BOOST_CHECK_EQUAL(re.getRrs()[1], re2.getRrs()[1]);
+
+
+  printend("response:Encode");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+
+} // namespace tests
+} // namespace ndns
+} // namespace ndn
diff --git a/tests/unit/rr.cpp b/tests/unit/rr.cpp
index 666aeeb..b5b915b 100644
--- a/tests/unit/rr.cpp
+++ b/tests/unit/rr.cpp
@@ -18,26 +18,41 @@
  */
 
 #include "rr.hpp"
+#include "boost-test.hpp"
 
-#include <boost/test/unit_test.hpp>
+//#include <boost/test/test_tools.hpp>
+//#include <string>
 
 namespace ndn {
 namespace ndns {
 namespace tests {
 
-BOOST_AUTO_TEST_SUITE(Rr)
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(rr)
 
 BOOST_AUTO_TEST_CASE(Encode)
 {
-  ndn::RR rr;
-  rr.setRrdata("www2.ex.com");
+  string label = "rr:Encode";
+  printbegin(label);
+  RR rr;
+  std::string ex = "www2.ex.com";
+  uint32_t id = 201;
+  rr.setRrdata(ex);
+  rr.setId(id);
 
+  cout<<"before encode"<<endl;
   ndn::Block block = rr.wireEncode();
+  cout<<"Encode finishes with totalLenght="<<block.size()<<endl;
 
-  ndn::RR rr2;
+
+
+  RR rr2;
   rr2.wireDecode(block);
 
-  BOOST_TEST_EQUAL(rr.getRrdata(), "?");
+  BOOST_CHECK_EQUAL(rr2.getRrdata(), ex);
+  BOOST_CHECK_EQUAL(rr2.getId(), id);
+  printend(label);
 }
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/unit/zone.cpp b/tests/unit/zone.cpp
index 252e22f..f697c02 100644
--- a/tests/unit/zone.cpp
+++ b/tests/unit/zone.cpp
@@ -17,7 +17,7 @@
  * NDNS, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "src/zone.h"
+// #include "src/zone.h"
 
 namespace ndn {
 namespace ndns {
