diff --git a/tests/identity-management-fixture.cpp b/tests/identity-management-fixture.cpp
index 77cc97c..4e6f731 100644
--- a/tests/identity-management-fixture.cpp
+++ b/tests/identity-management-fixture.cpp
@@ -104,7 +104,7 @@
 
   v2::AdditionalDescription description;
   description.set("type", "sub-certificate");
-  info.appendTypeSpecificTlv(description.wireEncode());
+  info.addCustomTlv(description.wireEncode());
 
   m_keyChain.sign(request, ndn::signingByIdentity(issuer).setSignatureInfo(info));
   m_keyChain.setDefaultCertificate(subIdentity.getDefaultKey(), request);
diff --git a/tests/route/test-fib-entry.cpp b/tests/route/test-fib-entry.cpp
deleted file mode 100644
index b323ca5..0000000
--- a/tests/route/test-fib-entry.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2019,  The University of Memphis,
- *                           Regents of the University of California
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR 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.
- *
- * NLSR 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
- * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- *
- * \author Ashlesh Gawande <agawande@memphis.edu>
- **/
-
-#include "route/fib-entry.hpp"
-#include "route/nexthop-list.hpp"
-
-#include "tests/boost-test.hpp"
-
-#include <ndn-cxx/util/time.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.getSeqNo(), 1);  // Initial Seq No.
-}
-
-BOOST_AUTO_TEST_SUITE_END()
-
-} // namespace test
-} // namespace nlsr
diff --git a/tests/route/test-fib.cpp b/tests/route/test-fib.cpp
index 5d2d27e..fd68e80 100644
--- a/tests/route/test-fib.cpp
+++ b/tests/route/test-fib.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2020,  The University of Memphis,
  *                           Regents of the University of California
  *
@@ -16,8 +16,7 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- *
- **/
+ */
 
 #include "route/fib.hpp"
 #include "../test-common.hpp"
@@ -301,13 +300,14 @@
 BOOST_FIXTURE_TEST_CASE(ScheduleFibEntryRefresh, FibFixture)
 {
   ndn::Name name1("/name/1");
-  FibEntry fe(name1);
-  fib->m_table.emplace(name1, fe);
-  int origSeqNo = fe.getSeqNo();
+  FibEntry fe;
+  fe.name = name1;
+  int origSeqNo = fe.seqNo;
+  fib->m_table.emplace(name1, std::move(fe));
 
   fib->scheduleEntryRefresh(fe,
                             [&] (FibEntry& entry) {
-                              BOOST_CHECK_EQUAL(origSeqNo + 1, entry.getSeqNo());
+                              BOOST_CHECK_EQUAL(origSeqNo + 1, entry.seqNo);
                             });
   this->advanceClocks(ndn::time::milliseconds(10), 1);
 }
diff --git a/tests/security/test-certificate-store.cpp b/tests/security/test-certificate-store.cpp
index b4ef2da..00d5d62 100644
--- a/tests/security/test-certificate-store.cpp
+++ b/tests/security/test-certificate-store.cpp
@@ -153,12 +153,12 @@
   // check if nlsrKeyPrefix is registered
   ndn::Name nlsrKeyPrefix = conf.getRouterPrefix();
   nlsrKeyPrefix.append("nlsr");
-  nlsrKeyPrefix.append("KEY");
+  nlsrKeyPrefix.append(ndn::security::Certificate::KEY_COMPONENT);
   checkPrefixRegistered(face, nlsrKeyPrefix);
 
   // check if routerPrefix is registered
   ndn::Name routerKeyPrefix = conf.getRouterPrefix();
-  routerKeyPrefix.append("KEY");
+  routerKeyPrefix.append(ndn::security::Certificate::KEY_COMPONENT);
   checkPrefixRegistered(face, routerKeyPrefix);
 
   // check if operatorKeyPrefix is registered
@@ -206,7 +206,7 @@
                                  });
 
   lsdb.emitSegmentValidatedSignal(data);
-  const auto keyName = data.getSignature().getKeyLocator().getName();
+  const auto keyName = data.getSignatureInfo().getKeyLocator().getName();
   BOOST_CHECK(certStore.find(keyName) != nullptr);
 
   // testing a callback after segment validation signal from lsdb
diff --git a/tests/test-common.cpp b/tests/test-common.cpp
index b611390..b2db763 100644
--- a/tests/test-common.cpp
+++ b/tests/test-common.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2020,  The University of Memphis,
  *                           Regents of the University of California
  *
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #include "test-common.hpp"
 
@@ -26,9 +26,8 @@
 ndn::Data&
 signData(ndn::Data& data)
 {
-  ndn::SignatureSha256WithRsa fakeSignature;
-  fakeSignature.setValue(ndn::encoding::makeEmptyBlock(ndn::tlv::SignatureValue));
-  data.setSignature(fakeSignature);
+  data.setSignatureInfo(ndn::SignatureInfo(ndn::tlv::SignatureTypeValue::SignatureSha256WithRsa));
+  data.setSignatureValue(ndn::encoding::makeEmptyBlock(ndn::tlv::SignatureValue).getBuffer());
   data.wireEncode();
 
   return data;
