catchunks: use ndn-cxx's RttEstimator
Refs: #4887
Change-Id: If24bea40a22909bf0fd9e49ec7b18330dbe336f2
diff --git a/tests/chunks/pipeline-interests-aimd.t.cpp b/tests/chunks/pipeline-interests-aimd.t.cpp
index 57022a6..c990654 100644
--- a/tests/chunks/pipeline-interests-aimd.t.cpp
+++ b/tests/chunks/pipeline-interests-aimd.t.cpp
@@ -78,8 +78,8 @@
rttOptions.alpha = 0.125;
rttOptions.beta = 0.25;
rttOptions.k = 4;
- rttOptions.minRto = Milliseconds(200);
- rttOptions.maxRto = Milliseconds(4000);
+ rttOptions.minRto = RttEstimator::MillisecondsDouble(200);
+ rttOptions.maxRto = RttEstimator::MillisecondsDouble(4000);
return rttOptions;
}
diff --git a/tests/chunks/pipeline-interests-cubic.t.cpp b/tests/chunks/pipeline-interests-cubic.t.cpp
index b42728b..fa3aac8 100644
--- a/tests/chunks/pipeline-interests-cubic.t.cpp
+++ b/tests/chunks/pipeline-interests-cubic.t.cpp
@@ -80,8 +80,8 @@
rttOptions.alpha = 0.125;
rttOptions.beta = 0.25;
rttOptions.k = 8;
- rttOptions.minRto = Milliseconds(200);
- rttOptions.maxRto = Milliseconds(4000);
+ rttOptions.minRto = RttEstimator::MillisecondsDouble(200);
+ rttOptions.maxRto = RttEstimator::MillisecondsDouble(4000);
return rttOptions;
}
diff --git a/tests/chunks/rtt-estimator.t.cpp b/tests/chunks/rtt-estimator.t.cpp
deleted file mode 100644
index e2ff3fb..0000000
--- a/tests/chunks/rtt-estimator.t.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2016-2019, Regents of the University of California,
- * Colorado State University,
- * University Pierre & Marie Curie, Sorbonne University.
- *
- * This file is part of ndn-tools (Named Data Networking Essential Tools).
- * See AUTHORS.md for complete list of ndn-tools authors and contributors.
- *
- * ndn-tools 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.
- *
- * ndn-tools 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
- * ndn-tools, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- *
- * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
- *
- * @author Weiwei Liu
- * @author Chavoosh Ghasemi
- */
-
-#include "tools/chunks/catchunks/rtt-estimator.hpp"
-#include "tests/test-common.hpp"
-
-namespace ndn {
-namespace chunks {
-namespace tests {
-
-class RttEstimatorFixture
-{
-protected:
- RttEstimatorFixture()
- : options(makeRttEstimatorOptions())
- , rttEstimator(options)
- {
- }
-
-private:
- static RttEstimator::Options
- makeRttEstimatorOptions()
- {
- RttEstimator::Options rttOptions;
- rttOptions.alpha = 0.125;
- rttOptions.beta = 0.25;
- rttOptions.k = 4;
- rttOptions.minRto = Milliseconds(200.0);
- rttOptions.maxRto = Milliseconds(4000.0);
- return rttOptions;
- }
-
-protected:
- RttEstimator::Options options;
- RttEstimator rttEstimator;
-};
-
-BOOST_AUTO_TEST_SUITE(Chunks)
-BOOST_FIXTURE_TEST_SUITE(TestRttEstimator, RttEstimatorFixture)
-
-BOOST_AUTO_TEST_CASE(MinAvgMaxRtt)
-{
- // check initial values
- BOOST_CHECK_CLOSE(rttEstimator.m_rttMin, std::numeric_limits<double>::max(), 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttAvg, 0.0, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttMax, std::numeric_limits<double>::min(), 0.1);
- BOOST_CHECK_EQUAL(rttEstimator.m_nRttSamples, 0);
-
- // start with three samples
- rttEstimator.addMeasurement(1, Milliseconds(100), 1);
- rttEstimator.addMeasurement(2, Milliseconds(400), 1);
- rttEstimator.addMeasurement(3, Milliseconds(250), 1);
-
- BOOST_CHECK_CLOSE(rttEstimator.m_rttMin, 100, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttAvg, 250, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttMax, 400, 0.1);
- BOOST_CHECK_EQUAL(rttEstimator.m_nRttSamples, 3);
-
- // add another sample (new minimum)
- rttEstimator.addMeasurement(4, Milliseconds(50), 2);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttMin, 50, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttAvg, 200, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttMax, 400, 0.1);
- BOOST_CHECK_EQUAL(rttEstimator.m_nRttSamples, 4);
-
- // add another sample (new maximum)
- rttEstimator.addMeasurement(5, Milliseconds(700), 1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttMin, 50, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttAvg, 300, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttMax, 700, 0.1);
- BOOST_CHECK_EQUAL(rttEstimator.m_nRttSamples, 5);
-}
-
-BOOST_AUTO_TEST_CASE(MeasureRtt)
-{
- BOOST_REQUIRE(std::isnan(rttEstimator.m_sRtt.count()));
- BOOST_REQUIRE(std::isnan(rttEstimator.m_rttVar.count()));
- BOOST_REQUIRE_CLOSE(rttEstimator.m_rto.count(), options.initialRto.count(), 1);
-
- // first measurement
- rttEstimator.addMeasurement(1, Milliseconds(100), 1);
-
- BOOST_CHECK_CLOSE(rttEstimator.m_sRtt.count(), 100, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttVar.count(), 50, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rto.count(), 300, 0.1);
-
- rttEstimator.m_sRtt = Milliseconds(500.0);
- rttEstimator.m_rttVar = Milliseconds(100.0);
- rttEstimator.m_rto = Milliseconds(900.0);
-
- size_t nExpectedSamples = 1;
- rttEstimator.addMeasurement(1, Milliseconds(100), nExpectedSamples);
-
- BOOST_CHECK_CLOSE(rttEstimator.m_sRtt.count(), 450, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttVar.count(), 175, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rto.count(), 1150, 0.1);
-
- // expected samples larger than 1
- nExpectedSamples = 5;
- rttEstimator.addMeasurement(1, Milliseconds(100), nExpectedSamples);
-
- BOOST_CHECK_CLOSE(rttEstimator.m_sRtt.count(), 441.25, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttVar.count(), 183.75, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rto.count(), 1176.25, 0.1);
-
- rttEstimator.m_sRtt = Milliseconds(100.0);
- rttEstimator.m_rttVar = Milliseconds(30.0);
- rttEstimator.m_rto = Milliseconds(220.0);
-
- // check if minRto works
- nExpectedSamples = 1;
- rttEstimator.addMeasurement(1, Milliseconds(100), nExpectedSamples);
-
- BOOST_CHECK_CLOSE(rttEstimator.m_sRtt.count(), 100, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttVar.count(), 22.5, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rto.count(), 200, 0.1);
-
- rttEstimator.m_sRtt = Milliseconds(2000.0);
- rttEstimator.m_rttVar = Milliseconds(400.0);
- rttEstimator.m_rto = Milliseconds(3600.0);
-
- // check if maxRto works
- nExpectedSamples = 1;
- rttEstimator.addMeasurement(1, Milliseconds(100), nExpectedSamples);
-
- BOOST_CHECK_CLOSE(rttEstimator.m_sRtt.count(), 1762.5, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rttVar.count(), 775, 0.1);
- BOOST_CHECK_CLOSE(rttEstimator.m_rto.count(), 4000, 0.1);
-}
-
-BOOST_AUTO_TEST_CASE(RtoBackoff)
-{
- rttEstimator.m_rto = Milliseconds(500.0);
- rttEstimator.backoffRto();
- BOOST_CHECK_CLOSE(rttEstimator.m_rto.count(), 1000, 0.1);
-
- // check if minRto works
- rttEstimator.m_rto = Milliseconds(10.0);
- rttEstimator.backoffRto();
- BOOST_CHECK_CLOSE(rttEstimator.m_rto.count(), 200, 0.1);
-
- // check if maxRto works
- rttEstimator.m_rto = Milliseconds(3000.0);
- rttEstimator.backoffRto();
- BOOST_CHECK_CLOSE(rttEstimator.m_rto.count(), 4000, 0.1);
-}
-
-BOOST_AUTO_TEST_SUITE_END() // TestRttEstimator
-BOOST_AUTO_TEST_SUITE_END() // Chunks
-
-} // namespace tests
-} // namespace chunks
-} // namespace ndn