blob: ee5ae77391bf783e971887fd766da9f437628075 [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/*
Davide Pesaventoa3a7a4e2022-05-29 16:06:22 -04003 * Copyright (c) 2014-2022, 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
Davide Pesaventoe422f9e2022-06-03 01:30:23 -040036namespace nfd::tests {
Junxiao Shi36b22252016-08-25 13:22:21 +000037
Davide Pesaventoe422f9e2022-06-03 01:30:23 -040038using namespace nfd::fw;
Junxiao Shi36b22252016-08-25 13:22:21 +000039
Davide Pesaventocf7db2f2019-03-24 23:17:28 -040040class UnsolicitedDataPolicyFixture : public GlobalIoTimeFixture
Junxiao Shi36b22252016-08-25 13:22:21 +000041{
42protected:
Junxiao Shi36b22252016-08-25 13:22:21 +000043 /** \tparam Policy policy type, or void to keep default policy
44 */
45 template<typename Policy>
46 void
47 setPolicy()
48 {
49 forwarder.setUnsolicitedDataPolicy(make_unique<Policy>());
50 }
51
52 bool
53 isInCs(const Data& data)
54 {
55 using namespace boost::logic;
56
57 tribool isFound = indeterminate;
58 cs.find(Interest(data.getFullName()),
Davide Pesavento412c9822021-07-02 00:21:05 -040059 [&] (auto&&...) { isFound = true; },
60 [&] (auto&&...) { isFound = false; });
Junxiao Shi36b22252016-08-25 13:22:21 +000061
Davide Pesaventofa2aa502019-03-22 13:30:02 -040062 this->advanceClocks(1_ms);
Junxiao Shi36b22252016-08-25 13:22:21 +000063 BOOST_REQUIRE(!indeterminate(isFound));
Davide Pesaventofa2aa502019-03-22 13:30:02 -040064 return bool(isFound);
Junxiao Shi36b22252016-08-25 13:22:21 +000065 }
66
67protected:
Davide Pesaventoa4abfb02019-10-06 16:02:56 -040068 FaceTable faceTable;
69 Forwarder forwarder{faceTable};
70 Cs& cs{forwarder.getCs()};
Junxiao Shi36b22252016-08-25 13:22:21 +000071};
72
73template<>
74void
75UnsolicitedDataPolicyFixture::setPolicy<void>()
76{
77 // void keeps the default policy
78}
79
80BOOST_AUTO_TEST_SUITE(Fw)
81BOOST_FIXTURE_TEST_SUITE(TestUnsolicitedDataPolicy, UnsolicitedDataPolicyFixture)
82
Junxiao Shi9db73592016-12-01 23:43:11 +000083BOOST_AUTO_TEST_CASE(GetPolicyNames)
84{
85 std::set<std::string> policyNames = UnsolicitedDataPolicy::getPolicyNames();
86 BOOST_CHECK_EQUAL(policyNames.count("drop-all"), 1);
87 BOOST_CHECK_EQUAL(policyNames.count("admit-local"), 1);
88 BOOST_CHECK_EQUAL(policyNames.count("admit-network"), 1);
89 BOOST_CHECK_EQUAL(policyNames.count("admit-all"), 1);
90}
91
Junxiao Shi36b22252016-08-25 13:22:21 +000092template<typename Policy, bool shouldAdmitLocal, bool shouldAdmitNonLocal>
93struct FaceScopePolicyTest
94{
Davide Pesavento0498ce82021-06-14 02:02:21 -040095 using PolicyType = Policy;
Davide Pesaventoa3a7a4e2022-05-29 16:06:22 -040096 using ShouldAdmitLocal = std::bool_constant<shouldAdmitLocal>;
97 using ShouldAdmitNonLocal = std::bool_constant<shouldAdmitNonLocal>;
Junxiao Shi36b22252016-08-25 13:22:21 +000098};
99
Davide Pesavento0498ce82021-06-14 02:02:21 -0400100using FaceScopePolicyTests = boost::mpl::vector<
Junxiao Shi88f5f732016-09-03 07:11:37 +0000101 FaceScopePolicyTest<void, false, false>, // default policy
Junxiao Shi36b22252016-08-25 13:22:21 +0000102 FaceScopePolicyTest<DropAllUnsolicitedDataPolicy, false, false>,
103 FaceScopePolicyTest<AdmitLocalUnsolicitedDataPolicy, true, false>,
104 FaceScopePolicyTest<AdmitNetworkUnsolicitedDataPolicy, false, true>,
105 FaceScopePolicyTest<AdmitAllUnsolicitedDataPolicy, true, true>
Davide Pesavento0498ce82021-06-14 02:02:21 -0400106>;
Junxiao Shi36b22252016-08-25 13:22:21 +0000107
108BOOST_AUTO_TEST_CASE_TEMPLATE(FaceScopePolicy, T, FaceScopePolicyTests)
109{
110 setPolicy<typename T::PolicyType>();
111
112 auto face1 = make_shared<DummyFace>("dummy://", "dummy://",
113 ndn::nfd::FACE_SCOPE_LOCAL);
Davide Pesaventoa4abfb02019-10-06 16:02:56 -0400114 faceTable.add(face1);
Junxiao Shi36b22252016-08-25 13:22:21 +0000115
Davide Pesavento0498ce82021-06-14 02:02:21 -0400116 auto data1 = makeData("/unsolicited-from-local");
117 forwarder.onIncomingData(*data1, FaceEndpoint(*face1, 0));
Junxiao Shi36b22252016-08-25 13:22:21 +0000118 BOOST_CHECK_EQUAL(isInCs(*data1), T::ShouldAdmitLocal::value);
119
120 auto face2 = make_shared<DummyFace>("dummy://", "dummy://",
121 ndn::nfd::FACE_SCOPE_NON_LOCAL);
Davide Pesaventoa4abfb02019-10-06 16:02:56 -0400122 faceTable.add(face2);
Junxiao Shi36b22252016-08-25 13:22:21 +0000123
Davide Pesavento0498ce82021-06-14 02:02:21 -0400124 auto data2 = makeData("/unsolicited-from-non-local");
125 forwarder.onIncomingData(*data2, FaceEndpoint(*face2, 0));
Junxiao Shi36b22252016-08-25 13:22:21 +0000126 BOOST_CHECK_EQUAL(isInCs(*data2), T::ShouldAdmitNonLocal::value);
127}
128
129BOOST_AUTO_TEST_SUITE_END() // TestUnsolicitedDataPolicy
130BOOST_AUTO_TEST_SUITE_END() // Fw
131
Davide Pesaventoe422f9e2022-06-03 01:30:23 -0400132} // namespace nfd::tests