rib: Cancel expiration on unregistration

refs: #1902

Change-Id: I85a75370ecc3677c8a9ebf3a48f3c0857598da2d
diff --git a/tests/rib/rib-manager.cpp b/tests/rib/rib-manager.cpp
index 593517f..0d43dcb 100644
--- a/tests/rib/rib-manager.cpp
+++ b/tests/rib/rib-manager.cpp
@@ -27,6 +27,7 @@
 
 #include "tests/test-common.hpp"
 #include "tests/dummy-client-face.hpp"
+#include "tests/limited-io.hpp"
 #include "rib/rib-status-publisher-common.hpp"
 
 namespace nfd {
@@ -255,6 +256,45 @@
   RibStatusPublisherFixture::decodeRibEntryBlock(face->m_sentDatas[0], name, entry);
 }
 
+BOOST_FIXTURE_TEST_CASE(CancelExpirationEvent, AuthorizedRibManager)
+{
+  // Register face
+  ControlParameters addParameters;
+  addParameters
+    .setName("/expire")
+    .setFaceId(1)
+    .setCost(10)
+    .setFlags(0)
+    .setOrigin(128)
+    .setExpirationPeriod(ndn::time::milliseconds(500));
+
+  Name registerName("/localhost/nfd/rib/register");
+
+  receiveCommandInterest(registerName, addParameters);
+  face->m_sentInterests.clear();
+
+  // Unregister face
+  ControlParameters removeParameters;
+  removeParameters
+    .setName("/expire")
+    .setFaceId(1)
+    .setOrigin(128);
+
+  Name unregisterName("/localhost/nfd/rib/unregister");
+
+  receiveCommandInterest(unregisterName, removeParameters);
+
+  // Reregister face
+  Name reRegisterName("/localhost/nfd/rib/register");
+  addParameters.setExpirationPeriod(ndn::time::milliseconds::max());
+  receiveCommandInterest(reRegisterName, addParameters);
+
+  nfd::tests::LimitedIo limitedIo;
+  limitedIo.run(nfd::tests::LimitedIo::UNLIMITED_OPS, time::seconds(1));
+
+  BOOST_REQUIRE_EQUAL(manager->m_managedRib.size(), 1);
+}
+
 BOOST_AUTO_TEST_SUITE_END()
 
 } // namespace tests