diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d9f98d8..47d9a6a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,8 +22,6 @@
         include:
           - compiler: g++-7
             os: ubuntu-18.04
-          - compiler: clang++-5.0
-            os: ubuntu-18.04
           - compiler: clang++-6.0
             os: ubuntu-18.04
     runs-on: ${{ matrix.os }}
@@ -37,7 +35,7 @@
           sudo apt-get -qy install ${CXX/clang++/clang}
           ${CXX} --version
       - name: Checkout
-        uses: actions/checkout@v2
+        uses: actions/checkout@v3
       - name: Build and test
         run: ./.jenkins
 
@@ -63,6 +61,6 @@
         with:
           xcode-version: ${{ matrix.xcode }}
       - name: Checkout
-        uses: actions/checkout@v2
+        uses: actions/checkout@v3
       - name: Build and test
         run: ./.jenkins
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 7e19491..f27285b 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -21,7 +21,7 @@
       WAF_JOBS: 3
     steps:
       - name: Checkout
-        uses: actions/checkout@v2
+        uses: actions/checkout@v3
       - name: Install dependencies
         run: |
           case ${RUNNER_OS} in
diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index f3be6e7..f086c17 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -16,20 +16,21 @@
     errmsg = ''
     warnmsg = ''
     if cxx == 'gcc':
-        if ccver < (5, 3, 0):
+        if ccver < (7, 4, 0):
             errmsg = ('The version of gcc you are using is too old.\n'
-                      'The minimum supported gcc version is 7.4.0.')
-        elif ccver < (7, 4, 0):
-            warnmsg = ('Using a version of gcc older than 7.4.0 is not '
-                       'officially supported and may result in build failures.')
+                      'The minimum supported gcc version is 7.4.')
         conf.flags = GccFlags()
     elif cxx == 'clang':
-        if Utils.unversioned_sys_platform() == 'darwin' and ccver < (9, 0, 0):
-            errmsg = ('The version of Xcode you are using is too old.\n'
-                      'The minimum supported Xcode version is 9.0.')
-        elif ccver < (4, 0, 0):
+        if Utils.unversioned_sys_platform() == 'darwin':
+            if ccver < (10, 0, 0):
+                errmsg = ('The version of Xcode you are using is too old.\n'
+                          'The minimum supported Xcode version is 11.3.')
+            elif ccver < (11, 0, 0):
+                warnmsg = ('Using a version of Xcode older than 11.3 is not '
+                           'officially supported and may result in build failures.')
+        elif ccver < (6, 0, 0):
             errmsg = ('The version of clang you are using is too old.\n'
-                      'The minimum supported clang version is 4.0.')
+                      'The minimum supported clang version is 6.0.')
         conf.flags = ClangFlags()
     else:
         warnmsg = '%s compiler is unsupported' % cxx
@@ -181,7 +182,7 @@
         flags['CXXFLAGS'] += ['-fdiagnostics-color',
                               '-Wredundant-tags',
                               ]
-        if platform.machine() == 'armv7l' and self.getCompilerVersion(conf) >= (7, 1, 0):
+        if platform.machine() == 'armv7l':
             flags['CXXFLAGS'] += ['-Wno-psabi'] # Bug #5106
         return flags
 
@@ -190,7 +191,7 @@
         flags['CXXFLAGS'] += ['-fdiagnostics-color',
                               '-Wredundant-tags',
                               ]
-        if platform.machine() == 'armv7l' and self.getCompilerVersion(conf) >= (7, 1, 0):
+        if platform.machine() == 'armv7l':
             flags['CXXFLAGS'] += ['-Wno-psabi'] # Bug #5106
         return flags
 
@@ -212,8 +213,6 @@
                               '-Wundefined-func-template',
                               '-Wno-unused-local-typedef', # Bugs #2657 and #3209
                               ]
-        if self.getCompilerVersion(conf) < (6, 0, 0):
-            flags['CXXFLAGS'] += ['-Wno-missing-braces'] # Bug #4721
         return flags
 
     def getOptimizedFlags(self, conf):
@@ -222,6 +221,4 @@
                               '-Wundefined-func-template',
                               '-Wno-unused-local-typedef', # Bugs #2657 and #3209
                               ]
-        if self.getCompilerVersion(conf) < (6, 0, 0):
-            flags['CXXFLAGS'] += ['-Wno-missing-braces'] # Bug #4721
         return flags
diff --git a/docs/conf.py b/docs/conf.py
index 526b37f..2362bab 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -18,7 +18,7 @@
 # -- Project information -----------------------------------------------------
 
 project = u'Named Data Link State Routing Protocol (NLSR)'
-copyright = u'Copyright © 2014-2021 Named Data Networking Project.'
+copyright = u'Copyright © 2014-2022 Named Data Networking Project.'
 author = u'Named Data Networking Project'
 
 # The short X.Y version.
diff --git a/tests/communication/test-sync-logic-handler.cpp b/tests/communication/test-sync-logic-handler.cpp
index 55007b8..3c71f74 100644
--- a/tests/communication/test-sync-logic-handler.cpp
+++ b/tests/communication/test-sync-logic-handler.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -36,13 +36,7 @@
 {
 public:
   SyncLogicFixture()
-    : face(m_ioService, m_keyChain)
-    , conf(face, m_keyChain)
-    , confProcessor(conf, SYNC_PROTOCOL_PSYNC)
-    , testIsLsaNew([] (const ndn::Name& name, const Lsa::Type& lsaType,
-                       const uint64_t sequenceNumber) {
-                     return true;
-                   })
+    : testIsLsaNew([] (auto&&...) { return true; })
     , sync(face, testIsLsaNew, conf)
     , updateNamePrefix(this->conf.getLsaPrefix().toUri() +
                        this->conf.getSiteName().toUri() +
@@ -65,146 +59,156 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
-  ConfParameter conf;
-  DummyConfFileProcessor confProcessor;
+  ndn::util::DummyClientFace face{m_ioService, m_keyChain};
+  ConfParameter conf{face, m_keyChain};
+  DummyConfFileProcessor confProcessor{conf, SYNC_PROTOCOL_PSYNC};
   SyncLogicHandler::IsLsaNew testIsLsaNew;
   SyncLogicHandler sync;
 
   const std::string updateNamePrefix;
-  const std::vector<Lsa::Type> lsaTypes = {Lsa::Type::NAME, Lsa::Type::ADJACENCY,
-                                             Lsa::Type::COORDINATE};
+  const std::vector<Lsa::Type> lsaTypes = {Lsa::Type::NAME,
+                                           Lsa::Type::ADJACENCY,
+                                           Lsa::Type::COORDINATE};
 };
 
-BOOST_AUTO_TEST_SUITE(TestSyncLogicHandler)
+BOOST_FIXTURE_TEST_SUITE(TestSyncLogicHandler, SyncLogicFixture)
 
 /* Tests that when SyncLogicHandler receives an LSA of either Name or
    Adjacency type that appears to be newer, it will emit to its signal
    with those LSA details.
  */
-BOOST_FIXTURE_TEST_CASE(UpdateForOtherLS, SyncLogicFixture)
+BOOST_AUTO_TEST_CASE(UpdateForOtherLS)
 {
-  std::vector<Lsa::Type> lsaTypes = {Lsa::Type::NAME, Lsa::Type::ADJACENCY};
-
+  size_t nCallbacks = 0;
   uint64_t syncSeqNo = 1;
 
-  for (const Lsa::Type& lsaType : lsaTypes) {
+  for (auto lsaType : {Lsa::Type::NAME, Lsa::Type::ADJACENCY}) {
     std::string updateName = this->updateNamePrefix + boost::lexical_cast<std::string>(lsaType);
 
-    // Actual testing done here -- signal function callback
     ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa->connect(
-      [&] (const ndn::Name& routerName, const uint64_t& sequenceNumber,
-           const ndn::Name& originRouter) {
+      [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter) {
         BOOST_CHECK_EQUAL(ndn::Name{updateName}, routerName);
         BOOST_CHECK_EQUAL(sequenceNumber, syncSeqNo);
+        ++nCallbacks;
       });
 
     this->receiveUpdate(updateName, syncSeqNo);
   }
+
+  BOOST_CHECK_EQUAL(nCallbacks, 2);
 }
 
 /* Tests that when SyncLogicHandler in HR mode receives an LSA of
    either Coordinate or Name type that appears to be newer, it will
    emit to its signal with those LSA details.
  */
-BOOST_FIXTURE_TEST_CASE(UpdateForOtherHR, SyncLogicFixture)
+BOOST_AUTO_TEST_CASE(UpdateForOtherHR)
 {
   this->conf.setHyperbolicState(HYPERBOLIC_STATE_ON);
 
+  size_t nCallbacks = 0;
   uint64_t syncSeqNo = 1;
-  std::vector<Lsa::Type> lsaTypes = {Lsa::Type::NAME, Lsa::Type::COORDINATE};
 
-  for (const Lsa::Type& lsaType : lsaTypes) {
+  for (auto lsaType : {Lsa::Type::NAME, Lsa::Type::COORDINATE}) {
     std::string updateName = this->updateNamePrefix + boost::lexical_cast<std::string>(lsaType);
 
     ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa->connect(
-      [&] (const ndn::Name& routerName, const uint64_t& sequenceNumber,
-           const ndn::Name& originRouter) {
+      [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter) {
         BOOST_CHECK_EQUAL(ndn::Name{updateName}, routerName);
         BOOST_CHECK_EQUAL(sequenceNumber, syncSeqNo);
+        ++nCallbacks;
       });
 
     this->receiveUpdate(updateName, syncSeqNo);
   }
+
+  BOOST_CHECK_EQUAL(nCallbacks, 2);
 }
 
 /* Tests that when SyncLogicHandler in HR-dry mode receives an LSA of
    any type that appears to be newer, it will emit to its signal with
    those LSA details.
  */
-BOOST_FIXTURE_TEST_CASE(UpdateForOtherHRDry, SyncLogicFixture)
+BOOST_AUTO_TEST_CASE(UpdateForOtherHRDry)
 {
   this->conf.setHyperbolicState(HYPERBOLIC_STATE_DRY_RUN);
 
+  size_t nCallbacks = 0;
   uint64_t syncSeqNo = 1;
 
-  for (const Lsa::Type& lsaType : this->lsaTypes) {
+  for (auto lsaType : this->lsaTypes) {
     std::string updateName = this->updateNamePrefix + boost::lexical_cast<std::string>(lsaType);
 
     ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa->connect(
-      [&] (const ndn::Name& routerName, const uint64_t& sequenceNumber,
-           const ndn::Name& originRouter) {
+      [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter) {
         BOOST_CHECK_EQUAL(ndn::Name{updateName}, routerName);
         BOOST_CHECK_EQUAL(sequenceNumber, syncSeqNo);
+        ++nCallbacks;
       });
 
     this->receiveUpdate(updateName, syncSeqNo);
   }
+
+  BOOST_CHECK_EQUAL(nCallbacks, 3);
 }
 
 /* Tests that when SyncLogicHandler receives an update for an LSA with
    details matching this router's details, it will *not* emit to its
    signal those LSA details.
  */
-BOOST_FIXTURE_TEST_CASE(NoUpdateForSelf, SyncLogicFixture)
+BOOST_AUTO_TEST_CASE(NoUpdateForSelf)
 {
   const uint64_t sequenceNumber = 1;
 
-  for (const Lsa::Type& lsaType : this->lsaTypes) {
+  for (auto lsaType : this->lsaTypes) {
     // To ensure that we get correctly-separated components, create
     // and modify a Name to hand off.
-    ndn::Name updateName = ndn::Name{this->conf.getLsaPrefix()};
+    ndn::Name updateName{this->conf.getLsaPrefix()};
     updateName.append(this->conf.getSiteName())
               .append(this->conf.getRouterName())
               .append(boost::lexical_cast<std::string>(lsaType));
 
     ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa->connect(
-      [&] (const ndn::Name& routerName, const uint64_t& sequenceNumber,
-           const ndn::Name& originRouter) {
+      [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter) {
         BOOST_FAIL("Updates for self should not be emitted!");
       });
 
     this->receiveUpdate(updateName.toUri(), sequenceNumber);
   }
+
+  // avoid "test case [...] did not check any assertions" message from Boost.Test
+  BOOST_CHECK(true);
 }
 
 /* Tests that when SyncLogicHandler receives an update for an LSA with
    details that do not match the expected format, it will *not* emit
    to its signal those LSA details.
  */
-BOOST_FIXTURE_TEST_CASE(MalformedUpdate, SyncLogicFixture)
+BOOST_AUTO_TEST_CASE(MalformedUpdate)
 {
   const uint64_t sequenceNumber = 1;
 
-  for (const Lsa::Type& lsaType : this->lsaTypes) {
+  for (auto lsaType : this->lsaTypes) {
     ndn::Name updateName{this->conf.getSiteName()};
     updateName.append(this->conf.getRouterName()).append(boost::lexical_cast<std::string>(lsaType));
 
     ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa->connect(
-      [&] (const ndn::Name& routerName, const uint64_t& sequenceNumber,
-           const ndn::Name& originRouter) {
+      [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter) {
         BOOST_FAIL("Malformed updates should not be emitted!");
       });
 
     this->receiveUpdate(updateName.toUri(), sequenceNumber);
   }
+
+  // avoid "test case [...] did not check any assertions" message from Boost.Test
+  BOOST_CHECK(true);
 }
 
 /* Tests that when SyncLogicHandler receives an update for an LSA with
    details that do not appear to be new, it will *not* emit to its
    signal those LSA details.
  */
-BOOST_FIXTURE_TEST_CASE(LsaNotNew, SyncLogicFixture)
+BOOST_AUTO_TEST_CASE(LsaNotNew)
 {
   auto testLsaAlwaysFalse = [] (const ndn::Name& routerName, const Lsa::Type& lsaType,
                                 const uint64_t& sequenceNumber) {
@@ -214,21 +218,22 @@
   const uint64_t sequenceNumber = 1;
   SyncLogicHandler sync{this->face, testLsaAlwaysFalse, this->conf};
     ndn::util::signal::ScopedConnection connection = sync.onNewLsa->connect(
-      [&] (const ndn::Name& routerName, const uint64_t& sequenceNumber,
-           const ndn::Name& originRouter) {
+      [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter) {
         BOOST_FAIL("An update for an LSA with non-new sequence number should not emit!");
       });
 
   std::string updateName = this->updateNamePrefix + boost::lexical_cast<std::string>(Lsa::Type::NAME);
-
   this->receiveUpdate(updateName, sequenceNumber);
+
+  // avoid "test case [...] did not check any assertions" message from Boost.Test
+  BOOST_CHECK(true);
 }
 
 /* Tests that SyncLogicHandler successfully concatenates configured
    variables together to form the necessary prefixes to advertise
    through sync.
  */
-BOOST_FIXTURE_TEST_CASE(UpdatePrefix, SyncLogicFixture)
+BOOST_AUTO_TEST_CASE(UpdatePrefix)
 {
   ndn::Name expectedPrefix = this->conf.getLsaPrefix();
   expectedPrefix.append(this->conf.getSiteName());
diff --git a/tests/publisher/test-dataset-interest-handler.cpp b/tests/publisher/test-dataset-interest-handler.cpp
index 698895e..b8a44d3 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-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -46,11 +46,11 @@
   face.sentData.clear();
 }
 
-BOOST_FIXTURE_TEST_SUITE(PublisherTestLsdbDatasetInterestHandler, PublisherFixture)
+BOOST_FIXTURE_TEST_SUITE(TestDatasetInterestHandler, PublisherFixture)
 
 BOOST_AUTO_TEST_CASE(Localhost)
 {
-  nlsr::test::checkPrefixRegistered(face, Nlsr::LOCALHOST_PREFIX);
+  checkPrefixRegistered(face, Nlsr::LOCALHOST_PREFIX);
 
   // Install adjacency LSA
   AdjLsa adjLsa;
@@ -102,7 +102,7 @@
   // Should already be added to dispatcher
   BOOST_CHECK_THROW(nlsr.m_dispatcher.addTopPrefix(regRouterPrefix), std::out_of_range);
 
-  nlsr::test::checkPrefixRegistered(face,regRouterPrefix);
+  checkPrefixRegistered(face,regRouterPrefix);
 
   // Install adjacencies LSA
   AdjLsa adjLsa;
diff --git a/tests/route/test-fib.cpp b/tests/route/test-fib.cpp
index 3961b05..5c75314 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-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -19,11 +19,12 @@
  */
 
 #include "route/fib.hpp"
-#include "../test-common.hpp"
-#include "../control-commands.hpp"
 #include "adjacency-list.hpp"
 #include "conf-parameter.hpp"
 
+#include "../test-common.hpp"
+#include "../control-commands.hpp"
+
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
 namespace nlsr {
@@ -335,11 +336,11 @@
   int origSeqNo = fe.seqNo;
   fib.m_table.emplace(name1, std::move(fe));
 
-  fib.scheduleEntryRefresh(fe,
-                            [&] (FibEntry& entry) {
-                              BOOST_CHECK_EQUAL(origSeqNo + 1, entry.seqNo);
-                            });
+  fib.scheduleEntryRefresh(fe, [&] (auto& entry) { BOOST_CHECK_EQUAL(origSeqNo + 1, entry.seqNo); });
   this->advanceClocks(ndn::time::milliseconds(10), 1);
+
+  // avoid "test case [...] did not check any assertions" message from Boost.Test
+  BOOST_CHECK(true);
 }
 
 BOOST_AUTO_TEST_CASE(ShouldNotRefreshNeighborRoute) // #4799
diff --git a/tests/test-hello-protocol.cpp b/tests/test-hello-protocol.cpp
index 742d129..08adc02 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-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -95,7 +95,7 @@
   const std::string ACTIVE_NEIGHBOR = "/ndn/site/%C1.Router/router-active";
 };
 
-BOOST_FIXTURE_TEST_SUITE(HelloProtocol, HelloProtocolFixture)
+BOOST_FIXTURE_TEST_SUITE(TestHelloProtocol, HelloProtocolFixture)
 
 BOOST_AUTO_TEST_CASE(Basic)
 {
@@ -150,4 +150,4 @@
 BOOST_AUTO_TEST_SUITE_END()
 
 } // namespace test
-} // namespace nlsr
\ No newline at end of file
+} // namespace nlsr
diff --git a/tests/test-lsa-rule.cpp b/tests/test-lsa-rule.cpp
index 4e7b3b3..2b6faf4 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-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -39,7 +39,7 @@
 namespace nlsr {
 namespace test {
 
-class LsaRuleFixture : public nlsr::test::UnitTestTimeFixture
+class LsaRuleFixture : public UnitTestTimeFixture
 {
 public:
   LsaRuleFixture()
diff --git a/tests/update/test-advertise-crash.cpp b/tests/update/test-advertise-crash.cpp
index d6aea8a..09a27d7 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-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -26,7 +26,7 @@
 namespace nlsr {
 namespace test {
 
-class AdvertiseCrashFixture : public nlsr::test::UnitTestTimeFixture
+class AdvertiseCrashFixture : public UnitTestTimeFixture
 {
 public:
   AdvertiseCrashFixture()
@@ -70,7 +70,9 @@
   NamePrefixList& namePrefixList;
 };
 
-BOOST_FIXTURE_TEST_CASE(TestAdvertiseCrash, AdvertiseCrashFixture)
+BOOST_FIXTURE_TEST_SUITE(TestAdvertiseCrash, AdvertiseCrashFixture)
+
+BOOST_AUTO_TEST_CASE(ReceiveAdvertiseInterest)
 {
   // Note that this test does not setup any security
   // and the interest will be rejected by NLSR.
@@ -84,10 +86,14 @@
   advertiseCommand.append(parameters.wireEncode());
 
   auto advertiseInterest = std::make_shared<ndn::Interest>(advertiseCommand);
-  advertiseInterest->setCanBePrefix(false);
   face.receive(*advertiseInterest);
   this->advanceClocks(ndn::time::milliseconds(10), 10);
+
+  // avoid "test case [...] did not check any assertions" message from Boost.Test
+  BOOST_CHECK(true);
 }
 
+BOOST_AUTO_TEST_SUITE_END()
+
 } // namespace test
 } // namespace nlsr
diff --git a/tests/update/test-nfd-rib-command-processor.cpp b/tests/update/test-nfd-rib-command-processor.cpp
index ef8c1b6..cc23dd0 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-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -32,7 +32,7 @@
 namespace nlsr {
 namespace test {
 
-class NfdRibCommandProcessorFixture : public nlsr::test::UnitTestTimeFixture
+class NfdRibCommandProcessorFixture : public UnitTestTimeFixture
 {
 public:
   NfdRibCommandProcessorFixture()
@@ -55,7 +55,6 @@
   sendCommand(ndn::Name prefix, const ndn::nfd::ControlParameters& parameters)
   {
     ndn::Interest interest(prefix.append(parameters.wireEncode()));
-    interest.setCanBePrefix(false);
     face.receive(interest);
     this->advanceClocks(ndn::time::milliseconds(10), 10);
   }
diff --git a/tests/update/test-prefix-update-processor.cpp b/tests/update/test-prefix-update-processor.cpp
index fe0bfac..9c20114 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-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -40,7 +40,7 @@
 namespace nlsr {
 namespace test {
 
-class PrefixUpdateFixture : public nlsr::test::UnitTestTimeFixture
+class PrefixUpdateFixture : public UnitTestTimeFixture
 {
 public:
   PrefixUpdateFixture()
diff --git a/wscript b/wscript
index aa570ef..5d23b8a 100644
--- a/wscript
+++ b/wscript
@@ -50,30 +50,26 @@
 
     conf.find_program('dot', var='DOT', mandatory=False)
 
-    pkg_config_path = os.environ.get('PKG_CONFIG_PATH', '%s/pkgconfig' % conf.env.LIBDIR)
-    conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'], uselib_store='NDN_CXX',
-                   pkg_config_path=pkg_config_path)
+    pkg_config_path = os.environ.get('PKG_CONFIG_PATH', f'{conf.env.LIBDIR}/pkgconfig')
+    conf.check_cfg(package='libndn-cxx', args=['libndn-cxx >= 0.8.0', '--cflags', '--libs'],
+                   uselib_store='NDN_CXX', pkg_config_path=pkg_config_path)
 
     boost_libs = ['system', 'iostreams', 'filesystem', 'regex']
     if conf.env.WITH_TESTS:
-        boost_libs += ['program_options', 'unit_test_framework']
+        boost_libs.append('unit_test_framework')
 
     conf.check_boost(lib=boost_libs, mt=True)
-    if conf.env.BOOST_VERSION_NUMBER < 105800:
+    if conf.env.BOOST_VERSION_NUMBER < 106501:
         conf.fatal('The minimum supported version of Boost is 1.65.1.\n'
                    'Please upgrade your distribution or manually install a newer version of Boost.\n'
                    'For more information, see https://redmine.named-data.net/projects/nfd/wiki/Boost')
-    elif conf.env.BOOST_VERSION_NUMBER < 106501:
-        Logs.warn('WARNING: Using a version of Boost older than 1.65.1 is not officially supported and may not work.\n'
-                  'If you encounter any problems, please upgrade your distribution or manually install a newer version of Boost.\n'
-                  'For more information, see https://redmine.named-data.net/projects/nfd/wiki/Boost')
 
     if conf.options.with_chronosync:
-        conf.check_cfg(package='ChronoSync', args=['--cflags', '--libs'],
+        conf.check_cfg(package='ChronoSync', args=['ChronoSync >= 0.5.4', '--cflags', '--libs'],
                        uselib_store='CHRONOSYNC', pkg_config_path=pkg_config_path)
 
-    conf.check_cfg(package='PSync', args=['--cflags', '--libs'], uselib_store='PSYNC',
-                   pkg_config_path=pkg_config_path)
+    conf.check_cfg(package='PSync', args=['PSync >= 0.3.0', '--cflags', '--libs'],
+                   uselib_store='PSYNC', pkg_config_path=pkg_config_path)
 
     conf.check_compiler_flags()
 
