fw: delegate sending Nack-Duplicate to forwarding strategy
This commit introduces a new strategy trigger (onInterestLoop) that
is invoked when a duplicate Interest is received. The default behavior
of the new trigger is to send a Nack as before. We also modify the
MulticastStrategy to override onInterestLoop and skip sending the Nack.
Refs: #5278
Co-authored-by: Davide Pesavento <davidepesa@gmail.com>
Change-Id: I07bb520bd31cbfc8d8f8581e05c49927f8ea35f7
diff --git a/tests/daemon/fw/multicast-strategy.t.cpp b/tests/daemon/fw/multicast-strategy.t.cpp
index 55254da..b51b001 100644
--- a/tests/daemon/fw/multicast-strategy.t.cpp
+++ b/tests/daemon/fw/multicast-strategy.t.cpp
@@ -210,8 +210,28 @@
pitEntry->insertOrUpdateInRecord(*face1, *interest);
strategy.afterReceiveInterest(*interest, FaceEndpoint(*face1), pitEntry);
- BOOST_CHECK_EQUAL(strategy.rejectPendingInterestHistory.size(), 0);
- BOOST_CHECK_EQUAL(strategy.sendInterestHistory.size(), 0);
+ BOOST_TEST(strategy.rejectPendingInterestHistory.size() == 0);
+ BOOST_TEST(strategy.sendInterestHistory.size() == 0);
+}
+
+BOOST_AUTO_TEST_CASE(DuplicateInterest)
+{
+ fib::Entry& fibEntry = *fib.insert(Name()).first;
+ fib.addOrUpdateNextHop(fibEntry, *face3, 0);
+
+ auto interest = makeInterest("ndn:/H0D6i5fc");
+
+ // first interest
+ forwarder.onIncomingInterest(*interest, FaceEndpoint(*face1));
+ BOOST_TEST(forwarder.getCounters().nInInterests == 1);
+ BOOST_TEST(strategy.sendInterestHistory.size() == 1);
+
+ // second interest (duplicate, should enter onInterestLoop)
+ forwarder.onIncomingInterest(*interest, FaceEndpoint(*face2));
+ BOOST_TEST(forwarder.getCounters().nInInterests == 2);
+ BOOST_TEST(strategy.sendInterestHistory.size() == 1);
+ BOOST_TEST(strategy.rejectPendingInterestHistory.size() == 0);
+ BOOST_TEST(strategy.sendNackHistory.size() == 0);
}
BOOST_AUTO_TEST_CASE(RetxSuppression)