blob: 04a613f8b04fd5ac6db4cfdcd6a3495017000640 [file] [log] [blame]
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -05001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Davide Pesavento97210d52016-10-14 15:45:48 +02003 * Copyright (c) 2014-2016, 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#include <ndn-cxx/util/crypto.hpp>
29
30#include "tests/test-common.hpp"
31
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
Minsheng Zhangcb6e05f2015-04-20 15:51:47 -050047BOOST_FIXTURE_TEST_CASE(EvictOne, UnitTestTimeFixture)
48{
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");
53 dataA->setFreshnessPeriod(time::milliseconds(99999));
54 dataA->wireEncode();
55 cs.insert(*dataA);
56
57 shared_ptr<Data> dataB = makeData("ndn:/B");
58 dataB->setFreshnessPeriod(time::milliseconds(10));
59 dataB->wireEncode();
60 cs.insert(*dataB);
61
62 shared_ptr<Data> dataC = makeData("ndn:/C");
63 dataC->setFreshnessPeriod(time::milliseconds(99999));
64 dataC->wireEncode();
65 cs.insert(*dataC, true);
66
67 this->advanceClocks(time::milliseconds(11));
68
69 // evict unsolicited
70 shared_ptr<Data> dataD = makeData("ndn:/D");
71 dataD->setFreshnessPeriod(time::milliseconds(99999));
72 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");
81 dataE->setFreshnessPeriod(time::milliseconds(99999));
82 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");
91 dataF->setFreshnessPeriod(time::milliseconds(99999));
92 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
100BOOST_FIXTURE_TEST_CASE(Refresh, UnitTestTimeFixture)
101{
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");
106 dataA->setFreshnessPeriod(time::milliseconds(99999));
107 dataA->wireEncode();
108 cs.insert(*dataA);
109
110 shared_ptr<Data> dataB = makeData("ndn:/B");
111 dataB->setFreshnessPeriod(time::milliseconds(10));
112 dataB->wireEncode();
113 cs.insert(*dataB);
114
115 shared_ptr<Data> dataC = makeData("ndn:/C");
116 dataC->setFreshnessPeriod(time::milliseconds(10));
117 dataC->wireEncode();
118 cs.insert(*dataC);
119
120 this->advanceClocks(time::milliseconds(11));
121
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");
141 dataD->setFreshnessPeriod(time::milliseconds(99999));
142 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