blob: e12d675f0e87611b829e6375c800019db1e3f119 [file] [log] [blame]
Alexander Afanasyevc169a812014-05-20 20:37:29 -04001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Junxiao Shibc19b372014-03-23 16:59:25 -07002/**
Eric Newberryda916d62016-08-11 23:04:34 -07003 * Copyright (c) 2013-2016 Regents of the University of California.
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07006 *
Alexander Afanasyevc169a812014-05-20 20:37:29 -04007 * 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.
Junxiao Shibc19b372014-03-23 16:59:25 -070020 */
21
22#include "management/nfd-control-parameters.hpp"
Junxiao Shibc19b372014-03-23 16:59:25 -070023
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070024#include "boost-test.hpp"
Junxiao Shibc19b372014-03-23 16:59:25 -070025
26namespace ndn {
27namespace nfd {
Spyridon Mastorakis429634f2015-02-19 17:35:33 -080028namespace tests {
Junxiao Shibc19b372014-03-23 16:59:25 -070029
Spyridon Mastorakis429634f2015-02-19 17:35:33 -080030BOOST_AUTO_TEST_SUITE(ManagementNfdControlParameters)
Junxiao Shibc19b372014-03-23 16:59:25 -070031
32BOOST_AUTO_TEST_CASE(FaceOptions)
33{
34 ControlParameters parameters;
35 parameters.setUri("tcp4://192.0.2.1:6363");
Yukai Tud93c5fc2015-08-25 11:37:16 +080036 parameters.setFacePersistency(ndn::nfd::FacePersistency::FACE_PERSISTENCY_PERSISTENT);
Eric Newberryda916d62016-08-11 23:04:34 -070037 parameters.setFlags(1);
38 parameters.setMask(1);
Junxiao Shibc19b372014-03-23 16:59:25 -070039 Block wire = parameters.wireEncode();
40
41 ControlParameters decoded(wire);
42 BOOST_CHECK_EQUAL(decoded.getUri(), "tcp4://192.0.2.1:6363");
Yukai Tud93c5fc2015-08-25 11:37:16 +080043 BOOST_CHECK_EQUAL(decoded.getFacePersistency(), ndn::nfd::FacePersistency::FACE_PERSISTENCY_PERSISTENT);
Eric Newberryda916d62016-08-11 23:04:34 -070044 BOOST_CHECK_EQUAL(decoded.getFlags(), 1);
45 BOOST_CHECK_EQUAL(decoded.getMask(), 1);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070046
Junxiao Shibc19b372014-03-23 16:59:25 -070047 BOOST_CHECK_EQUAL(decoded.hasName(), false);
48 BOOST_CHECK_EQUAL(decoded.hasFaceId(), false);
49 BOOST_CHECK_EQUAL(decoded.hasLocalControlFeature(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070050 BOOST_CHECK_EQUAL(decoded.hasOrigin(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -070051 BOOST_CHECK_EQUAL(decoded.hasCost(), false);
52 BOOST_CHECK_EQUAL(decoded.hasStrategy(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070053 BOOST_CHECK_EQUAL(decoded.hasExpirationPeriod(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -070054}
55
56BOOST_AUTO_TEST_CASE(FaceLocalControlOptions)
57{
58 ControlParameters parameters;
59 parameters.setLocalControlFeature(LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID);
60
61 Block wire = parameters.wireEncode();
62
63 ControlParameters decoded(wire);
64 BOOST_CHECK_EQUAL(decoded.getLocalControlFeature(), LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070065
Junxiao Shibc19b372014-03-23 16:59:25 -070066 BOOST_CHECK_EQUAL(decoded.hasName(), false);
67 BOOST_CHECK_EQUAL(decoded.hasFaceId(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -070068 BOOST_CHECK_EQUAL(decoded.hasUri(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070069 BOOST_CHECK_EQUAL(decoded.hasOrigin(), false);
70 BOOST_CHECK_EQUAL(decoded.hasCost(), false);
71 BOOST_CHECK_EQUAL(decoded.hasFlags(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -070072 BOOST_CHECK_EQUAL(decoded.hasStrategy(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070073 BOOST_CHECK_EQUAL(decoded.hasExpirationPeriod(), false);
Yukai Tud93c5fc2015-08-25 11:37:16 +080074 BOOST_CHECK_EQUAL(decoded.hasFacePersistency(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -070075}
76
77BOOST_AUTO_TEST_CASE(FibOptions)
78{
79 ControlParameters parameters;
80 parameters.setName("ndn:/example")
81 .setFaceId(4)
82 .setCost(555);
83
84 Block wire = parameters.wireEncode();
85
86 ControlParameters decoded(wire);
87 BOOST_CHECK_EQUAL(decoded.getName(), Name("ndn:/example"));
88 BOOST_CHECK_EQUAL(decoded.getFaceId(), 4);
89 BOOST_CHECK_EQUAL(decoded.getCost(), 555);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070090
Junxiao Shibc19b372014-03-23 16:59:25 -070091 BOOST_CHECK_EQUAL(decoded.hasUri(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070092 BOOST_CHECK_EQUAL(decoded.hasLocalControlFeature(), false);
93 BOOST_CHECK_EQUAL(decoded.hasOrigin(), false);
94 BOOST_CHECK_EQUAL(decoded.hasFlags(), false);
Eric Newberryda916d62016-08-11 23:04:34 -070095 BOOST_CHECK_EQUAL(decoded.hasMask(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -070096 BOOST_CHECK_EQUAL(decoded.hasStrategy(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -070097 BOOST_CHECK_EQUAL(decoded.hasExpirationPeriod(), false);
Yukai Tud93c5fc2015-08-25 11:37:16 +080098 BOOST_CHECK_EQUAL(decoded.hasFacePersistency(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -070099}
100
101BOOST_AUTO_TEST_CASE(StrategyChoiceOptions)
102{
103 ControlParameters parameters;
104 parameters.setName("ndn:/")
105 .setStrategy("ndn:/strategy/A");
106
107 Block wire = parameters.wireEncode();
108
109 ControlParameters decoded(wire);
110 BOOST_CHECK_EQUAL(decoded.getName(), Name("ndn:/"));
111 BOOST_CHECK_EQUAL(decoded.getStrategy(), Name("ndn:/strategy/A"));
Junxiao Shi5f6c74f2014-04-18 16:29:44 -0700112
Junxiao Shibc19b372014-03-23 16:59:25 -0700113 BOOST_CHECK_EQUAL(decoded.hasFaceId(), false);
114 BOOST_CHECK_EQUAL(decoded.hasUri(), false);
115 BOOST_CHECK_EQUAL(decoded.hasLocalControlFeature(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -0700116 BOOST_CHECK_EQUAL(decoded.hasOrigin(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -0700117 BOOST_CHECK_EQUAL(decoded.hasCost(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -0700118 BOOST_CHECK_EQUAL(decoded.hasFlags(), false);
Eric Newberryda916d62016-08-11 23:04:34 -0700119 BOOST_CHECK_EQUAL(decoded.hasMask(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -0700120 BOOST_CHECK_EQUAL(decoded.hasExpirationPeriod(), false);
Yukai Tud93c5fc2015-08-25 11:37:16 +0800121 BOOST_CHECK_EQUAL(decoded.hasFacePersistency(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -0700122}
123
124BOOST_AUTO_TEST_CASE(RibOptions)
125{
126 ControlParameters parameters;
127 parameters.setName("ndn:/example")
128 .setFaceId(4)
129 .setOrigin(128)
130 .setCost(6)
131 .setFlags(0x01)
132 .setExpirationPeriod(time::milliseconds(1800000));
133
134 Block wire = parameters.wireEncode();
135
136 ControlParameters decoded(wire);
137 BOOST_CHECK_EQUAL(decoded.getName(), Name("ndn:/example"));
138 BOOST_CHECK_EQUAL(decoded.getFaceId(), 4);
139 BOOST_CHECK_EQUAL(decoded.getOrigin(), 128);
140 BOOST_CHECK_EQUAL(decoded.getCost(), 6);
141 BOOST_CHECK_EQUAL(decoded.getFlags(), 0x01);
142 BOOST_CHECK_EQUAL(decoded.getExpirationPeriod(), time::milliseconds(1800000));
143
144 BOOST_CHECK_EQUAL(decoded.hasUri(), false);
145 BOOST_CHECK_EQUAL(decoded.hasLocalControlFeature(), false);
Eric Newberryda916d62016-08-11 23:04:34 -0700146 BOOST_CHECK_EQUAL(decoded.hasMask(), false);
Junxiao Shi5f6c74f2014-04-18 16:29:44 -0700147 BOOST_CHECK_EQUAL(decoded.hasStrategy(), false);
Yukai Tud93c5fc2015-08-25 11:37:16 +0800148 BOOST_CHECK_EQUAL(decoded.hasFacePersistency(), false);
Junxiao Shibc19b372014-03-23 16:59:25 -0700149}
150
Eric Newberryda916d62016-08-11 23:04:34 -0700151BOOST_AUTO_TEST_CASE(FlagsAndMask)
152{
153 ControlParameters p;
154
155 BOOST_CHECK(!p.hasFlags());
156 BOOST_CHECK(!p.hasMask());
157 BOOST_CHECK(!p.hasFlagBit(0));
158 BOOST_CHECK(!p.getFlagBit(0));
159
160 // Set bit 2 to true (change Mask)
161 p.setFlagBit(2, true);
162 // 2^2 = 4
163 BOOST_CHECK_EQUAL(p.getFlags(), 4);
164 BOOST_CHECK_EQUAL(p.getMask(), 4);
165 BOOST_CHECK(p.hasFlagBit(2));
166 BOOST_CHECK(p.getFlagBit(2));
167 BOOST_CHECK(!p.hasFlagBit(1));
168 BOOST_CHECK(!p.getFlagBit(1));
169
170 // Set bit 3 to true (no change to Mask)
171 p.setFlagBit(3, true, false);
172 // 2^3 + 2^2 = 12
173 BOOST_CHECK_EQUAL(p.getFlags(), 12);
174 // 2^2 = 4
175 BOOST_CHECK_EQUAL(p.getMask(), 4);
176 BOOST_CHECK(!p.hasFlagBit(3));
177 BOOST_CHECK(p.getFlagBit(3));
178 BOOST_CHECK(p.hasFlagBit(2));
179 BOOST_CHECK(p.getFlagBit(2));
180
181 // Set bit 1 to false (change Mask)
182 p.setFlagBit(1, false);
183 // 2^3 + 2^2 = 12
184 BOOST_CHECK_EQUAL(p.getFlags(), 12);
185 // 2^2 + 2^1 = 6
186 BOOST_CHECK_EQUAL(p.getMask(), 6);
187 BOOST_CHECK(!p.hasFlagBit(3));
188 BOOST_CHECK(p.getFlagBit(3));
189 BOOST_CHECK(p.hasFlagBit(2));
190 BOOST_CHECK(p.getFlagBit(2));
191 BOOST_CHECK(p.hasFlagBit(1));
192 BOOST_CHECK(!p.getFlagBit(1));
193
194 // Set bit 2 to false (change Mask)
195 p.setFlagBit(2, false);
196 // 2^3 = 8
197 BOOST_CHECK_EQUAL(p.getFlags(), 8);
198 // 2^2 + 2^1 = 6
199 BOOST_CHECK_EQUAL(p.getMask(), 6);
200 BOOST_CHECK(!p.hasFlagBit(3));
201 BOOST_CHECK(p.getFlagBit(3));
202 BOOST_CHECK(p.hasFlagBit(2));
203 BOOST_CHECK(!p.getFlagBit(2));
204 BOOST_CHECK(p.hasFlagBit(1));
205 BOOST_CHECK(!p.getFlagBit(1));
206
207 // Set bit 0 to true (change Mask)
208 p.setFlagBit(0, true);
209 // 2^3 + 2^0 = 9
210 BOOST_CHECK_EQUAL(p.getFlags(), 9);
211 // 2^2 + 2^1 + 2^0 = 7
212 BOOST_CHECK_EQUAL(p.getMask(), 7);
213 BOOST_CHECK(p.hasFlagBit(0));
214 BOOST_CHECK(p.getFlagBit(0));
215
216 // Unset bit 0
217 p.unsetFlagBit(0);
218 BOOST_REQUIRE(p.hasFlags());
219 BOOST_REQUIRE(p.hasMask());
220 // 2^3 + 2^0 = 9
221 BOOST_CHECK_EQUAL(p.getFlags(), 9);
222 // 2^2 + 2^1 = 6
223 BOOST_CHECK_EQUAL(p.getMask(), 6);
224 BOOST_CHECK(p.hasFlagBit(1));
225 BOOST_CHECK(!p.hasFlagBit(0));
226 BOOST_CHECK(p.getFlagBit(0));
227
228 // Unset bit 3 (already unset in Mask, so no change)
229 p.unsetFlagBit(3);
230 BOOST_REQUIRE(p.hasFlags());
231 BOOST_REQUIRE(p.hasMask());
232 // 2^3 + 2^0 = 9
233 BOOST_CHECK_EQUAL(p.getFlags(), 9);
234 // 2^2 + 2^1 = 6
235 BOOST_CHECK_EQUAL(p.getMask(), 6);
236 BOOST_CHECK(!p.hasFlagBit(3));
237 BOOST_CHECK(p.getFlagBit(3));
238
239 // Unset bit 2
240 p.unsetFlagBit(2);
241 BOOST_REQUIRE(p.hasFlags());
242 BOOST_REQUIRE(p.hasMask());
243 // 2^3 + 2^0 = 9
244 BOOST_CHECK_EQUAL(p.getFlags(), 9);
245 // 2^1 = 2
246 BOOST_CHECK_EQUAL(p.getMask(), 2);
247 BOOST_CHECK(!p.hasFlagBit(2));
248 BOOST_CHECK(!p.getFlagBit(2));
249
250 // Unset bit 1
251 // Flags and Mask fields will be deleted as Mask is now 0
252 p.unsetFlagBit(1);
253 BOOST_CHECK(!p.hasFlags());
254 BOOST_CHECK(!p.hasMask());
255 BOOST_CHECK(!p.hasFlagBit(3));
256 BOOST_CHECK(!p.getFlagBit(3));
257 BOOST_CHECK(!p.hasFlagBit(2));
258 BOOST_CHECK(!p.getFlagBit(2));
259 BOOST_CHECK(!p.hasFlagBit(1));
260 BOOST_CHECK(!p.getFlagBit(1));
261 BOOST_CHECK(!p.hasFlagBit(0));
262 BOOST_CHECK(!p.getFlagBit(0));
263
264 BOOST_CHECK_THROW(p.setFlagBit(64, true), std::out_of_range);
265 BOOST_CHECK_THROW(p.unsetFlagBit(64), std::out_of_range);
266}
267
Junxiao Shibc19b372014-03-23 16:59:25 -0700268BOOST_AUTO_TEST_SUITE_END()
269
Spyridon Mastorakis429634f2015-02-19 17:35:33 -0800270} // namespace tests
Junxiao Shibc19b372014-03-23 16:59:25 -0700271} // namespace nfd
272} // namespace ndn