blob: 37fcbc7300b91c946893f2f596447ceb15c2a6bd [file] [log] [blame]
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -05001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Junxiao Shibb6146e2017-07-26 23:07:52 +00002/*
Davide Pesaventocf7db2f2019-03-24 23:17:28 -04003 * Copyright (c) 2014-2019, Regents of the University of California,
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -05004 * 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
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050026#include "table/cs-policy-priority-fifo.hpp"
Junxiao Shi0de23a22015-12-03 20:07:02 +000027#include "table/cs.hpp"
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050028
29#include "tests/test-common.hpp"
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040030#include "tests/daemon/global-io-fixture.hpp"
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050031
32namespace nfd {
33namespace cs {
34namespace tests {
35
36using namespace nfd::tests;
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050037
Davide Pesavento97210d52016-10-14 15:45:48 +020038BOOST_AUTO_TEST_SUITE(Table)
39BOOST_AUTO_TEST_SUITE(TestCsPriorityFifo)
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050040
Junxiao Shi7ee00fb2016-12-04 21:23:00 +000041BOOST_AUTO_TEST_CASE(Registration)
42{
43 std::set<std::string> policyNames = Policy::getPolicyNames();
44 BOOST_CHECK_EQUAL(policyNames.count("priority_fifo"), 1);
45}
46
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040047BOOST_FIXTURE_TEST_CASE(EvictOne, GlobalIoTimeFixture)
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050048{
49 Cs cs(3);
Davide Pesavento01f8dba2015-09-19 21:11:45 +020050 cs.setPolicy(make_unique<PriorityFifoPolicy>());
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050051
52 shared_ptr<Data> dataA = makeData("ndn:/A");
Davide Pesavento14e71f02019-03-28 17:35:25 -040053 dataA->setFreshnessPeriod(99999_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050054 dataA->wireEncode();
55 cs.insert(*dataA);
56
57 shared_ptr<Data> dataB = makeData("ndn:/B");
Davide Pesavento14e71f02019-03-28 17:35:25 -040058 dataB->setFreshnessPeriod(10_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050059 dataB->wireEncode();
60 cs.insert(*dataB);
61
62 shared_ptr<Data> dataC = makeData("ndn:/C");
Davide Pesavento14e71f02019-03-28 17:35:25 -040063 dataC->setFreshnessPeriod(99999_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050064 dataC->wireEncode();
65 cs.insert(*dataC, true);
66
Davide Pesavento14e71f02019-03-28 17:35:25 -040067 this->advanceClocks(11_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050068
69 // evict unsolicited
70 shared_ptr<Data> dataD = makeData("ndn:/D");
Davide Pesavento14e71f02019-03-28 17:35:25 -040071 dataD->setFreshnessPeriod(99999_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050072 dataD->wireEncode();
73 cs.insert(*dataD);
74 BOOST_CHECK_EQUAL(cs.size(), 3);
75 cs.find(Interest("ndn:/C"),
76 bind([] { BOOST_CHECK(false); }),
77 bind([] { BOOST_CHECK(true); }));
78
79 // evict stale
80 shared_ptr<Data> dataE = makeData("ndn:/E");
Davide Pesavento14e71f02019-03-28 17:35:25 -040081 dataE->setFreshnessPeriod(99999_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050082 dataE->wireEncode();
83 cs.insert(*dataE);
84 BOOST_CHECK_EQUAL(cs.size(), 3);
85 cs.find(Interest("ndn:/B"),
86 bind([] { BOOST_CHECK(false); }),
87 bind([] { BOOST_CHECK(true); }));
88
89 // evict fifo
90 shared_ptr<Data> dataF = makeData("ndn:/F");
Davide Pesavento14e71f02019-03-28 17:35:25 -040091 dataF->setFreshnessPeriod(99999_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050092 dataF->wireEncode();
93 cs.insert(*dataF);
94 BOOST_CHECK_EQUAL(cs.size(), 3);
95 cs.find(Interest("ndn:/A"),
96 bind([] { BOOST_CHECK(false); }),
97 bind([] { BOOST_CHECK(true); }));
98}
99
Davide Pesaventocf7db2f2019-03-24 23:17:28 -0400100BOOST_FIXTURE_TEST_CASE(Refresh, GlobalIoTimeFixture)
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -0500101{
102 Cs cs(3);
Davide Pesavento01f8dba2015-09-19 21:11:45 +0200103 cs.setPolicy(make_unique<PriorityFifoPolicy>());
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -0500104
105 shared_ptr<Data> dataA = makeData("ndn:/A");
Davide Pesavento14e71f02019-03-28 17:35:25 -0400106 dataA->setFreshnessPeriod(99999_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -0500107 dataA->wireEncode();
108 cs.insert(*dataA);
109
110 shared_ptr<Data> dataB = makeData("ndn:/B");
Davide Pesavento14e71f02019-03-28 17:35:25 -0400111 dataB->setFreshnessPeriod(10_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -0500112 dataB->wireEncode();
113 cs.insert(*dataB);
114
115 shared_ptr<Data> dataC = makeData("ndn:/C");
Davide Pesavento14e71f02019-03-28 17:35:25 -0400116 dataC->setFreshnessPeriod(10_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -0500117 dataC->wireEncode();
118 cs.insert(*dataC);
119
Davide Pesavento14e71f02019-03-28 17:35:25 -0400120 this->advanceClocks(11_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -0500121
122 // refresh dataB
123 shared_ptr<Data> dataB2 = make_shared<Data>(*dataB);
124 dataB2->wireEncode();
125 cs.insert(*dataB2);
126 BOOST_CHECK_EQUAL(cs.size(), 3);
127 cs.find(Interest("ndn:/A"),
128 bind([] { BOOST_CHECK(true); }),
129 bind([] { BOOST_CHECK(false); }));
130
131 cs.find(Interest("ndn:/B"),
132 bind([] { BOOST_CHECK(true); }),
133 bind([] { BOOST_CHECK(false); }));
134
135 cs.find(Interest("ndn:/C"),
136 bind([] { BOOST_CHECK(true); }),
137 bind([] { BOOST_CHECK(false); }));
138
139 // evict dataC stale
140 shared_ptr<Data> dataD = makeData("ndn:/D");
Davide Pesavento14e71f02019-03-28 17:35:25 -0400141 dataD->setFreshnessPeriod(99999_ms);
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -0500142 dataD->wireEncode();
143 cs.insert(*dataD);
144 BOOST_CHECK_EQUAL(cs.size(), 3);
145 cs.find(Interest("ndn:/C"),
146 bind([] { BOOST_CHECK(false); }),
147 bind([] { BOOST_CHECK(true); }));
148}
149
Davide Pesavento97210d52016-10-14 15:45:48 +0200150BOOST_AUTO_TEST_SUITE_END() // TestCsPriorityFifo
151BOOST_AUTO_TEST_SUITE_END() // Table
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -0500152
153} // namespace tests
154} // namespace cs
155} // namespace nfd