diff --git a/tests/unit-tests/NFD/ncc.t.cpp b/tests/unit-tests/NFD/ncc.t.cpp
new file mode 100644
index 0000000..7ef24ff
--- /dev/null
+++ b/tests/unit-tests/NFD/ncc.t.cpp
@@ -0,0 +1,92 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2011-2015  Regents of the University of California.
+ *
+ * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
+ * contributors.
+ *
+ * ndnSIM 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.
+ *
+ * ndnSIM 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
+ * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+#include "helper/ndn-strategy-choice-helper.hpp"
+
+#include "ns3/ndnSIM/NFD/daemon/fw/strategy.hpp"
+
+#include "../tests-common.hpp"
+
+namespace ns3 {
+namespace ndn {
+
+class NccFixture : public ScenarioHelperWithCleanupFixture
+{
+public:
+  NccFixture()
+  {
+    Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
+    Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("1ms"));
+    Config::SetDefault("ns3::DropTailQueue::MaxPackets", StringValue("500"));
+
+      //            Creating a 3 node topology                //
+      //                                                      //
+      //                                                      //
+      //          +----+       +----+         +----+          //
+      //          |    |       |    |         |    |          //
+      //          | A1 | <---> | A2 |  <--->  | A3 |          //
+      //          |    |       |    |         |    |          //
+      //          +----+       +----+         +----+          //
+      //                                                      //
+      //                                                      //
+      //                                                      //
+
+      createTopology({
+          {"A1", "A2"},
+          {"A2", "A3"}
+        });
+
+      addRoutes({
+          {"A1", "A2", "/prefix", 100},
+          {"A2", "A3", "/prefix", 100},
+        });
+
+      addApps({
+          {"A1", "ns3::ndn::ConsumerCbr",
+              {{"Prefix", "/prefix"}, {"Frequency", "1000"}},
+              "0s", "5s"},
+          {"A3", "ns3::ndn::Producer",
+              {{"Prefix", "/prefix"}, {"PayloadSize", "1024"}},
+              "0s", "10s"},
+        });
+    }
+};
+
+BOOST_FIXTURE_TEST_SUITE(TestNccStrategy, NccFixture)
+
+BOOST_AUTO_TEST_CASE(DetachedPitEntries)
+{
+  StrategyChoiceHelper::Install(getNode("A1"), "/prefix", "/localhost/nfd/strategy/ncc");
+  StrategyChoiceHelper::Install(getNode("A2"), "/prefix", "/localhost/nfd/strategy/ncc");
+  StrategyChoiceHelper::Install(getNode("A3"), "/prefix", "/localhost/nfd/strategy/ncc");
+
+  Simulator::Stop(Seconds(5.2));
+  BOOST_CHECK_NO_THROW(Simulator::Run());
+
+  BOOST_CHECK_EQUAL(getFace("A1", "A2")->getCounters().nOutInterests, 5000);
+  BOOST_CHECK_EQUAL(getFace("A2", "A3")->getCounters().nOutInterests, 5000);
+
+  BOOST_CHECK_EQUAL(getFace("A3", "A2")->getCounters().nOutData, 5000);
+  BOOST_CHECK_EQUAL(getFace("A2", "A1")->getCounters().nOutData, 5000);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace ndn
+} // namespace ns3
