blob: 11eafe1cde647cdf72b8d7d5982654cec9cedd11 [file] [log] [blame]
Junxiao Shi36b22252016-08-25 13:22:21 +00001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
ashiqopuc7079482019-02-20 05:34:37 +00002/*
3 * Copyright (c) 2014-2019, Regents of the University of California,
Junxiao Shi36b22252016-08-25 13:22:21 +00004 * 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/unsolicited-data-policy.hpp"
27#include "fw/forwarder.hpp"
Junxiao Shi36b22252016-08-25 13:22:21 +000028
29#include "tests/test-common.hpp"
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040030#include "tests/daemon/global-io-fixture.hpp"
31#include "tests/daemon/face/dummy-face.hpp"
32
Junxiao Shi36b22252016-08-25 13:22:21 +000033#include <boost/logic/tribool.hpp>
34#include <boost/mpl/vector.hpp>
35
36namespace nfd {
37namespace fw {
38namespace tests {
39
40using namespace nfd::tests;
41
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040042class UnsolicitedDataPolicyFixture : public GlobalIoTimeFixture
Junxiao Shi36b22252016-08-25 13:22:21 +000043{
44protected:
45 UnsolicitedDataPolicyFixture()
46 : cs(forwarder.getCs())
47 {
48 }
49
50 /** \tparam Policy policy type, or void to keep default policy
51 */
52 template<typename Policy>
53 void
54 setPolicy()
55 {
56 forwarder.setUnsolicitedDataPolicy(make_unique<Policy>());
57 }
58
59 bool
60 isInCs(const Data& data)
61 {
62 using namespace boost::logic;
63
64 tribool isFound = indeterminate;
65 cs.find(Interest(data.getFullName()),
Davide Pesaventofa2aa502019-03-22 13:30:02 -040066 bind([&] { isFound = true; }),
67 bind([&] { isFound = false; }));
Junxiao Shi36b22252016-08-25 13:22:21 +000068
Davide Pesaventofa2aa502019-03-22 13:30:02 -040069 this->advanceClocks(1_ms);
Junxiao Shi36b22252016-08-25 13:22:21 +000070 BOOST_REQUIRE(!indeterminate(isFound));
Davide Pesaventofa2aa502019-03-22 13:30:02 -040071 return bool(isFound);
Junxiao Shi36b22252016-08-25 13:22:21 +000072 }
73
74protected:
75 Forwarder forwarder;
76 Cs& cs;
77};
78
79template<>
80void
81UnsolicitedDataPolicyFixture::setPolicy<void>()
82{
83 // void keeps the default policy
84}
85
86BOOST_AUTO_TEST_SUITE(Fw)
87BOOST_FIXTURE_TEST_SUITE(TestUnsolicitedDataPolicy, UnsolicitedDataPolicyFixture)
88
Junxiao Shi9db73592016-12-01 23:43:11 +000089BOOST_AUTO_TEST_CASE(GetPolicyNames)
90{
91 std::set<std::string> policyNames = UnsolicitedDataPolicy::getPolicyNames();
92 BOOST_CHECK_EQUAL(policyNames.count("drop-all"), 1);
93 BOOST_CHECK_EQUAL(policyNames.count("admit-local"), 1);
94 BOOST_CHECK_EQUAL(policyNames.count("admit-network"), 1);
95 BOOST_CHECK_EQUAL(policyNames.count("admit-all"), 1);
96}
97
Junxiao Shi36b22252016-08-25 13:22:21 +000098template<typename Policy, bool shouldAdmitLocal, bool shouldAdmitNonLocal>
99struct FaceScopePolicyTest
100{
101 typedef Policy PolicyType;
102 typedef std::integral_constant<bool, shouldAdmitLocal> ShouldAdmitLocal;
103 typedef std::integral_constant<bool, shouldAdmitNonLocal> ShouldAdmitNonLocal;
104};
105
106typedef boost::mpl::vector<
Junxiao Shi88f5f732016-09-03 07:11:37 +0000107 FaceScopePolicyTest<void, false, false>, // default policy
Junxiao Shi36b22252016-08-25 13:22:21 +0000108 FaceScopePolicyTest<DropAllUnsolicitedDataPolicy, false, false>,
109 FaceScopePolicyTest<AdmitLocalUnsolicitedDataPolicy, true, false>,
110 FaceScopePolicyTest<AdmitNetworkUnsolicitedDataPolicy, false, true>,
111 FaceScopePolicyTest<AdmitAllUnsolicitedDataPolicy, true, true>
112> FaceScopePolicyTests;
113
114BOOST_AUTO_TEST_CASE_TEMPLATE(FaceScopePolicy, T, FaceScopePolicyTests)
115{
116 setPolicy<typename T::PolicyType>();
117
118 auto face1 = make_shared<DummyFace>("dummy://", "dummy://",
119 ndn::nfd::FACE_SCOPE_LOCAL);
120 forwarder.addFace(face1);
121
122 shared_ptr<Data> data1 = makeData("/unsolicited-from-local");
ashiqopuc7079482019-02-20 05:34:37 +0000123 forwarder.onIncomingData(FaceEndpoint(*face1, 0), *data1);
Junxiao Shi36b22252016-08-25 13:22:21 +0000124 BOOST_CHECK_EQUAL(isInCs(*data1), T::ShouldAdmitLocal::value);
125
126 auto face2 = make_shared<DummyFace>("dummy://", "dummy://",
127 ndn::nfd::FACE_SCOPE_NON_LOCAL);
128 forwarder.addFace(face2);
129
130 shared_ptr<Data> data2 = makeData("/unsolicited-from-non-local");
ashiqopuc7079482019-02-20 05:34:37 +0000131 forwarder.onIncomingData(FaceEndpoint(*face2, 0), *data2);
Junxiao Shi36b22252016-08-25 13:22:21 +0000132 BOOST_CHECK_EQUAL(isInCs(*data2), T::ShouldAdmitNonLocal::value);
133}
134
135BOOST_AUTO_TEST_SUITE_END() // TestUnsolicitedDataPolicy
136BOOST_AUTO_TEST_SUITE_END() // Fw
137
138} // namespace tests
139} // namespace fw
140} // namespace nfd