fw: various code simplifications in AsfStrategy

Change-Id: Ie006680b2469fa7dc5d9b19665320b2686564f2c
diff --git a/tests/daemon/fw/asf-measurements.t.cpp b/tests/daemon/fw/asf-measurements.t.cpp
index 1590e7c..92f1884 100644
--- a/tests/daemon/fw/asf-measurements.t.cpp
+++ b/tests/daemon/fw/asf-measurements.t.cpp
@@ -24,7 +24,6 @@
  */
 
 #include "fw/asf-measurements.hpp"
-#include "common/global.hpp"
 
 #include "tests/test-common.hpp"
 #include "tests/daemon/global-io-fixture.hpp"
@@ -40,88 +39,57 @@
 BOOST_AUTO_TEST_SUITE(Fw)
 BOOST_AUTO_TEST_SUITE(TestAsfMeasurements)
 
-BOOST_AUTO_TEST_SUITE(TestRttStats)
-
-BOOST_FIXTURE_TEST_CASE(Basic, GlobalIoFixture)
+BOOST_FIXTURE_TEST_CASE(FaceInfo, GlobalIoTimeFixture)
 {
-  RttStats stats;
+  using asf::FaceInfo;
+  FaceInfo info(nullptr);
 
-  BOOST_CHECK_EQUAL(stats.getRtt(), RttStats::RTT_NO_MEASUREMENT);
-  BOOST_CHECK_EQUAL(stats.getSrtt(), RttStats::RTT_NO_MEASUREMENT);
+  BOOST_CHECK_EQUAL(info.getLastRtt(), FaceInfo::RTT_NO_MEASUREMENT);
+  BOOST_CHECK_EQUAL(info.getSrtt(), FaceInfo::RTT_NO_MEASUREMENT);
 
-  // Receive Data back in 50ms
-  time::nanoseconds rtt(50_ms);
-  stats.addRttMeasurement(rtt);
-
-  BOOST_CHECK_EQUAL(stats.getRtt(), rtt);
-  BOOST_CHECK_EQUAL(stats.getSrtt(), rtt);
-
-  // Receive Data back in 50ms
-  stats.addRttMeasurement(rtt);
-
-  BOOST_CHECK_EQUAL(stats.getRtt(), rtt);
-  BOOST_CHECK_EQUAL(stats.getSrtt(), rtt);
-
-  // Receive Data back with a higher RTT
-  time::nanoseconds higherRtt(100_ms);
-  stats.addRttMeasurement(higherRtt);
-
-  BOOST_CHECK_EQUAL(stats.getRtt(), higherRtt);
-  BOOST_CHECK_GT(stats.getSrtt(), rtt);
-  BOOST_CHECK_LT(stats.getSrtt(), higherRtt);
-
-  // Simulate timeout
-  auto previousSrtt = stats.getSrtt();
-
-  stats.recordTimeout();
-
-  BOOST_CHECK_EQUAL(stats.getRtt(), RttStats::RTT_TIMEOUT);
-  BOOST_CHECK_EQUAL(stats.getSrtt(), previousSrtt);
-}
-
-BOOST_AUTO_TEST_SUITE_END() // TestRttStats
-
-BOOST_AUTO_TEST_SUITE(TestFaceInfo)
-
-BOOST_FIXTURE_TEST_CASE(Basic, GlobalIoTimeFixture)
-{
-  FaceInfo info;
-
-  auto id = getScheduler().schedule(1_s, []{});
-  ndn::Name interestName("/ndn/interest");
+  info.recordRtt(100_ms);
+  Name interestName("/ndn/interest");
 
   // Receive Interest and forward to next hop; should update RTO information
-  info.setTimeoutEvent(id, interestName);
+  BOOST_CHECK_EQUAL(info.isTimeoutScheduled(), false);
+  auto rto = info.scheduleTimeout(interestName, []{});
   BOOST_CHECK_EQUAL(info.isTimeoutScheduled(), true);
-
-  // If the strategy tries to schedule an RTO when one is already scheduled, throw an exception
-  BOOST_CHECK_THROW(info.setTimeoutEvent(id, interestName), FaceInfo::Error);
+  BOOST_CHECK_EQUAL(rto, 300_ms);
 
   // Receive Data
-  shared_ptr<Interest> interest = makeInterest(interestName);
-  shared_ptr<pit::Entry> pitEntry = make_shared<pit::Entry>(*interest);
-  std::shared_ptr<DummyFace> face = make_shared<DummyFace>();
-
-  pitEntry->insertOrUpdateOutRecord(*face, 0, *interest);
-
   time::nanoseconds rtt(5_ms);
   this->advanceClocks(5_ms);
+  info.recordRtt(rtt);
+  info.cancelTimeout(interestName);
 
-  info.recordRtt(pitEntry, *face);
-  info.cancelTimeoutEvent(interestName);
-
-  BOOST_CHECK_EQUAL(info.getRtt(), rtt);
-  BOOST_CHECK_EQUAL(info.getSrtt(), rtt);
+  BOOST_CHECK_EQUAL(info.getLastRtt(), rtt);
+  BOOST_CHECK_EQUAL(info.getSrtt(), 88125_us);
 
   // Send out another Interest which times out
-  info.setTimeoutEvent(id, interestName);
+  rto = info.scheduleTimeout(interestName, []{});
+  BOOST_CHECK_EQUAL(rto, 333125_us);
 
+  auto previousSrtt = info.getSrtt();
   info.recordTimeout(interestName);
-  BOOST_CHECK_EQUAL(info.getRtt(), RttStats::RTT_TIMEOUT);
+
+  BOOST_CHECK_EQUAL(info.getLastRtt(), FaceInfo::RTT_TIMEOUT);
+  BOOST_CHECK_EQUAL(info.getSrtt(), previousSrtt);
   BOOST_CHECK_EQUAL(info.isTimeoutScheduled(), false);
 }
 
-BOOST_AUTO_TEST_SUITE_END() // TestFaceInfo
+BOOST_FIXTURE_TEST_CASE(NamespaceInfo, GlobalIoTimeFixture)
+{
+  using asf::NamespaceInfo;
+  NamespaceInfo info(nullptr);
+
+  BOOST_CHECK(info.getFaceInfo(1234) == nullptr);
+
+  auto& faceInfo = info.getOrCreateFaceInfo(1234);
+  BOOST_CHECK(info.getFaceInfo(1234) == &faceInfo);
+
+  this->advanceClocks(AsfMeasurements::MEASUREMENTS_LIFETIME + 1_s);
+  BOOST_CHECK(info.getFaceInfo(1234) == nullptr); // expired
+}
 
 BOOST_AUTO_TEST_SUITE_END() // TestAsfStrategy
 BOOST_AUTO_TEST_SUITE_END() // Fw