blob: 63254bd015c4ed0a4fa4dffc1ec11ffc165ce54b [file] [log] [blame]
Junxiao Shi65d00722014-02-17 10:50:20 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Junxiao Shi19838042014-06-21 00:34:01 -07003 * 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
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070010 *
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/>.
Junxiao Shi19838042014-06-21 00:34:01 -070024 */
Junxiao Shi65d00722014-02-17 10:50:20 -070025
26#include "table/measurements.hpp"
27
Junxiao Shid9ee45c2014-02-27 15:38:11 -070028#include "tests/test-common.hpp"
Junxiao Shi19838042014-06-21 00:34:01 -070029#include "tests/limited-io.hpp"
Junxiao Shi65d00722014-02-17 10:50:20 -070030
31namespace nfd {
Junxiao Shid9ee45c2014-02-27 15:38:11 -070032namespace tests {
Junxiao Shi65d00722014-02-17 10:50:20 -070033
Junxiao Shid9ee45c2014-02-27 15:38:11 -070034BOOST_FIXTURE_TEST_SUITE(TableMeasurements, BaseFixture)
Junxiao Shi65d00722014-02-17 10:50:20 -070035
36BOOST_AUTO_TEST_CASE(Get_Parent)
37{
Haowei Yuanf52dac72014-03-24 23:35:03 -050038 NameTree nameTree;
HangZhangc85a23c2014-03-01 15:55:55 +080039 Measurements measurements(nameTree);
Junxiao Shic041ca32014-02-25 20:01:15 -070040
Junxiao Shi65d00722014-02-17 10:50:20 -070041 Name name0;
42 Name nameA ("ndn:/A");
43 Name nameAB("ndn:/A/B");
44
Junxiao Shi65d00722014-02-17 10:50:20 -070045 shared_ptr<measurements::Entry> entryAB = measurements.get(nameAB);
Junxiao Shie368d992014-12-02 23:44:31 -070046 BOOST_REQUIRE(entryAB != nullptr);
Junxiao Shi65d00722014-02-17 10:50:20 -070047 BOOST_CHECK_EQUAL(entryAB->getName(), nameAB);
48
49 shared_ptr<measurements::Entry> entry0 = measurements.get(name0);
Junxiao Shie368d992014-12-02 23:44:31 -070050 BOOST_REQUIRE(entry0 != nullptr);
Junxiao Shi65d00722014-02-17 10:50:20 -070051
Junxiao Shie368d992014-12-02 23:44:31 -070052 shared_ptr<measurements::Entry> entryA = measurements.getParent(*entryAB);
53 BOOST_REQUIRE(entryA != nullptr);
Junxiao Shi65d00722014-02-17 10:50:20 -070054 BOOST_CHECK_EQUAL(entryA->getName(), nameA);
55
Junxiao Shie368d992014-12-02 23:44:31 -070056 shared_ptr<measurements::Entry> entry0c = measurements.getParent(*entryA);
Junxiao Shi65d00722014-02-17 10:50:20 -070057 BOOST_CHECK_EQUAL(entry0, entry0c);
58}
59
Junxiao Shie368d992014-12-02 23:44:31 -070060BOOST_FIXTURE_TEST_CASE(Lifetime, UnitTestTimeFixture)
Junxiao Shi19838042014-06-21 00:34:01 -070061{
Junxiao Shi19838042014-06-21 00:34:01 -070062 NameTree nameTree;
63 Measurements measurements(nameTree);
64 Name nameA("ndn:/A");
65 Name nameB("ndn:/B");
66 Name nameC("ndn:/C");
67
68 BOOST_CHECK_EQUAL(measurements.size(), 0);
69
70 shared_ptr<measurements::Entry> entryA = measurements.get(nameA);
71 shared_ptr<measurements::Entry> entryB = measurements.get(nameB);
72 shared_ptr<measurements::Entry> entryC = measurements.get(nameC);
73 BOOST_CHECK_EQUAL(measurements.size(), 3);
74
75 const time::nanoseconds EXTEND_A = time::seconds(2);
76 const time::nanoseconds CHECK1 = time::seconds(3);
77 const time::nanoseconds CHECK2 = time::seconds(5);
78 const time::nanoseconds EXTEND_C = time::seconds(6);
79 const time::nanoseconds CHECK3 = time::seconds(7);
Junxiao Shie368d992014-12-02 23:44:31 -070080 BOOST_ASSERT(EXTEND_A < CHECK1);
81 BOOST_ASSERT(CHECK1 < Measurements::getInitialLifetime());
82 BOOST_ASSERT(Measurements::getInitialLifetime() < CHECK2);
83 BOOST_ASSERT(CHECK2 < EXTEND_C);
84 BOOST_ASSERT(EXTEND_C < CHECK3);
Junxiao Shi19838042014-06-21 00:34:01 -070085
Junxiao Shie368d992014-12-02 23:44:31 -070086 measurements.extendLifetime(*entryA, EXTEND_A);
87 measurements.extendLifetime(*entryC, EXTEND_C);
Junxiao Shi19838042014-06-21 00:34:01 -070088 // remaining lifetime:
89 // A = initial lifetime, because it's extended by less duration
90 // B = initial lifetime
91 // C = EXTEND_C
92 entryA.reset();
93 entryB.reset();
94 entryC.reset();
95
Junxiao Shie368d992014-12-02 23:44:31 -070096 this->advanceClocks(time::milliseconds(100), CHECK1);
97 BOOST_CHECK(measurements.findExactMatch(nameA) != nullptr);
98 BOOST_CHECK(measurements.findExactMatch(nameB) != nullptr);
99 BOOST_CHECK(measurements.findExactMatch(nameC) != nullptr);
Junxiao Shi19838042014-06-21 00:34:01 -0700100 BOOST_CHECK_EQUAL(measurements.size(), 3);
101
Junxiao Shie368d992014-12-02 23:44:31 -0700102 this->advanceClocks(time::milliseconds(100), CHECK2 - CHECK1);
103 BOOST_CHECK(measurements.findExactMatch(nameA) == nullptr);
104 BOOST_CHECK(measurements.findExactMatch(nameB) == nullptr);
105 BOOST_CHECK(measurements.findExactMatch(nameC) != nullptr);
Junxiao Shi19838042014-06-21 00:34:01 -0700106 BOOST_CHECK_EQUAL(measurements.size(), 1);
107
Junxiao Shie368d992014-12-02 23:44:31 -0700108 this->advanceClocks(time::milliseconds(100), CHECK3 - CHECK2);
109 BOOST_CHECK(measurements.findExactMatch(nameA) == nullptr);
110 BOOST_CHECK(measurements.findExactMatch(nameB) == nullptr);
111 BOOST_CHECK(measurements.findExactMatch(nameC) == nullptr);
Junxiao Shi19838042014-06-21 00:34:01 -0700112 BOOST_CHECK_EQUAL(measurements.size(), 0);
113}
114
Junxiao Shie368d992014-12-02 23:44:31 -0700115BOOST_FIXTURE_TEST_CASE(EraseNameTreeEntry, UnitTestTimeFixture)
Junxiao Shiee5a4442014-07-27 17:13:43 -0700116{
Junxiao Shiee5a4442014-07-27 17:13:43 -0700117 NameTree nameTree;
118 Measurements measurements(nameTree);
119 size_t nNameTreeEntriesBefore = nameTree.size();
120
121 shared_ptr<measurements::Entry> entry = measurements.get("/A");
Junxiao Shie368d992014-12-02 23:44:31 -0700122 this->advanceClocks(Measurements::getInitialLifetime() + time::milliseconds(10));
Junxiao Shiee5a4442014-07-27 17:13:43 -0700123 BOOST_CHECK_EQUAL(measurements.size(), 0);
124 BOOST_CHECK_EQUAL(nameTree.size(), nNameTreeEntriesBefore);
125}
126
Junxiao Shi65d00722014-02-17 10:50:20 -0700127BOOST_AUTO_TEST_SUITE_END()
128
Junxiao Shid9ee45c2014-02-27 15:38:11 -0700129} // namespace tests
Junxiao Shi65d00722014-02-17 10:50:20 -0700130} // namespace nfd