diff --git a/tests/clock-fixture.cpp b/tests/clock-fixture.cpp
index b3b4ac7..0019e6c 100644
--- a/tests/clock-fixture.cpp
+++ b/tests/clock-fixture.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2024,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -25,8 +25,7 @@
 
 #include "tests/clock-fixture.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 ClockFixture::ClockFixture()
   : m_steadyClock(std::make_shared<time::UnitTestSteadyClock>())
@@ -56,5 +55,4 @@
   }
 }
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/clock-fixture.hpp b/tests/clock-fixture.hpp
index 62e6224..d14281e 100644
--- a/tests/clock-fixture.hpp
+++ b/tests/clock-fixture.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2024,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -28,7 +28,7 @@
 
 #include <ndn-cxx/util/time-unit-test-clock.hpp>
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 namespace time = ndn::time;
 
@@ -84,6 +84,6 @@
   std::shared_ptr<time::UnitTestSystemClock> m_systemClock;
 };
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
 
 #endif // NLSR_TESTS_CLOCK_FIXTURE_HPP
diff --git a/tests/communication/test-sync-logic-handler.cpp b/tests/communication/test-sync-logic-handler.cpp
index 4f759e0..c4a630b 100644
--- a/tests/communication/test-sync-logic-handler.cpp
+++ b/tests/communication/test-sync-logic-handler.cpp
@@ -25,7 +25,7 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 class SyncLogicFixture : public IoKeyChainFixture
 {
@@ -47,14 +47,14 @@
   void
   receiveUpdate(const ndn::Name& prefix, uint64_t seqNo)
   {
-    this->advanceClocks(ndn::time::milliseconds(1), 10);
+    this->advanceClocks(1_ms, 10);
     face.sentInterests.clear();
 
     std::vector<psync::MissingDataInfo> updates;
     updates.push_back({prefix, 0, seqNo, 0});
     getSync().m_syncLogic.onPSyncUpdate(updates);
 
-    this->advanceClocks(ndn::time::milliseconds(1), 10);
+    this->advanceClocks(1_ms, 10);
   }
 
 public:
@@ -64,7 +64,7 @@
     SyncProtocol::PSYNC,
     ndn::Name("/ndn/nlsr/sync").appendVersion(ConfParameter::SYNC_VERSION),
     "/localhop/ndn/nlsr/LSA/site/%C1.Router/this-router",
-    ndn::time::milliseconds(SYNC_INTEREST_LIFETIME_DEFAULT),
+    time::milliseconds(SYNC_INTEREST_LIFETIME_DEFAULT),
     "/ndn/site/%C1.Router/this-router",
     HYPERBOLIC_STATE_OFF
   };
@@ -245,4 +245,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
diff --git a/tests/communication/test-sync-protocol-adapter.cpp b/tests/communication/test-sync-protocol-adapter.cpp
index 1b80a82..6ee7f63 100644
--- a/tests/communication/test-sync-protocol-adapter.cpp
+++ b/tests/communication/test-sync-protocol-adapter.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -26,8 +26,7 @@
 
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 using ndn::Name;
 
@@ -64,7 +63,7 @@
   Name syncPrefix;
   Name nameLsaUserPrefix;
   Name userPrefixes[2];
-  ndn::time::milliseconds syncInterestLifetime;
+  time::milliseconds syncInterestLifetime;
   std::shared_ptr<ndn::DummyClientFace> faces[2];
   std::shared_ptr<SyncProtocolAdapter> nodes[2];
   std::map<Name, uint64_t> prefixToSeq[2];
@@ -106,5 +105,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/io-fixture.hpp b/tests/io-fixture.hpp
index e7c65ec..bd2c7b7 100644
--- a/tests/io-fixture.hpp
+++ b/tests/io-fixture.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  Regents of the University of California,
+ * Copyright (c) 2014-2024,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -30,7 +30,7 @@
 
 #include <boost/asio/io_context.hpp>
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 class IoFixture : public ClockFixture
 {
@@ -48,6 +48,6 @@
   boost::asio::io_context m_io;
 };
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
 
 #endif // NLSR_TESTS_IO_FIXTURE_HPP
diff --git a/tests/io-key-chain-fixture.hpp b/tests/io-key-chain-fixture.hpp
index 89ab07b..bcd98ba 100644
--- a/tests/io-key-chain-fixture.hpp
+++ b/tests/io-key-chain-fixture.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -25,12 +25,12 @@
 #include "tests/key-chain-fixture.hpp"
 #include "tests/io-fixture.hpp"
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 class IoKeyChainFixture : public IoFixture, public KeyChainFixture
 {
 };
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
 
 #endif // NLSR_TESTS_IO_KEY_CHAIN_FIXTURE_HPP
diff --git a/tests/key-chain-fixture.cpp b/tests/key-chain-fixture.cpp
index e65ff42..f29153f 100644
--- a/tests/key-chain-fixture.cpp
+++ b/tests/key-chain-fixture.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2024,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -29,8 +29,7 @@
 
 #include <boost/filesystem/operations.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 using namespace ndn::security;
 
@@ -104,7 +103,7 @@
 
   auto request = subIdentity.getDefaultKey().getDefaultCertificate();
   ndn::security::MakeCertificateOptions opts;
-  opts.issuerId = ndn::name::Component::fromEscapedString("parent");
+  opts.issuerId = ndn::name::Component::fromUri("parent");
   m_keyChain.makeCertificate(request, ndn::signingByIdentity(issuer), opts);
 
   m_keyChain.setDefaultCertificate(subIdentity.getDefaultKey(), request);
@@ -112,5 +111,4 @@
   return subIdentity;
 }
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/key-chain-fixture.hpp b/tests/key-chain-fixture.hpp
index f4303c6..06284de 100644
--- a/tests/key-chain-fixture.hpp
+++ b/tests/key-chain-fixture.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2024,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -29,7 +29,7 @@
 #include <ndn-cxx/security/key-chain.hpp>
 #include <ndn-cxx/security/signing-helpers.hpp>
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 /**
  * @brief A fixture providing an in-memory KeyChain.
@@ -95,6 +95,6 @@
   std::vector<std::string> m_certFiles;
 };
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
 
 #endif // NLSR_TESTS_KEY_CHAIN_FIXTURE_HPP
diff --git a/tests/lsa/test-adj-lsa.cpp b/tests/lsa/test-adj-lsa.cpp
index 91610bd..dd17421 100644
--- a/tests/lsa/test-adj-lsa.cpp
+++ b/tests/lsa/test-adj-lsa.cpp
@@ -23,7 +23,7 @@
 
 #include "tests/boost-test.hpp"
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestAdjLsa)
 
@@ -184,4 +184,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
diff --git a/tests/lsa/test-coordinate-lsa.cpp b/tests/lsa/test-coordinate-lsa.cpp
index 8e61f8b..0c6e63b 100644
--- a/tests/lsa/test-coordinate-lsa.cpp
+++ b/tests/lsa/test-coordinate-lsa.cpp
@@ -23,7 +23,7 @@
 
 #include "tests/boost-test.hpp"
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 /*
 static void
@@ -134,4 +134,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
diff --git a/tests/lsa/test-name-lsa.cpp b/tests/lsa/test-name-lsa.cpp
index a4578a0..6f9928e 100644
--- a/tests/lsa/test-name-lsa.cpp
+++ b/tests/lsa/test-name-lsa.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -23,7 +23,7 @@
 
 #include "tests/boost-test.hpp"
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestNameLsa)
 
@@ -160,4 +160,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
diff --git a/tests/publisher/publisher-fixture.hpp b/tests/publisher/publisher-fixture.hpp
index 43c61b7..e04869e 100644
--- a/tests/publisher/publisher-fixture.hpp
+++ b/tests/publisher/publisher-fixture.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -28,8 +28,7 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class PublisherFixture : public IoKeyChainFixture
 {
@@ -62,7 +61,7 @@
   CoordinateLsa
   createCoordinateLsa(const std::string& origin, double radius, std::vector<double> angle)
   {
-    return {origin, 1, ndn::time::system_clock::now(), radius, angle};
+    return {origin, 1, time::system_clock::now(), radius, angle};
   }
 
   void
@@ -91,7 +90,6 @@
   RoutingTable& rt1;
 };
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
 
 #endif // NLSR_TESTS_PUBLISHER_FIXTURE_HPP
diff --git a/tests/publisher/test-dataset-interest-handler.cpp b/tests/publisher/test-dataset-interest-handler.cpp
index c637856..5a28b03 100644
--- a/tests/publisher/test-dataset-interest-handler.cpp
+++ b/tests/publisher/test-dataset-interest-handler.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -24,8 +24,7 @@
 
 #include "tests/publisher/publisher-fixture.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_FIXTURE_TEST_SUITE(TestDatasetInterestHandler, PublisherFixture)
 
@@ -118,5 +117,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-fib.cpp b/tests/route/test-fib.cpp
index d90d125..d9b4354 100644
--- a/tests/route/test-fib.cpp
+++ b/tests/route/test-fib.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -28,8 +28,7 @@
 #include <ndn-cxx/mgmt/nfd/control-parameters.hpp>
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 static const ndn::Name router1Name = "/ndn/router1";
 static const ndn::Name router2Name = "/ndn/router2";
@@ -112,7 +111,7 @@
 
   ndn::nfd::ControlParameters extractedParameters;
   ndn::Name::Component verb;
-  std::vector<ndn::Interest>::iterator it = interests.begin();
+  auto it = interests.begin();
 
   extractRibCommandParameters(*it, verb, extractedParameters);
 
@@ -151,7 +150,7 @@
 
   ndn::nfd::ControlParameters extractedParameters;
   ndn::Name::Component verb;
-  std::vector<ndn::Interest>::iterator it = interests.begin();
+  auto it = interests.begin();
 
   extractRibCommandParameters(*it, verb, extractedParameters);
 
@@ -192,7 +191,7 @@
 
   ndn::nfd::ControlParameters extractedParameters;
   ndn::Name::Component verb;
-  std::vector<ndn::Interest>::iterator it = interests.begin();
+  auto it = interests.begin();
 
   extractRibCommandParameters(*it, verb, extractedParameters);
 
@@ -227,7 +226,7 @@
 
   ndn::nfd::ControlParameters extractedParameters;
   ndn::Name::Component verb;
-  std::vector<ndn::Interest>::iterator it = interests.begin();
+  auto it = interests.begin();
 
   extractRibCommandParameters(*it, verb, extractedParameters);
 
@@ -279,7 +278,7 @@
 
   ndn::nfd::ControlParameters extractedParameters;
   ndn::Name::Component verb;
-  std::vector<ndn::Interest>::iterator it = interests.begin();
+  auto it = interests.begin();
 
   extractRibCommandParameters(*it, verb, extractedParameters);
 
@@ -388,5 +387,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-hyperbolic-calculator.cpp b/tests/route/test-hyperbolic-calculator.cpp
index d2df482..5f22a53 100644
--- a/tests/route/test-hyperbolic-calculator.cpp
+++ b/tests/route/test-hyperbolic-calculator.cpp
@@ -30,11 +30,9 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
-using ndn::time::system_clock;
-
+constexpr time::system_clock::time_point MAX_TIME = time::system_clock::time_point::max();
 static const ndn::Name ROUTER_A_NAME = "/ndn/router/a";
 static const ndn::Name ROUTER_B_NAME = "/ndn/router/b";
 static const ndn::Name ROUTER_C_NAME = "/ndn/router/c";
@@ -42,8 +40,6 @@
 static const ndn::FaceUri ROUTER_B_FACE("udp4://10.0.0.2:6363");
 static const ndn::FaceUri ROUTER_C_FACE("udp4://10.0.0.3:6363");
 
-constexpr system_clock::time_point MAX_TIME = system_clock::time_point::max();
-
 class HyperbolicCalculatorFixture : public IoKeyChainFixture
 {
 public:
@@ -185,5 +181,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-link-state-calculator.cpp b/tests/route/test-link-state-calculator.cpp
index 877f204..de1327f 100644
--- a/tests/route/test-link-state-calculator.cpp
+++ b/tests/route/test-link-state-calculator.cpp
@@ -31,10 +31,9 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
-constexpr ndn::time::system_clock::time_point MAX_TIME = ndn::time::system_clock::time_point::max();
+constexpr time::system_clock::time_point MAX_TIME = time::system_clock::time_point::max();
 static const ndn::Name ROUTER_A_NAME = "/ndn/site/%C1.Router/this-router";
 static const ndn::Name ROUTER_B_NAME = "/ndn/site/%C1.Router/b";
 static const ndn::Name ROUTER_C_NAME = "/ndn/site/%C1.Router/c";
@@ -300,5 +299,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-map.cpp b/tests/route/test-map.cpp
index 424c551..aabf055 100644
--- a/tests/route/test-map.cpp
+++ b/tests/route/test-map.cpp
@@ -18,12 +18,13 @@
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * \author Ashlesh Gawande <agawande@memphis.edu>
- **/
+ */
 
 #include "route/map.hpp"
+
 #include "tests/boost-test.hpp"
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestMap)
 
@@ -57,4 +58,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
diff --git a/tests/route/test-name-prefix-table-entry.cpp b/tests/route/test-name-prefix-table-entry.cpp
index 949c380..69f3579 100644
--- a/tests/route/test-name-prefix-table-entry.cpp
+++ b/tests/route/test-name-prefix-table-entry.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2019,  The University of Memphis,
+/*
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -18,13 +18,13 @@
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * \author Ashlesh Gawande <agawande@memphis.edu>
- **/
+ */
 
 #include "route/name-prefix-table-entry.hpp"
+
 #include "tests/boost-test.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestNpte)
 
@@ -39,18 +39,13 @@
 {
   NamePrefixTableEntry npte1("/ndn/memphis/rtr1");
   RoutingTablePoolEntry rtpe1("/ndn/memphis/rtr2", 0);
-  std::shared_ptr<RoutingTablePoolEntry> rtpePtr
-    = std::make_shared<RoutingTablePoolEntry>(rtpe1);
+  auto rtpePtr = std::make_shared<RoutingTablePoolEntry>(rtpe1);
 
   BOOST_CHECK_EQUAL(npte1.m_rteList.size(), 0);
   npte1.addRoutingTableEntry(rtpePtr);
   BOOST_CHECK_EQUAL(npte1.m_rteList.size(), 1);
 
-  std::list<std::shared_ptr<RoutingTablePoolEntry>>::iterator itr =
-    std::find(npte1.m_rteList.begin(),
-              npte1.m_rteList.end(),
-              rtpePtr);
-
+  auto itr = std::find(npte1.m_rteList.begin(), npte1.m_rteList.end(), rtpePtr);
   BOOST_CHECK_EQUAL(rtpePtr, *itr);
 }
 
@@ -58,8 +53,7 @@
 {
   NamePrefixTableEntry npte1("/ndn/memphis/rtr1");
   RoutingTablePoolEntry rtpe1("/ndn/memphis/rtr2", 0);
-  std::shared_ptr<RoutingTablePoolEntry> rtpePtr
-    = std::make_shared<RoutingTablePoolEntry>(rtpe1);
+  auto rtpePtr = std::make_shared<RoutingTablePoolEntry>(rtpe1);
 
   npte1.addRoutingTableEntry(rtpePtr);
   npte1.removeRoutingTableEntry(rtpePtr);
@@ -91,5 +85,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-name-prefix-table.cpp b/tests/route/test-name-prefix-table.cpp
index adeaa6d..66c1826 100644
--- a/tests/route/test-name-prefix-table.cpp
+++ b/tests/route/test-name-prefix-table.cpp
@@ -27,8 +27,7 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class NamePrefixTableFixture : public IoKeyChainFixture
 {
@@ -76,54 +75,39 @@
 
   // This router's Adjacency LSA
   conf.getAdjacencyList().insert(bupt);
-  AdjLsa thisRouterAdjLsa(thisRouter.getName(), 1,
-                          ndn::time::system_clock::now() + 3600_s,
-                          conf.getAdjacencyList());
-
+  AdjLsa thisRouterAdjLsa(thisRouter.getName(), 1, time::system_clock::now() + 3600_s, conf.getAdjacencyList());
   lsdb.installLsa(std::make_shared<AdjLsa>(thisRouterAdjLsa));
 
   // BUPT Adjacency LSA
   AdjacencyList buptAdjacencies;
   buptAdjacencies.insert(thisRouter);
-  AdjLsa buptAdjLsa(buptRouterName, 1,
-                    ndn::time::system_clock::now() + ndn::time::seconds(5),
-                    buptAdjacencies);
-
+  AdjLsa buptAdjLsa(buptRouterName, 1, time::system_clock::now() + 5_s, buptAdjacencies);
   lsdb.installLsa(std::make_shared<AdjLsa>(buptAdjLsa));
 
   // BUPT Name LSA
   ndn::Name buptAdvertisedName("/ndn/cn/edu/bupt");
-
   NamePrefixList buptNames{buptAdvertisedName};
-
-  NameLsa buptNameLsa(buptRouterName, 1, ndn::time::system_clock::now() + ndn::time::seconds(5),
-                      buptNames);
-
+  NameLsa buptNameLsa(buptRouterName, 1, time::system_clock::now() + 5_s, buptNames);
   lsdb.installLsa(std::make_shared<NameLsa>(buptNameLsa));
 
   // Advance clocks to expire LSAs
-  this->advanceClocks(ndn::time::seconds(15));
+  this->advanceClocks(15_s);
 
   // LSA expirations should cause NPT entries to be completely removed
-  NamePrefixTable::const_iterator it = npt.begin();
-  BOOST_REQUIRE(it == npt.end());
+  auto it = npt.begin();
+  BOOST_CHECK(it == npt.end());
 
   // Install new name LSA
-  NameLsa buptNewNameLsa(buptRouterName, 12,
-                         ndn::time::system_clock::now() + ndn::time::seconds(3600),
-                         buptNames);
-
+  NameLsa buptNewNameLsa(buptRouterName, 12, time::system_clock::now() + 3600_s, buptNames);
   lsdb.installLsa(std::make_shared<NameLsa>(buptNewNameLsa));
 
-  this->advanceClocks(ndn::time::seconds(1));
+  this->advanceClocks(1_s);
 
   // Install new adjacency LSA
-  AdjLsa buptNewAdjLsa(buptRouterName, 12,
-                       ndn::time::system_clock::now() + ndn::time::seconds(3600),
-                       buptAdjacencies);
+  AdjLsa buptNewAdjLsa(buptRouterName, 12, time::system_clock::now() + 3600_s, buptAdjacencies);
   lsdb.installLsa(std::make_shared<AdjLsa>(buptNewAdjLsa));
 
-  this->advanceClocks(ndn::time::seconds(1));
+  this->advanceClocks(1_s);
 
   // Each NPT entry should have a destination router
   it = npt.begin();
@@ -168,18 +152,14 @@
 
   npt.addEntry("/ndn/memphis/rtr2", "/ndn/memphis/rtr1");
 
-  NamePrefixTable::NptEntryList::iterator nItr =
-    std::find_if(npt.m_table.begin(),
-                 npt.m_table.end(),
-                 [&] (const std::shared_ptr<NamePrefixTableEntry>& entry) {
-                   return entry->getNamePrefix() == npte1.getNamePrefix();
-                 });
+  auto nItr = std::find_if(npt.m_table.begin(),
+                           npt.m_table.end(),
+                           [&] (const auto& entry) {
+                             return entry->getNamePrefix() == npte1.getNamePrefix();
+                           });
 
   std::list<std::shared_ptr<RoutingTablePoolEntry>> rtpeList = (*nItr)->getRteList();
-  std::list<std::shared_ptr<RoutingTablePoolEntry>>::iterator rItr =
-    std::find(rtpeList.begin(),
-              rtpeList.end(),
-              rtpePtr);
+  auto rItr = std::find(rtpeList.begin(), rtpeList.end(), rtpePtr);
   BOOST_CHECK_EQUAL(**rItr, *rtpePtr);
 }
 
@@ -195,12 +175,11 @@
 
   npt.removeEntry("/ndn/memphis/rtr2", "/ndn/memphis/rtr1");
 
-  NamePrefixTable::NptEntryList::iterator nItr =
-    std::find_if(npt.m_table.begin(),
-                 npt.m_table.end(),
-                 [&] (const std::shared_ptr<NamePrefixTableEntry>& entry) {
-                   return entry->getNamePrefix() == npte1.getNamePrefix();
-                 });
+  auto nItr = std::find_if(npt.m_table.begin(),
+                           npt.m_table.end(),
+                           [&] (const auto& entry) {
+                             return entry->getNamePrefix() == npte1.getNamePrefix();
+                           });
 
   std::list<std::shared_ptr<RoutingTablePoolEntry>> rtpeList = (*nItr)->getRteList();
 
@@ -215,12 +194,11 @@
 
   npt.addEntry("/ndn/memphis/rtr2", "/ndn/memphis/rtr1");
 
-  NamePrefixTable::NptEntryList::iterator nItr =
-    std::find_if(npt.m_table.begin(),
-                 npt.m_table.end(),
-                 [&] (const std::shared_ptr<NamePrefixTableEntry>& entry) {
-                   return entry->getNamePrefix() == npte1.getNamePrefix();
-                 });
+  auto nItr = std::find_if(npt.m_table.begin(),
+                           npt.m_table.end(),
+                           [&] (const auto& entry) {
+                             return entry->getNamePrefix() == npte1.getNamePrefix();
+                           });
 
   std::list<std::shared_ptr<RoutingTablePoolEntry>> rtpeList = (*nItr)->getRteList();
 
@@ -247,12 +225,11 @@
   npt.addEntry(npte2.getNamePrefix(), rte1.getDestination());
   npt.removeEntry(npte2.getNamePrefix(), rte1.getDestination());
 
-  NamePrefixTable::NptEntryList::iterator nItr =
-    std::find_if(npt.m_table.begin(),
-                 npt.m_table.end(),
-                 [&] (const std::shared_ptr<NamePrefixTableEntry>& entry) {
-                   return entry->getNamePrefix() == npte1.getNamePrefix();
-                 });
+  auto nItr = std::find_if(npt.m_table.begin(),
+                           npt.m_table.end(),
+                           [&] (const auto& entry) {
+                             return entry->getNamePrefix() == npte1.getNamePrefix();
+                           });
 
   std::list<std::shared_ptr<RoutingTablePoolEntry>> rtpeList = (*nItr)->getRteList();
 
@@ -314,7 +291,7 @@
 
 BOOST_FIXTURE_TEST_CASE(UpdateFromLsdb, NamePrefixTableFixture)
 {
-  auto testTimePoint = ndn::time::system_clock::now();
+  auto testTimePoint = time::system_clock::now();
   NamePrefixList npl1;
   ndn::Name n1("name1");
   ndn::Name n2("name2");
@@ -373,5 +350,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-nexthop-list.cpp b/tests/route/test-nexthop-list.cpp
index 5801104..9947df5 100644
--- a/tests/route/test-nexthop-list.cpp
+++ b/tests/route/test-nexthop-list.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -22,10 +22,10 @@
 #include "route/nexthop-list.hpp"
 #include "route/nexthop.hpp"
 #include "route/fib.hpp"
+
 #include "tests/boost-test.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestNhl)
 
@@ -99,7 +99,7 @@
   list.addNextHop(hopA);
   list.addNextHop(hopZ);
 
-  NexthopList::iterator it = list.begin();
+  auto it = list.begin();
   BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), hopA.getConnectingFaceUri());
 
   list.clear();
@@ -212,5 +212,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-nexthop.cpp b/tests/route/test-nexthop.cpp
index 9d80c1f..89722f8 100644
--- a/tests/route/test-nexthop.cpp
+++ b/tests/route/test-nexthop.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -19,10 +19,10 @@
  */
 
 #include "route/nexthop.hpp"
+
 #include "tests/boost-test.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestNexthop)
 
@@ -32,13 +32,13 @@
 static double
 getHyperbolicAdjustedDecimal(unsigned int i)
 {
-  return static_cast<double>(i)/(10*NextHop::HYPERBOLIC_COST_ADJUSTMENT_FACTOR);
+  return static_cast<double>(i)/(10 * NextHop::HYPERBOLIC_COST_ADJUSTMENT_FACTOR);
 }
 
 static uint64_t
 applyHyperbolicFactorAndRound(double d)
 {
-  return round(NextHop::HYPERBOLIC_COST_ADJUSTMENT_FACTOR*d);
+  return round(NextHop::HYPERBOLIC_COST_ADJUSTMENT_FACTOR * d);
 }
 
 BOOST_AUTO_TEST_CASE(LinkStateSetAndGet)
@@ -158,5 +158,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-routing-table-entry.cpp b/tests/route/test-routing-table-entry.cpp
index 9d685ae..27da605 100644
--- a/tests/route/test-routing-table-entry.cpp
+++ b/tests/route/test-routing-table-entry.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -19,10 +19,10 @@
  */
 
 #include "route/routing-table-entry.hpp"
+
 #include "tests/boost-test.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestRoutingTableEntry)
 
@@ -155,5 +155,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-routing-table-pool-entry.cpp b/tests/route/test-routing-table-pool-entry.cpp
index 9b2be00..08c2062 100644
--- a/tests/route/test-routing-table-pool-entry.cpp
+++ b/tests/route/test-routing-table-pool-entry.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -18,7 +18,7 @@
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  *
  * \author Nicholas Gordon <nmgordon@memphis.edu>
- **/
+ */
 
 #include "route/routing-table-pool-entry.hpp"
 #include "route/nexthop.hpp"
@@ -26,8 +26,7 @@
 
 #include "tests/boost-test.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestRoutingTablePoolEntry)
 
@@ -99,5 +98,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/route/test-routing-table.cpp b/tests/route/test-routing-table.cpp
index de91bea..540a0cb 100644
--- a/tests/route/test-routing-table.cpp
+++ b/tests/route/test-routing-table.cpp
@@ -26,8 +26,7 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class RoutingTableFixture : public IoKeyChainFixture
 {
@@ -122,7 +121,7 @@
 
 BOOST_FIXTURE_TEST_CASE(UpdateFromLsdb, RoutingTableFixture)
 {
-  auto testTimePoint = ndn::time::system_clock::now() + 3600_s;
+  auto testTimePoint = time::system_clock::now() + 3600_s;
   ndn::Name router2("/router2");
   AdjLsa adjLsa(router2, 12, testTimePoint, conf.getAdjacencyList());
   std::shared_ptr<Lsa> lsaPtr = std::make_shared<AdjLsa>(adjLsa);
@@ -199,5 +198,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/security/test-certificate-store.cpp b/tests/security/test-certificate-store.cpp
index 18be8fe..03e086a 100644
--- a/tests/security/test-certificate-store.cpp
+++ b/tests/security/test-certificate-store.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -31,10 +31,7 @@
 #include <boost/lexical_cast.hpp>
 #include <boost/property_tree/info_parser.hpp>
 
-namespace nlsr {
-namespace test {
-
-using std::shared_ptr;
+namespace nlsr::tests {
 
 class CertificateStoreFixture : public IoKeyChainFixture
 {
@@ -221,7 +218,7 @@
   lsaDataName.appendSegment(0);
 
   ndn::Data data(lsaDataName);
-  data.setFreshnessPeriod(ndn::time::seconds(10));
+  data.setFreshnessPeriod(10_s);
   NameLsa nameLsa;
   data.setContent(nameLsa.wireEncode());
   data.setFinalBlock(lsaDataName[-1]);
@@ -230,7 +227,7 @@
   m_keyChain.sign(data, conf.m_signingInfo);
   face.put(data);
 
-  this->advanceClocks(ndn::time::milliseconds(1));
+  this->advanceClocks(1_ms);
 
   // Make NLSR validate data signed by its own key
   conf.getValidator().validate(data,
@@ -253,5 +250,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-adjacency-list.cpp b/tests/test-adjacency-list.cpp
index 1f4158b..6dd8fbf 100644
--- a/tests/test-adjacency-list.cpp
+++ b/tests/test-adjacency-list.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -28,8 +28,7 @@
 
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestAdjacencyList)
 
@@ -141,5 +140,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-adjacent.cpp b/tests/test-adjacent.cpp
index 5406096..083d448 100644
--- a/tests/test-adjacent.cpp
+++ b/tests/test-adjacent.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -23,8 +23,7 @@
 #include "adjacent.hpp"
 #include "tests/boost-test.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestAdjacent)
 
@@ -103,5 +102,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-common.cpp b/tests/test-common.cpp
index 953d9ec..743b139 100644
--- a/tests/test-common.cpp
+++ b/tests/test-common.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -22,7 +22,7 @@
 
 #include <ndn-cxx/mgmt/nfd/control-parameters.hpp>
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 std::shared_ptr<ndn::Data>
 makeData(const ndn::Name& name)
@@ -57,4 +57,4 @@
   BOOST_CHECK(registerCommandEmitted);
 }
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
diff --git a/tests/test-common.hpp b/tests/test-common.hpp
index 2bee4fc..3373916 100644
--- a/tests/test-common.hpp
+++ b/tests/test-common.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -29,7 +29,7 @@
 #include <ndn-cxx/data.hpp>
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-namespace nlsr::test {
+namespace nlsr::tests {
 
 /**
  * \brief Create a Data with a null (i.e., empty) signature
@@ -77,6 +77,6 @@
   }
 };
 
-} // namespace nlsr::test
+} // namespace nlsr::tests
 
 #endif // NLSR_TESTS_TEST_COMMON_HPP
diff --git a/tests/test-conf-file-processor.cpp b/tests/test-conf-file-processor.cpp
index a2b6c09..c9acbd2 100644
--- a/tests/test-conf-file-processor.cpp
+++ b/tests/test-conf-file-processor.cpp
@@ -29,10 +29,7 @@
 
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-namespace nlsr {
-namespace test {
-
-using std::shared_ptr;
+namespace nlsr::tests {
 
 const std::string SECTION_GENERAL =
   "general\n"
@@ -446,5 +443,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-conf-parameter.cpp b/tests/test-conf-parameter.cpp
index cb52323..a5f63bc 100644
--- a/tests/test-conf-parameter.cpp
+++ b/tests/test-conf-parameter.cpp
@@ -25,10 +25,7 @@
 
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-namespace nlsr {
-namespace test {
-
-using namespace std;
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestConfParameter)
 
@@ -38,74 +35,42 @@
   ndn::KeyChain keyChain;
   ConfParameter cp1(face, keyChain);
 
-  const string NAME = "router1";
-  const string SITE = "memphis";
-  const string NETWORK = "ATT";
-
-  cp1.setRouterName(NAME);
-
-  cp1.setSiteName(SITE);
-
-  cp1.setNetwork(NETWORK);
-
+  cp1.setRouterName("router1");
+  cp1.setSiteName("memphis");
+  cp1.setNetwork("ATT");
   cp1.setInterestRetryNumber(2);
-
   cp1.setInterestResendTime(1000);
-
   cp1.setLsaRefreshTime(1500);
-
   cp1.setLsaInterestLifetime(ndn::time::seconds(1));
-
   cp1.setSyncProtocol(SyncProtocol::PSYNC);
-
   cp1.setRouterDeadInterval(10);
-
   cp1.setMaxFacesPerPrefix(50);
-
   cp1.setHyperbolicState(HYPERBOLIC_STATE_ON);
-
   cp1.setCorR(2.5);
-
   std::vector<double> angles = {102.5};
-
   cp1.setCorTheta(angles);
-
   cp1.setInfoInterestInterval(3);
 
   BOOST_CHECK_EQUAL(cp1.getRouterName(), "router1");
-
   BOOST_CHECK_EQUAL(cp1.getSiteName(), "memphis");
-
   BOOST_CHECK_EQUAL(cp1.getNetwork(), "ATT");
 
   cp1.buildRouterAndSyncUserPrefix();
 
   BOOST_CHECK_EQUAL(cp1.getRouterPrefix(), "/ATT/memphis/router1");
-
   BOOST_CHECK_EQUAL(cp1.getSyncUserPrefix(), "/localhop/ATT/nlsr/LSA/memphis/router1");
-
   BOOST_CHECK_EQUAL(cp1.getInterestRetryNumber(), 2);
-
   BOOST_CHECK_EQUAL(cp1.getInterestResendTime(), 1000);
-
   BOOST_CHECK_EQUAL(cp1.getLsaRefreshTime(), 1500);
-
   BOOST_CHECK_EQUAL(cp1.getLsaInterestLifetime(), ndn::time::seconds(1));
-
   BOOST_CHECK(cp1.getSyncProtocol() == SyncProtocol::PSYNC);
-
   BOOST_CHECK_EQUAL(cp1.getRouterDeadInterval(), 10);
-
   BOOST_CHECK_EQUAL(cp1.getMaxFacesPerPrefix(), 50);
-
   BOOST_CHECK_EQUAL(cp1.getHyperbolicState(), HYPERBOLIC_STATE_ON);
-
   BOOST_CHECK(cp1.getCorTheta() == angles);
-
   BOOST_CHECK_EQUAL(cp1.getInfoInterestInterval(), 3);
 }
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-hello-protocol.cpp b/tests/test-hello-protocol.cpp
index a825321..7aaf32a 100644
--- a/tests/test-hello-protocol.cpp
+++ b/tests/test-hello-protocol.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -25,8 +25,7 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class HelloProtocolFixture : public IoKeyChainFixture
 {
@@ -151,5 +150,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-lsa-rule.cpp b/tests/test-lsa-rule.cpp
index eaebf12..87f915d 100644
--- a/tests/test-lsa-rule.cpp
+++ b/tests/test-lsa-rule.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -31,8 +31,7 @@
 #include <boost/property_tree/info_parser.hpp>
 #include <boost/property_tree/ptree.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 using namespace ndn;
 
@@ -156,5 +155,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-lsa-segment-storage.cpp b/tests/test-lsa-segment-storage.cpp
index 922e78c..337cdc7 100644
--- a/tests/test-lsa-segment-storage.cpp
+++ b/tests/test-lsa-segment-storage.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -27,8 +27,7 @@
 #include <ndn-cxx/ims/in-memory-storage-fifo.hpp>
 #include <ndn-cxx/util/segmenter.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class LsaSegmentStorageFixture : public IoKeyChainFixture
 {
@@ -142,5 +141,4 @@
 
 BOOST_AUTO_TEST_SUITE_END() // TestLsaSegmentStorage
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-lsdb.cpp b/tests/test-lsdb.cpp
index 323db04..28cf59e 100644
--- a/tests/test-lsdb.cpp
+++ b/tests/test-lsdb.cpp
@@ -32,8 +32,7 @@
 
 #include <unistd.h>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class LsdbFixture : public IoKeyChainFixture
 {
@@ -464,5 +463,4 @@
 
 BOOST_AUTO_TEST_SUITE_END() // TestLsdb
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-name-prefix-list.cpp b/tests/test-name-prefix-list.cpp
index dc0c4c4..7fd06ca 100644
--- a/tests/test-name-prefix-list.cpp
+++ b/tests/test-name-prefix-list.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -21,8 +21,7 @@
 #include "name-prefix-list.hpp"
 #include "tests/boost-test.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 BOOST_AUTO_TEST_SUITE(TestNpl)
 
@@ -134,5 +133,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-nlsr.cpp b/tests/test-nlsr.cpp
index adb321b..82c60ac 100644
--- a/tests/test-nlsr.cpp
+++ b/tests/test-nlsr.cpp
@@ -27,8 +27,7 @@
 
 #include <ndn-cxx/mgmt/nfd/face-event-notification.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class MockNfdMgmtFixture : public IoKeyChainFixture
 {
@@ -598,5 +597,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-sequencing-manager.cpp b/tests/test-sequencing-manager.cpp
index 57c09f5..dd098c0 100644
--- a/tests/test-sequencing-manager.cpp
+++ b/tests/test-sequencing-manager.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -26,8 +26,7 @@
 #include <boost/filesystem/operations.hpp>
 #include <fstream>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 using namespace ndn;
 
@@ -101,5 +100,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/test-statistics.cpp b/tests/test-statistics.cpp
index 43bbf70..e4c8a23 100644
--- a/tests/test-statistics.cpp
+++ b/tests/test-statistics.cpp
@@ -29,8 +29,7 @@
 
 #include <boost/lexical_cast.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class StatisticsFixture : public IoKeyChainFixture
 {
@@ -329,5 +328,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/update/test-advertise-crash.cpp b/tests/update/test-advertise-crash.cpp
index 23f6e61..616429d 100644
--- a/tests/update/test-advertise-crash.cpp
+++ b/tests/update/test-advertise-crash.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -24,8 +24,7 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class AdvertiseCrashFixture : public IoKeyChainFixture
 {
@@ -96,5 +95,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/update/test-nfd-rib-command-processor.cpp b/tests/update/test-nfd-rib-command-processor.cpp
index b055275..17106dc 100644
--- a/tests/update/test-nfd-rib-command-processor.cpp
+++ b/tests/update/test-nfd-rib-command-processor.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -30,8 +30,7 @@
 #include <boost/lexical_cast.hpp>
 #include <boost/mp11/list.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 class NfdRibCommandProcessorFixture : public IoKeyChainFixture
 {
@@ -182,5 +181,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/update/test-prefix-update-processor.cpp b/tests/update/test-prefix-update-processor.cpp
index 79e2d90..493d73d 100644
--- a/tests/update/test-prefix-update-processor.cpp
+++ b/tests/update/test-prefix-update-processor.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -35,8 +35,7 @@
 #include <boost/property_tree/info_parser.hpp>
 #include <boost/property_tree/ptree.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 using namespace ndn;
 
@@ -200,5 +199,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
diff --git a/tests/update/test-save-delete-prefix.cpp b/tests/update/test-save-delete-prefix.cpp
index 3e8ef3b..ef38cef 100644
--- a/tests/update/test-save-delete-prefix.cpp
+++ b/tests/update/test-save-delete-prefix.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -34,8 +34,7 @@
 #include <boost/filesystem/path.hpp>
 #include <boost/property_tree/info_parser.hpp>
 
-namespace nlsr {
-namespace test {
+namespace nlsr::tests {
 
 namespace bpt = boost::property_tree;
 
@@ -232,5 +231,4 @@
 
 BOOST_AUTO_TEST_SUITE_END()
 
-} // namespace test
-} // namespace nlsr
+} // namespace nlsr::tests
