mgmt+core: Moving SegmentPublisher to core/ and removing KeyChain from nfd::AppFace

This change ensures interface uniformity between nfd::AppFace and
ndn::Face and allow now templated version of SegmentPublisher to be used
with either.

Change-Id: I82e29528b13b37bd2ae27ef47db30e8c87c15a38
Refs: #1749
diff --git a/core/segment-publisher.hpp b/core/segment-publisher.hpp
new file mode 100644
index 0000000..287b5ac
--- /dev/null
+++ b/core/segment-publisher.hpp
@@ -0,0 +1,120 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014,  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_CORE_SEGMENT_PUBLISHER_HPP
+#define NFD_CORE_SEGMENT_PUBLISHER_HPP
+
+#include "common.hpp"
+
+#include <ndn-cxx/encoding/encoding-buffer.hpp>
+#include <ndn-cxx/security/key-chain.hpp>
+
+namespace nfd {
+
+template <class FaceBase>
+class SegmentPublisher : noncopyable
+{
+public:
+  SegmentPublisher(FaceBase& face, const Name& prefix, ndn::KeyChain& keyChain)
+    : m_face(face)
+    , m_prefix(prefix)
+    , m_keyChain(keyChain)
+  {
+  }
+
+  virtual
+  ~SegmentPublisher()
+  {
+  }
+
+  static size_t
+  getMaxSegmentSize()
+  {
+    static const size_t MAX_SEGMENT_SIZE = ndn::MAX_NDN_PACKET_SIZE >> 1;
+    return MAX_SEGMENT_SIZE;
+  }
+
+  void
+  publish()
+  {
+    Name segmentPrefix(m_prefix);
+    segmentPrefix.appendVersion();
+
+    ndn::EncodingBuffer buffer;
+
+    generate(buffer);
+
+    const uint8_t* rawBuffer = buffer.buf();
+    const uint8_t* segmentBegin = rawBuffer;
+    const uint8_t* end = rawBuffer + buffer.size();
+
+    uint64_t segmentNo = 0;
+    while (segmentBegin < end)
+      {
+        const uint8_t* segmentEnd = segmentBegin + getMaxSegmentSize();
+        if (segmentEnd > end)
+          {
+            segmentEnd = end;
+          }
+
+        Name segmentName(segmentPrefix);
+        segmentName.appendSegment(segmentNo);
+
+        shared_ptr<Data> data(make_shared<Data>(segmentName));
+        data->setContent(segmentBegin, segmentEnd - segmentBegin);
+
+        segmentBegin = segmentEnd;
+        if (segmentBegin >= end)
+          {
+            data->setFinalBlockId(segmentName[-1]);
+          }
+
+        publishSegment(data);
+        segmentNo++;
+      }
+  }
+
+protected:
+
+  virtual size_t
+  generate(ndn::EncodingBuffer& outBuffer) =0;
+
+private:
+  void
+  publishSegment(shared_ptr<Data>& data)
+  {
+    m_keyChain.sign(*data);
+    m_face.put(*data);
+  }
+
+private:
+  FaceBase& m_face;
+  const Name m_prefix;
+  ndn::KeyChain& m_keyChain;
+};
+
+} // namespace nfd
+
+#endif // NFD_CORE_SEGMENT_PUBLISHER_HPP
diff --git a/daemon/main.cpp b/daemon/main.cpp
index 2509307..e275668 100644
--- a/daemon/main.cpp
+++ b/daemon/main.cpp
@@ -129,13 +129,21 @@
 
     m_fibManager = make_shared<FibManager>(ref(m_forwarder->getFib()),
                                            bind(&Forwarder::getFace, m_forwarder.get(), _1),
-                                           m_internalFace);
-    m_faceManager = make_shared<FaceManager>(ref(m_forwarder->getFaceTable()),
-                                             m_internalFace);
-    m_strategyChoiceManager = make_shared<StrategyChoiceManager>(
-                                ref(m_forwarder->getStrategyChoice()), m_internalFace);
+                                           m_internalFace,
+                                           ndn::ref(m_keyChain));
 
-    m_statusServer = make_shared<StatusServer>(m_internalFace, ref(*m_forwarder));
+    m_faceManager = make_shared<FaceManager>(ref(m_forwarder->getFaceTable()),
+                                             m_internalFace,
+                                             ndn::ref(m_keyChain));
+
+    m_strategyChoiceManager =
+      make_shared<StrategyChoiceManager>(ref(m_forwarder->getStrategyChoice()),
+                                         m_internalFace,
+                                         ndn::ref(m_keyChain));
+
+    m_statusServer = make_shared<StatusServer>(m_internalFace,
+                                               ref(*m_forwarder),
+                                               ndn::ref(m_keyChain));
 
     ConfigFile config((IgnoreRibAndLogSections()));
     general::setConfigFile(config);
@@ -314,6 +322,7 @@
 
   shared_ptr<std::ofstream>         m_logFile;
   std::basic_streambuf<char>*       m_originalStreamBuf;
+  ndn::KeyChain                     m_keyChain;
 };
 
 } // namespace nfd
diff --git a/daemon/mgmt/app-face.cpp b/daemon/mgmt/app-face.cpp
deleted file mode 100644
index 2c9c9b5..0000000
--- a/daemon/mgmt/app-face.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014  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
- *
- * 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 "app-face.hpp"
-
-namespace nfd {
-
-void
-AppFace::sign(Data& data)
-{
-  m_keyChain.sign(data);
-}
-
-} // namespace nfd
diff --git a/daemon/mgmt/app-face.hpp b/daemon/mgmt/app-face.hpp
index 476fda7..13442a8 100644
--- a/daemon/mgmt/app-face.hpp
+++ b/daemon/mgmt/app-face.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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_APP_FACE_HPP
 #define NFD_DAEMON_MGMT_APP_FACE_HPP
@@ -41,16 +42,10 @@
                     OnInterest onInterest) = 0;
 
   virtual void
-  sign(Data& data);
-
-  virtual void
   put(const Data& data) = 0;
 
   virtual
   ~AppFace() { }
-
-protected:
-  ndn::KeyChain m_keyChain;
 };
 
 } // namespace nfd
diff --git a/daemon/mgmt/channel-status-publisher.cpp b/daemon/mgmt/channel-status-publisher.cpp
index c212f72..8abe2fb 100644
--- a/daemon/mgmt/channel-status-publisher.cpp
+++ b/daemon/mgmt/channel-status-publisher.cpp
@@ -37,9 +37,10 @@
 
 
 ChannelStatusPublisher::ChannelStatusPublisher(const FactoryMap& factories,
-                                               shared_ptr<AppFace> face,
-                                               const Name& prefix)
-  : SegmentPublisher(face, prefix)
+                                               AppFace& face,
+                                               const Name& prefix,
+                                               ndn::KeyChain& keyChain)
+  : SegmentPublisher(face, prefix, keyChain)
   , m_factories(factories)
 {
 
diff --git a/daemon/mgmt/channel-status-publisher.hpp b/daemon/mgmt/channel-status-publisher.hpp
index b204258..ef660a3 100644
--- a/daemon/mgmt/channel-status-publisher.hpp
+++ b/daemon/mgmt/channel-status-publisher.hpp
@@ -26,20 +26,22 @@
 #ifndef NFD_DAEMON_MGMT_CHANNEL_STATUS_PUBLISHER_HPP
 #define NFD_DAEMON_MGMT_CHANNEL_STATUS_PUBLISHER_HPP
 
-#include "mgmt/segment-publisher.hpp"
+#include "core/segment-publisher.hpp"
+#include "mgmt/app-face.hpp"
 
 namespace nfd {
 
 class ProtocolFactory;
 
-class ChannelStatusPublisher : public SegmentPublisher
+class ChannelStatusPublisher : public SegmentPublisher<AppFace>
 {
 public:
   typedef std::map< std::string/*protocol*/, shared_ptr<ProtocolFactory> > FactoryMap;
 
   ChannelStatusPublisher(const FactoryMap& factories,
-                         shared_ptr<AppFace> face,
-                         const Name& prefix);
+                         AppFace& face,
+                         const Name& prefix,
+                         ndn::KeyChain& keyChain);
 
   virtual
   ~ChannelStatusPublisher();
diff --git a/daemon/mgmt/face-manager.cpp b/daemon/mgmt/face-manager.cpp
index b6cca36..c8bc267 100644
--- a/daemon/mgmt/face-manager.cpp
+++ b/daemon/mgmt/face-manager.cpp
@@ -113,12 +113,13 @@
 const size_t FaceManager::CHANNELS_LIST_DATASET_NCOMPS = CHANNELS_LIST_DATASET_PREFIX.size();
 
 FaceManager::FaceManager(FaceTable& faceTable,
-                         shared_ptr<InternalFace> face)
-  : ManagerBase(face, FACE_MANAGER_PRIVILEGE)
+                         shared_ptr<InternalFace> face,
+                         ndn::KeyChain& keyChain)
+  : ManagerBase(face, FACE_MANAGER_PRIVILEGE, keyChain)
   , m_faceTable(faceTable)
-  , m_faceStatusPublisher(m_faceTable, m_face, FACES_LIST_DATASET_PREFIX)
-  , m_channelStatusPublisher(m_factories, m_face, CHANNELS_LIST_DATASET_PREFIX)
-  , m_notificationStream(m_face, FACE_EVENTS_PREFIX)
+  , m_faceStatusPublisher(m_faceTable, *m_face, FACES_LIST_DATASET_PREFIX, keyChain)
+  , m_channelStatusPublisher(m_factories, *m_face, CHANNELS_LIST_DATASET_PREFIX, keyChain)
+  , m_notificationStream(m_face, FACE_EVENTS_PREFIX, keyChain)
   , m_signedVerbDispatch(SIGNED_COMMAND_VERBS,
                          SIGNED_COMMAND_VERBS +
                          (sizeof(SIGNED_COMMAND_VERBS) / sizeof(SignedVerbAndProcessor)))
diff --git a/daemon/mgmt/face-manager.hpp b/daemon/mgmt/face-manager.hpp
index 0a5579e..ec5decf 100644
--- a/daemon/mgmt/face-manager.hpp
+++ b/daemon/mgmt/face-manager.hpp
@@ -61,7 +61,8 @@
    */
 
   FaceManager(FaceTable& faceTable,
-              shared_ptr<InternalFace> face);
+              shared_ptr<InternalFace> face,
+              ndn::KeyChain& keyChain);
 
   virtual
   ~FaceManager();
diff --git a/daemon/mgmt/face-status-publisher.cpp b/daemon/mgmt/face-status-publisher.cpp
index 62531d2..04542c8 100644
--- a/daemon/mgmt/face-status-publisher.cpp
+++ b/daemon/mgmt/face-status-publisher.cpp
@@ -34,9 +34,10 @@
 
 
 FaceStatusPublisher::FaceStatusPublisher(const FaceTable& faceTable,
-                                         shared_ptr<AppFace> face,
-                                         const Name& prefix)
-  : SegmentPublisher(face, prefix)
+                                         AppFace& face,
+                                         const Name& prefix,
+                                         ndn::KeyChain& keyChain)
+  : SegmentPublisher(face, prefix, keyChain)
   , m_faceTable(faceTable)
 {
 
diff --git a/daemon/mgmt/face-status-publisher.hpp b/daemon/mgmt/face-status-publisher.hpp
index 935426d..5091165 100644
--- a/daemon/mgmt/face-status-publisher.hpp
+++ b/daemon/mgmt/face-status-publisher.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,23 +21,25 @@
  *
  * 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_FACE_STATUS_PUBLISHER_HPP
 #define NFD_DAEMON_MGMT_FACE_STATUS_PUBLISHER_HPP
 
-#include "mgmt/segment-publisher.hpp"
+#include "core/segment-publisher.hpp"
+#include "mgmt/app-face.hpp"
 
 namespace nfd {
 
 class FaceTable;
 
-class FaceStatusPublisher : public SegmentPublisher
+class FaceStatusPublisher : public SegmentPublisher<AppFace>
 {
 public:
   FaceStatusPublisher(const FaceTable& faceTable,
-                      shared_ptr<AppFace> face,
-                      const Name& prefix);
+                      AppFace& face,
+                      const Name& prefix,
+                      ndn::KeyChain& keyChain);
 
   virtual
   ~FaceStatusPublisher();
diff --git a/daemon/mgmt/fib-enumeration-publisher.cpp b/daemon/mgmt/fib-enumeration-publisher.cpp
index 4278c98..b7bad51 100644
--- a/daemon/mgmt/fib-enumeration-publisher.cpp
+++ b/daemon/mgmt/fib-enumeration-publisher.cpp
@@ -33,9 +33,10 @@
 NFD_LOG_INIT("FibEnumerationPublisher");
 
 FibEnumerationPublisher::FibEnumerationPublisher(const Fib& fib,
-                                                 shared_ptr<AppFace> face,
-                                                 const Name& prefix)
-  : SegmentPublisher(face, prefix)
+                                                 AppFace& face,
+                                                 const Name& prefix,
+                                                 ndn::KeyChain& keyChain)
+  : SegmentPublisher(face, prefix, keyChain)
   , m_fib(fib)
 {
 }
diff --git a/daemon/mgmt/fib-enumeration-publisher.hpp b/daemon/mgmt/fib-enumeration-publisher.hpp
index 2aa7539..2ff5c31 100644
--- a/daemon/mgmt/fib-enumeration-publisher.hpp
+++ b/daemon/mgmt/fib-enumeration-publisher.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,23 +21,25 @@
  *
  * 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_FIB_ENUMERATION_PUBLISHER_HPP
 #define NFD_DAEMON_MGMT_FIB_ENUMERATION_PUBLISHER_HPP
 
-#include "mgmt/segment-publisher.hpp"
+#include "core/segment-publisher.hpp"
+#include "mgmt/app-face.hpp"
 
 namespace nfd {
 
 class Fib;
 
-class FibEnumerationPublisher : public SegmentPublisher
+class FibEnumerationPublisher : public SegmentPublisher<AppFace>
 {
 public:
   FibEnumerationPublisher(const Fib& fib,
-                          shared_ptr<AppFace> face,
-                          const Name& prefix);
+                          AppFace& face,
+                          const Name& prefix,
+                          ndn::KeyChain& keyChain);
 
   virtual
   ~FibEnumerationPublisher();
diff --git a/daemon/mgmt/fib-manager.cpp b/daemon/mgmt/fib-manager.cpp
index 98c4578..bda1681 100644
--- a/daemon/mgmt/fib-manager.cpp
+++ b/daemon/mgmt/fib-manager.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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 "fib-manager.hpp"
 
@@ -76,11 +77,12 @@
 
 FibManager::FibManager(Fib& fib,
                        function<shared_ptr<Face>(FaceId)> getFace,
-                       shared_ptr<InternalFace> face)
-  : ManagerBase(face, FIB_PRIVILEGE)
+                       shared_ptr<InternalFace> face,
+                       ndn::KeyChain& keyChain)
+  : ManagerBase(face, FIB_PRIVILEGE, keyChain)
   , m_managedFib(fib)
   , m_getFace(getFace)
-  , m_fibEnumerationPublisher(fib, face, LIST_COMMAND_PREFIX)
+  , m_fibEnumerationPublisher(fib, *face, LIST_COMMAND_PREFIX, keyChain)
   , m_signedVerbDispatch(SIGNED_COMMAND_VERBS,
                          SIGNED_COMMAND_VERBS +
                          (sizeof(SIGNED_COMMAND_VERBS) / sizeof(SignedVerbAndProcessor)))
diff --git a/daemon/mgmt/fib-manager.hpp b/daemon/mgmt/fib-manager.hpp
index 4591088..c8c21ea 100644
--- a/daemon/mgmt/fib-manager.hpp
+++ b/daemon/mgmt/fib-manager.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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_FIB_MANAGER_HPP
 #define NFD_DAEMON_MGMT_FIB_MANAGER_HPP
@@ -43,7 +44,8 @@
 
   FibManager(Fib& fib,
              function<shared_ptr<Face>(FaceId)> getFace,
-             shared_ptr<InternalFace> face);
+             shared_ptr<InternalFace> face,
+             ndn::KeyChain& keyChain);
 
   virtual
   ~FibManager();
diff --git a/daemon/mgmt/manager-base.cpp b/daemon/mgmt/manager-base.cpp
index 60f3bc9..ca1e00d 100644
--- a/daemon/mgmt/manager-base.cpp
+++ b/daemon/mgmt/manager-base.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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 "manager-base.hpp"
 #include "core/logger.hpp"
@@ -29,8 +30,10 @@
 
 NFD_LOG_INIT("ManagerBase");
 
-ManagerBase::ManagerBase(shared_ptr<InternalFace> face, const std::string& privilege)
+ManagerBase::ManagerBase(shared_ptr<InternalFace> face, const std::string& privilege,
+                         ndn::KeyChain& keyChain)
   : m_face(face)
+  , m_keyChain(keyChain)
 {
   face->getValidator().addSupportedPrivilege(privilege);
 }
@@ -92,7 +95,7 @@
   shared_ptr<Data> responseData(make_shared<Data>(name));
   responseData->setContent(encodedControl);
 
-  m_face->sign(*responseData);
+  m_keyChain.sign(*responseData);
   m_face->put(*responseData);
 }
 
diff --git a/daemon/mgmt/manager-base.hpp b/daemon/mgmt/manager-base.hpp
index 2eac9e3..15c19ee 100644
--- a/daemon/mgmt/manager-base.hpp
+++ b/daemon/mgmt/manager-base.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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_MANAGER_BASE_HPP
 #define NFD_DAEMON_MGMT_MANAGER_BASE_HPP
@@ -51,7 +52,9 @@
     Error(const std::string& what) : std::runtime_error(what) {}
   };
 
-  ManagerBase(shared_ptr<InternalFace> face, const std::string& privilege);
+  ManagerBase(shared_ptr<InternalFace> face,
+              const std::string& privilege,
+              ndn::KeyChain& keyChain);
 
   virtual
   ~ManagerBase();
@@ -112,6 +115,7 @@
 
 protected:
   shared_ptr<InternalFace> m_face;
+  ndn::KeyChain& m_keyChain;
 };
 
 inline void
diff --git a/daemon/mgmt/notification-stream.hpp b/daemon/mgmt/notification-stream.hpp
index 8d727d7..06c3b5a 100644
--- a/daemon/mgmt/notification-stream.hpp
+++ b/daemon/mgmt/notification-stream.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,8 @@
  *
  * 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_NOTIFICATION_STREAM_HPP
 #define NFD_DAEMON_MGMT_NOTIFICATION_STREAM_HPP
 
@@ -31,7 +33,7 @@
 class NotificationStream
 {
 public:
-  NotificationStream(shared_ptr<AppFace> face, const Name& prefix);
+  NotificationStream(shared_ptr<AppFace> face, const Name& prefix, ndn::KeyChain& keyChain);
 
   ~NotificationStream();
 
@@ -42,13 +44,17 @@
   shared_ptr<AppFace> m_face;
   const Name m_prefix;
   uint64_t m_sequenceNo;
+  ndn::KeyChain& m_keyChain;
 };
 
 inline
-NotificationStream::NotificationStream(shared_ptr<AppFace> face, const Name& prefix)
+NotificationStream::NotificationStream(shared_ptr<AppFace> face,
+                                       const Name& prefix,
+                                       ndn::KeyChain& keyChain)
   : m_face(face)
   , m_prefix(prefix)
   , m_sequenceNo(0)
+  , m_keyChain(keyChain)
 {
 }
 
@@ -62,7 +68,7 @@
   data->setContent(notification.wireEncode());
   data->setFreshnessPeriod(time::seconds(1));
 
-  m_face->sign(*data);
+  m_keyChain.sign(*data);
   m_face->put(*data);
 
   ++m_sequenceNo;
diff --git a/daemon/mgmt/segment-publisher.cpp b/daemon/mgmt/segment-publisher.cpp
deleted file mode 100644
index 01f3d12..0000000
--- a/daemon/mgmt/segment-publisher.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014  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
- *
- * 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 "segment-publisher.hpp"
-
-#include "core/logger.hpp"
-#include "face/face.hpp"
-
-#include <ndn-cxx/util/time.hpp>
-
-namespace nfd {
-
-NFD_LOG_INIT("SegmentPublisher");
-
-SegmentPublisher::SegmentPublisher(shared_ptr<AppFace> face,
-                                   const Name& prefix)
-  : m_face(face)
-  , m_prefix(prefix)
-{
-
-}
-
-
-SegmentPublisher::~SegmentPublisher()
-{
-
-}
-
-void
-SegmentPublisher::publish()
-{
-  Name segmentPrefix(m_prefix);
-  segmentPrefix.appendVersion();
-
-  static const size_t  MAX_SEGMENT_SIZE = MAX_NDN_PACKET_SIZE >> 1;
-
-  ndn::EncodingBuffer buffer;
-
-  generate(buffer);
-
-  const uint8_t* rawBuffer = buffer.buf();
-  const uint8_t* segmentBegin = rawBuffer;
-  const uint8_t* end = rawBuffer + buffer.size();
-
-  uint64_t segmentNo = 0;
-  while (segmentBegin < end)
-    {
-      const uint8_t* segmentEnd = segmentBegin + MAX_SEGMENT_SIZE;
-      if (segmentEnd > end)
-        {
-          segmentEnd = end;
-        }
-
-      Name segmentName(segmentPrefix);
-      segmentName.appendSegment(segmentNo);
-
-      shared_ptr<Data> data(make_shared<Data>(segmentName));
-      data->setContent(segmentBegin, segmentEnd - segmentBegin);
-
-      segmentBegin = segmentEnd;
-      if (segmentBegin >= end)
-        {
-          NFD_LOG_DEBUG("final block is " << segmentNo);
-          data->setFinalBlockId(segmentName[-1]);
-        }
-
-      NFD_LOG_DEBUG("publishing segment #" << segmentNo);
-      publishSegment(data);
-      segmentNo++;
-    }
-}
-
-void
-SegmentPublisher::publishSegment(shared_ptr<Data>& data)
-{
-  m_face->sign(*data);
-  m_face->put(*data);
-}
-
-} // namespace nfd
diff --git a/daemon/mgmt/segment-publisher.hpp b/daemon/mgmt/segment-publisher.hpp
deleted file mode 100644
index eeefda7..0000000
--- a/daemon/mgmt/segment-publisher.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014  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
- *
- * 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_SEGMENT_PUBLISHER_HPP
-#define NFD_DAEMON_MGMT_SEGMENT_PUBLISHER_HPP
-
-#include "common.hpp"
-#include "mgmt/app-face.hpp"
-
-#include <ndn-cxx/encoding/encoding-buffer.hpp>
-
-namespace nfd {
-
-class AppFace;
-
-class SegmentPublisher : noncopyable
-{
-public:
-  SegmentPublisher(shared_ptr<AppFace> face,
-                   const Name& prefix);
-
-  virtual
-  ~SegmentPublisher();
-
-  void
-  publish();
-
-protected:
-
-  virtual size_t
-  generate(ndn::EncodingBuffer& outBuffer) =0;
-
-private:
-  void
-  publishSegment(shared_ptr<Data>& data);
-
-private:
-  shared_ptr<AppFace> m_face;
-  const Name m_prefix;
-};
-
-} // namespace nfd
-
-#endif // NFD_DAEMON_MGMT_SEGMENT_PUBLISHER_HPP
diff --git a/daemon/mgmt/status-server.cpp b/daemon/mgmt/status-server.cpp
index 51faca4..8861b9a 100644
--- a/daemon/mgmt/status-server.cpp
+++ b/daemon/mgmt/status-server.cpp
@@ -32,10 +32,11 @@
 const Name StatusServer::DATASET_PREFIX = "ndn:/localhost/nfd/status";
 const time::milliseconds StatusServer::RESPONSE_FRESHNESS = time::milliseconds(5000);
 
-StatusServer::StatusServer(shared_ptr<AppFace> face, Forwarder& forwarder)
+StatusServer::StatusServer(shared_ptr<AppFace> face, Forwarder& forwarder, ndn::KeyChain& keyChain)
   : m_face(face)
   , m_forwarder(forwarder)
   , m_startTimestamp(time::system_clock::now())
+  , m_keyChain(keyChain)
 {
   m_face->setInterestFilter(DATASET_PREFIX, bind(&StatusServer::onInterest, this, _2));
 }
@@ -53,7 +54,7 @@
   shared_ptr<ndn::nfd::ForwarderStatus> status = this->collectStatus();
   data->setContent(status->wireEncode());
 
-  m_face->sign(*data);
+  m_keyChain.sign(*data);
   m_face->put(*data);
 }
 
diff --git a/daemon/mgmt/status-server.hpp b/daemon/mgmt/status-server.hpp
index c046adf..16dbf8e 100644
--- a/daemon/mgmt/status-server.hpp
+++ b/daemon/mgmt/status-server.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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_STATUS_SERVER_HPP
 #define NFD_DAEMON_MGMT_STATUS_SERVER_HPP
@@ -35,7 +36,7 @@
 class StatusServer : noncopyable
 {
 public:
-  StatusServer(shared_ptr<AppFace> face, Forwarder& forwarder);
+  StatusServer(shared_ptr<AppFace> face, Forwarder& forwarder, ndn::KeyChain& keyChain);
 
 private:
   void
@@ -51,6 +52,7 @@
   shared_ptr<AppFace> m_face;
   Forwarder& m_forwarder;
   time::system_clock::TimePoint m_startTimestamp;
+  ndn::KeyChain& m_keyChain;
 };
 
 } // namespace nfd
diff --git a/daemon/mgmt/strategy-choice-manager.cpp b/daemon/mgmt/strategy-choice-manager.cpp
index b51badc..1193900 100644
--- a/daemon/mgmt/strategy-choice-manager.cpp
+++ b/daemon/mgmt/strategy-choice-manager.cpp
@@ -1,12 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -21,7 +21,7 @@
  *
  * 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 "strategy-choice-manager.hpp"
 #include "table/strategy-choice.hpp"
@@ -46,10 +46,11 @@
 const Name StrategyChoiceManager::LIST_DATASET_PREFIX("/localhost/nfd/strategy-choice/list");
 
 StrategyChoiceManager::StrategyChoiceManager(StrategyChoice& strategyChoice,
-                                             shared_ptr<InternalFace> face)
-  : ManagerBase(face, STRATEGY_CHOICE_PRIVILEGE)
+                                             shared_ptr<InternalFace> face,
+                                             ndn::KeyChain& keyChain)
+  : ManagerBase(face, STRATEGY_CHOICE_PRIVILEGE, keyChain)
   , m_strategyChoice(strategyChoice)
-  , m_listPublisher(strategyChoice, m_face, LIST_DATASET_PREFIX)
+  , m_listPublisher(strategyChoice, *m_face, LIST_DATASET_PREFIX, keyChain)
 {
   face->setInterestFilter("/localhost/nfd/strategy-choice",
                           bind(&StrategyChoiceManager::onStrategyChoiceRequest, this, _2));
diff --git a/daemon/mgmt/strategy-choice-manager.hpp b/daemon/mgmt/strategy-choice-manager.hpp
index f3a0ed5..c2ccd53 100644
--- a/daemon/mgmt/strategy-choice-manager.hpp
+++ b/daemon/mgmt/strategy-choice-manager.hpp
@@ -1,12 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -21,7 +21,7 @@
  *
  * 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_STRATEGY_CHOICE_MANAGER_HPP
 #define NFD_DAEMON_MGMT_STRATEGY_CHOICE_MANAGER_HPP
@@ -41,7 +41,8 @@
 {
 public:
   StrategyChoiceManager(StrategyChoice& strategyChoice,
-                        shared_ptr<InternalFace> face);
+                        shared_ptr<InternalFace> face,
+                        ndn::KeyChain& keyChain);
 
   virtual
   ~StrategyChoiceManager();
diff --git a/daemon/mgmt/strategy-choice-publisher.cpp b/daemon/mgmt/strategy-choice-publisher.cpp
index add1b73..163ac3a 100644
--- a/daemon/mgmt/strategy-choice-publisher.cpp
+++ b/daemon/mgmt/strategy-choice-publisher.cpp
@@ -35,9 +35,10 @@
 
 
 StrategyChoicePublisher::StrategyChoicePublisher(const StrategyChoice& strategyChoice,
-                                                 shared_ptr<AppFace> face,
-                                                 const Name& prefix)
-  : SegmentPublisher(face, prefix)
+                                                 AppFace& face,
+                                                 const Name& prefix,
+                                                 ndn::KeyChain& keyChain)
+  : SegmentPublisher(face, prefix, keyChain)
   , m_strategyChoice(strategyChoice)
 {
 
diff --git a/daemon/mgmt/strategy-choice-publisher.hpp b/daemon/mgmt/strategy-choice-publisher.hpp
index d19a92e..8322b63 100644
--- a/daemon/mgmt/strategy-choice-publisher.hpp
+++ b/daemon/mgmt/strategy-choice-publisher.hpp
@@ -26,18 +26,20 @@
 #ifndef NFD_DAEMON_MGMT_STRATEGY_CHOICE_PUBLISHER_HPP
 #define NFD_DAEMON_MGMT_STRATEGY_CHOICE_PUBLISHER_HPP
 
-#include "mgmt/segment-publisher.hpp"
+#include "core/segment-publisher.hpp"
+#include "mgmt/app-face.hpp"
 
 namespace nfd {
 
 class StrategyChoice;
 
-class StrategyChoicePublisher : public SegmentPublisher
+class StrategyChoicePublisher : public SegmentPublisher<AppFace>
 {
 public:
   StrategyChoicePublisher(const StrategyChoice& strategyChoice,
-                          shared_ptr<AppFace> face,
-                          const Name& prefix);
+                          AppFace& face,
+                          const Name& prefix,
+                          ndn::KeyChain& keyChain);
 
   virtual
   ~StrategyChoicePublisher();
diff --git a/rib/main.cpp b/rib/main.cpp
index b123b04..bfea4f7 100644
--- a/rib/main.cpp
+++ b/rib/main.cpp
@@ -1,12 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -21,7 +21,7 @@
  *
  * 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 <getopt.h>
 
diff --git a/tests/core/segment-publisher.cpp b/tests/core/segment-publisher.cpp
new file mode 100644
index 0000000..627a7f0
--- /dev/null
+++ b/tests/core/segment-publisher.cpp
@@ -0,0 +1,168 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014,  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 "core/segment-publisher.hpp"
+
+#include "tests/test-common.hpp"
+#include "tests/dummy-face.hpp"
+
+#include <ndn-cxx/encoding/tlv.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace nfd {
+namespace tests {
+
+NFD_LOG_INIT("SegmentPublisherTest");
+
+template<size_t N=10000>
+class TestSegmentPublisher : public SegmentPublisher<DummyFace>
+{
+public:
+  TestSegmentPublisher(DummyFace& face,
+                       const Name& prefix,
+                       ndn::KeyChain& keyChain)
+    : SegmentPublisher(face, prefix, keyChain)
+    , m_totalPayloadLength(0)
+  {
+
+  }
+
+  virtual
+  ~TestSegmentPublisher()
+  {
+  }
+
+  uint16_t
+  getLimit() const
+  {
+    return N;
+  }
+
+  size_t
+  getTotalPayloadLength() const
+  {
+    return m_totalPayloadLength;
+  }
+
+protected:
+
+  virtual size_t
+  generate(ndn::EncodingBuffer& outBuffer)
+  {
+    size_t totalLength = 0;
+    for (uint64_t i = 0; i < N; i++)
+      {
+        totalLength += prependNonNegativeIntegerBlock(outBuffer, ndn::Tlv::Content, i);
+      }
+    m_totalPayloadLength += totalLength;
+    return totalLength;
+  }
+
+protected:
+  size_t m_totalPayloadLength;
+};
+
+template<size_t N>
+class SegmentPublisherFixture : public BaseFixture
+{
+public:
+  SegmentPublisherFixture()
+    : m_face(makeDummyFace())
+    , m_publisher(*m_face, "/localhost/nfd/SegmentPublisherFixture", m_keyChain)
+  {
+  }
+
+  void
+  validate(const Data& data)
+  {
+    Block payload = data.getContent();
+    NFD_LOG_DEBUG("payload size (w/o Content TLV): " << payload.value_size());
+
+    m_buffer.appendByteArray(payload.value(), payload.value_size());
+
+    uint64_t segmentNo = data.getName()[-1].toSegment();
+    if (data.getFinalBlockId() != data.getName()[-1])
+      {
+        return;
+      }
+
+    NFD_LOG_DEBUG("got final block: #" << segmentNo);
+
+    // wrap data in a single Content TLV for easy parsing
+    m_buffer.prependVarNumber(m_buffer.size());
+    m_buffer.prependVarNumber(ndn::Tlv::Content);
+
+    BOOST_TEST_CHECKPOINT("creating parser");
+    ndn::Block parser(m_buffer.buf(), m_buffer.size());
+    BOOST_TEST_CHECKPOINT("parsing aggregated response");
+    parser.parse();
+
+    BOOST_REQUIRE_EQUAL(parser.elements_size(), m_publisher.getLimit());
+
+    uint64_t expectedNo = m_publisher.getLimit() - 1;
+    for (Block::element_const_iterator i = parser.elements_begin();
+         i != parser.elements_end();
+         ++i)
+      {
+        uint64_t number = readNonNegativeInteger(*i);
+        BOOST_REQUIRE_EQUAL(number, expectedNo);
+        --expectedNo;
+      }
+  }
+
+protected:
+  shared_ptr<DummyFace> m_face;
+  TestSegmentPublisher<N> m_publisher;
+  ndn::EncodingBuffer m_buffer;
+  ndn::KeyChain m_keyChain;
+};
+
+using boost::mpl::int_;
+typedef boost::mpl::vector<int_<10000>, int_<100>, int_<10>/*, int_<0>*/ > DatasetSizes;
+
+BOOST_AUTO_TEST_SUITE(SegmentPublisher)
+
+BOOST_FIXTURE_TEST_CASE_TEMPLATE(Generate, T, DatasetSizes, SegmentPublisherFixture<T::value>)
+{
+  this->m_publisher.publish();
+  this->m_face->processEvents();
+
+  size_t nSegments = this->m_publisher.getTotalPayloadLength() /
+                       this->m_publisher.getMaxSegmentSize();
+  if (this->m_publisher.getTotalPayloadLength() % this->m_publisher.getMaxSegmentSize() != 0 ||
+      nSegments == 0)
+    ++nSegments;
+
+  BOOST_CHECK_EQUAL(this->m_face->m_sentDatas.size(), nSegments);
+  BOOST_FOREACH(const Data& data, this->m_face->m_sentDatas) {
+    this->validate(data);
+  }
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace nfd
diff --git a/tests/daemon/mgmt/channel-status-publisher.cpp b/tests/daemon/mgmt/channel-status-publisher.cpp
index 04625af..6d33f4d 100644
--- a/tests/daemon/mgmt/channel-status-publisher.cpp
+++ b/tests/daemon/mgmt/channel-status-publisher.cpp
@@ -39,7 +39,7 @@
 public:
   ChannelStatusPublisherFixture()
     : m_face(make_shared<InternalFace>())
-    , m_publisher(m_factories, m_face, "/localhost/nfd/faces/channels")
+    , m_publisher(m_factories, *m_face, "/localhost/nfd/faces/channels", m_keyChain)
     , m_finished(false)
   {
   }
@@ -120,6 +120,8 @@
   std::set<std::string> m_matchedEntries;
 
   bool m_finished;
+
+  ndn::KeyChain m_keyChain;
 };
 
 BOOST_FIXTURE_TEST_SUITE(MgmtChannelStatusPublisher, ChannelStatusPublisherFixture)
diff --git a/tests/daemon/mgmt/face-manager.cpp b/tests/daemon/mgmt/face-manager.cpp
index 482330d..601724a 100644
--- a/tests/daemon/mgmt/face-manager.cpp
+++ b/tests/daemon/mgmt/face-manager.cpp
@@ -257,13 +257,14 @@
 protected:
   shared_ptr<InternalFace> m_face;
   bool m_callbackFired;
+  ndn::KeyChain m_testKeyChain;
 };
 
 class FaceManagerFixture : public TestFaceTableFixture, public TestFaceManagerCommon
 {
 public:
   FaceManagerFixture()
-    : m_manager(m_faceTable, m_face)
+    : m_manager(m_faceTable, m_face, m_testKeyChain)
   {
     m_manager.setConfigFile(m_config);
   }
@@ -923,7 +924,7 @@
 public:
 
   ValidatedFaceRequestFixture()
-    : FaceManager(TestFaceTableFixture::m_faceTable, TestFaceManagerCommon::m_face),
+    : FaceManager(TestFaceTableFixture::m_faceTable, TestFaceManagerCommon::m_face, m_testKeyChain),
       m_createFaceFired(false),
       m_destroyFaceFired(false)
   {
@@ -1048,7 +1049,7 @@
 {
 public:
   LocalControlFixture()
-    : FaceManager(FaceTableFixture::m_faceTable, TestFaceManagerCommon::m_face)
+    : FaceManager(FaceTableFixture::m_faceTable, TestFaceManagerCommon::m_face, m_testKeyChain)
   {
   }
 };
@@ -1417,7 +1418,8 @@
 public:
   FaceFixture()
     : FaceManager(FaceTableFixture::m_faceTable,
-                  TestFaceManagerCommon::m_face)
+                  TestFaceManagerCommon::m_face,
+                  m_testKeyChain)
     , m_receivedNotification(false)
   {
 
@@ -1674,7 +1676,7 @@
 {
 public:
   FaceListFixture()
-    : m_manager(m_table, m_face)
+    : m_manager(m_table, m_face, m_testKeyChain)
   {
 
   }
@@ -1687,6 +1689,7 @@
 
 protected:
   FaceManager m_manager;
+  ndn::KeyChain m_testKeyChain;
 };
 
 BOOST_FIXTURE_TEST_CASE(TestFaceList, FaceListFixture)
diff --git a/tests/daemon/mgmt/face-status-publisher-common.hpp b/tests/daemon/mgmt/face-status-publisher-common.hpp
index 3d4ff52..b2a485e 100644
--- a/tests/daemon/mgmt/face-status-publisher-common.hpp
+++ b/tests/daemon/mgmt/face-status-publisher-common.hpp
@@ -107,7 +107,7 @@
   FaceStatusPublisherFixture()
     : m_table(m_forwarder)
     , m_face(make_shared<InternalFace>())
-    , m_publisher(m_table, m_face, "/localhost/nfd/FaceStatusPublisherFixture")
+    , m_publisher(m_table, *m_face, "/localhost/nfd/FaceStatusPublisherFixture", m_keyChain)
     , m_finished(false)
   {
 
@@ -188,6 +188,7 @@
   FaceStatusPublisher m_publisher;
   ndn::EncodingBuffer m_buffer;
   std::list<shared_ptr<Face> > m_referenceFaces;
+  ndn::KeyChain m_keyChain;
 
 protected:
   bool m_finished;
diff --git a/tests/daemon/mgmt/fib-enumeration-publisher-common.hpp b/tests/daemon/mgmt/fib-enumeration-publisher-common.hpp
index 301d396..bfb19d9 100644
--- a/tests/daemon/mgmt/fib-enumeration-publisher-common.hpp
+++ b/tests/daemon/mgmt/fib-enumeration-publisher-common.hpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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_FIB_ENUMERATION_PUBLISHER_COMMON_HPP
 #define NFD_TESTS_NFD_MGMT_FIB_ENUMERATION_PUBLISHER_COMMON_HPP
@@ -77,7 +78,7 @@
   FibEnumerationPublisherFixture()
     : m_fib(m_nameTree)
     , m_face(make_shared<InternalFace>())
-    , m_publisher(m_fib, m_face, "/localhost/nfd/FibEnumerationPublisherFixture")
+    , m_publisher(m_fib, *m_face, "/localhost/nfd/FibEnumerationPublisherFixture", m_keyChain)
     , m_finished(false)
   {
   }
@@ -208,6 +209,7 @@
   FibEnumerationPublisher m_publisher;
   ndn::EncodingBuffer m_buffer;
   std::set<shared_ptr<fib::Entry> > m_referenceEntries;
+  ndn::KeyChain m_keyChain;
 
 protected:
   bool m_finished;
diff --git a/tests/daemon/mgmt/fib-enumeration-publisher.cpp b/tests/daemon/mgmt/fib-enumeration-publisher.cpp
index 3cb5849..ed330aa 100644
--- a/tests/daemon/mgmt/fib-enumeration-publisher.cpp
+++ b/tests/daemon/mgmt/fib-enumeration-publisher.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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/fib-enumeration-publisher.hpp"
 
diff --git a/tests/daemon/mgmt/fib-manager.cpp b/tests/daemon/mgmt/fib-manager.cpp
index 2305c2c..8101cd4 100644
--- a/tests/daemon/mgmt/fib-manager.cpp
+++ b/tests/daemon/mgmt/fib-manager.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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/fib-manager.hpp"
 #include "table/fib.hpp"
@@ -161,7 +162,7 @@
 
 protected:
   FibManagerFixture()
-    : m_manager(ref(m_fib), bind(&FibManagerFixture::getFace, this, _1), m_face)
+    : m_manager(ref(m_fib), bind(&FibManagerFixture::getFace, this, _1), m_face, m_keyChain)
     , m_callbackFired(false)
   {
   }
@@ -171,6 +172,7 @@
 
   std::vector<shared_ptr<Face> > m_faces;
   bool m_callbackFired;
+  ndn::KeyChain m_keyChain;
 };
 
 template <typename T> class AuthorizedCommandFixture:
diff --git a/tests/daemon/mgmt/internal-face.cpp b/tests/daemon/mgmt/internal-face.cpp
index e76d80f..2215c0e 100644
--- a/tests/daemon/mgmt/internal-face.cpp
+++ b/tests/daemon/mgmt/internal-face.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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/internal-face.hpp"
 #include "tests/daemon/face/dummy-face.hpp"
@@ -85,6 +86,9 @@
     m_noOnInterestFired = false;
   }
 
+protected:
+  ndn::KeyChain m_keyChain;
+
 private:
   std::vector<shared_ptr<Face> > m_faces;
   bool m_onInterestFired;
@@ -111,7 +115,7 @@
   face->onReceiveData += bind(&validatePutData, ref(didPutData), dataName, _1);
 
   Data testData(dataName);
-  face->sign(testData);
+  m_keyChain.sign(testData);
   face->put(testData);
 
   BOOST_REQUIRE(didPutData);
diff --git a/tests/daemon/mgmt/manager-base.cpp b/tests/daemon/mgmt/manager-base.cpp
index 74fcb6e..58a6fd4 100644
--- a/tests/daemon/mgmt/manager-base.cpp
+++ b/tests/daemon/mgmt/manager-base.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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/manager-base.hpp"
 #include "mgmt/internal-face.hpp"
@@ -38,7 +39,7 @@
 public:
 
   ManagerBaseTest()
-    : ManagerBase(make_shared<InternalFace>(), "TEST-PRIVILEGE"),
+    : ManagerBase(make_shared<InternalFace>(), "TEST-PRIVILEGE", m_keyChain),
       m_callbackFired(false)
   {
 
@@ -141,6 +142,7 @@
 private:
 
   bool m_callbackFired;
+  ndn::KeyChain m_keyChain;
 
 };
 
diff --git a/tests/daemon/mgmt/notification-stream.cpp b/tests/daemon/mgmt/notification-stream.cpp
index 32f5a20..f64e50b 100644
--- a/tests/daemon/mgmt/notification-stream.cpp
+++ b/tests/daemon/mgmt/notification-stream.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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/notification-stream.hpp"
 #include "mgmt/internal-face.hpp"
@@ -80,6 +81,7 @@
   const std::string m_prefix;
   const std::string m_message;
   uint64_t m_sequenceNo;
+  ndn::KeyChain m_keyChain;
 };
 
 BOOST_FIXTURE_TEST_SUITE(MgmtNotificationStream, NotificationStreamFixture)
@@ -115,7 +117,7 @@
 BOOST_AUTO_TEST_CASE(TestPostEvent)
 {
   shared_ptr<InternalFace> face(make_shared<InternalFace>());
-  NotificationStream notificationStream(face, "/localhost/nfd/NotificationStreamTest");
+  NotificationStream notificationStream(face, "/localhost/nfd/NotificationStreamTest", m_keyChain);
 
   face->onReceiveData += bind(&NotificationStreamFixture::validateCallback, this, _1);
 
diff --git a/tests/daemon/mgmt/segment-publisher.cpp b/tests/daemon/mgmt/segment-publisher.cpp
deleted file mode 100644
index 43e4523..0000000
--- a/tests/daemon/mgmt/segment-publisher.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014  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
- *
- * 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/segment-publisher.hpp"
-#include "mgmt/internal-face.hpp"
-#include "mgmt/app-face.hpp"
-
-#include "tests/test-common.hpp"
-#include <ndn-cxx/encoding/tlv.hpp>
-
-namespace nfd {
-namespace tests {
-
-NFD_LOG_INIT("SegmentPublisherTest");
-
-class TestSegmentPublisher : public SegmentPublisher
-{
-public:
-  TestSegmentPublisher(shared_ptr<AppFace> face,
-                       const Name& prefix,
-                       const uint64_t limit=10000)
-    : SegmentPublisher(face, prefix)
-    , m_limit((limit == 0)?(1):(limit))
-  {
-
-  }
-
-  virtual
-  ~TestSegmentPublisher()
-  {
-
-  }
-
-  uint16_t
-  getLimit() const
-  {
-    return m_limit;
-  }
-
-protected:
-
-  virtual size_t
-  generate(ndn::EncodingBuffer& outBuffer)
-  {
-    size_t totalLength = 0;
-    for (uint64_t i = 0; i < m_limit; i++)
-      {
-        totalLength += prependNonNegativeIntegerBlock(outBuffer, ndn::Tlv::Content, i);
-      }
-    return totalLength;
-  }
-
-protected:
-  const uint64_t m_limit;
-};
-
-class SegmentPublisherFixture : public BaseFixture
-{
-public:
-  SegmentPublisherFixture()
-    : m_face(make_shared<InternalFace>())
-    , m_publisher(m_face, "/localhost/nfd/SegmentPublisherFixture")
-    , m_finished(false)
-  {
-
-  }
-
-  void
-  validate(const Data& data)
-  {
-    Block payload = data.getContent();
-    NFD_LOG_DEBUG("payload size (w/o Content TLV): " << payload.value_size());
-
-    m_buffer.appendByteArray(payload.value(), payload.value_size());
-
-    uint64_t segmentNo = data.getName()[-1].toSegment();
-    if (data.getFinalBlockId() != data.getName()[-1])
-      {
-        return;
-      }
-
-    NFD_LOG_DEBUG("got final block: #" << segmentNo);
-
-    // wrap data in a single Content TLV for easy parsing
-    m_buffer.prependVarNumber(m_buffer.size());
-    m_buffer.prependVarNumber(ndn::Tlv::Content);
-
-    BOOST_TEST_CHECKPOINT("creating parser");
-    ndn::Block parser(m_buffer.buf(), m_buffer.size());
-    BOOST_TEST_CHECKPOINT("parsing aggregated response");
-    parser.parse();
-
-    BOOST_REQUIRE_EQUAL(parser.elements_size(), m_publisher.getLimit());
-
-    uint64_t expectedNo = m_publisher.getLimit() - 1;
-    for (Block::element_const_iterator i = parser.elements_begin();
-         i != parser.elements_end();
-         ++i)
-      {
-        uint64_t number = readNonNegativeInteger(*i);
-        BOOST_REQUIRE_EQUAL(number, expectedNo);
-        --expectedNo;
-      }
-    m_finished = true;
-  }
-
-protected:
-  shared_ptr<InternalFace> m_face;
-  TestSegmentPublisher m_publisher;
-  ndn::EncodingBuffer m_buffer;
-
-protected:
-  bool m_finished;
-};
-
-BOOST_FIXTURE_TEST_SUITE(MgmtSegmentPublisher, SegmentPublisherFixture)
-
-BOOST_AUTO_TEST_CASE(Generate)
-{
-  m_face->onReceiveData +=
-    bind(&SegmentPublisherFixture::validate, this, _1);
-
-  m_publisher.publish();
-  BOOST_REQUIRE(m_finished);
-}
-
-BOOST_AUTO_TEST_SUITE_END()
-
-} // namespace tests
-} // namespace nfd
diff --git a/tests/daemon/mgmt/status-server.cpp b/tests/daemon/mgmt/status-server.cpp
index d9f3129..5757f46 100644
--- a/tests/daemon/mgmt/status-server.cpp
+++ b/tests/daemon/mgmt/status-server.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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/status-server.hpp"
 #include "fw/forwarder.hpp"
@@ -50,7 +51,8 @@
   Forwarder forwarder;
   shared_ptr<InternalFace> internalFace = make_shared<InternalFace>();
   internalFace->onReceiveData += &interceptResponse;
-  StatusServer statusServer(internalFace, ref(forwarder));
+  ndn::KeyChain keyChain;
+  StatusServer statusServer(internalFace, ref(forwarder), keyChain);
   time::system_clock::TimePoint t2 = time::system_clock::now();
 
   // populate tables
diff --git a/tests/daemon/mgmt/strategy-choice-manager.cpp b/tests/daemon/mgmt/strategy-choice-manager.cpp
index 9f6818e..587c576 100644
--- a/tests/daemon/mgmt/strategy-choice-manager.cpp
+++ b/tests/daemon/mgmt/strategy-choice-manager.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -20,7 +21,7 @@
  *
  * 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/strategy-choice-manager.hpp"
 #include "face/face.hpp"
@@ -49,7 +50,7 @@
   StrategyChoiceManagerFixture()
     : m_strategyChoice(m_forwarder.getStrategyChoice())
     , m_face(make_shared<InternalFace>())
-    , m_manager(m_strategyChoice, m_face)
+    , m_manager(m_strategyChoice, m_face, m_keyChain)
     , m_callbackFired(false)
   {
     m_strategyChoice.install(make_shared<DummyStrategy>(ref(m_forwarder),
@@ -171,6 +172,7 @@
   StrategyChoice& m_strategyChoice;
   shared_ptr<InternalFace> m_face;
   StrategyChoiceManager m_manager;
+  ndn::KeyChain m_keyChain;
 
 private:
   bool m_callbackFired;
diff --git a/tests/daemon/mgmt/strategy-choice-publisher.cpp b/tests/daemon/mgmt/strategy-choice-publisher.cpp
index b3190d4..fda3e1e 100644
--- a/tests/daemon/mgmt/strategy-choice-publisher.cpp
+++ b/tests/daemon/mgmt/strategy-choice-publisher.cpp
@@ -1,12 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  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
+ * Copyright (c) 2014,  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.
@@ -21,7 +21,7 @@
  *
  * 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_STRATEGY_CHOICE_PUBLISHER_HPP
 #define NFD_TESTS_NFD_MGMT_STRATEGY_CHOICE_PUBLISHER_HPP
@@ -46,7 +46,7 @@
   StrategyChoicePublisherFixture()
     : m_strategyChoice(m_forwarder.getStrategyChoice())
     , m_face(make_shared<InternalFace>())
-    , m_publisher(m_strategyChoice, m_face, "/localhost/nfd/strategy-choice/list")
+    , m_publisher(m_strategyChoice, *m_face, "/localhost/nfd/strategy-choice/list", m_keyChain)
     , STRATEGY_A(make_shared<DummyStrategy>(boost::ref(m_forwarder),
                                             "/localhost/nfd/strategy/dummy-strategy-a"))
     , STRATEGY_B(make_shared<DummyStrategy>(boost::ref(m_forwarder),
@@ -129,6 +129,8 @@
   std::set<std::string> m_matchedEntries;
 
   bool m_finished;
+
+  ndn::KeyChain m_keyChain;
 };
 
 
diff --git a/tests/rib/dummy-face.hpp b/tests/dummy-face.hpp
similarity index 87%
rename from tests/rib/dummy-face.hpp
rename to tests/dummy-face.hpp
index 4fde76f..84da29f 100644
--- a/tests/rib/dummy-face.hpp
+++ b/tests/dummy-face.hpp
@@ -23,15 +23,16 @@
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef RIB_TESTS_UNIT_TESTS_TRANSPORT_DUMMY_FACE_HPP
-#define RIB_TESTS_UNIT_TESTS_TRANSPORT_DUMMY_FACE_HPP
+#ifndef NFD_TESTS_DUMMY_FACE_HPP
+#define NFD_TESTS_DUMMY_FACE_HPP
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/transport/transport.hpp>
 
-namespace ndn {
+namespace nfd {
+namespace tests {
 
-class DummyTransport : public Transport
+class DummyTransport : public ndn::Transport
 {
 public:
   void
@@ -58,10 +59,10 @@
   virtual void
   send(const Block& wire)
   {
-    if (wire.type() == Tlv::Interest) {
+    if (wire.type() == tlv::Interest) {
       m_sentInterests->push_back(Interest(wire));
     }
-    else if (wire.type() == Tlv::Data) {
+    else if (wire.type() == tlv::Data) {
       m_sentDatas->push_back(Data(wire));
     }
   }
@@ -80,7 +81,7 @@
 
 /** \brief a Face for unit testing
  */
-class DummyFace : public Face
+class DummyFace : public ndn::Face
 {
 public:
   explicit
@@ -115,6 +116,7 @@
   return make_shared<DummyFace>(make_shared<DummyTransport>());
 }
 
-} // namespace ndn
+} // namespace tests
+} // namespace nfd
 
-#endif // RIB_TESTS_UNIT_TESTS_TRANSPORT_DUMMY_FACE_HPP
+#endif // NFD_TESTS_DUMMY_FACE_HPP
diff --git a/tests/rib/rib-manager.cpp b/tests/rib/rib-manager.cpp
index b878e30..92188b1 100644
--- a/tests/rib/rib-manager.cpp
+++ b/tests/rib/rib-manager.cpp
@@ -26,7 +26,7 @@
 #include "rib/rib-manager.hpp"
 
 #include "tests/test-common.hpp"
-#include "rib/dummy-face.hpp"
+#include "tests/dummy-face.hpp"
 
 namespace nfd {
 namespace rib {
@@ -40,7 +40,7 @@
     , ADD_NEXTHOP_VERB("add-nexthop")
     , REMOVE_NEXTHOP_VERB("remove-nexthop")
   {
-    face = ndn::makeDummyFace();
+    face = nfd::tests::makeDummyFace();
 
     manager = make_shared<RibManager>(ndn::ref(*face));
     manager->registerWithNfd();
@@ -78,7 +78,7 @@
 
 public:
   shared_ptr<RibManager> manager;
-  shared_ptr<ndn::DummyFace> face;
+  shared_ptr<nfd::tests::DummyFace> face;
 
   const Name COMMAND_PREFIX;
   const Name::Component ADD_NEXTHOP_VERB;