diff --git a/tests/daemon/mgmt/cs-manager.t.cpp b/tests/daemon/mgmt/cs-manager.t.cpp
index fa9b6c5..d56b3d6 100644
--- a/tests/daemon/mgmt/cs-manager.t.cpp
+++ b/tests/daemon/mgmt/cs-manager.t.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-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -55,7 +55,7 @@
 BOOST_AUTO_TEST_CASE(Config)
 {
   using ndn::nfd::CsFlagBit;
-  const Name cmdPrefix("/localhost/nfd/cs/config");
+  const Name cmdPrefix = Name("/localhost/nfd").append(ndn::nfd::CsConfigCommand::getName());
 
   // setup initial CS config
   m_cs.setLimit(22129);
@@ -116,7 +116,7 @@
   for (size_t i = 0; i < CsManager::ERASE_LIMIT + 1; ++i) {
     m_cs.insert(*makeData(Name("/H").appendSequenceNumber(i)));
   }
-  const Name cmdPrefix("/localhost/nfd/cs/erase");
+  const Name cmdPrefix = Name("/localhost/nfd").append(ndn::nfd::CsEraseCommand::getName());
 
   // requested Name matches no Data
   auto req = makeControlCommandRequest(cmdPrefix,
diff --git a/tests/daemon/mgmt/face-manager-command-fixture.cpp b/tests/daemon/mgmt/face-manager-command-fixture.cpp
index 0771e8c..ab3582e 100644
--- a/tests/daemon/mgmt/face-manager-command-fixture.cpp
+++ b/tests/daemon/mgmt/face-manager-command-fixture.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2024,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -109,12 +109,12 @@
   : node1(m_keyChain, 16363)
   , node2(m_keyChain, 26363)
 {
-  advanceClocks(1_ms, 5);
+  advanceClocks(1_ms, 10);
 }
 
 FaceManagerCommandFixture::~FaceManagerCommandFixture()
 {
-  advanceClocks(1_ms, 5);
+  advanceClocks(1_ms, 10);
 }
 
 } // namespace nfd::tests
diff --git a/tests/daemon/mgmt/face-manager-command-fixture.hpp b/tests/daemon/mgmt/face-manager-command-fixture.hpp
index 1b7d0e9..4913798 100644
--- a/tests/daemon/mgmt/face-manager-command-fixture.hpp
+++ b/tests/daemon/mgmt/face-manager-command-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-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -40,7 +40,6 @@
 
   ~FaceManagerCommandNode();
 
-public:
   const Face*
   findFaceByUri(const std::string& uri) const;
 
@@ -59,12 +58,17 @@
 
 class FaceManagerCommandFixture : public InterestSignerFixture
 {
-public:
+protected:
   FaceManagerCommandFixture();
 
   ~FaceManagerCommandFixture() override;
 
 public:
+  static inline const Name CREATE_REQUEST = Name("/localhost/nfd").append(ndn::nfd::FaceCreateCommand::getName());
+  static inline const Name UPDATE_REQUEST = Name("/localhost/nfd").append(ndn::nfd::FaceUpdateCommand::getName());
+  static inline const Name DESTROY_REQUEST = Name("/localhost/nfd").append(ndn::nfd::FaceDestroyCommand::getName());
+
+protected:
   FaceManagerCommandNode node1; // used to test FaceManager
   FaceManagerCommandNode node2; // acts as a remote endpoint
 };
diff --git a/tests/daemon/mgmt/face-manager-create-face.t.cpp b/tests/daemon/mgmt/face-manager-create-face.t.cpp
index 8f789c6..31c4bf1 100644
--- a/tests/daemon/mgmt/face-manager-create-face.t.cpp
+++ b/tests/daemon/mgmt/face-manager-create-face.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2024,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -332,7 +332,7 @@
   using FaceType = boost::mp11::mp_first<T>;
   using CreateResult = boost::mp11::mp_second<T>;
 
-  Interest req = makeControlCommandRequest("/localhost/nfd/faces/create", FaceType::getParameters());
+  Interest req = makeControlCommandRequest(this->CREATE_REQUEST, FaceType::getParameters());
 
   bool hasCallbackFired = false;
   this->node1.face.onSendData.connect([this, req, &hasCallbackFired] (const Data& response) {
@@ -417,7 +417,7 @@
   });
 
   this->node1.face.receive(req);
-  this->advanceClocks(1_ms, 5);
+  this->advanceClocks(1_ms, 10);
 
   BOOST_CHECK(hasCallbackFired);
 }
@@ -428,9 +428,9 @@
 
   {
     // create face
-    Interest req = makeControlCommandRequest("/localhost/nfd/faces/create", FaceType::getParameters());
+    Interest req = makeControlCommandRequest(CREATE_REQUEST, FaceType::getParameters());
     this->node1.face.receive(req);
-    this->advanceClocks(1_ms, 5);
+    this->advanceClocks(1_ms, 10);
   }
 
   // find the created face
@@ -439,7 +439,7 @@
 
   {
     // re-create face
-    Interest req = makeControlCommandRequest("/localhost/nfd/faces/create", FaceType::getParameters());
+    Interest req = makeControlCommandRequest(CREATE_REQUEST, FaceType::getParameters());
 
     bool hasCallbackFired = false;
     this->node1.face.onSendData.connect(
@@ -465,7 +465,7 @@
       });
 
     this->node1.face.receive(req);
-    this->advanceClocks(1_ms, 5);
+    this->advanceClocks(1_ms, 10);
 
     BOOST_CHECK(hasCallbackFired);
   }
diff --git a/tests/daemon/mgmt/face-manager-update-face.t.cpp b/tests/daemon/mgmt/face-manager-update-face.t.cpp
index ebc794a..7ccc9f2 100644
--- a/tests/daemon/mgmt/face-manager-update-face.t.cpp
+++ b/tests/daemon/mgmt/face-manager-update-face.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2024,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -82,7 +82,7 @@
   void
   createFace(const ControlParameters& createParams, bool isForOnDemandFace = false)
   {
-    Interest req = makeControlCommandRequest("/localhost/nfd/faces/create", createParams);
+    Interest req = makeControlCommandRequest(CREATE_REQUEST, createParams);
 
     // if this creation if for on-demand face then create it on node2
     FaceManagerCommandNode& target = isForOnDemandFace ? this->node2 : this->node1;
@@ -112,11 +112,11 @@
       });
 
     target.face.receive(req);
-    advanceClocks(1_ms, 5);
+    advanceClocks(1_ms, 10);
 
     if (isForOnDemandFace) {
       std::this_thread::sleep_for(std::chrono::milliseconds(100)); // allow wallclock time for socket IO
-      advanceClocks(1_ms, 5); // let node1 accept Interest and create on-demand face
+      advanceClocks(1_ms, 10); // let node1 accept Interest and create on-demand face
     }
 
     BOOST_REQUIRE(hasCallbackFired);
@@ -127,7 +127,7 @@
              bool isSelfUpdating,
              const std::function<void(const ControlResponse& resp)>& checkResp)
   {
-    Interest req = makeControlCommandRequest("/localhost/nfd/faces/update", requestParams);
+    Interest req = makeControlCommandRequest(UPDATE_REQUEST, requestParams);
     if (isSelfUpdating) {
       // Attach IncomingFaceIdTag to interest
       req.setTag(make_shared<lp::IncomingFaceIdTag>(faceId));
@@ -147,7 +147,7 @@
       });
 
     this->node1.face.receive(req);
-    advanceClocks(1_ms, 5);
+    advanceClocks(1_ms, 10);
     BOOST_REQUIRE(hasCallbackFired);
   }
 
@@ -161,7 +161,7 @@
 
     ControlParameters params;
     params.setFaceId(faceId);
-    Interest req = makeControlCommandRequest("/localhost/nfd/faces/destroy", params);
+    Interest req = makeControlCommandRequest(DESTROY_REQUEST, params);
 
     bool hasCallbackFired = false;
     signal::ScopedConnection connection = this->node1.face.onSendData.connect(
@@ -178,7 +178,7 @@
       });
 
     this->node1.face.receive(req);
-    advanceClocks(1_ms, 5);
+    advanceClocks(1_ms, 10);
     BOOST_REQUIRE(hasCallbackFired);
   }
 
diff --git a/tests/daemon/mgmt/face-manager.t.cpp b/tests/daemon/mgmt/face-manager.t.cpp
index 1e3ba99..b0ad678 100644
--- a/tests/daemon/mgmt/face-manager.t.cpp
+++ b/tests/daemon/mgmt/face-manager.t.cpp
@@ -26,7 +26,7 @@
 #include "mgmt/face-manager.hpp"
 #include "face/protocol-factory.hpp"
 
-#include "manager-common-fixture.hpp"
+#include "face-manager-command-fixture.hpp"
 #include "tests/daemon/face/dummy-face.hpp"
 #include "tests/daemon/face/dummy-transport.hpp"
 
@@ -127,7 +127,7 @@
   auto addedFace = addFace(REMOVE_LAST_NOTIFICATION | SET_SCOPE_LOCAL); // clear notification for creation
 
   auto parameters = ControlParameters().setFaceId(addedFace->getId());
-  auto req = makeControlCommandRequest("/localhost/nfd/faces/destroy", parameters);
+  auto req = makeControlCommandRequest(FaceManagerCommandFixture::DESTROY_REQUEST, parameters);
   receiveInterest(req);
 
   BOOST_REQUIRE_EQUAL(m_responses.size(), 2); // one response and one notification
@@ -142,7 +142,7 @@
 BOOST_AUTO_TEST_CASE(NonExisting)
 {
   auto parameters = ControlParameters().setFaceId(65535);
-  auto req = makeControlCommandRequest("/localhost/nfd/faces/destroy", parameters);
+  auto req = makeControlCommandRequest(FaceManagerCommandFixture::DESTROY_REQUEST, parameters);
   receiveInterest(req);
 
   BOOST_REQUIRE_EQUAL(m_responses.size(), 1);
diff --git a/tests/daemon/mgmt/fib-manager.t.cpp b/tests/daemon/mgmt/fib-manager.t.cpp
index b5712ec..af03ae1 100644
--- a/tests/daemon/mgmt/fib-manager.t.cpp
+++ b/tests/daemon/mgmt/fib-manager.t.cpp
@@ -123,6 +123,11 @@
   }
 
 protected:
+  static inline const Name ADD_NH_REQUEST = Name("/localhost/nfd")
+                                            .append(ndn::nfd::FibAddNextHopCommand::getName());
+  static inline const Name REMOVE_NH_REQUEST = Name("/localhost/nfd")
+                                               .append(ndn::nfd::FibRemoveNextHopCommand::getName());
+
   Fib&       m_fib;
   FibManager m_manager;
 };
@@ -152,8 +157,7 @@
 
 BOOST_AUTO_TEST_CASE(UnknownFaceId)
 {
-  auto req = makeControlCommandRequest("/localhost/nfd/fib/add-nexthop",
-                                       makeParameters("hello", face::FACEID_NULL, 101));
+  auto req = makeControlCommandRequest(ADD_NH_REQUEST, makeParameters("hello", face::FACEID_NULL, 101));
   receiveInterest(req);
   BOOST_REQUIRE_EQUAL(m_responses.size(), 1);
 
@@ -173,8 +177,7 @@
     prefix.append("A");
   }
 
-  auto req = makeControlCommandRequest("/localhost/nfd/fib/add-nexthop",
-                                       makeParameters(prefix, addFace()));
+  auto req = makeControlCommandRequest(ADD_NH_REQUEST, makeParameters(prefix, addFace()));
   receiveInterest(req);
 
   ControlResponse expected(414, "FIB entry prefix cannot exceed " +
@@ -194,7 +197,7 @@
   Name expectedName;
   ControlResponse expectedResponse;
   auto testAddNextHop = [&] (ControlParameters parameters, const FaceId& faceId) {
-    auto req = makeControlCommandRequest("/localhost/nfd/fib/add-nexthop", parameters);
+    auto req = makeControlCommandRequest(ADD_NH_REQUEST, parameters);
     req.setTag(make_shared<lp::IncomingFaceIdTag>(faceId));
     m_responses.clear();
     expectedName = req.getName();
@@ -219,7 +222,7 @@
   BOOST_REQUIRE_NE(addedFaceId, face::INVALID_FACEID);
 
   auto parameters = makeParameters("hello", addedFaceId, 101);
-  auto req = makeControlCommandRequest("/localhost/nfd/fib/add-nexthop", parameters);
+  auto req = makeControlCommandRequest(ADD_NH_REQUEST, parameters);
   receiveInterest(req);
 
   BOOST_REQUIRE_EQUAL(m_responses.size(), 1);
@@ -235,7 +238,7 @@
 
   auto originalParameters = ControlParameters().setName("/hello").setFaceId(addedFaceId);
   auto parameters = makeParameters("/hello", addedFaceId, 0);
-  auto req = makeControlCommandRequest("/localhost/nfd/fib/add-nexthop", originalParameters);
+  auto req = makeControlCommandRequest(ADD_NH_REQUEST, originalParameters);
   receiveInterest(req);
 
   BOOST_REQUIRE_EQUAL(m_responses.size(), 1);
@@ -253,7 +256,7 @@
   ControlResponse expectedResponse;
   auto testAddNextHop = [&] (const ControlParameters& parameters) {
     m_responses.clear();
-    auto req = makeControlCommandRequest("/localhost/nfd/fib/add-nexthop", parameters);
+    auto req = makeControlCommandRequest(ADD_NH_REQUEST, parameters);
     expectedName = req.getName();
     expectedResponse = makeResponse(200, "OK", parameters);
     receiveInterest(req);
@@ -284,7 +287,7 @@
   ControlResponse expectedResponse;
   auto testRemoveNextHop = [&] (const ControlParameters& parameters) {
     m_responses.clear();
-    auto req = makeControlCommandRequest("/localhost/nfd/fib/remove-nexthop", parameters);
+    auto req = makeControlCommandRequest(REMOVE_NH_REQUEST, parameters);
     expectedName = req.getName();
     expectedResponse = makeResponse(200, "OK", parameters);
     receiveInterest(req);
@@ -324,7 +327,7 @@
   BOOST_REQUIRE_NE(addedFaceId, face::INVALID_FACEID);
 
   auto parameters = makeParameters("hello", addedFaceId);
-  auto req = makeControlCommandRequest("/localhost/nfd/fib/remove-nexthop", parameters);
+  auto req = makeControlCommandRequest(REMOVE_NH_REQUEST, parameters);
   receiveInterest(req);
   BOOST_REQUIRE_EQUAL(m_responses.size(), 1);
 
@@ -343,7 +346,7 @@
   ControlResponse expectedResponse;
   auto testWithImplicitFaceId = [&] (ControlParameters parameters, FaceId face) {
     m_responses.clear();
-    auto req = makeControlCommandRequest("/localhost/nfd/fib/remove-nexthop", parameters);
+    auto req = makeControlCommandRequest(REMOVE_NH_REQUEST, parameters);
     req.setTag(make_shared<lp::IncomingFaceIdTag>(face));
     expectedName = req.getName();
     expectedResponse = makeResponse(200, "OK", parameters.setFaceId(face));
@@ -376,7 +379,7 @@
   ControlResponse expectedResponse;
   auto testRemoveNextHop = [&] (ControlParameters parameters) {
     m_responses.clear();
-    auto req = makeControlCommandRequest("/localhost/nfd/fib/remove-nexthop", parameters);
+    auto req = makeControlCommandRequest(REMOVE_NH_REQUEST, parameters);
     expectedName = req.getName();
     expectedResponse = makeResponse(200, "OK", parameters);
     receiveInterest(req);
diff --git a/tests/daemon/mgmt/rib-manager.t.cpp b/tests/daemon/mgmt/rib-manager.t.cpp
index 9dc55d1..2e876d5 100644
--- a/tests/daemon/mgmt/rib-manager.t.cpp
+++ b/tests/daemon/mgmt/rib-manager.t.cpp
@@ -199,7 +199,7 @@
       boost::asio::post(m_face.getIoContext(), [this, data] { m_face.receive(*data); });
     };
 
-    const Name commandPrefix("/localhost/nfd/fib/add-nexthop");
+    const Name commandPrefix = Name("/localhost/nfd").append(ndn::nfd::FibAddNextHopCommand::getName());
     for (const auto& command : m_face.sentInterests) {
       if (commandPrefix.isPrefixOf(command.getName())) {
         replyFibAddCommand(command);
@@ -244,6 +244,10 @@
   }
 
 protected:
+  static inline const Name REG_REQUEST = Name("/localhost/nfd").append(ndn::nfd::RibRegisterCommand::getName());
+  static inline const Name UNREG_REQUEST = Name("/localhost/nfd").append(ndn::nfd::RibUnregisterCommand::getName());
+  static inline const Name ANNOUNCE_REQUEST = Name("/localhost/nfd").append(ndn::nfd::RibAnnounceCommand::getName());
+
   ConfigurationStatus m_status;
   Name m_anchorId;
   Name m_derivedId;
@@ -334,10 +338,10 @@
 BOOST_FIXTURE_TEST_CASE_TEMPLATE(CommandAuthorization, T, AllFixtures, T)
 {
   auto parameters  = this->makeRegisterParameters("/test-authorization", 9527);
-  auto commandHost = this->makeControlCommandRequest("/localhost/nfd/rib/register", parameters,
-                                                     T::signedInterestFmt);
-  auto commandHop  = this->makeControlCommandRequest("/localhop/nfd/rib/register", parameters,
-                                                     T::signedInterestFmt, this->m_derivedId);
+  auto commandHost = this->makeControlCommandRequest(this->REG_REQUEST, parameters, T::signedInterestFmt);
+  auto commandHop  = this->makeControlCommandRequest(
+                       Name("/localhop/nfd").append(ndn::nfd::RibRegisterCommand::getName()),
+                       parameters, T::signedInterestFmt, this->m_derivedId);
   if (this->m_status.isLocalhopConfigured) {
     commandHop.setTag(std::make_shared<lp::IncomingFaceIdTag>(123));
   }
@@ -368,9 +372,9 @@
   auto paramsRegister    = makeRegisterParameters("/test-register-unregister", 9527);
   auto paramsUnregister  = makeUnregisterParameters("/test-register-unregister", 9527);
 
-  auto commandRegister = makeControlCommandRequest("/localhost/nfd/rib/register", paramsRegister);
+  auto commandRegister = makeControlCommandRequest(REG_REQUEST, paramsRegister);
   commandRegister.setTag(make_shared<lp::IncomingFaceIdTag>(1234));
-  auto commandUnregister = makeControlCommandRequest("/localhost/nfd/rib/unregister", paramsUnregister);
+  auto commandUnregister = makeControlCommandRequest(UNREG_REQUEST, paramsUnregister);
   commandUnregister.setTag(make_shared<lp::IncomingFaceIdTag>(1234));
 
   receiveInterest(commandRegister);
@@ -397,9 +401,9 @@
   BOOST_CHECK_EQUAL(paramsUnregister.getFaceId(), 0);
 
   const uint64_t inFaceId = 9527;
-  auto commandRegister = makeControlCommandRequest("/localhost/nfd/rib/register", paramsRegister);
+  auto commandRegister = makeControlCommandRequest(REG_REQUEST, paramsRegister);
   commandRegister.setTag(make_shared<lp::IncomingFaceIdTag>(inFaceId));
-  auto commandUnregister = makeControlCommandRequest("/localhost/nfd/rib/unregister", paramsUnregister);
+  auto commandUnregister = makeControlCommandRequest(UNREG_REQUEST, paramsUnregister);
   commandUnregister.setTag(make_shared<lp::IncomingFaceIdTag>(inFaceId));
 
   receiveInterest(commandRegister);
@@ -425,7 +429,7 @@
 {
   auto paramsRegister = makeRegisterParameters("/test-expiry", 9527, 50_ms);
   auto paramsUnregister = makeRegisterParameters("/test-expiry", 9527);
-  receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", paramsRegister));
+  receiveInterest(makeControlCommandRequest(REG_REQUEST, paramsRegister));
 
   advanceClocks(55_ms);
   BOOST_REQUIRE_EQUAL(m_fibUpdater.updates.size(), 2); // the registered route has expired
@@ -436,7 +440,7 @@
 
   m_fibUpdater.updates.clear();
   paramsRegister.setExpirationPeriod(100_ms);
-  receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", paramsRegister));
+  receiveInterest(makeControlCommandRequest(REG_REQUEST, paramsRegister));
 
   advanceClocks(55_ms);
   BOOST_REQUIRE_EQUAL(m_fibUpdater.updates.size(), 1); // the registered route is still active
@@ -451,7 +455,7 @@
     prefix.append("A");
   }
   auto params = makeRegisterParameters(prefix, 2899);
-  auto command = makeControlCommandRequest("/localhost/nfd/rib/register", params);
+  auto command = makeControlCommandRequest(REG_REQUEST, params);
 
   receiveInterest(command);
 
@@ -473,13 +477,13 @@
   const uint64_t announceFaceId = 1234;
 
   ndn::PrefixAnnouncement pa = signPrefixAnn(makePrefixAnn("/test-prefix-announce", 10_s), m_keyChain);
-  auto commandAnnounce = makeControlCommandRequest("/localhost/nfd/rib/announce", pa);
+  auto commandAnnounce = makeControlCommandRequest(ANNOUNCE_REQUEST, pa);
   commandAnnounce.setTag(make_shared<lp::IncomingFaceIdTag>(announceFaceId));
 
   auto paramsUnregister = makeUnregisterParameters("/test-prefix-announce");
   paramsUnregister.setOrigin(ndn::nfd::ROUTE_ORIGIN_PREFIXANN);
   BOOST_CHECK_EQUAL(paramsUnregister.getFaceId(), 0);
-  auto commandUnregister = makeControlCommandRequest("/localhost/nfd/rib/unregister", paramsUnregister);
+  auto commandUnregister = makeControlCommandRequest(UNREG_REQUEST, paramsUnregister);
   commandUnregister.setTag(make_shared<lp::IncomingFaceIdTag>(announceFaceId)); // same incoming face
 
   receiveInterest(commandAnnounce);
@@ -513,12 +517,12 @@
   const uint64_t announceFaceId = 1234;
 
   ndn::PrefixAnnouncement pa = signPrefixAnn(makePrefixAnn("/test-prefix-announce", 10_s), m_keyChain);
-  auto commandAnnounce = makeControlCommandRequest("/localhost/nfd/rib/announce", pa);
+  auto commandAnnounce = makeControlCommandRequest(ANNOUNCE_REQUEST, pa);
   commandAnnounce.setTag(make_shared<lp::IncomingFaceIdTag>(announceFaceId));
 
   auto paramsUnregister = makeUnregisterParameters("/test-prefix-announce", announceFaceId);
   paramsUnregister.setOrigin(ndn::nfd::ROUTE_ORIGIN_PREFIXANN);
-  auto commandUnregister = makeControlCommandRequest("/localhost/nfd/rib/unregister", paramsUnregister);
+  auto commandUnregister = makeControlCommandRequest(UNREG_REQUEST, paramsUnregister);
   commandUnregister.setTag(make_shared<lp::IncomingFaceIdTag>(999)); // unregister from different face
 
   receiveInterest(commandAnnounce);
@@ -553,7 +557,7 @@
     prefix.append("A");
   }
   ndn::PrefixAnnouncement pa = signPrefixAnn(makePrefixAnn(prefix, 10_s), m_keyChain);
-  auto command = makeControlCommandRequest("/localhost/nfd/rib/announce", pa);
+  auto command = makeControlCommandRequest(ANNOUNCE_REQUEST, pa);
   command.setTag(make_shared<lp::IncomingFaceIdTag>(333));
 
   receiveInterest(command);
@@ -642,9 +646,9 @@
 {
   auto parameters1 = makeRegisterParameters("/test-remove-invalid-faces-1");
   auto parameters2 = makeRegisterParameters("/test-remove-invalid-faces-2");
-  receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", parameters1.setFaceId(1)));
-  receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", parameters1.setFaceId(2)));
-  receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", parameters2.setFaceId(2)));
+  receiveInterest(makeControlCommandRequest(REG_REQUEST, parameters1.setFaceId(1)));
+  receiveInterest(makeControlCommandRequest(REG_REQUEST, parameters1.setFaceId(2)));
+  receiveInterest(makeControlCommandRequest(REG_REQUEST, parameters2.setFaceId(2)));
   BOOST_REQUIRE_EQUAL(m_rib.size(), 3);
 
   ndn::nfd::FaceStatus status;
@@ -668,8 +672,8 @@
 {
   auto parameters1 = makeRegisterParameters("/test-face-event-notification-1", 1);
   auto parameters2 = makeRegisterParameters("/test-face-event-notification-2", 1);
-  receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", parameters1));
-  receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", parameters2));
+  receiveInterest(makeControlCommandRequest(REG_REQUEST, parameters1));
+  receiveInterest(makeControlCommandRequest(REG_REQUEST, parameters2));
   BOOST_REQUIRE_EQUAL(m_rib.size(), 2);
 
   auto makeNotification = [] (ndn::nfd::FaceEventKind kind, uint64_t faceId) {
diff --git a/tests/daemon/mgmt/strategy-choice-manager.t.cpp b/tests/daemon/mgmt/strategy-choice-manager.t.cpp
index 3553cfd..6cd2e70 100644
--- a/tests/daemon/mgmt/strategy-choice-manager.t.cpp
+++ b/tests/daemon/mgmt/strategy-choice-manager.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2024,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -66,6 +66,11 @@
   }
 
 protected:
+  static inline const Name SET_SC_REQUEST = Name("/localhost/nfd")
+                                            .append(ndn::nfd::StrategyChoiceSetCommand::getName());
+  static inline const Name UNSET_SC_REQUEST = Name("/localhost/nfd")
+                                              .append(ndn::nfd::StrategyChoiceUnsetCommand::getName());
+
   StrategyChoice& sc;
   StrategyChoiceManager manager;
 
@@ -80,7 +85,7 @@
   ControlParameters reqParams;
   reqParams.setName("/A")
            .setStrategy(strategyNameP.getPrefix(-1)); // use unversioned strategy name in request
-  auto req = makeControlCommandRequest("/localhost/nfd/strategy-choice/set", reqParams);
+  auto req = makeControlCommandRequest(SET_SC_REQUEST, reqParams);
   receiveInterest(req);
 
   ControlParameters expectedParams;
@@ -104,7 +109,7 @@
   ControlParameters reqParams;
   reqParams.setName("/A")
            .setStrategy("/strategy-choice-manager-unknown");
-  auto req = makeControlCommandRequest("/localhost/nfd/strategy-choice/set", reqParams);
+  auto req = makeControlCommandRequest(SET_SC_REQUEST, reqParams);
   receiveInterest(req);
 
   ControlResponse expectedResp;
@@ -125,7 +130,7 @@
   ControlParameters reqParams;
   reqParams.setName(prefix)
            .setStrategy(strategyNameP);
-  auto req = makeControlCommandRequest("/localhost/nfd/strategy-choice/set", reqParams);
+  auto req = makeControlCommandRequest(SET_SC_REQUEST, reqParams);
   receiveInterest(req);
 
   ControlResponse expectedResp;
@@ -145,7 +150,7 @@
 
   ControlParameters reqParams;
   reqParams.setName("/A");
-  auto req = makeControlCommandRequest("/localhost/nfd/strategy-choice/unset", reqParams);
+  auto req = makeControlCommandRequest(UNSET_SC_REQUEST, reqParams);
   receiveInterest(req);
 
   ControlParameters expectedParams(reqParams);
@@ -163,7 +168,7 @@
 {
   ControlParameters reqParams;
   reqParams.setName("/A");
-  auto req = makeControlCommandRequest("/localhost/nfd/strategy-choice/unset", reqParams);
+  auto req = makeControlCommandRequest(UNSET_SC_REQUEST, reqParams);
   receiveInterest(req);
 
   ControlParameters expectedParams(reqParams);
@@ -181,7 +186,7 @@
 {
   ControlParameters reqParams;
   reqParams.setName("/");
-  auto req = makeControlCommandRequest("/localhost/nfd/strategy-choice/unset", reqParams);
+  auto req = makeControlCommandRequest(UNSET_SC_REQUEST, reqParams);
   receiveInterest(req);
 
   ControlResponse expectedResp;
diff --git a/tests/daemon/rib/readvertise/nfd-rib-readvertise-destination.t.cpp b/tests/daemon/rib/readvertise/nfd-rib-readvertise-destination.t.cpp
index caf38aa..2f1e27a 100644
--- a/tests/daemon/rib/readvertise/nfd-rib-readvertise-destination.t.cpp
+++ b/tests/daemon/rib/readvertise/nfd-rib-readvertise-destination.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2024,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -29,6 +29,7 @@
 #include "tests/key-chain-fixture.hpp"
 #include "tests/daemon/global-io-fixture.hpp"
 
+#include <ndn-cxx/mgmt/nfd/control-command.hpp>
 #include <ndn-cxx/security/signing-info.hpp>
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
@@ -40,7 +41,7 @@
 
 class NfdRibReadvertiseDestinationFixture : public GlobalIoTimeFixture, public KeyChainFixture
 {
-public:
+protected:
   NfdRibReadvertiseDestinationFixture()
     : nSuccessCallbacks(0)
     , nFailureCallbacks(0)
@@ -57,6 +58,11 @@
   uint32_t nFailureCallbacks;
 
 protected:
+  static inline const Name RIB_REGISTER_COMMAND_PREFIX = Name("/localhost/nlsr")
+                                                         .append(ndn::nfd::RibRegisterCommand::getName());
+  static inline const Name RIB_UNREGISTER_COMMAND_PREFIX = Name("/localhost/nlsr")
+                                                           .append(ndn::nfd::RibUnregisterCommand::getName());
+
   ndn::DummyClientFace face;
   ndn::nfd::Controller controller;
   Rib rib;
@@ -122,7 +128,6 @@
   Scenario scenario;
   Name prefix("/ndn/memphis/test");
   ReadvertisedRoute rr(prefix);
-  const Name RIB_REGISTER_COMMAND_PREFIX("/localhost/nlsr/rib/register");
 
   dest.advertise(rr, successCallback, failureCallback);
   advanceClocks(100_ms);
@@ -200,7 +205,6 @@
   Scenario scenario;
   Name prefix("/ndn/memphis/test");
   ReadvertisedRoute rr(prefix);
-  const Name RIB_UNREGISTER_COMMAND_PREFIX("/localhost/nlsr/rib/unregister");
 
   dest.withdraw(rr, successCallback, failureCallback);
   this->advanceClocks(10_ms);
