blob: 139c7f7826b81fc8a81988dac83079735973ea70 [file] [log] [blame]
Junxiao Shi4b469982015-12-03 18:20:19 +00001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2013-2015 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#include "lp/tags.hpp"
23#include "encoding/nfd-constants.hpp"
24#include "interest.hpp"
25#include "data.hpp"
26#include "lp/nack.hpp"
27
28#include <boost/mpl/vector.hpp>
29#include "boost-test.hpp"
30
31#ifdef NDN_LP_KEEP_LOCAL_CONTROL_HEADER
32#include "management/nfd-local-control-header.hpp"
33#endif // NDN_LP_KEEP_LOCAL_CONTROL_HEADER
34
35namespace ndn {
36namespace lp {
37namespace tests {
38
39BOOST_AUTO_TEST_SUITE(Lp)
40BOOST_AUTO_TEST_SUITE(TestTags)
41
42#ifdef NDN_LP_KEEP_LOCAL_CONTROL_HEADER
43
44#pragma GCC diagnostic push
45#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
46
47BOOST_AUTO_TEST_SUITE(Facade)
48
49typedef boost::mpl::vector<Interest, Data, Nack> TagHostTypes;
50
51BOOST_AUTO_TEST_CASE_TEMPLATE(IncomingFaceId, T, TagHostTypes)
52{
53 T pkt;
54 LocalControlHeaderFacade lch(pkt);
55
56 BOOST_CHECK_EQUAL(lch.hasIncomingFaceId(), false);
57
58 lch.setIncomingFaceId(303);
59 shared_ptr<IncomingFaceIdTag> tag = static_cast<TagHost&>(pkt).getTag<IncomingFaceIdTag>();
60 BOOST_REQUIRE(tag != nullptr);
61 BOOST_CHECK_EQUAL(*tag, 303);
62
63 lch.setIncomingFaceId(ndn::nfd::INVALID_FACE_ID);
64 BOOST_CHECK(static_cast<TagHost&>(pkt).getTag<IncomingFaceIdTag>() == nullptr);
65
66 static_cast<TagHost&>(pkt).setTag(make_shared<IncomingFaceIdTag>(104));
67 BOOST_CHECK_EQUAL(lch.getIncomingFaceId(), 104);
68}
69
70BOOST_AUTO_TEST_CASE_TEMPLATE(NextHopFaceId, T, TagHostTypes)
71{
72 T pkt;
73 LocalControlHeaderFacade lch(pkt);
74
75 BOOST_CHECK_EQUAL(lch.hasNextHopFaceId(), false);
76
77 lch.setNextHopFaceId(303);
78 shared_ptr<NextHopFaceIdTag> tag = static_cast<TagHost&>(pkt).getTag<NextHopFaceIdTag>();
79 BOOST_REQUIRE(tag != nullptr);
80 BOOST_CHECK_EQUAL(*tag, 303);
81
82 lch.setNextHopFaceId(ndn::nfd::INVALID_FACE_ID);
83 BOOST_CHECK(static_cast<TagHost&>(pkt).getTag<NextHopFaceIdTag>() == nullptr);
84
85 static_cast<TagHost&>(pkt).setTag(make_shared<NextHopFaceIdTag>(104));
86 BOOST_CHECK_EQUAL(lch.getNextHopFaceId(), 104);
87}
88
89BOOST_AUTO_TEST_CASE_TEMPLATE(CachePolicy, T, TagHostTypes)
90{
91 using lp::CachePolicy;
92
93 T pkt;
94 LocalControlHeaderFacade lch(pkt);
95
96 BOOST_CHECK_EQUAL(lch.hasCachingPolicy(), false);
97
98 lch.setCachingPolicy(LocalControlHeaderFacade::NO_CACHE);
99 shared_ptr<CachePolicyTag> tag = static_cast<TagHost&>(pkt).getTag<CachePolicyTag>();
100 BOOST_REQUIRE(tag != nullptr);
101 BOOST_CHECK_EQUAL(tag->get().getPolicy(), CachePolicyType::NO_CACHE);
102
103 lch.setCachingPolicy(LocalControlHeaderFacade::INVALID_POLICY);
104 BOOST_CHECK(static_cast<TagHost&>(pkt).getTag<CachePolicyTag>() == nullptr);
105
106 auto tag2 = make_shared<CachePolicyTag>(CachePolicy().setPolicy(CachePolicyType::NO_CACHE));
107 static_cast<TagHost&>(pkt).setTag(tag2);
108 BOOST_CHECK_EQUAL(lch.getCachingPolicy(), LocalControlHeaderFacade::NO_CACHE);
109}
110
111BOOST_AUTO_TEST_SUITE_END() // Facade
112
113BOOST_AUTO_TEST_CASE(InterestGetters)
114{
115 Interest interest;
116
117 interest.setTag(make_shared<IncomingFaceIdTag>(319));
118 BOOST_CHECK_EQUAL(interest.getLocalControlHeader().getIncomingFaceId(), 319);
119 BOOST_CHECK_EQUAL(interest.getIncomingFaceId(), 319);
120
121 interest.setTag(make_shared<NextHopFaceIdTag>(213));
122 BOOST_CHECK_EQUAL(interest.getLocalControlHeader().getNextHopFaceId(), 213);
123 BOOST_CHECK_EQUAL(interest.getNextHopFaceId(), 213);
124}
125
126BOOST_AUTO_TEST_CASE(InterestSetters)
127{
128 Interest interest;
129
130 interest.getLocalControlHeader().setIncomingFaceId(268);
131 shared_ptr<IncomingFaceIdTag> incomingFaceIdTag = interest.getTag<IncomingFaceIdTag>();
132 BOOST_REQUIRE(incomingFaceIdTag != nullptr);
133 BOOST_CHECK_EQUAL(*incomingFaceIdTag, 268);
134
135 interest.setIncomingFaceId(153);
136 incomingFaceIdTag = interest.getTag<IncomingFaceIdTag>();
137 BOOST_REQUIRE(incomingFaceIdTag != nullptr);
138 BOOST_CHECK_EQUAL(*incomingFaceIdTag, 153);
139
140 interest.getLocalControlHeader().setNextHopFaceId(307);
141 shared_ptr<NextHopFaceIdTag> nextHopFaceIdTag = interest.getTag<NextHopFaceIdTag>();
142 BOOST_REQUIRE(nextHopFaceIdTag != nullptr);
143 BOOST_CHECK_EQUAL(*nextHopFaceIdTag, 307);
144
145 interest.setNextHopFaceId(260);
146 nextHopFaceIdTag = interest.getTag<NextHopFaceIdTag>();
147 BOOST_REQUIRE(nextHopFaceIdTag != nullptr);
148 BOOST_CHECK_EQUAL(*nextHopFaceIdTag, 260);
149}
150
151BOOST_AUTO_TEST_CASE(DataGetters)
152{
153 Data data;
154
155 data.setTag(make_shared<IncomingFaceIdTag>(16));
156 BOOST_CHECK_EQUAL(data.getLocalControlHeader().getIncomingFaceId(), 16);
157 BOOST_CHECK_EQUAL(data.getIncomingFaceId(), 16);
158
159 data.setTag(make_shared<CachePolicyTag>(CachePolicy().setPolicy(CachePolicyType::NO_CACHE)));
160 BOOST_CHECK_EQUAL(data.getLocalControlHeader().getCachingPolicy(), nfd::LocalControlHeader::NO_CACHE);
161 BOOST_CHECK_EQUAL(data.getCachingPolicy(), nfd::LocalControlHeader::NO_CACHE);
162}
163
164BOOST_AUTO_TEST_CASE(DataSetters)
165{
166 Data data;
167
168 data.getLocalControlHeader().setIncomingFaceId(297);
169 shared_ptr<IncomingFaceIdTag> incomingFaceIdTag = data.getTag<IncomingFaceIdTag>();
170 BOOST_REQUIRE(incomingFaceIdTag != nullptr);
171 BOOST_CHECK_EQUAL(*incomingFaceIdTag, 297);
172
173 data.setIncomingFaceId(233);
174 incomingFaceIdTag = data.getTag<IncomingFaceIdTag>();
175 BOOST_REQUIRE(incomingFaceIdTag != nullptr);
176 BOOST_CHECK_EQUAL(*incomingFaceIdTag, 233);
177
178 data.getLocalControlHeader().setCachingPolicy(nfd::LocalControlHeader::NO_CACHE);
179 shared_ptr<CachePolicyTag> cachePolicyTag = data.getTag<CachePolicyTag>();
180 BOOST_REQUIRE(cachePolicyTag != nullptr);
181 BOOST_CHECK_EQUAL(cachePolicyTag->get().getPolicy(), CachePolicyType::NO_CACHE);
182
183 data.setCachingPolicy(nfd::LocalControlHeader::INVALID_POLICY);
184 cachePolicyTag = data.getTag<CachePolicyTag>();
185 BOOST_CHECK(cachePolicyTag == nullptr);
186}
187
188#pragma GCC diagnostic pop
189
190#endif // NDN_LP_KEEP_LOCAL_CONTROL_HEADER
191
192BOOST_AUTO_TEST_SUITE_END() // TestTags
193BOOST_AUTO_TEST_SUITE_END() // Lp
194
195} // namespace tests
196} // namespace lp
197} // namespace ndn