diff --git a/tests/test-adjacency-list.cpp b/tests/test-adjacency-list.cpp
new file mode 100644
index 0000000..757c145
--- /dev/null
+++ b/tests/test-adjacency-list.cpp
@@ -0,0 +1,52 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "adjacency-list.hpp"
+#include "adjacent.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(TestAdjacenctList)
+
+BOOST_AUTO_TEST_CASE(AdjacenctListBasic)
+{
+  const string ADJ_NAME_1 = "testname";
+  const string ADJ_NAME_2 = "testname2";
+
+//adjacent needed to test adjacency list.
+  Adjacent adjacent1(ADJ_NAME_1);
+  Adjacent adjacent2(ADJ_NAME_2);
+
+  adjacent1.setLinkCost(4);
+  adjacent2.setLinkCost(5);
+
+  AdjacencyList adjacentList1;
+  AdjacencyList adjacentList2;
+
+  adjacentList1.insert(adjacent1);
+  adjacentList2.insert(adjacent2);
+
+  BOOST_CHECK_EQUAL(adjacentList1.getSize(), 1);
+  BOOST_CHECK_EQUAL(adjacentList1.isEqual(adjacentList2), false);
+
+  BOOST_CHECK(adjacentList1.isNeighbor("testname"));
+  BOOST_CHECK_EQUAL(adjacentList1.isNeighbor("adjacent"), false);
+
+  string n1 = "testname";
+  BOOST_CHECK_EQUAL(adjacentList1.getStatusOfNeighbor(n1), 0);
+
+  adjacentList1.setStatusOfNeighbor(n1, 1);
+  BOOST_CHECK_EQUAL(adjacentList1.getStatusOfNeighbor(n1), 1);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace tests
+} //namespace nlsr
diff --git a/tests/test-adjacent.cpp b/tests/test-adjacent.cpp
new file mode 100644
index 0000000..90be869
--- /dev/null
+++ b/tests/test-adjacent.cpp
@@ -0,0 +1,36 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "adjacent.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(TestAdjacenct)
+
+BOOST_AUTO_TEST_CASE(AdjacenctBasic)
+{
+  const string ADJ_NAME_1 = "testname";
+  const string ADJ_NAME_2 = "testname";
+
+  Adjacent adjacent1(ADJ_NAME_1);
+  Adjacent adjacent2(ADJ_NAME_2);
+  BOOST_CHECK(adjacent1.isEqual(adjacent2));
+
+  adjacent1.setLinkCost(10.5);
+  BOOST_CHECK_CLOSE(adjacent1.getLinkCost(), 10.5, 0.0001);
+
+  BOOST_CHECK_EQUAL(adjacent1.getName(), "testname");
+
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace tests
+} //namespace nlsr
diff --git a/tests/test-conf-file-processor.cpp b/tests/test-conf-file-processor.cpp
new file mode 100644
index 0000000..7b87fac
--- /dev/null
+++ b/tests/test-conf-file-processor.cpp
@@ -0,0 +1,59 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "conf-file-processor.hpp"
+#include "nlsr.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestConfFileProcessor)
+
+BOOST_AUTO_TEST_CASE(ConfFileProcessorSample)
+{
+  Nlsr nlsr1;
+
+  const std::string CONFIG =
+    "network ndn\n"
+    "site-name memphis.edu\n"
+    "router-name cs/macbook\n\n"
+    "ndnneighbor /ndn/memphis.edu/cs/maia 7\n"
+    "link-cost /ndn/memphis.edu/cs/maia 30\n"
+    "ndnneighbor /ndn/memphis.edu/cs/pollux 10\n"
+    "link-cost /ndn/memphis.edu/cs/pollux 25\n\n"
+    "ndnname /ndn/memphis.edu/cs/macbook/name1\n"
+    "ndnname /ndn/memphis.edu/cs/macbook/name2\n\n\n"
+    ;
+
+  ofstream config;
+  config.open("unit-test-nlsr.conf");
+  config << CONFIG;
+  config.close();
+
+  const string CONFIG_FILE = "unit-test-nlsr.conf";
+
+  ConfFileProcessor cfp1(nlsr1, CONFIG_FILE);
+
+  cfp1.processConfFile();
+
+  BOOST_CHECK(nlsr1.getAdjacencyList().isNeighbor("/ndn/memphis.edu/cs/maia"));
+  BOOST_CHECK_EQUAL(
+    nlsr1.getAdjacencyList().getAdjacent("/ndn/memphis.edu/cs/maia").getName(),
+    "/ndn/memphis.edu/cs/maia");
+  BOOST_CHECK_EQUAL(
+    nlsr1.getAdjacencyList().getAdjacent("/ndn/memphis.edu/cs/maia").getLinkCost(),
+    30);
+
+  BOOST_CHECK_EQUAL(nlsr1.getNamePrefixList().getSize(), 2);
+
+  remove("unit-test-nlsr.conf");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-conf-parameter.cpp b/tests/test-conf-parameter.cpp
new file mode 100644
index 0000000..e376084
--- /dev/null
+++ b/tests/test-conf-parameter.cpp
@@ -0,0 +1,116 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "conf-parameter.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(TestConfParameter)
+
+BOOST_AUTO_TEST_CASE(ConfParameterSettersAndGetters)
+{
+  ConfParameter cp1;
+
+  const string NAME = "router1";
+  const string SITE = "memphis";
+  const string NETWORK = "ATT";
+
+  cp1.setRouterName(NAME);
+
+  cp1.setSiteName(SITE);
+
+  cp1.setNetwork(NETWORK);
+
+  cp1.setRootKeyPrefix("adminRootKey");
+
+  cp1.setInterestRetryNumber(2);
+
+  cp1.setInterestResendTime(1000);
+
+  cp1.setLsaRefreshTime(1500);
+
+  cp1.setRouterDeadInterval(10);
+
+  cp1.setMaxFacesPerPrefix(50);
+
+  cp1.setLogDir("log");
+
+  cp1.setCertDir("cert");
+
+  cp1.setSeqFileDir("ssfd");
+
+  cp1.setDetailedLogging(1);
+
+  cp1.setDebugging(1);
+
+  cp1.setIsHyperbolicCalc(1);
+
+  cp1.setCorR(2.5);
+
+  cp1.setCorTheta(102.5);
+
+  cp1.setTunnelType(2);
+
+  const string a = "csp";
+  cp1.setChronosyncSyncPrefix(a);
+
+  cp1.setChronosyncLsaPrefix("cla");
+
+  cp1.setInfoInterestInterval(3);
+
+  BOOST_CHECK_EQUAL(cp1.getRouterName(), "router1");
+
+  BOOST_CHECK_EQUAL(cp1.getSiteName(), "memphis");
+
+  BOOST_CHECK_EQUAL(cp1.getNetwork(), "ATT");
+
+  cp1.buildRouterPrefix();
+
+  BOOST_CHECK_EQUAL(cp1.getRouterPrefix(), "/ATT/memphis/router1");
+
+  BOOST_CHECK_EQUAL(cp1.getRootKeyPrefix(), "adminRootKey");
+
+  BOOST_CHECK_EQUAL(cp1.getInterestRetryNumber(), 2);
+
+  BOOST_CHECK_EQUAL(cp1.getInterestResendTime(), 1000);
+
+  BOOST_CHECK_EQUAL(cp1.getLsaRefreshTime(), 1500);
+
+  BOOST_CHECK_EQUAL(cp1.getRouterDeadInterval(), 10);
+
+  BOOST_CHECK_EQUAL(cp1.getMaxFacesPerPrefix(), 50);
+
+  BOOST_CHECK_EQUAL(cp1.getLogDir(), "log");
+
+  BOOST_CHECK_EQUAL(cp1.getCertDir(), "cert");
+
+  BOOST_CHECK_EQUAL(cp1.getSeqFileDir(), "ssfd");
+
+  BOOST_CHECK_EQUAL(cp1.getDetailedLogging(), 1);
+
+  BOOST_CHECK_EQUAL(cp1.getDebugging(), 1);
+
+  BOOST_CHECK_EQUAL(cp1.getIsHyperbolicCalc(), 1);
+
+  BOOST_CHECK_CLOSE(cp1.getCorTheta(), 102.5, 0.0001);
+
+  BOOST_CHECK_EQUAL(cp1.getTunnelType(), 2);
+
+  BOOST_CHECK_EQUAL(cp1.getChronosyncSyncPrefix(), "csp");
+
+  BOOST_CHECK_EQUAL(cp1.getChronosyncLsaPrefix(), "cla");
+
+  BOOST_CHECK_EQUAL(cp1.getInfoInterestInterval(), 3);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace test
+} // namespace nlsr
diff --git a/tests/test-fib-entry.cpp b/tests/test-fib-entry.cpp
new file mode 100644
index 0000000..1a908a3
--- /dev/null
+++ b/tests/test-fib-entry.cpp
@@ -0,0 +1,28 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "route/fib-entry.hpp"
+#include "route/nexthop-list.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestFibEntry)
+
+BOOST_AUTO_TEST_CASE(FibEntryConstructorAndGetters)
+{
+  FibEntry fe1("next1");
+
+  BOOST_CHECK_EQUAL(fe1.getName(), "next1");
+  BOOST_CHECK_EQUAL(fe1.getTimeToRefresh(), 0);   //Default Time
+  BOOST_CHECK_EQUAL(fe1.getSeqNo(), 0);           //Default Seq No.
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-lsa.cpp b/tests/test-lsa.cpp
new file mode 100644
index 0000000..715d19e
--- /dev/null
+++ b/tests/test-lsa.cpp
@@ -0,0 +1,80 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "lsa.hpp"
+#include "name-prefix-list.hpp"
+#include "adjacent.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+namespace test {
+BOOST_AUTO_TEST_SUITE(TestLsa)
+
+BOOST_AUTO_TEST_CASE(NameLsaBasic)
+{
+  NamePrefixList npl1;
+
+  std::string s1 = "name1";
+  std::string s2 = "name2";
+
+  npl1.insert(s1);
+  npl1.insert(s2);
+
+//lsType is 1 for NameLsa, 3rd arg is seqNo. which will be a random number I just put in 12.
+//1800 is default lsa refresh time.
+  NameLsa nlsa1("router1", 1, 12, 1800, npl1);
+  NameLsa nlsa2("router2", 1, 12, 1500, npl1);
+
+  BOOST_CHECK_EQUAL(nlsa1.getLsType(), 1);
+
+  BOOST_CHECK(nlsa1.getLifeTime() != nlsa2.getLifeTime());
+
+  BOOST_CHECK(nlsa1.getKey() != nlsa2.getKey());
+}
+
+BOOST_AUTO_TEST_CASE(AdjacentLsaConstructorAndGetters)
+{
+  Adjacent adj1("adjacent");
+  Adjacent adj2("adjacent2");
+
+  AdjacencyList adjList;
+  adjList.insert(adj1);
+
+//For AdjLsa, lsType is 2.
+//1 is the number of adjacent in adjacent list.
+  AdjLsa alsa1("router1", 2, 12, 1800, 1, adjList);
+  AdjLsa alsa2("router1", 2, 12, 1800, 1, adjList);
+
+  BOOST_CHECK_EQUAL(alsa1.getLsType(), 2);
+  BOOST_CHECK_EQUAL(alsa1.getLsSeqNo(), 12);
+  BOOST_CHECK_EQUAL(alsa1.getLifeTime(), 1800);
+  BOOST_CHECK_EQUAL(alsa1.getNoLink(), 1);
+
+  BOOST_CHECK(alsa1.isEqual(alsa2));
+
+  alsa1.addAdjacent(adj2);
+
+  const std::string ADJACENT_1 = "adjacent2";
+  BOOST_CHECK(alsa1.getAdl().isNeighbor(ADJACENT_1));
+}
+
+BOOST_AUTO_TEST_CASE(CoordinateLsaConstructorAndGetters)
+{
+//For CoordinateLsa, lsType is 3.
+  CoordinateLsa clsa1("router1", 3, 12, 1800, 2.5, 30.0);
+  CoordinateLsa clsa2("router1", 3, 12, 1800, 2.5, 30.0);
+
+  BOOST_CHECK_CLOSE(clsa1.getCorRadius(), 2.5, 0.0001);
+  BOOST_CHECK_CLOSE(clsa1.getCorTheta(), 30.0, 0.0001);
+
+  BOOST_CHECK(clsa1.isEqual(clsa2));
+
+  BOOST_CHECK_EQUAL(clsa1.getData(), clsa2.getData());
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-lsdb.cpp b/tests/test-lsdb.cpp
new file mode 100644
index 0000000..efc6f4a
--- /dev/null
+++ b/tests/test-lsdb.cpp
@@ -0,0 +1,50 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "lsdb.hpp"
+#include "nlsr.hpp"
+#include "lsa.hpp"
+#include "name-prefix-list.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestLsdb)
+
+BOOST_AUTO_TEST_CASE(LsdbRemoveAndExists)
+{
+  Nlsr nlsr1;
+
+  NamePrefixList npl1;
+
+  string s1 = "name1";
+  string s2 = "name2";
+  string router1 = "router1/1";
+
+  npl1.insert(s1);
+  npl1.insert(s2);
+
+//For NameLsa lsType is 1.
+//12 is seqNo, randomly generated.
+//1800 is the default life time.
+  NameLsa nlsa1("router1", 1, 12, 1800, npl1);
+
+  Lsdb lsdb1;
+
+  lsdb1.installNameLsa(nlsr1, nlsa1);
+
+  BOOST_CHECK(lsdb1.doesLsaExist("router1/1", 1));
+
+  lsdb1.removeNameLsa(nlsr1, router1);
+
+  BOOST_CHECK_EQUAL(lsdb1.doesLsaExist("router1/1", 1), false);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-map-entry.cpp b/tests/test-map-entry.cpp
new file mode 100644
index 0000000..eafe3cc
--- /dev/null
+++ b/tests/test-map-entry.cpp
@@ -0,0 +1,29 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "route/map.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestMapEntry)
+
+BOOST_AUTO_TEST_CASE(MapEntryConstructorAndGetters)
+{
+  std::string rtr = "r0";
+
+  MapEntry me1(rtr, 1);
+
+  BOOST_CHECK_EQUAL(me1.getRouter(), "r0");
+
+  BOOST_CHECK_EQUAL(me1.getMappingNumber(), 1);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-map.cpp b/tests/test-map.cpp
new file mode 100644
index 0000000..ebbfb15
--- /dev/null
+++ b/tests/test-map.cpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "route/map.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestMap)
+
+BOOST_AUTO_TEST_CASE(MapAddElementAndSize)
+{
+  Map map1;
+
+  std::string router1 = "r1";
+  std::string router2 = "r2";
+
+  map1.addElement(router1);
+  map1.addElement(router2);
+
+  BOOST_CHECK_EQUAL(map1.getMapSize(), 2);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-name-prefix-list.cpp b/tests/test-name-prefix-list.cpp
new file mode 100644
index 0000000..538c7be
--- /dev/null
+++ b/tests/test-name-prefix-list.cpp
@@ -0,0 +1,35 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "name-prefix-list.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestNpl)
+
+BOOST_AUTO_TEST_CASE(NplSizeAndRemove)
+{
+  NamePrefixList npl1;
+
+  std::string a = "testname";
+  std::string b = "name";
+
+  npl1.insert(a);
+  npl1.insert(b);
+
+  BOOST_CHECK_EQUAL(npl1.getSize(), 2);
+
+  npl1.remove(b);
+
+  BOOST_CHECK_EQUAL(npl1.getSize(), 1);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-name-prefix-table-entry.cpp b/tests/test-name-prefix-table-entry.cpp
new file mode 100644
index 0000000..44814c0
--- /dev/null
+++ b/tests/test-name-prefix-table-entry.cpp
@@ -0,0 +1,25 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "route/name-prefix-table-entry.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestNpte)
+
+BOOST_AUTO_TEST_CASE(NpteConstructorAndNamePrefix)
+{
+  NamePrefixTableEntry npte1("/ndn/memphis.edu/cs");
+
+  BOOST_CHECK_EQUAL(npte1.getNamePrefix(), "/ndn/memphis.edu/cs");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-nexthop-list.cpp b/tests/test-nexthop-list.cpp
new file mode 100644
index 0000000..10222e8
--- /dev/null
+++ b/tests/test-nexthop-list.cpp
@@ -0,0 +1,32 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "route/nexthop-list.hpp"
+#include "route/nexthop.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestNhl)
+
+BOOST_AUTO_TEST_CASE(NhlAddNextHop)
+{
+  NextHop np1;
+
+  NexthopList nhl1;
+
+  nhl1.addNextHop(np1);
+  BOOST_CHECK_EQUAL(nhl1.getSize(), 1);
+
+  nhl1.removeNextHop(np1);
+  BOOST_CHECK_EQUAL(nhl1.getSize(), 0);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-nexthop.cpp b/tests/test-nexthop.cpp
new file mode 100644
index 0000000..b0bb90d
--- /dev/null
+++ b/tests/test-nexthop.cpp
@@ -0,0 +1,30 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "route/nexthop.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestNexthop)
+
+BOOST_AUTO_TEST_CASE(NexthopSetAndGet)
+{
+  NextHop np1;
+
+  np1.setConnectingFace(1);
+
+  np1.setRouteCost(10.5);
+
+  BOOST_CHECK_EQUAL(np1.getConnectingFace(), 1);
+  BOOST_CHECK_CLOSE(np1.getRouteCost(), 10.5, 0.0001);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-routing-table-entry.cpp b/tests/test-routing-table-entry.cpp
new file mode 100644
index 0000000..47edb1b
--- /dev/null
+++ b/tests/test-routing-table-entry.cpp
@@ -0,0 +1,25 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "route/routing-table-entry.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestRoutingTableEntry)
+
+BOOST_AUTO_TEST_CASE(RoutingTableEntryDestination)
+{
+  RoutingTableEntry rte1("router1");
+
+  BOOST_CHECK_EQUAL(rte1.getDestination(), "router1");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-routing-table.cpp b/tests/test-routing-table.cpp
new file mode 100644
index 0000000..e93b0c8
--- /dev/null
+++ b/tests/test-routing-table.cpp
@@ -0,0 +1,34 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "route/routing-table.hpp"
+#include "route/routing-table-entry.hpp"
+#include "route/nexthop.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestRoutingTable)
+
+BOOST_AUTO_TEST_CASE(RoutingTableAddNextHop)
+{
+  RoutingTable rt1;
+
+  NextHop nh1;
+
+  const std::string DEST_ROUTER = "destRouter";
+
+  rt1.addNextHop("destRouter", nh1);
+
+  BOOST_CHECK_EQUAL(rt1.findRoutingTableEntry(DEST_ROUTER)->getDestination(),
+                    "destRouter");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-sequencing-manager.cpp b/tests/test-sequencing-manager.cpp
new file mode 100644
index 0000000..9ae9d55
--- /dev/null
+++ b/tests/test-sequencing-manager.cpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "sequencing-manager.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestSequencingManager)
+
+BOOST_AUTO_TEST_CASE(SequencingManagerBasic)
+{
+  SequencingManager sm1(120, 121, 122);
+
+  SequencingManager sm2(sm1.getCombinedSeqNo());
+
+  BOOST_CHECK_EQUAL(sm2.getNameLsaSeq(), 120);
+
+  BOOST_CHECK_EQUAL(sm2.getAdjLsaSeq(), 121);
+
+  BOOST_CHECK_EQUAL(sm2.getCorLsaSeq(), 122);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
diff --git a/tests/test-tokenizer.cpp b/tests/test-tokenizer.cpp
new file mode 100644
index 0000000..b3a8234
--- /dev/null
+++ b/tests/test-tokenizer.cpp
@@ -0,0 +1,34 @@
+/**
+ * Copyright (C) 2014 Regents of the University of Memphis.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "utility/tokenizer.hpp"
+#include <boost/test/unit_test.hpp>
+
+namespace nlsr {
+
+namespace test {
+
+BOOST_AUTO_TEST_SUITE(TestTokenizer)
+
+BOOST_AUTO_TEST_CASE(TokenizerBasic)
+{
+  Tokenizer token1("/ndn/memphis.edu/cs", "/");
+  Tokenizer token2("/ndn/memphis.edu/cs", "/");
+
+  Tokenizer token3("/test/hello");
+
+  BOOST_CHECK(token1.getFirstToken() == token2.getFirstToken());
+
+  BOOST_CHECK_EQUAL(token1.getRestOfLine(), token2.getRestOfLine());
+
+  BOOST_CHECK(token1.getFirstToken() != token3.getFirstToken());
+
+  BOOST_CHECK(token1.getRestOfLine() != token3.getRestOfLine());
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} //namespace test
+} //namespace nlsr
