blob: b5af0ab99bc3cc1541d06854e56b01c7cc7e9721 [file] [log] [blame]
Junxiao Shi02e32242014-05-17 20:51:11 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2014 Regents of the University of California,
4 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis
10 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24 **/
25
26#include "fw/rtt-estimator.hpp"
27
28#include "tests/test-common.hpp"
29
30namespace nfd {
31namespace tests {
32
33BOOST_FIXTURE_TEST_SUITE(FwRttEstimator, BaseFixture)
34
35static inline double
36computeRtoAsFloatSeconds(RttEstimator& rtt)
37{
38 typedef time::duration<double, time::seconds::period> FloatSeconds;
39
40 RttEstimator::Duration rto = rtt.computeRto();
41 return time::duration_cast<FloatSeconds>(rto).count();
42}
43
44BOOST_AUTO_TEST_CASE(Basic)
45{
46 RttEstimator rtt;
47
48 for (int i = 0; i < 100; ++i) {
49 rtt.addMeasurement(time::seconds(5));
50 }
51 double rto1 = computeRtoAsFloatSeconds(rtt);
52 BOOST_CHECK_CLOSE(rto1, 5.0, 0.1);
53
54 rtt.doubleMultiplier();
55 double rto2 = computeRtoAsFloatSeconds(rtt);
56 BOOST_CHECK_CLOSE(rto2, 10.0, 0.1);
57
58 rtt.doubleMultiplier();
59 double rto3 = computeRtoAsFloatSeconds(rtt);
60 BOOST_CHECK_CLOSE(rto3, 20.0, 0.1);
61
62 rtt.addMeasurement(time::seconds(5)); // reset multiplier
63 double rto4 = computeRtoAsFloatSeconds(rtt);
64 BOOST_CHECK_CLOSE(rto4, 5.0, 0.1);
65
66 rtt.incrementMultiplier();
67 double rto5 = computeRtoAsFloatSeconds(rtt);
68 BOOST_CHECK_CLOSE(rto5, 10.0, 0.1);
69
70 for (int i = 0; i < 5; ++i) {
71 rtt.addMeasurement(time::seconds(6));
72 } // increased variance
73 double rto6 = computeRtoAsFloatSeconds(rtt);
74 BOOST_CHECK_GT(rto6, rto1);
75}
76
77BOOST_AUTO_TEST_SUITE_END()
78
79} // namespace tests
80} // namespace nfd