core: allow ManagerBase be inherited by RibManager
Change-Id: Ie2613e32460fb109a9f9302a0cc4b4b3400ba9f4
refs: #2857
diff --git a/daemon/mgmt/manager-base.cpp b/core/manager-base.cpp
similarity index 82%
rename from daemon/mgmt/manager-base.cpp
rename to core/manager-base.cpp
index 418c3d6..bad25b9 100644
--- a/daemon/mgmt/manager-base.cpp
+++ b/core/manager-base.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -31,13 +31,10 @@
using ndn::mgmt::Authorization;
ManagerBase::ManagerBase(Dispatcher& dispatcher,
- CommandValidator& validator,
const std::string& module)
: m_dispatcher(dispatcher)
- , m_validator(validator)
, m_mgmtModuleName(module)
{
- m_validator.addSupportedPrivilege(module);
}
void
@@ -56,20 +53,6 @@
}
void
-ManagerBase::authorize(const Name& prefix, const Interest& interest,
- const ndn::mgmt::ControlParameters* params,
- ndn::mgmt::AcceptContinuation accept,
- ndn::mgmt::RejectContinuation reject)
-{
- BOOST_ASSERT(params != nullptr);
- BOOST_ASSERT(typeid(*params) == typeid(ndn::nfd::ControlParameters));
-
- m_validator.validate(interest,
- bind(&ManagerBase::extractRequester, this, interest, accept),
- bind([&] { reject(ndn::mgmt::RejectReply::STATUS403); }));
-}
-
-void
ManagerBase::extractRequester(const Interest& interest,
ndn::mgmt::AcceptContinuation accept)
{
diff --git a/daemon/mgmt/manager-base.hpp b/core/manager-base.hpp
similarity index 92%
rename from daemon/mgmt/manager-base.hpp
rename to core/manager-base.hpp
index 988fff1..31de566 100644
--- a/daemon/mgmt/manager-base.hpp
+++ b/core/manager-base.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -23,11 +23,10 @@
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef NFD_DAEMON_MGMT_MANAGER_BASE_HPP
-#define NFD_DAEMON_MGMT_MANAGER_BASE_HPP
+#ifndef NFD_CORE_MANAGER_BASE_HPP
+#define NFD_CORE_MANAGER_BASE_HPP
#include "common.hpp"
-#include "mgmt/command-validator.hpp"
#include <ndn-cxx/mgmt/dispatcher.hpp>
#include <ndn-cxx/management/nfd-control-command.hpp>
@@ -43,10 +42,10 @@
using ndn::nfd::ControlParameters;
/**
- * @brief a collection of common functions shared by all NFD managers,
+ * @brief a collection of common functions shared by all NFD managers and RIB manager,
* such as communicating with the dispatcher and command validator.
*/
-class ManagerBase : public noncopyable
+class ManagerBase : noncopyable
{
public:
class Error : public std::runtime_error
@@ -61,7 +60,6 @@
public:
ManagerBase(Dispatcher& dispatcher,
- CommandValidator& validator,
const std::string& module);
PUBLIC_WITH_TESTS_ELSE_PROTECTED: // registrations to the dispatcher
@@ -84,7 +82,7 @@
ndn::mgmt::PostNotification
registerNotificationStream(const std::string& verb);
-PUBLIC_WITH_TESTS_ELSE_PRIVATE: // command validation
+PUBLIC_WITH_TESTS_ELSE_PROTECTED: // command validation
/**
* @brief validate a request for ControlCommand.
*
@@ -99,11 +97,11 @@
* @param accept callback of successful validation, take the requester string as a argument
* @param reject callback of failure in validation, take the action code as a argument
*/
- void
+ virtual void
authorize(const Name& prefix, const Interest& interest,
const ndn::mgmt::ControlParameters* params,
ndn::mgmt::AcceptContinuation accept,
- ndn::mgmt::RejectContinuation reject);
+ ndn::mgmt::RejectContinuation reject) = 0;
/**
* @brief extract a requester from a ControlCommand request
@@ -151,7 +149,6 @@
private:
Dispatcher& m_dispatcher;
- CommandValidator& m_validator;
std::string m_mgmtModuleName;
};
@@ -177,4 +174,4 @@
} // namespace nfd
-#endif // NFD_DAEMON_MGMT_MANAGER_BASE_HPP
+#endif // NFD_CORE_MANAGER_BASE_HPP
diff --git a/daemon/mgmt/face-manager.cpp b/daemon/mgmt/face-manager.cpp
index 0c94fea..b8506ac 100644
--- a/daemon/mgmt/face-manager.cpp
+++ b/daemon/mgmt/face-manager.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -55,7 +55,7 @@
FaceManager::FaceManager(FaceTable& faceTable,
Dispatcher& dispatcher,
CommandValidator& validator)
- : ManagerBase(dispatcher, validator, "faces")
+ : NfdManagerBase(dispatcher, validator, "faces")
, m_faceTable(faceTable)
{
registerCommandHandler<ndn::nfd::FaceCreateCommand>("create",
diff --git a/daemon/mgmt/face-manager.hpp b/daemon/mgmt/face-manager.hpp
index fda4fbe..b97a629 100644
--- a/daemon/mgmt/face-manager.hpp
+++ b/daemon/mgmt/face-manager.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -26,7 +26,7 @@
#ifndef NFD_DAEMON_MGMT_FACE_MANAGER_HPP
#define NFD_DAEMON_MGMT_FACE_MANAGER_HPP
-#include "manager-base.hpp"
+#include "nfd-manager-base.hpp"
#include <ndn-cxx/management/nfd-face-status.hpp>
#include <ndn-cxx/management/nfd-face-query-filter.hpp>
#include "face/face.hpp"
@@ -41,7 +41,7 @@
* @brief implement the Face Management of NFD Management Protocol.
* @sa http://redmine.named-data.net/projects/nfd/wiki/FaceMgmt
*/
-class FaceManager : public ManagerBase
+class FaceManager : public NfdManagerBase
{
public:
FaceManager(FaceTable& faceTable,
diff --git a/daemon/mgmt/fib-manager.cpp b/daemon/mgmt/fib-manager.cpp
index 9882033..09e184a 100644
--- a/daemon/mgmt/fib-manager.cpp
+++ b/daemon/mgmt/fib-manager.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -34,7 +34,7 @@
function<shared_ptr<Face>(FaceId)> getFace,
Dispatcher& dispatcher,
CommandValidator& validator)
- : ManagerBase(dispatcher, validator, "fib")
+ : NfdManagerBase(dispatcher, validator, "fib")
, m_fib(fib)
, m_getFace(getFace)
{
@@ -151,4 +151,4 @@
}
}
-} // namespace
+} // namespace nfd
diff --git a/daemon/mgmt/fib-manager.hpp b/daemon/mgmt/fib-manager.hpp
index 7c66138..94300cb 100644
--- a/daemon/mgmt/fib-manager.hpp
+++ b/daemon/mgmt/fib-manager.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -26,7 +26,7 @@
#ifndef NFD_DAEMON_MGMT_FIB_MANAGER_HPP
#define NFD_DAEMON_MGMT_FIB_MANAGER_HPP
-#include "manager-base.hpp"
+#include "nfd-manager-base.hpp"
#include "core/logger.hpp"
#include "table/fib.hpp"
#include "fw/forwarder.hpp"
@@ -37,7 +37,7 @@
* @brief implement the FIB Management of NFD Management Protocol.
* @sa http://redmine.named-data.net/projects/nfd/wiki/FibMgmt
*/
-class FibManager : public ManagerBase
+class FibManager : public NfdManagerBase
{
public:
/**
diff --git a/daemon/mgmt/nfd-manager-base.cpp b/daemon/mgmt/nfd-manager-base.cpp
new file mode 100644
index 0000000..c0ecaae
--- /dev/null
+++ b/daemon/mgmt/nfd-manager-base.cpp
@@ -0,0 +1,53 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2016, Regents of the University of California,
+ * Arizona Board of Regents,
+ * Colorado State University,
+ * University Pierre & Marie Curie, Sorbonne University,
+ * Washington University in St. Louis,
+ * Beijing Institute of Technology,
+ * The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "nfd-manager-base.hpp"
+
+namespace nfd {
+
+NfdManagerBase::NfdManagerBase(Dispatcher& dispatcher,
+ CommandValidator& validator,
+ const std::string& module)
+ : ManagerBase(dispatcher, module)
+ , m_validator(validator)
+{
+ m_validator.addSupportedPrivilege(module);
+}
+
+void
+NfdManagerBase::authorize(const Name& prefix, const Interest& interest,
+ const ndn::mgmt::ControlParameters* params,
+ ndn::mgmt::AcceptContinuation accept,
+ ndn::mgmt::RejectContinuation reject)
+{
+ BOOST_ASSERT(params != nullptr);
+ BOOST_ASSERT(typeid(*params) == typeid(ndn::nfd::ControlParameters));
+
+ m_validator.validate(interest,
+ bind([&interest, this, accept] { extractRequester(interest, accept); }),
+ bind([reject] { reject(ndn::mgmt::RejectReply::STATUS403); }));
+}
+
+} // namespace nfd
diff --git a/daemon/mgmt/nfd-manager-base.hpp b/daemon/mgmt/nfd-manager-base.hpp
new file mode 100644
index 0000000..4104fbe
--- /dev/null
+++ b/daemon/mgmt/nfd-manager-base.hpp
@@ -0,0 +1,81 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2016, Regents of the University of California,
+ * Arizona Board of Regents,
+ * Colorado State University,
+ * University Pierre & Marie Curie, Sorbonne University,
+ * Washington University in St. Louis,
+ * Beijing Institute of Technology,
+ * The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NFD_DAEMON_MGMT_NFD_MANAGER_BASE_HPP
+#define NFD_DAEMON_MGMT_NFD_MANAGER_BASE_HPP
+
+#include "common.hpp"
+#include "command-validator.hpp"
+#include "core/manager-base.hpp"
+
+#include <ndn-cxx/mgmt/dispatcher.hpp>
+#include <ndn-cxx/management/nfd-control-command.hpp>
+#include <ndn-cxx/management/nfd-control-response.hpp>
+#include <ndn-cxx/management/nfd-control-parameters.hpp>
+
+namespace nfd {
+
+using ndn::mgmt::Dispatcher;
+using ndn::nfd::ControlParameters;
+
+/**
+ * @brief a collection of common functions shared by all NFD managers,
+ * such as communicating with the dispatcher and command validator.
+ */
+class NfdManagerBase : public ManagerBase
+{
+public:
+ NfdManagerBase(Dispatcher& dispatcher,
+ CommandValidator& validator,
+ const std::string& module);
+
+PUBLIC_WITH_TESTS_ELSE_PRIVATE: // command validation
+ /**
+ * @brief validate a request for ControlCommand.
+ *
+ * This is called by the dispatcher.
+ *
+ * @pre params != null
+ * @pre typeid(*params) == typeid(ndn::nfd::ControlParameters)
+ *
+ * @param prefix the top prefix
+ * @param interest a request for ControlCommand
+ * @param params the parameters for ControlCommand
+ * @param accept callback of successful validation, take the requester string as a argument
+ * @param reject callback of failure in validation, take the action code as a argument
+ */
+ virtual void
+ authorize(const Name& prefix, const Interest& interest,
+ const ndn::mgmt::ControlParameters* params,
+ ndn::mgmt::AcceptContinuation accept,
+ ndn::mgmt::RejectContinuation reject) DECL_OVERRIDE;
+
+private:
+ CommandValidator& m_validator;
+};
+
+} // namespace nfd
+
+#endif // NFD_DAEMON_MGMT_NFD_MANAGER_BASE_HPP
diff --git a/daemon/mgmt/strategy-choice-manager.cpp b/daemon/mgmt/strategy-choice-manager.cpp
index fba7f4c..a28e237 100644
--- a/daemon/mgmt/strategy-choice-manager.cpp
+++ b/daemon/mgmt/strategy-choice-manager.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -34,7 +34,7 @@
StrategyChoiceManager::StrategyChoiceManager(StrategyChoice& strategyChoice,
Dispatcher& dispatcher,
CommandValidator& validator)
- : ManagerBase(dispatcher, validator, "strategy-choice")
+ : NfdManagerBase(dispatcher, validator, "strategy-choice")
, m_strategyChoice(strategyChoice)
{
registerCommandHandler<ndn::nfd::StrategyChoiceSetCommand>("set",
@@ -96,4 +96,4 @@
context.end();
}
-} // namespace
+} // namespace nfd
diff --git a/daemon/mgmt/strategy-choice-manager.hpp b/daemon/mgmt/strategy-choice-manager.hpp
index 74c54db..eff3418 100644
--- a/daemon/mgmt/strategy-choice-manager.hpp
+++ b/daemon/mgmt/strategy-choice-manager.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -26,7 +26,7 @@
#ifndef NFD_DAEMON_MGMT_STRATEGY_CHOICE_MANAGER_HPP
#define NFD_DAEMON_MGMT_STRATEGY_CHOICE_MANAGER_HPP
-#include "manager-base.hpp"
+#include "nfd-manager-base.hpp"
namespace nfd {
@@ -36,7 +36,7 @@
* @brief implement the Strategy Choice Management of NFD Management Protocol.
* @sa http://redmine.named-data.net/projects/nfd/wiki/StrategyChoice
*/
-class StrategyChoiceManager : public ManagerBase
+class StrategyChoiceManager : public NfdManagerBase
{
public:
StrategyChoiceManager(StrategyChoice& strategyChoice,
diff --git a/tests/daemon/mgmt/manager-base.t.cpp b/tests/core/manager-base.t.cpp
similarity index 73%
rename from tests/daemon/mgmt/manager-base.t.cpp
rename to tests/core/manager-base.t.cpp
index ff2f0d4..7ebe95e 100644
--- a/tests/daemon/mgmt/manager-base.t.cpp
+++ b/tests/core/manager-base.t.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -23,7 +23,7 @@
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "mgmt/manager-base.hpp"
+#include "core/manager-base.hpp"
#include "manager-common-fixture.hpp"
#include <ndn-cxx/security/key-chain.hpp>
@@ -51,26 +51,37 @@
}
};
+class ManagerTester : public ManagerBase
+{
+public:
+ ManagerTester(Dispatcher& dispatcher,
+ const std::string& module)
+ : ManagerBase(dispatcher, module) {
+ }
+
+ virtual void
+ authorize(const Name& prefix, const Interest& interest,
+ const ndn::mgmt::ControlParameters* params,
+ ndn::mgmt::AcceptContinuation accept,
+ ndn::mgmt::RejectContinuation reject) {
+ extractRequester(interest, accept);
+ }
+};
+
class ManagerBaseFixture : public ManagerCommonFixture
{
public:
ManagerBaseFixture()
- : m_manager(m_dispatcher, m_validator, "test-module")
+ : m_manager(m_dispatcher, "test-module")
{
}
protected:
- ManagerBase m_manager;
+ ManagerTester m_manager;
};
-BOOST_FIXTURE_TEST_SUITE(MgmtManagerBase, ManagerBaseFixture)
-
-BOOST_AUTO_TEST_CASE(AddSupportedPrivilegeInConstructor)
-{
- BOOST_CHECK_NO_THROW(m_validator.addSupportedPrivilege("other-module"));
- // test-module has already been added by the constructor of ManagerBase
- BOOST_CHECK_THROW(m_validator.addSupportedPrivilege("test-module"), CommandValidator::Error);
-}
+BOOST_AUTO_TEST_SUITE(Core)
+BOOST_FIXTURE_TEST_SUITE(TestManagerBase, ManagerBaseFixture)
BOOST_AUTO_TEST_CASE(RegisterCommandHandler)
{
@@ -79,7 +90,7 @@
m_manager.registerCommandHandler<TestCommandVoidParameters>("test-void", handler);
m_manager.registerCommandHandler<TestCommandRequireName>("test-require-name", handler);
- setTopPrefixAndPrivilege("/localhost/nfd", "test-module");
+ setTopPrefix("/localhost/nfd");
auto testRegisterCommandHandler = [&wasCommandHandlerCalled, this] (const Name& commandName) {
wasCommandHandlerCalled = false;
@@ -99,8 +110,7 @@
auto handler = bind([&] { isStatusDatasetCalled = true; });
m_manager.registerStatusDatasetHandler("test-status", handler);
- m_dispatcher.addTopPrefix("/localhost/nfd");
- advanceClocks(time::milliseconds(1));
+ setTopPrefix("/localhost/nfd");
receiveInterest(makeInterest("/localhost/nfd/test-module/test-status"));
BOOST_CHECK(isStatusDatasetCalled);
@@ -109,8 +119,7 @@
BOOST_AUTO_TEST_CASE(RegisterNotificationStream)
{
auto post = m_manager.registerNotificationStream("test-notification");
- m_dispatcher.addTopPrefix("/localhost/nfd");
- advanceClocks(time::milliseconds(1));
+ setTopPrefix("/localhost/nfd");
post(Block("\x82\x01\x02", 3));
advanceClocks(time::milliseconds(1));
@@ -120,32 +129,6 @@
Name("/localhost/nfd/test-module/test-notification/%FE%00"));
}
-BOOST_AUTO_TEST_CASE(CommandAuthorization)
-{
- bool didAcceptCallbackFire = false;
- bool didRejectCallbackFire = false;
- auto testAuthorization = [&] {
- didAcceptCallbackFire = false;
- didRejectCallbackFire = false;
-
- auto command = makeControlCommandRequest("/localhost/nfd/test-module/test-verb",
- ControlParameters());
- ndn::nfd::ControlParameters params;
- m_manager.authorize("/top/prefix", *command, ¶ms,
- bind([&] { didAcceptCallbackFire = true; }),
- bind([&] { didRejectCallbackFire = true; }));
- };
-
- testAuthorization();
- BOOST_CHECK(!didAcceptCallbackFire);
- BOOST_CHECK(didRejectCallbackFire);
-
- m_validator.addInterestRule("^<localhost><nfd><test-module>", *m_certificate);
- testAuthorization();
- BOOST_CHECK(didAcceptCallbackFire);
- BOOST_CHECK(!didRejectCallbackFire);
-}
-
BOOST_AUTO_TEST_CASE(ExtractRequester)
{
std::string requesterName;
@@ -182,7 +165,8 @@
BOOST_CHECK_EQUAL(generatedRelPrefix, PartialName("/test-module/test-verb"));
}
-BOOST_AUTO_TEST_SUITE_END()
+BOOST_AUTO_TEST_SUITE_END() // TestManagerBase
+BOOST_AUTO_TEST_SUITE_END() // Core
} // namespace tests
} // namespace nfd
diff --git a/tests/daemon/mgmt/face-manager-process-config.t.cpp b/tests/daemon/mgmt/face-manager-process-config.t.cpp
index b5a7312..0b1a156 100644
--- a/tests/daemon/mgmt/face-manager-process-config.t.cpp
+++ b/tests/daemon/mgmt/face-manager-process-config.t.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -30,7 +30,7 @@
#include "face/ethernet-factory.hpp"
#endif // HAVE_LIBPCAP
-#include "manager-common-fixture.hpp"
+#include "nfd-manager-common-fixture.hpp"
namespace nfd {
namespace tests {
@@ -38,7 +38,7 @@
BOOST_AUTO_TEST_SUITE(Mgmt)
BOOST_AUTO_TEST_SUITE(TestFaceManager)
-class FaceManagerProcessConfigFixture : public ManagerCommonFixture
+class FaceManagerProcessConfigFixture : public NfdManagerCommonFixture
{
public:
FaceManagerProcessConfigFixture()
diff --git a/tests/daemon/mgmt/face-manager.t.cpp b/tests/daemon/mgmt/face-manager.t.cpp
index a8f3015..d3e0b34 100644
--- a/tests/daemon/mgmt/face-manager.t.cpp
+++ b/tests/daemon/mgmt/face-manager.t.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -24,7 +24,7 @@
*/
#include "mgmt/face-manager.hpp"
-#include "manager-common-fixture.hpp"
+#include "nfd-manager-common-fixture.hpp"
#include "../face/dummy-face.hpp"
#include "face/tcp-factory.hpp"
#include "face/udp-factory.hpp"
@@ -39,15 +39,14 @@
BOOST_AUTO_TEST_SUITE(Mgmt)
-
-class FaceManagerFixture : public ManagerCommonFixture
+class FaceManagerFixture : public NfdManagerCommonFixture
{
public:
FaceManagerFixture()
: m_faceTable(m_forwarder.getFaceTable())
, m_manager(m_faceTable, m_dispatcher, m_validator)
{
- setTopPrefixAndPrivilege("/localhost/nfd", "faces");
+ setPrivilege("faces");
}
public:
diff --git a/tests/daemon/mgmt/fib-manager.t.cpp b/tests/daemon/mgmt/fib-manager.t.cpp
index 87856ed..ee56cf7 100644
--- a/tests/daemon/mgmt/fib-manager.t.cpp
+++ b/tests/daemon/mgmt/fib-manager.t.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -24,7 +24,7 @@
*/
#include "mgmt/fib-manager.hpp"
-#include "manager-common-fixture.hpp"
+#include "nfd-manager-common-fixture.hpp"
#include "table/fib-nexthop.hpp"
#include "../face/dummy-face.hpp"
#include <ndn-cxx/management/nfd-fib-entry.hpp>
@@ -32,7 +32,7 @@
namespace nfd {
namespace tests {
-class FibManagerFixture : public ManagerCommonFixture
+class FibManagerFixture : public NfdManagerCommonFixture
{
public:
FibManagerFixture()
@@ -40,7 +40,7 @@
, m_faceTable(m_forwarder.getFaceTable())
, m_manager(m_fib, bind(&Forwarder::getFace, &m_forwarder, _1), m_dispatcher, m_validator)
{
- setTopPrefixAndPrivilege("/localhost/nfd", "fib");
+ setPrivilege("fib");
}
public: // for test
diff --git a/tests/daemon/mgmt/forwarder-status-manager.t.cpp b/tests/daemon/mgmt/forwarder-status-manager.t.cpp
index cf19880..c38482b 100644
--- a/tests/daemon/mgmt/forwarder-status-manager.t.cpp
+++ b/tests/daemon/mgmt/forwarder-status-manager.t.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -26,21 +26,21 @@
#include "mgmt/forwarder-status-manager.hpp"
#include "version.hpp"
-#include "manager-common-fixture.hpp"
+#include "nfd-manager-common-fixture.hpp"
namespace nfd {
namespace tests {
BOOST_AUTO_TEST_SUITE(Mgmt)
-class ForwarderStatusManagerFixture : public ManagerCommonFixture
+class ForwarderStatusManagerFixture : public NfdManagerCommonFixture
{
protected:
ForwarderStatusManagerFixture()
: manager(m_forwarder, m_dispatcher)
, startTime(time::system_clock::now())
{
- this->setTopPrefixAndPrivilege("/localhost/nfd", "status");
+ setPrivilege("status");
}
protected:
diff --git a/tests/daemon/mgmt/nfd-manager-base.t.cpp b/tests/daemon/mgmt/nfd-manager-base.t.cpp
new file mode 100644
index 0000000..410f41c
--- /dev/null
+++ b/tests/daemon/mgmt/nfd-manager-base.t.cpp
@@ -0,0 +1,88 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2016, Regents of the University of California,
+ * Arizona Board of Regents,
+ * Colorado State University,
+ * University Pierre & Marie Curie, Sorbonne University,
+ * Washington University in St. Louis,
+ * Beijing Institute of Technology,
+ * The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "mgmt/nfd-manager-base.hpp"
+#include "manager-common-fixture.hpp"
+
+#include <ndn-cxx/security/key-chain.hpp>
+#include <ndn-cxx/management/nfd-control-command.hpp>
+
+namespace nfd {
+namespace tests {
+
+class NfdManagerBaseFixture : public ManagerCommonFixture
+{
+public:
+ NfdManagerBaseFixture()
+ : m_manager(m_dispatcher, m_validator, "test-module")
+ {
+ }
+
+protected:
+ CommandValidator m_validator;
+ NfdManagerBase m_manager;
+};
+
+BOOST_AUTO_TEST_SUITE(Mgmt)
+BOOST_FIXTURE_TEST_SUITE(TestNfdManagerBase, NfdManagerBaseFixture)
+
+BOOST_AUTO_TEST_CASE(AddSupportedPrivilegeInConstructor)
+{
+ BOOST_CHECK_NO_THROW(m_validator.addSupportedPrivilege("other-module"));
+ // test-module has already been added by the constructor of ManagerBase
+ BOOST_CHECK_THROW(m_validator.addSupportedPrivilege("test-module"), CommandValidator::Error);
+}
+
+BOOST_AUTO_TEST_CASE(CommandAuthorization)
+{
+ bool didAcceptCallbackFire = false;
+ bool didRejectCallbackFire = false;
+ auto testAuthorization = [&] {
+ didAcceptCallbackFire = false;
+ didRejectCallbackFire = false;
+
+ auto command = makeControlCommandRequest("/localhost/nfd/test-module/test-verb",
+ ControlParameters());
+ ndn::nfd::ControlParameters params;
+ m_manager.authorize("/top/prefix", *command, ¶ms,
+ bind([&] { didAcceptCallbackFire = true; }),
+ bind([&] { didRejectCallbackFire = true; }));
+ };
+
+ testAuthorization();
+ BOOST_CHECK(!didAcceptCallbackFire);
+ BOOST_CHECK(didRejectCallbackFire);
+
+ m_validator.addInterestRule("^<localhost><nfd><test-module>", *m_certificate);
+ testAuthorization();
+ BOOST_CHECK(didAcceptCallbackFire);
+ BOOST_CHECK(!didRejectCallbackFire);
+}
+
+BOOST_AUTO_TEST_SUITE_END() // TestNfdManagerBase
+BOOST_AUTO_TEST_SUITE_END() // Mgmt
+
+} // namespace tests
+} // namespace nfd
diff --git a/tests/daemon/mgmt/nfd-manager-common-fixture.hpp b/tests/daemon/mgmt/nfd-manager-common-fixture.hpp
new file mode 100644
index 0000000..ba06839
--- /dev/null
+++ b/tests/daemon/mgmt/nfd-manager-common-fixture.hpp
@@ -0,0 +1,76 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014-2016, Regents of the University of California,
+ * Arizona Board of Regents,
+ * Colorado State University,
+ * University Pierre & Marie Curie, Sorbonne University,
+ * Washington University in St. Louis,
+ * Beijing Institute of Technology,
+ * The University of Memphis.
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NFD_TESTS_NFD_MGMT_NFD_MANAGER_COMMON_HPP
+#define NFD_TESTS_NFD_MGMT_NFD_MANAGER_COMMON_HPP
+
+#include "manager-common-fixture.hpp"
+#include "fw/forwarder.hpp"
+#include "mgmt/command-validator.hpp"
+
+namespace nfd {
+namespace tests {
+
+/**
+ * @brief a base class shared by all NFD manager's testing fixtures.
+ */
+class NfdManagerCommonFixture : public ManagerCommonFixture
+{
+public:
+ NfdManagerCommonFixture()
+ : m_topPrefix("/localhost/nfd")
+ {
+ }
+
+ /**
+ * @brief configure an interest rule for the module.
+ *
+ * set top prefix before set privilege.
+ *
+ * @param privilege the module name
+ */
+ void
+ setPrivilege(const std::string& privilege)
+ {
+ setTopPrefix(m_topPrefix);
+
+ std::string regex("^");
+ for (auto component : m_topPrefix) {
+ regex += "<" + component.toUri() + ">";
+ }
+
+ m_validator.addInterestRule(regex + "<" + privilege + ">", *m_certificate);
+ }
+
+protected:
+ Forwarder m_forwarder;
+ CommandValidator m_validator;
+ Name m_topPrefix;
+};
+
+} // namespace tests
+} // namespace nfd
+
+#endif // NFD_TESTS_NFD_MGMT_NFD_MANAGER_COMMON_HPP
diff --git a/tests/daemon/mgmt/strategy-choice-manager.t.cpp b/tests/daemon/mgmt/strategy-choice-manager.t.cpp
index 9e7a8c2..90789a0 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-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -24,7 +24,7 @@
*/
#include "mgmt/strategy-choice-manager.hpp"
-#include "manager-common-fixture.hpp"
+#include "nfd-manager-common-fixture.hpp"
#include "face/face.hpp"
#include "face/internal-face.hpp"
@@ -40,14 +40,14 @@
namespace nfd {
namespace tests {
-class StrategyChoiceManagerFixture : public ManagerCommonFixture
+class StrategyChoiceManagerFixture : public NfdManagerCommonFixture
{
public:
StrategyChoiceManagerFixture()
: m_strategyChoice(m_forwarder.getStrategyChoice())
, m_manager(m_strategyChoice, m_dispatcher, m_validator)
{
- setTopPrefixAndPrivilege("/localhost/nfd", "strategy-choice");
+ setPrivilege("strategy-choice");
}
public:
diff --git a/tests/daemon/mgmt/manager-common-fixture.cpp b/tests/manager-common-fixture.cpp
similarity index 89%
rename from tests/daemon/mgmt/manager-common-fixture.cpp
rename to tests/manager-common-fixture.cpp
index 8638d66..cdf818d 100644
--- a/tests/daemon/mgmt/manager-common-fixture.cpp
+++ b/tests/manager-common-fixture.cpp
@@ -38,17 +38,10 @@
}
void
-ManagerCommonFixture::setTopPrefixAndPrivilege(const Name& topPrefix,
- const std::string& privilege)
+ManagerCommonFixture::setTopPrefix(const Name& topPrefix)
{
m_dispatcher.addTopPrefix(topPrefix); // such that all filters are added
advanceClocks(time::milliseconds(1));
-
- std::string regex("^");
- for (auto component : topPrefix) {
- regex += "<" + component.toUri() + ">";
- }
- m_validator.addInterestRule(regex + "<" + privilege + ">", *m_certificate);
}
shared_ptr<Interest>
@@ -136,17 +129,14 @@
ManagerCommonFixture::concatenateResponses(size_t startIndex, size_t nResponses)
{
auto isFinalSegment = [] (const Data& data) -> bool {
- const auto& segment = data.getName().at(-1);
- if (segment.isSegment() == false) {
- return true;
- }
- return segment == data.getFinalBlockId();
+ const name::Component& lastComponent = data.getName().at(-1);
+ return !lastComponent.isSegment() || lastComponent == data.getFinalBlockId();
};
- while (isFinalSegment(m_responses.back()) == false) {
- auto name = m_responses.back().getName();
- auto prefix = name.getPrefix(-1);
- auto segmentNo = name.at(-1).toSegment() + 1;
+ while (!isFinalSegment(m_responses.back())) {
+ const Name& name = m_responses.back().getName();
+ Name prefix = name.getPrefix(-1);
+ uint64_t segmentNo = name.at(-1).toSegment() + 1;
// request for the next segment
receiveInterest(makeInterest(prefix.appendSegment(segmentNo)));
}
diff --git a/tests/daemon/mgmt/manager-common-fixture.hpp b/tests/manager-common-fixture.hpp
similarity index 90%
rename from tests/daemon/mgmt/manager-common-fixture.hpp
rename to tests/manager-common-fixture.hpp
index 539d56a..aaa06f8 100644
--- a/tests/daemon/mgmt/manager-common-fixture.hpp
+++ b/tests/manager-common-fixture.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2015, Regents of the University of California,
+ * Copyright (c) 2014-2016, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -23,13 +23,12 @@
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef NFD_TESTS_NFD_MGMT_MANAGER_COMMON_HPP
-#define NFD_TESTS_NFD_MGMT_MANAGER_COMMON_HPP
+#ifndef NFD_TESTS_MANAGER_COMMON_FIXTURE_HPP
+#define NFD_TESTS_MANAGER_COMMON_FIXTURE_HPP
#include "tests/test-common.hpp"
#include "tests/identity-management-fixture.hpp"
-#include "mgmt/manager-base.hpp"
-#include "fw/forwarder.hpp"
+#include "core/manager-base.hpp"
#include <ndn-cxx/mgmt/dispatcher.hpp>
#include <ndn-cxx/util/dummy-client-face.hpp>
@@ -47,15 +46,14 @@
ManagerCommonFixture();
/**
- * @brief set topPrefix to the dispatcher and configure an interest rule for the module.
+ * @brief set topPrefix to the dispatcher.
*
* after setting @param topPrefix, call advanceClocks to ensure all added filters take effects.
*
* @param topPrefix top prefix for the dispatcher
- * @param privilege the module name
*/
void
- setTopPrefixAndPrivilege(const Name& topPrefix, const std::string& privilege);
+ setTopPrefix(const Name& topPrefix);
public: // test
typedef std::function<void(shared_ptr<Interest> interest)> InterestHandler;
@@ -147,8 +145,6 @@
protected:
shared_ptr<ndn::util::DummyClientFace> m_face;
ndn::mgmt::Dispatcher m_dispatcher;
- CommandValidator m_validator;
- Forwarder m_forwarder;
std::vector<Data>& m_responses; // a reference of m_face->sentDatas
Name m_identityName; // the identity used to sign request
shared_ptr<ndn::IdentityCertificate> m_certificate; // the certificate used to sign request
@@ -160,4 +156,4 @@
} // namespace tests
} // namespace nfd
-#endif // NFD_TESTS_NFD_MGMT_MANAGER_COMMON_HPP
+#endif // NFD_TESTS_MANAGER_COMMON_FIXTURE_HPP