blob: c2afb969671acb448c8e272585d247bebeadcb30 [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);
46 BOOST_REQUIRE(static_cast<bool>(entryAB));
47 BOOST_CHECK_EQUAL(entryAB->getName(), nameAB);
48
49 shared_ptr<measurements::Entry> entry0 = measurements.get(name0);
50 BOOST_REQUIRE(static_cast<bool>(entry0));
51
52 shared_ptr<measurements::Entry> entryA = measurements.getParent(entryAB);
53 BOOST_REQUIRE(static_cast<bool>(entryA));
54 BOOST_CHECK_EQUAL(entryA->getName(), nameA);
55
56 shared_ptr<measurements::Entry> entry0c = measurements.getParent(entryA);
57 BOOST_CHECK_EQUAL(entry0, entry0c);
58}
59
Junxiao Shi19838042014-06-21 00:34:01 -070060BOOST_AUTO_TEST_CASE(Lifetime)
61{
62 LimitedIo limitedIo;
63 NameTree nameTree;
64 Measurements measurements(nameTree);
65 Name nameA("ndn:/A");
66 Name nameB("ndn:/B");
67 Name nameC("ndn:/C");
68
69 BOOST_CHECK_EQUAL(measurements.size(), 0);
70
71 shared_ptr<measurements::Entry> entryA = measurements.get(nameA);
72 shared_ptr<measurements::Entry> entryB = measurements.get(nameB);
73 shared_ptr<measurements::Entry> entryC = measurements.get(nameC);
74 BOOST_CHECK_EQUAL(measurements.size(), 3);
75
76 const time::nanoseconds EXTEND_A = time::seconds(2);
77 const time::nanoseconds CHECK1 = time::seconds(3);
78 const time::nanoseconds CHECK2 = time::seconds(5);
79 const time::nanoseconds EXTEND_C = time::seconds(6);
80 const time::nanoseconds CHECK3 = time::seconds(7);
81 BOOST_ASSERT(EXTEND_A < CHECK1 &&
82 CHECK1 < Measurements::getInitialLifetime() &&
83 Measurements::getInitialLifetime() < CHECK2 &&
84 CHECK2 < EXTEND_C &&
85 EXTEND_C < CHECK3);
86
87 measurements.extendLifetime(*entryA, EXTEND_A);
88 measurements.extendLifetime(*entryC, EXTEND_C);
89 // remaining lifetime:
90 // A = initial lifetime, because it's extended by less duration
91 // B = initial lifetime
92 // C = EXTEND_C
93 entryA.reset();
94 entryB.reset();
95 entryC.reset();
96
97 BOOST_CHECK_EQUAL(limitedIo.run(LimitedIo::UNLIMITED_OPS, CHECK1), LimitedIo::EXCEED_TIME);
98 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameA)), true);
99 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameB)), true);
100 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameC)), true);
101 BOOST_CHECK_EQUAL(measurements.size(), 3);
102
103 BOOST_CHECK_EQUAL(limitedIo.run(LimitedIo::UNLIMITED_OPS, CHECK2 - CHECK1),
104 LimitedIo::EXCEED_TIME);
105 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameA)), false);
106 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameB)), false);
107 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameC)), true);
108 BOOST_CHECK_EQUAL(measurements.size(), 1);
109
110 BOOST_CHECK_EQUAL(limitedIo.run(LimitedIo::UNLIMITED_OPS, CHECK3 - CHECK2),
111 LimitedIo::EXCEED_TIME);
112 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameA)), false);
113 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameB)), false);
114 BOOST_CHECK_EQUAL(static_cast<bool>(measurements.findExactMatch(nameC)), false);
115 BOOST_CHECK_EQUAL(measurements.size(), 0);
116}
117
Junxiao Shi65d00722014-02-17 10:50:20 -0700118BOOST_AUTO_TEST_SUITE_END()
119
Junxiao Shid9ee45c2014-02-27 15:38:11 -0700120} // namespace tests
Junxiao Shi65d00722014-02-17 10:50:20 -0700121} // namespace nfd