blob: e2c9a86664ebc7af1bbf622286fc577515003fb5 [file] [log] [blame]
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Eric Newberry84d3adc2017-08-09 23:31:40 -04002/*
Eric Newberry13ff2592020-03-06 17:32:29 -08003 * Copyright (c) 2014-2020, Regents of the University of California,
Junxiao Shi38f4ce92016-08-04 10:01:52 +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
Junxiao Shi331ade72016-08-19 14:07:19 +000026#include "nfdc/face-module.hpp"
Junxiao Shi38f4ce92016-08-04 10:01:52 +000027
Junxiao Shi1f481fa2017-01-26 15:14:43 +000028#include "execute-command-fixture.hpp"
29#include "status-fixture.hpp"
Junxiao Shi38f4ce92016-08-04 10:01:52 +000030
31namespace nfd {
32namespace tools {
Junxiao Shi331ade72016-08-19 14:07:19 +000033namespace nfdc {
Junxiao Shi38f4ce92016-08-04 10:01:52 +000034namespace tests {
35
Junxiao Shi1d7fef52017-02-02 05:33:14 +000036using ndn::nfd::FaceQueryFilter;
37
Junxiao Shi331ade72016-08-19 14:07:19 +000038BOOST_AUTO_TEST_SUITE(Nfdc)
Junxiao Shi1f481fa2017-01-26 15:14:43 +000039BOOST_AUTO_TEST_SUITE(TestFaceModule)
40
Junxiao Shi36e54292017-02-17 18:43:16 +000041BOOST_FIXTURE_TEST_SUITE(ListCommand, ExecuteCommandFixture)
42
43const std::string NONQUERY_OUTPUT =
44 "faceid=134 remote=udp4://233.252.0.4:6363 local=udp4://192.0.2.1:6363"
Eric Newberry4f8dd962018-06-17 21:32:07 -070045 " congestion={base-marking-interval=12345ms default-threshold=54321B} mtu=1024"
Junxiao Shi36e54292017-02-17 18:43:16 +000046 " counters={in={22562i 22031d 63n 2522915B} out={30121i 20940d 1218n 1353592B}}"
47 " flags={non-local permanent multi-access}\n"
48 "faceid=745 remote=fd://75 local=unix:///var/run/nfd.sock"
Eric Newberry4f8dd962018-06-17 21:32:07 -070049 " congestion={base-marking-interval=100ms default-threshold=65536B} mtu=8800"
Junxiao Shi36e54292017-02-17 18:43:16 +000050 " counters={in={18998i 26701d 147n 4672308B} out={34779i 17028d 1176n 8957187B}}"
Eric Newberryde332452018-01-30 11:45:32 -070051 " flags={local on-demand point-to-point local-fields lp-reliability congestion-marking}\n";
Junxiao Shi36e54292017-02-17 18:43:16 +000052
53BOOST_AUTO_TEST_CASE(NormalNonQuery)
54{
55 this->processInterest = [this] (const Interest& interest) {
56 FaceStatus payload1;
57 payload1.setFaceId(134)
58 .setRemoteUri("udp4://233.252.0.4:6363")
59 .setLocalUri("udp4://192.0.2.1:6363")
60 .setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL)
61 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERMANENT)
62 .setLinkType(ndn::nfd::LINK_TYPE_MULTI_ACCESS)
Eric Newberryde332452018-01-30 11:45:32 -070063 .setBaseCongestionMarkingInterval(12345_ms)
64 .setDefaultCongestionThreshold(54321)
Eric Newberry4f8dd962018-06-17 21:32:07 -070065 .setMtu(1024)
Junxiao Shi36e54292017-02-17 18:43:16 +000066 .setNInInterests(22562)
Junxiao Shif03d4792017-04-06 16:41:22 +000067 .setNInData(22031)
Junxiao Shi36e54292017-02-17 18:43:16 +000068 .setNInNacks(63)
69 .setNOutInterests(30121)
Junxiao Shif03d4792017-04-06 16:41:22 +000070 .setNOutData(20940)
Junxiao Shi36e54292017-02-17 18:43:16 +000071 .setNOutNacks(1218)
72 .setNInBytes(2522915)
73 .setNOutBytes(1353592);
74 FaceStatus payload2;
75 payload2.setFaceId(745)
76 .setRemoteUri("fd://75")
77 .setLocalUri("unix:///var/run/nfd.sock")
78 .setFaceScope(ndn::nfd::FACE_SCOPE_LOCAL)
79 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND)
80 .setLinkType(ndn::nfd::LINK_TYPE_POINT_TO_POINT)
Eric Newberryde332452018-01-30 11:45:32 -070081 .setBaseCongestionMarkingInterval(100_ms)
82 .setDefaultCongestionThreshold(65536)
Eric Newberry4f8dd962018-06-17 21:32:07 -070083 .setMtu(8800)
Junxiao Shi36e54292017-02-17 18:43:16 +000084 .setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, true)
Eric Newberry84d3adc2017-08-09 23:31:40 -040085 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, true)
Eric Newberryde332452018-01-30 11:45:32 -070086 .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, true)
Junxiao Shi36e54292017-02-17 18:43:16 +000087 .setNInInterests(18998)
Junxiao Shif03d4792017-04-06 16:41:22 +000088 .setNInData(26701)
Junxiao Shi36e54292017-02-17 18:43:16 +000089 .setNInNacks(147)
90 .setNOutInterests(34779)
Junxiao Shif03d4792017-04-06 16:41:22 +000091 .setNOutData(17028)
Junxiao Shi36e54292017-02-17 18:43:16 +000092 .setNOutNacks(1176)
93 .setNInBytes(4672308)
94 .setNOutBytes(8957187);
95 this->sendDataset("/localhost/nfd/faces/list", payload1, payload2);
96 };
97
98 this->execute("face list");
99 BOOST_CHECK_EQUAL(exitCode, 0);
100 BOOST_CHECK(out.is_equal(NONQUERY_OUTPUT));
101 BOOST_CHECK(err.is_empty());
102}
103
104const std::string QUERY_OUTPUT =
105 "faceid=177 remote=tcp4://53.239.9.114:6363 local=tcp4://164.0.31.106:20396"
Eric Newberry4f8dd962018-06-17 21:32:07 -0700106 " congestion={base-marking-interval=555ms default-threshold=10000B} mtu=2000"
Junxiao Shi36e54292017-02-17 18:43:16 +0000107 " counters={in={2325i 1110d 79n 4716834B} out={2278i 485d 841n 308108B}}"
108 " flags={non-local persistent point-to-point}\n";
109
110BOOST_AUTO_TEST_CASE(NormalQuery)
111{
112 this->processInterest = [this] (const Interest& interest) {
113 BOOST_CHECK(Name("/localhost/nfd/faces/query").isPrefixOf(interest.getName()));
114 BOOST_CHECK_EQUAL(interest.getName().size(), 5);
115 FaceQueryFilter filter(interest.getName().at(4).blockFromValue());
116 FaceQueryFilter expectedFilter;
117 expectedFilter.setRemoteUri("tcp4://53.239.9.114:6363")
118 .setLocalUri("tcp4://164.0.31.106:20396")
119 .setUriScheme("tcp4");
120 BOOST_CHECK_EQUAL(filter, expectedFilter);
121
122 FaceStatus payload;
123 payload.setFaceId(177)
124 .setRemoteUri("tcp4://53.239.9.114:6363")
125 .setLocalUri("tcp4://164.0.31.106:20396")
126 .setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL)
127 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
128 .setLinkType(ndn::nfd::LINK_TYPE_POINT_TO_POINT)
Eric Newberryde332452018-01-30 11:45:32 -0700129 .setBaseCongestionMarkingInterval(555_ms)
130 .setDefaultCongestionThreshold(10000)
Eric Newberry4f8dd962018-06-17 21:32:07 -0700131 .setMtu(2000)
Junxiao Shi36e54292017-02-17 18:43:16 +0000132 .setNInInterests(2325)
Junxiao Shif03d4792017-04-06 16:41:22 +0000133 .setNInData(1110)
Junxiao Shi36e54292017-02-17 18:43:16 +0000134 .setNInNacks(79)
135 .setNOutInterests(2278)
Junxiao Shif03d4792017-04-06 16:41:22 +0000136 .setNOutData(485)
Junxiao Shi36e54292017-02-17 18:43:16 +0000137 .setNOutNacks(841)
138 .setNInBytes(4716834)
139 .setNOutBytes(308108);
140 this->sendDataset(interest.getName(), payload);
141 };
142
143 this->execute("face list tcp://53.239.9.114 scheme tcp4 local tcp://164.0.31.106:20396");
144 BOOST_CHECK_EQUAL(exitCode, 0);
145 BOOST_CHECK(out.is_equal(QUERY_OUTPUT));
146 BOOST_CHECK(err.is_empty());
147}
148
149BOOST_AUTO_TEST_CASE(NotFound)
150{
151 this->processInterest = [this] (const Interest& interest) {
152 this->sendEmptyDataset(interest.getName());
153 };
154
155 this->execute("face list scheme udp6");
156 BOOST_CHECK_EQUAL(exitCode, 3);
157 BOOST_CHECK(out.is_empty());
158 BOOST_CHECK(err.is_equal("Face not found\n"));
159}
160
161BOOST_AUTO_TEST_CASE(Error)
162{
163 this->processInterest = nullptr; // no response
164
165 this->execute("face list local udp4://31.67.17.2:6363");
166 BOOST_CHECK_EQUAL(exitCode, 1);
167 BOOST_CHECK(out.is_empty());
Eric Newberry359135c2018-06-26 21:02:12 -0700168 BOOST_CHECK(err.is_equal("Error 10060 when querying face: Timeout exceeded\n"));
Junxiao Shi36e54292017-02-17 18:43:16 +0000169}
170
171BOOST_AUTO_TEST_SUITE_END() // ListCommand
172
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000173BOOST_FIXTURE_TEST_SUITE(ShowCommand, ExecuteCommandFixture)
174
Eric Newberryde332452018-01-30 11:45:32 -0700175const std::string NORMAL_ALL_CONGESTION_OUTPUT = std::string(R"TEXT(
176 faceid=256
177 remote=udp4://84.67.35.111:6363
178 local=udp4://79.91.49.215:6363
179congestion={base-marking-interval=123ms default-threshold=10000B}
Eric Newberry4f8dd962018-06-17 21:32:07 -0700180 mtu=4000
Eric Newberryde332452018-01-30 11:45:32 -0700181 counters={in={28975i 28232d 212n 13307258B} out={19525i 30993d 1038n 6231946B}}
182 flags={non-local on-demand point-to-point}
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000183)TEXT").substr(1);
184
Eric Newberryde332452018-01-30 11:45:32 -0700185BOOST_AUTO_TEST_CASE(NormalAllCongestionParams)
186{
187 this->processInterest = [this] (const Interest& interest) {
188 BOOST_CHECK(Name("/localhost/nfd/faces/query").isPrefixOf(interest.getName()));
189 BOOST_CHECK_EQUAL(interest.getName().size(), 5);
190 FaceQueryFilter filter(interest.getName().at(4).blockFromValue());
191 BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setFaceId(256));
192
193 FaceStatus payload;
194 payload.setFaceId(256)
195 .setRemoteUri("udp4://84.67.35.111:6363")
196 .setLocalUri("udp4://79.91.49.215:6363")
197 .setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL)
198 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND)
Eric Newberry4f8dd962018-06-17 21:32:07 -0700199 .setMtu(4000)
Eric Newberryde332452018-01-30 11:45:32 -0700200 .setLinkType(ndn::nfd::LINK_TYPE_POINT_TO_POINT)
201 .setBaseCongestionMarkingInterval(123_ms)
202 .setDefaultCongestionThreshold(10000)
203 .setNInInterests(28975)
204 .setNInData(28232)
205 .setNInNacks(212)
206 .setNOutInterests(19525)
207 .setNOutData(30993)
208 .setNOutNacks(1038)
209 .setNInBytes(13307258)
210 .setNOutBytes(6231946);
211
212 this->sendDataset(interest.getName(), payload);
213 };
214
215 this->execute("face show 256");
216 BOOST_CHECK_EQUAL(exitCode, 0);
217 BOOST_CHECK(out.is_equal(NORMAL_ALL_CONGESTION_OUTPUT));
218 BOOST_CHECK(err.is_empty());
219}
220
221const std::string NORMAL_INTERVAL_CONGESTION_OUTPUT = std::string(R"TEXT(
222 faceid=256
223 remote=udp4://84.67.35.111:6363
224 local=udp4://79.91.49.215:6363
225congestion={base-marking-interval=123ms}
Eric Newberry4f8dd962018-06-17 21:32:07 -0700226 mtu=3000
Eric Newberryde332452018-01-30 11:45:32 -0700227 counters={in={28975i 28232d 212n 13307258B} out={19525i 30993d 1038n 6231946B}}
228 flags={non-local on-demand point-to-point}
229)TEXT").substr(1);
230
231BOOST_AUTO_TEST_CASE(NormalIntervalCongestionParams)
232{
233 this->processInterest = [this] (const Interest& interest) {
234 BOOST_CHECK(Name("/localhost/nfd/faces/query").isPrefixOf(interest.getName()));
235 BOOST_CHECK_EQUAL(interest.getName().size(), 5);
236 FaceQueryFilter filter(interest.getName().at(4).blockFromValue());
237 BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setFaceId(256));
238
239 FaceStatus payload;
240 payload.setFaceId(256)
241 .setRemoteUri("udp4://84.67.35.111:6363")
242 .setLocalUri("udp4://79.91.49.215:6363")
243 .setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL)
244 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND)
245 .setLinkType(ndn::nfd::LINK_TYPE_POINT_TO_POINT)
246 .setBaseCongestionMarkingInterval(123_ms)
Eric Newberry4f8dd962018-06-17 21:32:07 -0700247 .setMtu(3000)
Eric Newberryde332452018-01-30 11:45:32 -0700248 .setNInInterests(28975)
249 .setNInData(28232)
250 .setNInNacks(212)
251 .setNOutInterests(19525)
252 .setNOutData(30993)
253 .setNOutNacks(1038)
254 .setNInBytes(13307258)
255 .setNOutBytes(6231946);
256
257 this->sendDataset(interest.getName(), payload);
258 };
259
260 this->execute("face show 256");
261 BOOST_CHECK_EQUAL(exitCode, 0);
262 BOOST_CHECK(out.is_equal(NORMAL_INTERVAL_CONGESTION_OUTPUT));
263 BOOST_CHECK(err.is_empty());
264}
265
266const std::string NORMAL_THRESHOLD_CONGESTION_OUTPUT = std::string(R"TEXT(
267 faceid=256
268 remote=udp4://84.67.35.111:6363
269 local=udp4://79.91.49.215:6363
270congestion={default-threshold=10000B}
Eric Newberry4f8dd962018-06-17 21:32:07 -0700271 mtu=5000
Eric Newberryde332452018-01-30 11:45:32 -0700272 counters={in={28975i 28232d 212n 13307258B} out={19525i 30993d 1038n 6231946B}}
273 flags={non-local on-demand point-to-point}
274)TEXT").substr(1);
275
276BOOST_AUTO_TEST_CASE(NormalThresholdCongestionParams)
277{
278 this->processInterest = [this] (const Interest& interest) {
279 BOOST_CHECK(Name("/localhost/nfd/faces/query").isPrefixOf(interest.getName()));
280 BOOST_CHECK_EQUAL(interest.getName().size(), 5);
281 FaceQueryFilter filter(interest.getName().at(4).blockFromValue());
282 BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setFaceId(256));
283
284 FaceStatus payload;
285 payload.setFaceId(256)
286 .setRemoteUri("udp4://84.67.35.111:6363")
287 .setLocalUri("udp4://79.91.49.215:6363")
288 .setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL)
289 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND)
Eric Newberry4f8dd962018-06-17 21:32:07 -0700290 .setMtu(5000)
Eric Newberryde332452018-01-30 11:45:32 -0700291 .setLinkType(ndn::nfd::LINK_TYPE_POINT_TO_POINT)
292 .setDefaultCongestionThreshold(10000)
293 .setNInInterests(28975)
294 .setNInData(28232)
295 .setNInNacks(212)
296 .setNOutInterests(19525)
297 .setNOutData(30993)
298 .setNOutNacks(1038)
299 .setNInBytes(13307258)
300 .setNOutBytes(6231946);
301
302 this->sendDataset(interest.getName(), payload);
303 };
304
305 this->execute("face show 256");
306 BOOST_CHECK_EQUAL(exitCode, 0);
307 BOOST_CHECK(out.is_equal(NORMAL_THRESHOLD_CONGESTION_OUTPUT));
308 BOOST_CHECK(err.is_empty());
309}
310
311const std::string NORMAL_NO_CONGESTION_OUTPUT = std::string(R"TEXT(
312 faceid=256
313 remote=udp4://84.67.35.111:6363
314 local=udp4://79.91.49.215:6363
Eric Newberry4f8dd962018-06-17 21:32:07 -0700315 mtu=6000
Eric Newberryde332452018-01-30 11:45:32 -0700316 counters={in={28975i 28232d 212n 13307258B} out={19525i 30993d 1038n 6231946B}}
317 flags={non-local on-demand point-to-point}
318)TEXT").substr(1);
319
320BOOST_AUTO_TEST_CASE(NormalNoCongestionParams)
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000321{
322 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi36e54292017-02-17 18:43:16 +0000323 BOOST_CHECK(Name("/localhost/nfd/faces/query").isPrefixOf(interest.getName()));
Junxiao Shi8f803f22017-02-10 03:04:28 +0000324 BOOST_CHECK_EQUAL(interest.getName().size(), 5);
325 FaceQueryFilter filter(interest.getName().at(4).blockFromValue());
326 BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setFaceId(256));
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000327
328 FaceStatus payload;
329 payload.setFaceId(256)
330 .setRemoteUri("udp4://84.67.35.111:6363")
331 .setLocalUri("udp4://79.91.49.215:6363")
332 .setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL)
333 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND)
Eric Newberry4f8dd962018-06-17 21:32:07 -0700334 .setMtu(6000)
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000335 .setLinkType(ndn::nfd::LINK_TYPE_POINT_TO_POINT)
336 .setNInInterests(28975)
Junxiao Shif03d4792017-04-06 16:41:22 +0000337 .setNInData(28232)
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000338 .setNInNacks(212)
339 .setNOutInterests(19525)
Junxiao Shif03d4792017-04-06 16:41:22 +0000340 .setNOutData(30993)
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000341 .setNOutNacks(1038)
342 .setNInBytes(13307258)
343 .setNOutBytes(6231946);
344
Junxiao Shi8f803f22017-02-10 03:04:28 +0000345 this->sendDataset(interest.getName(), payload);
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000346 };
347
348 this->execute("face show 256");
349 BOOST_CHECK_EQUAL(exitCode, 0);
Eric Newberryde332452018-01-30 11:45:32 -0700350 BOOST_CHECK(out.is_equal(NORMAL_NO_CONGESTION_OUTPUT));
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000351 BOOST_CHECK(err.is_empty());
352}
353
354BOOST_AUTO_TEST_CASE(NotFound)
355{
356 this->processInterest = [this] (const Interest& interest) {
357 this->sendEmptyDataset(interest.getName());
358 };
359
360 this->execute("face show 256");
361 BOOST_CHECK_EQUAL(exitCode, 3);
362 BOOST_CHECK(out.is_empty());
Junxiao Shi8f803f22017-02-10 03:04:28 +0000363 BOOST_CHECK(err.is_equal("Face not found\n"));
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000364}
365
366BOOST_AUTO_TEST_CASE(Error)
367{
368 this->processInterest = nullptr; // no response
369
370 this->execute("face show 256");
371 BOOST_CHECK_EQUAL(exitCode, 1);
372 BOOST_CHECK(out.is_empty());
Eric Newberry359135c2018-06-26 21:02:12 -0700373 BOOST_CHECK(err.is_equal("Error 10060 when querying face: Timeout exceeded\n"));
Junxiao Shi1f481fa2017-01-26 15:14:43 +0000374}
375
376BOOST_AUTO_TEST_SUITE_END() // ShowCommand
Junxiao Shi38f4ce92016-08-04 10:01:52 +0000377
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000378class ExecuteFaceCreateCommandFixture : public ExecuteCommandFixture
379{
380protected:
381 void
Eric Newberry4f8dd962018-06-17 21:32:07 -0700382 respond409(const Interest& interest, FacePersistency persistency, optional<uint64_t> mtu = {},
Eric Newberryde332452018-01-30 11:45:32 -0700383 bool enableLpReliability = false,
384 bool enableCongestionMarking = false)
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000385 {
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000386 MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/create");
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000387 ControlParameters body;
388 body.setFaceId(1172)
389 .setUri("udp4://100.77.30.65:6363")
Junxiao Shi1cce2a32017-05-02 02:39:55 +0000390 .setLocalUri("udp4://68.62.26.57:24087")
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000391 .setFacePersistency(persistency)
392 .setFlags(0);
Eric Newberry4f8dd962018-06-17 21:32:07 -0700393 if (mtu) {
394 body.setMtu(*mtu);
395 }
Eric Newberry84d3adc2017-08-09 23:31:40 -0400396 if (enableLpReliability) {
397 body.setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, true, false);
398 }
Eric Newberryde332452018-01-30 11:45:32 -0700399 if (enableCongestionMarking) {
400 body.setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, true, false);
401 }
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000402 this->failCommand(interest, 409, "conflict-409", body);
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000403 }
404};
Junxiao Shi1d7fef52017-02-02 05:33:14 +0000405
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000406BOOST_FIXTURE_TEST_SUITE(CreateCommand, ExecuteFaceCreateCommandFixture)
407
408BOOST_AUTO_TEST_CASE(Creating)
Junxiao Shi1d7fef52017-02-02 05:33:14 +0000409{
410 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000411 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/create");
Junxiao Shi1d7fef52017-02-02 05:33:14 +0000412 BOOST_REQUIRE(req.hasUri());
413 BOOST_CHECK_EQUAL(req.getUri(), "udp4://159.242.33.78:6363");
Junxiao Shi0d976922017-04-01 14:35:21 +0000414 BOOST_CHECK(!req.hasLocalUri());
Junxiao Shi1d7fef52017-02-02 05:33:14 +0000415 BOOST_REQUIRE(req.hasFacePersistency());
416 BOOST_CHECK_EQUAL(req.getFacePersistency(), FacePersistency::FACE_PERSISTENCY_PERSISTENT);
417
418 ControlParameters resp;
419 resp.setFaceId(2130)
Junxiao Shi1cce2a32017-05-02 02:39:55 +0000420 .setUri("udp4://159.242.33.78:6363")
421 .setLocalUri("udp4://179.63.153.45:28835")
Junxiao Shi5c1bb362017-05-11 16:03:38 +0000422 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
423 .setFlags(0);
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000424 this->succeedCommand(interest, resp);
Junxiao Shi1d7fef52017-02-02 05:33:14 +0000425 };
426
427 this->execute("face create udp://159.242.33.78");
428 BOOST_CHECK_EQUAL(exitCode, 0);
Junxiao Shi1cce2a32017-05-02 02:39:55 +0000429 BOOST_CHECK(out.is_equal("face-created id=2130 local=udp4://179.63.153.45:28835 "
Eric Newberry84d3adc2017-08-09 23:31:40 -0400430 "remote=udp4://159.242.33.78:6363 persistency=persistent "
Eric Newberryde332452018-01-30 11:45:32 -0700431 "reliability=off congestion-marking=off\n"));
Junxiao Shi1d7fef52017-02-02 05:33:14 +0000432 BOOST_CHECK(err.is_empty());
433}
434
Eric Newberry84d3adc2017-08-09 23:31:40 -0400435BOOST_AUTO_TEST_CASE(CreatingWithParams)
Junxiao Shi0d976922017-04-01 14:35:21 +0000436{
437 this->processInterest = [this] (const Interest& interest) {
438 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/create");
439 BOOST_REQUIRE(req.hasUri());
440 BOOST_CHECK_EQUAL(req.getUri(), "udp4://22.91.89.51:19903");
441 BOOST_REQUIRE(req.hasLocalUri());
442 BOOST_CHECK_EQUAL(req.getLocalUri(), "udp4://98.68.23.71:6363");
443 BOOST_REQUIRE(req.hasFacePersistency());
444 BOOST_CHECK_EQUAL(req.getFacePersistency(), FacePersistency::FACE_PERSISTENCY_PERMANENT);
Eric Newberry4f8dd962018-06-17 21:32:07 -0700445 BOOST_REQUIRE(req.hasBaseCongestionMarkingInterval());
446 BOOST_CHECK_EQUAL(req.getBaseCongestionMarkingInterval(), 100_ms);
447 BOOST_REQUIRE(req.hasDefaultCongestionThreshold());
448 BOOST_CHECK_EQUAL(req.getDefaultCongestionThreshold(), 65536);
449 BOOST_REQUIRE(req.hasMtu());
450 BOOST_CHECK_EQUAL(req.getMtu(), 10000);
Eric Newberry84d3adc2017-08-09 23:31:40 -0400451 BOOST_CHECK(req.hasFlags());
452 BOOST_CHECK(req.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED));
Junxiao Shi0d976922017-04-01 14:35:21 +0000453
454 ControlParameters resp;
455 resp.setFaceId(301)
Junxiao Shi1cce2a32017-05-02 02:39:55 +0000456 .setUri("udp4://22.91.89.51:19903")
457 .setLocalUri("udp4://98.68.23.71:6363")
Junxiao Shi5c1bb362017-05-11 16:03:38 +0000458 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERMANENT)
Eric Newberryde332452018-01-30 11:45:32 -0700459 .setBaseCongestionMarkingInterval(100_ms)
460 .setDefaultCongestionThreshold(65536)
Eric Newberry4f8dd962018-06-17 21:32:07 -0700461 .setMtu(8800)
Eric Newberryde332452018-01-30 11:45:32 -0700462 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, true, false)
463 .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, true, false);
Junxiao Shi0d976922017-04-01 14:35:21 +0000464 this->succeedCommand(interest, resp);
465 };
466
Eric Newberryde332452018-01-30 11:45:32 -0700467 this->execute("face create udp://22.91.89.51:19903 permanent local udp://98.68.23.71 reliability on "
468 "congestion-marking on congestion-marking-interval 100 "
Eric Newberry4f8dd962018-06-17 21:32:07 -0700469 "default-congestion-threshold 65536 mtu 10000");
Junxiao Shi0d976922017-04-01 14:35:21 +0000470 BOOST_CHECK_EQUAL(exitCode, 0);
Junxiao Shi1cce2a32017-05-02 02:39:55 +0000471 BOOST_CHECK(out.is_equal("face-created id=301 local=udp4://98.68.23.71:6363 "
Eric Newberry84d3adc2017-08-09 23:31:40 -0400472 "remote=udp4://22.91.89.51:19903 persistency=permanent "
Eric Newberryde332452018-01-30 11:45:32 -0700473 "reliability=on congestion-marking=on "
Eric Newberry4f8dd962018-06-17 21:32:07 -0700474 "congestion-marking-interval=100ms default-congestion-threshold=65536B "
475 "mtu=8800\n"));
Junxiao Shi0d976922017-04-01 14:35:21 +0000476 BOOST_CHECK(err.is_empty());
477}
478
Eric Newberry13ff2592020-03-06 17:32:29 -0800479BOOST_AUTO_TEST_CASE(ChangingMtu)
Eric Newberry4f8dd962018-06-17 21:32:07 -0700480{
Eric Newberry13ff2592020-03-06 17:32:29 -0800481 bool hasUpdateCommand = false;
482 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
483 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
484 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_PERSISTENT, 5000);
485 return;
486 }
487
488 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
489 hasUpdateCommand = true;
490 BOOST_REQUIRE(req.hasFaceId());
491 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
492 BOOST_CHECK(!req.hasFacePersistency());
493 BOOST_REQUIRE(req.hasMtu());
494 BOOST_CHECK_EQUAL(req.getMtu(), 4000);
495 BOOST_CHECK(!req.hasFlags());
496
497 ControlParameters resp;
498 resp.setFaceId(1172)
499 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
500 .setMtu(4000)
501 .setFlags(0);
502 this->succeedCommand(interest, resp);
Eric Newberry4f8dd962018-06-17 21:32:07 -0700503 };
504
Eric Newberry13ff2592020-03-06 17:32:29 -0800505 this->execute("face create udp://100.77.30.65 mtu 4000");
506 BOOST_CHECK(hasUpdateCommand);
507 BOOST_CHECK_EQUAL(exitCode, 0);
508 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
509 "remote=udp4://100.77.30.65:6363 persistency=persistent "
510 "reliability=off congestion-marking=off mtu=4000\n"));
511 BOOST_CHECK(err.is_empty());
512}
513
514BOOST_AUTO_TEST_CASE(AutoMtu)
515{
516 bool hasUpdateCommand = false;
517 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
518 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
519 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_PERSISTENT, 5000);
520 return;
521 }
522
523 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
524 hasUpdateCommand = true;
525 BOOST_REQUIRE(req.hasFaceId());
526 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
527 BOOST_CHECK(!req.hasFacePersistency());
528 BOOST_REQUIRE(req.hasMtu());
529 BOOST_CHECK_EQUAL(req.getMtu(), std::numeric_limits<uint64_t>::max());
530 BOOST_CHECK(!req.hasFlags());
531
532 ControlParameters resp;
533 resp.setFaceId(1172)
534 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
535 .setMtu(ndn::MAX_NDN_PACKET_SIZE)
536 .setFlags(0);
537 this->succeedCommand(interest, resp);
538 };
539
540 this->execute("face create udp://100.77.30.65 mtu auto");
541 BOOST_CHECK(hasUpdateCommand);
542 BOOST_CHECK_EQUAL(exitCode, 0);
543 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
544 "remote=udp4://100.77.30.65:6363 persistency=persistent "
545 "reliability=off congestion-marking=off mtu=8800\n"));
546 BOOST_CHECK(err.is_empty());
Eric Newberry4f8dd962018-06-17 21:32:07 -0700547}
548
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000549BOOST_AUTO_TEST_CASE(UpgradingPersistency)
550{
551 bool hasUpdateCommand = false;
552 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000553 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
554 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_ON_DEMAND);
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000555 return;
556 }
557
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000558 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000559 hasUpdateCommand = true;
560 BOOST_REQUIRE(req.hasFaceId());
561 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
562 BOOST_REQUIRE(req.hasFacePersistency());
563 BOOST_CHECK_EQUAL(req.getFacePersistency(), FacePersistency::FACE_PERSISTENCY_PERSISTENT);
564 BOOST_CHECK(!req.hasFlags());
565
566 ControlParameters resp;
567 resp.setFaceId(1172)
568 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
Eric Newberry13ff2592020-03-06 17:32:29 -0800569 .setMtu(1024)
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000570 .setFlags(0);
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000571 this->succeedCommand(interest, resp);
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000572 };
573
574 this->execute("face create udp://100.77.30.65");
575 BOOST_CHECK(hasUpdateCommand);
576 BOOST_CHECK_EQUAL(exitCode, 0);
Junxiao Shi1cce2a32017-05-02 02:39:55 +0000577 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
Eric Newberry84d3adc2017-08-09 23:31:40 -0400578 "remote=udp4://100.77.30.65:6363 persistency=persistent "
Eric Newberry13ff2592020-03-06 17:32:29 -0800579 "reliability=off congestion-marking=off mtu=1024\n"));
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000580 BOOST_CHECK(err.is_empty());
581}
582
Eric Newberry4f8dd962018-06-17 21:32:07 -0700583BOOST_AUTO_TEST_CASE(UpgradingPersistencySameMtu)
584{
585 bool hasUpdateCommand = false;
586 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
587 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
588 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_ON_DEMAND, 8800);
589 return;
590 }
591
592 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
593 hasUpdateCommand = true;
594 BOOST_REQUIRE(req.hasFaceId());
595 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
596 BOOST_REQUIRE(req.hasFacePersistency());
597 BOOST_CHECK_EQUAL(req.getFacePersistency(), FacePersistency::FACE_PERSISTENCY_PERSISTENT);
Eric Newberry13ff2592020-03-06 17:32:29 -0800598 BOOST_CHECK(!req.hasMtu());
Eric Newberry4f8dd962018-06-17 21:32:07 -0700599 BOOST_CHECK(!req.hasFlags());
600
601 ControlParameters resp;
602 resp.setFaceId(1172)
603 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
Eric Newberry13ff2592020-03-06 17:32:29 -0800604 .setMtu(8800)
Eric Newberry4f8dd962018-06-17 21:32:07 -0700605 .setFlags(0);
606 this->succeedCommand(interest, resp);
607 };
608
609 this->execute("face create udp://100.77.30.65 mtu 8800");
610 BOOST_CHECK(hasUpdateCommand);
611 BOOST_CHECK_EQUAL(exitCode, 0);
612 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
613 "remote=udp4://100.77.30.65:6363 persistency=persistent "
Eric Newberry13ff2592020-03-06 17:32:29 -0800614 "reliability=off congestion-marking=off mtu=8800\n"));
Eric Newberry4f8dd962018-06-17 21:32:07 -0700615 BOOST_CHECK(err.is_empty());
616}
617
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000618BOOST_AUTO_TEST_CASE(NotDowngradingPersistency)
619{
620 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000621 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_PERMANENT);
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000622 // no command other than faces/create is expected
623 };
624
625 this->execute("face create udp://100.77.30.65");
626 BOOST_CHECK_EQUAL(exitCode, 0);
Junxiao Shi1cce2a32017-05-02 02:39:55 +0000627 BOOST_CHECK(out.is_equal("face-exists id=1172 local=udp4://68.62.26.57:24087 "
Eric Newberry84d3adc2017-08-09 23:31:40 -0400628 "remote=udp4://100.77.30.65:6363 persistency=permanent "
Eric Newberryde332452018-01-30 11:45:32 -0700629 "reliability=off congestion-marking=off\n"));
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000630 BOOST_CHECK(err.is_empty());
631}
632
633BOOST_AUTO_TEST_CASE(SamePersistency)
634{
635 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000636 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_PERSISTENT);
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000637 // no command other than faces/create is expected
638 };
639
640 this->execute("face create udp://100.77.30.65");
641 BOOST_CHECK_EQUAL(exitCode, 0);
Junxiao Shi1cce2a32017-05-02 02:39:55 +0000642 BOOST_CHECK(out.is_equal("face-exists id=1172 local=udp4://68.62.26.57:24087 "
Eric Newberry84d3adc2017-08-09 23:31:40 -0400643 "remote=udp4://100.77.30.65:6363 persistency=persistent "
Eric Newberryde332452018-01-30 11:45:32 -0700644 "reliability=off congestion-marking=off\n"));
Eric Newberry84d3adc2017-08-09 23:31:40 -0400645 BOOST_CHECK(err.is_empty());
646}
647
648BOOST_AUTO_TEST_CASE(EnablingReliability)
649{
650 bool hasUpdateCommand = false;
651 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
652 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
653 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_PERSISTENT);
654 return;
655 }
656
657 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
658 hasUpdateCommand = true;
659 BOOST_REQUIRE(req.hasFaceId());
660 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
661 BOOST_CHECK(req.hasFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED));
662 BOOST_CHECK(req.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED));
663
664 ControlParameters resp;
665 resp.setFaceId(1172)
666 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
Eric Newberry13ff2592020-03-06 17:32:29 -0800667 .setMtu(4000)
Eric Newberry84d3adc2017-08-09 23:31:40 -0400668 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, true, false);
669 this->succeedCommand(interest, resp);
670 };
671
672 this->execute("face create udp://100.77.30.65 reliability on");
673 BOOST_CHECK_EQUAL(exitCode, 0);
674 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
675 "remote=udp4://100.77.30.65:6363 persistency=persistent "
Eric Newberry13ff2592020-03-06 17:32:29 -0800676 "reliability=on congestion-marking=off mtu=4000\n"));
Eric Newberry84d3adc2017-08-09 23:31:40 -0400677 BOOST_CHECK(err.is_empty());
678}
679
680BOOST_AUTO_TEST_CASE(DisablingReliability)
681{
682 bool hasUpdateCommand = false;
683 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
684 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
Eric Newberry4f8dd962018-06-17 21:32:07 -0700685 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_PERSISTENT, {}, true);
Eric Newberry84d3adc2017-08-09 23:31:40 -0400686 return;
687 }
688
689 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
690 hasUpdateCommand = true;
691 BOOST_REQUIRE(req.hasFaceId());
692 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
693 BOOST_CHECK(req.hasFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED));
694 BOOST_CHECK(!req.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED));
695
696 ControlParameters resp;
697 resp.setFaceId(1172)
698 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
Eric Newberry13ff2592020-03-06 17:32:29 -0800699 .setMtu(4000)
Eric Newberry84d3adc2017-08-09 23:31:40 -0400700 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, false, false);
701 this->succeedCommand(interest, resp);
702 };
703
704 this->execute("face create udp://100.77.30.65 reliability off");
705 BOOST_CHECK_EQUAL(exitCode, 0);
706 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
707 "remote=udp4://100.77.30.65:6363 persistency=persistent "
Eric Newberry13ff2592020-03-06 17:32:29 -0800708 "reliability=off congestion-marking=off mtu=4000\n"));
Eric Newberryde332452018-01-30 11:45:32 -0700709 BOOST_CHECK(err.is_empty());
710}
711
712BOOST_AUTO_TEST_CASE(EnablingCongestionMarking)
713{
714 bool hasUpdateCommand = false;
715 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
716 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
717 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_PERSISTENT);
718 return;
719 }
720
721 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
722 hasUpdateCommand = true;
723 BOOST_REQUIRE(req.hasFaceId());
724 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
725 BOOST_CHECK(req.hasFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED));
726 BOOST_CHECK(req.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED));
727 BOOST_CHECK(!req.hasBaseCongestionMarkingInterval());
728 BOOST_CHECK(!req.hasDefaultCongestionThreshold());
729
730 ControlParameters resp;
731 resp.setFaceId(1172)
732 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
733 .setBaseCongestionMarkingInterval(100_ms)
734 .setDefaultCongestionThreshold(65536)
Eric Newberry13ff2592020-03-06 17:32:29 -0800735 .setMtu(4000)
Eric Newberryde332452018-01-30 11:45:32 -0700736 .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, true, false);
737 this->succeedCommand(interest, resp);
738 };
739
740 this->execute("face create udp://100.77.30.65 congestion-marking on");
741 BOOST_CHECK_EQUAL(exitCode, 0);
742 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
743 "remote=udp4://100.77.30.65:6363 persistency=persistent "
744 "reliability=off congestion-marking=on "
Eric Newberry13ff2592020-03-06 17:32:29 -0800745 "congestion-marking-interval=100ms default-congestion-threshold=65536B "
746 "mtu=4000\n"));
Eric Newberryde332452018-01-30 11:45:32 -0700747 BOOST_CHECK(err.is_empty());
748}
749
750BOOST_AUTO_TEST_CASE(DisablingCongestionMarking)
751{
752 bool hasUpdateCommand = false;
753 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
754 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
Eric Newberry4f8dd962018-06-17 21:32:07 -0700755 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_PERSISTENT, {}, false, true);
Eric Newberryde332452018-01-30 11:45:32 -0700756 return;
757 }
758
759 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
760 hasUpdateCommand = true;
761 BOOST_REQUIRE(req.hasFaceId());
762 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
763 BOOST_CHECK(req.hasFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED));
764 BOOST_CHECK(!req.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED));
765 BOOST_CHECK(!req.hasBaseCongestionMarkingInterval());
766 BOOST_CHECK(!req.hasDefaultCongestionThreshold());
767
768 ControlParameters resp;
769 resp.setFaceId(1172)
770 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
771 .setBaseCongestionMarkingInterval(100_ms)
772 .setDefaultCongestionThreshold(65536)
Eric Newberry13ff2592020-03-06 17:32:29 -0800773 .setMtu(4000)
Eric Newberryde332452018-01-30 11:45:32 -0700774 .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, false, false);
775 this->succeedCommand(interest, resp);
776 };
777
778 this->execute("face create udp://100.77.30.65 congestion-marking off");
779 BOOST_CHECK_EQUAL(exitCode, 0);
780 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
781 "remote=udp4://100.77.30.65:6363 persistency=persistent "
782 "reliability=off congestion-marking=off "
Eric Newberry13ff2592020-03-06 17:32:29 -0800783 "congestion-marking-interval=100ms default-congestion-threshold=65536B "
784 "mtu=4000\n"));
785 BOOST_CHECK(err.is_empty());
786}
787
788BOOST_AUTO_TEST_CASE(UpgradingPersistencyChangeMtu)
789{
790 bool hasUpdateCommand = false;
791 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
792 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
793 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_ON_DEMAND, 8800);
794 return;
795 }
796
797 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
798 hasUpdateCommand = true;
799 BOOST_REQUIRE(req.hasFaceId());
800 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
801 BOOST_REQUIRE(req.hasFacePersistency());
802 BOOST_CHECK_EQUAL(req.getFacePersistency(), FacePersistency::FACE_PERSISTENCY_PERSISTENT);
803 BOOST_REQUIRE(req.hasMtu());
804 BOOST_CHECK_EQUAL(req.getMtu(), 4000);
805 BOOST_CHECK(!req.hasFlags());
806
807 ControlParameters resp;
808 resp.setFaceId(1172)
809 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
810 .setMtu(4000)
811 .setFlags(0);
812 this->succeedCommand(interest, resp);
813 };
814
815 this->execute("face create udp://100.77.30.65 mtu 4000");
816 BOOST_CHECK(hasUpdateCommand);
817 BOOST_CHECK_EQUAL(exitCode, 0);
818 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
819 "remote=udp4://100.77.30.65:6363 persistency=persistent "
820 "reliability=off congestion-marking=off mtu=4000\n"));
821 BOOST_CHECK(err.is_empty());
822}
823
824BOOST_AUTO_TEST_CASE(UpgradingPersistencyChangeMtuAndFlags)
825{
826 bool hasUpdateCommand = false;
827 this->processInterest = [this, &hasUpdateCommand] (const Interest& interest) {
828 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
829 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_ON_DEMAND, 8800);
830 return;
831 }
832
833 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
834 hasUpdateCommand = true;
835 BOOST_REQUIRE(req.hasFaceId());
836 BOOST_CHECK_EQUAL(req.getFaceId(), 1172);
837 BOOST_REQUIRE(req.hasFacePersistency());
838 BOOST_CHECK_EQUAL(req.getFacePersistency(), FacePersistency::FACE_PERSISTENCY_PERSISTENT);
839 BOOST_REQUIRE(req.hasMtu());
840 BOOST_CHECK_EQUAL(req.getMtu(), 4000);
841 BOOST_CHECK(req.hasFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED));
842 BOOST_CHECK(req.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED));
843
844 ControlParameters resp;
845 resp.setFaceId(1172)
846 .setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT)
847 .setMtu(4000)
848 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, true, false);
849 this->succeedCommand(interest, resp);
850 };
851
852 this->execute("face create udp://100.77.30.65 mtu 4000 reliability on");
853 BOOST_CHECK(hasUpdateCommand);
854 BOOST_CHECK_EQUAL(exitCode, 0);
855 BOOST_CHECK(out.is_equal("face-updated id=1172 local=udp4://68.62.26.57:24087 "
856 "remote=udp4://100.77.30.65:6363 persistency=persistent "
857 "reliability=on congestion-marking=off mtu=4000\n"));
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000858 BOOST_CHECK(err.is_empty());
859}
860
Junxiao Shi0d976922017-04-01 14:35:21 +0000861BOOST_AUTO_TEST_CASE(ErrorCanonizeRemote)
862{
863 this->execute("face create invalid://");
864 BOOST_CHECK_EQUAL(exitCode, 4);
865 BOOST_CHECK(out.is_empty());
Eric Newberryd656aff2020-04-03 00:30:38 -0700866 BOOST_CHECK(err.is_equal("Error during canonization of remote FaceUri 'invalid://': "
867 "scheme not supported\n"));
Junxiao Shi0d976922017-04-01 14:35:21 +0000868}
869
870BOOST_AUTO_TEST_CASE(ErrorCanonizeLocal)
871{
872 this->execute("face create udp4://24.37.20.47:6363 local invalid://");
873 BOOST_CHECK_EQUAL(exitCode, 4);
874 BOOST_CHECK(out.is_empty());
Eric Newberryd656aff2020-04-03 00:30:38 -0700875 BOOST_CHECK(err.is_equal("Error during canonization of local FaceUri 'invalid://': "
876 "scheme not supported\n"));
Junxiao Shi0d976922017-04-01 14:35:21 +0000877}
878
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000879BOOST_AUTO_TEST_CASE(ErrorCreate)
Junxiao Shi1d7fef52017-02-02 05:33:14 +0000880{
881 this->processInterest = nullptr; // no response
882
883 this->execute("face create udp://159.242.33.78");
884 BOOST_CHECK_EQUAL(exitCode, 1);
885 BOOST_CHECK(out.is_empty());
886 BOOST_CHECK(err.is_equal("Error 10060 when creating face: request timed out\n"));
887}
888
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000889BOOST_AUTO_TEST_CASE(ErrorConflict)
890{
891 // Current NFD will not report a 409-conflict with a different remote FaceUri, but this is
892 // allowed by FaceMgmt protocol and nfdc should not attempt to upgrade persistency in this case.
893
894 this->processInterest = [this] (const Interest& interest) {
895 // conflict with udp4://100.77.30.65:6363
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000896 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_ON_DEMAND);
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000897 };
898
899 this->execute("face create udp://20.53.73.45");
900 BOOST_CHECK_EQUAL(exitCode, 1);
901 BOOST_CHECK(out.is_empty());
902 BOOST_CHECK(err.is_equal("Error 409 when creating face: conflict-409\n"));
903}
904
905BOOST_AUTO_TEST_CASE(ErrorUpdate)
906{
907 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000908 if (parseCommand(interest, "/localhost/nfd/faces/create")) {
909 this->respond409(interest, FacePersistency::FACE_PERSISTENCY_ON_DEMAND);
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000910 return;
911 }
912
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000913 MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/update");
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000914 // no response to faces/update
915 };
916
917 this->execute("face create udp://100.77.30.65");
918 BOOST_CHECK_EQUAL(exitCode, 1);
919 BOOST_CHECK(out.is_empty());
Eric Newberry13ff2592020-03-06 17:32:29 -0800920 BOOST_CHECK(err.is_equal("Error 10060 when updating face: request timed out\n"));
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000921}
922
Junxiao Shi1d7fef52017-02-02 05:33:14 +0000923BOOST_AUTO_TEST_SUITE_END() // CreateCommand
924
Junxiao Shi05dd4442017-02-06 22:50:07 +0000925BOOST_FIXTURE_TEST_SUITE(DestroyCommand, ExecuteCommandFixture)
926
927BOOST_AUTO_TEST_CASE(NormalByFaceId)
928{
929 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi918e5d42017-02-25 03:58:21 +0000930 if (this->respondFaceQuery(interest)) {
Junxiao Shi05dd4442017-02-06 22:50:07 +0000931 return;
932 }
933
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000934 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/destroy");
Junxiao Shi05dd4442017-02-06 22:50:07 +0000935 BOOST_REQUIRE(req.hasFaceId());
936 BOOST_CHECK_EQUAL(req.getFaceId(), 10156);
937
938 ControlParameters resp;
939 resp.setFaceId(10156);
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000940 this->succeedCommand(interest, resp);
Junxiao Shi05dd4442017-02-06 22:50:07 +0000941 };
942
943 this->execute("face destroy 10156");
944 BOOST_CHECK_EQUAL(exitCode, 0);
945 BOOST_CHECK(out.is_equal("face-destroyed id=10156 local=tcp4://151.26.163.27:22967 "
Eric Newberry84d3adc2017-08-09 23:31:40 -0400946 "remote=tcp4://198.57.27.40:6363 persistency=persistent "
Eric Newberryde332452018-01-30 11:45:32 -0700947 "reliability=off congestion-marking=off\n"));
Junxiao Shi05dd4442017-02-06 22:50:07 +0000948 BOOST_CHECK(err.is_empty());
949}
950
951BOOST_AUTO_TEST_CASE(NormalByFaceUri)
952{
953 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi918e5d42017-02-25 03:58:21 +0000954 if (this->respondFaceQuery(interest)) {
Junxiao Shi05dd4442017-02-06 22:50:07 +0000955 return;
956 }
957
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000958 ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/destroy");
Junxiao Shi05dd4442017-02-06 22:50:07 +0000959 BOOST_REQUIRE(req.hasFaceId());
960 BOOST_CHECK_EQUAL(req.getFaceId(), 2249);
961
962 ControlParameters resp;
963 resp.setFaceId(2249);
Junxiao Shi1a25a6e2017-03-06 03:09:47 +0000964 this->succeedCommand(interest, resp);
Junxiao Shi05dd4442017-02-06 22:50:07 +0000965 };
966
967 this->execute("face destroy tcp://32.121.182.82");
968 BOOST_CHECK_EQUAL(exitCode, 0);
969 BOOST_CHECK(out.is_equal("face-destroyed id=2249 local=tcp4://30.99.87.98:31414 "
Eric Newberry84d3adc2017-08-09 23:31:40 -0400970 "remote=tcp4://32.121.182.82:6363 persistency=persistent "
Eric Newberryde332452018-01-30 11:45:32 -0700971 "reliability=off congestion-marking=off\n"));
Junxiao Shi05dd4442017-02-06 22:50:07 +0000972 BOOST_CHECK(err.is_empty());
973}
974
975BOOST_AUTO_TEST_CASE(FaceNotExist)
976{
977 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi918e5d42017-02-25 03:58:21 +0000978 BOOST_CHECK(this->respondFaceQuery(interest));
Junxiao Shi05dd4442017-02-06 22:50:07 +0000979 };
980
981 this->execute("face destroy 23728");
982 BOOST_CHECK_EQUAL(exitCode, 3);
983 BOOST_CHECK(out.is_empty());
984 BOOST_CHECK(err.is_equal("Face not found\n"));
985}
986
987BOOST_AUTO_TEST_CASE(Ambiguous)
988{
989 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi918e5d42017-02-25 03:58:21 +0000990 BOOST_CHECK(this->respondFaceQuery(interest));
Junxiao Shi05dd4442017-02-06 22:50:07 +0000991 };
992
993 this->execute("face destroy udp4://225.131.75.231:56363");
994 BOOST_CHECK_EQUAL(exitCode, 5);
995 BOOST_CHECK(out.is_empty());
996 BOOST_CHECK(err.is_equal("Multiple faces match specified remote FaceUri. "
997 "Re-run the command with a FaceId: "
998 "6720 (local=udp4://202.83.168.28:56363), "
999 "31066 (local=udp4://25.90.26.32:56363)\n"));
1000}
1001
1002BOOST_AUTO_TEST_CASE(ErrorCanonization)
1003{
1004 this->execute("face destroy udp6://32.38.164.64:10445");
1005 BOOST_CHECK_EQUAL(exitCode, 4);
1006 BOOST_CHECK(out.is_empty());
Eric Newberryd656aff2020-04-03 00:30:38 -07001007 BOOST_CHECK(err.is_equal("Error during canonization of 'udp6://32.38.164.64:10445': "
Eric Newberry7d8695d2017-05-29 15:49:10 -07001008 "IPv4/v6 mismatch\n"));
Junxiao Shi05dd4442017-02-06 22:50:07 +00001009}
1010
1011BOOST_AUTO_TEST_CASE(ErrorDataset)
1012{
1013 this->processInterest = nullptr; // no response to dataset or command
1014
1015 this->execute("face destroy udp://159.242.33.78");
1016 BOOST_CHECK_EQUAL(exitCode, 1);
1017 BOOST_CHECK(out.is_empty());
Eric Newberry359135c2018-06-26 21:02:12 -07001018 BOOST_CHECK(err.is_equal("Error 10060 when querying face: Timeout exceeded\n"));
Junxiao Shi05dd4442017-02-06 22:50:07 +00001019}
1020
1021BOOST_AUTO_TEST_CASE(ErrorCommand)
1022{
1023 this->processInterest = [this] (const Interest& interest) {
Junxiao Shi918e5d42017-02-25 03:58:21 +00001024 if (this->respondFaceQuery(interest)) {
Junxiao Shi05dd4442017-02-06 22:50:07 +00001025 return;
1026 }
1027
Junxiao Shi1a25a6e2017-03-06 03:09:47 +00001028 MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/destroy");
Junxiao Shi05dd4442017-02-06 22:50:07 +00001029 // no response to command
1030 };
1031
Junxiao Shi918e5d42017-02-25 03:58:21 +00001032 this->execute("face destroy 10156");
Junxiao Shi05dd4442017-02-06 22:50:07 +00001033 BOOST_CHECK_EQUAL(exitCode, 1);
1034 BOOST_CHECK(out.is_empty());
1035 BOOST_CHECK(err.is_equal("Error 10060 when destroying face: request timed out\n"));
1036}
1037
1038BOOST_AUTO_TEST_SUITE_END() // DestroyCommand
1039
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001040const std::string STATUS_XML = stripXmlSpaces(R"XML(
1041 <faces>
1042 <face>
1043 <faceId>134</faceId>
1044 <remoteUri>udp4://233.252.0.4:6363</remoteUri>
1045 <localUri>udp4://192.0.2.1:6363</localUri>
1046 <faceScope>non-local</faceScope>
1047 <facePersistency>permanent</facePersistency>
1048 <linkType>multi-access</linkType>
Eric Newberryde332452018-01-30 11:45:32 -07001049 <congestion/>
Eric Newberry6d932e82016-11-24 05:05:43 +00001050 <flags/>
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001051 <packetCounters>
1052 <incomingPackets>
1053 <nInterests>22562</nInterests>
Junxiao Shif03d4792017-04-06 16:41:22 +00001054 <nData>22031</nData>
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001055 <nNacks>63</nNacks>
1056 </incomingPackets>
1057 <outgoingPackets>
1058 <nInterests>30121</nInterests>
Junxiao Shif03d4792017-04-06 16:41:22 +00001059 <nData>20940</nData>
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001060 <nNacks>1218</nNacks>
1061 </outgoingPackets>
1062 </packetCounters>
1063 <byteCounters>
1064 <incomingBytes>2522915</incomingBytes>
1065 <outgoingBytes>1353592</outgoingBytes>
1066 </byteCounters>
1067 </face>
1068 <face>
1069 <faceId>745</faceId>
1070 <remoteUri>fd://75</remoteUri>
1071 <localUri>unix:///var/run/nfd.sock</localUri>
1072 <faceScope>local</faceScope>
1073 <facePersistency>on-demand</facePersistency>
1074 <linkType>point-to-point</linkType>
Eric Newberryde332452018-01-30 11:45:32 -07001075 <congestion>
1076 <baseMarkingInterval>PT0.100S</baseMarkingInterval>
1077 <defaultThreshold>65536</defaultThreshold>
1078 </congestion>
Eric Newberry4f8dd962018-06-17 21:32:07 -07001079 <mtu>8800</mtu>
Eric Newberry6d932e82016-11-24 05:05:43 +00001080 <flags>
1081 <localFieldsEnabled/>
Eric Newberry84d3adc2017-08-09 23:31:40 -04001082 <lpReliabilityEnabled/>
Eric Newberryde332452018-01-30 11:45:32 -07001083 <congestionMarkingEnabled/>
Eric Newberry6d932e82016-11-24 05:05:43 +00001084 </flags>
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001085 <packetCounters>
1086 <incomingPackets>
1087 <nInterests>18998</nInterests>
Junxiao Shif03d4792017-04-06 16:41:22 +00001088 <nData>26701</nData>
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001089 <nNacks>147</nNacks>
1090 </incomingPackets>
1091 <outgoingPackets>
1092 <nInterests>34779</nInterests>
Junxiao Shif03d4792017-04-06 16:41:22 +00001093 <nData>17028</nData>
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001094 <nNacks>1176</nNacks>
1095 </outgoingPackets>
1096 </packetCounters>
1097 <byteCounters>
1098 <incomingBytes>4672308</incomingBytes>
1099 <outgoingBytes>8957187</outgoingBytes>
1100 </byteCounters>
1101 </face>
1102 </faces>
1103)XML");
1104
1105const std::string STATUS_TEXT =
1106 "Faces:\n"
1107 " faceid=134 remote=udp4://233.252.0.4:6363 local=udp4://192.0.2.1:6363"
1108 " counters={in={22562i 22031d 63n 2522915B} out={30121i 20940d 1218n 1353592B}}"
Junxiao Shi1f481fa2017-01-26 15:14:43 +00001109 " flags={non-local permanent multi-access}\n"
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001110 " faceid=745 remote=fd://75 local=unix:///var/run/nfd.sock"
Eric Newberry4f8dd962018-06-17 21:32:07 -07001111 " congestion={base-marking-interval=100ms default-threshold=65536B} mtu=8800"
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001112 " counters={in={18998i 26701d 147n 4672308B} out={34779i 17028d 1176n 8957187B}}"
Eric Newberryde332452018-01-30 11:45:32 -07001113 " flags={local on-demand point-to-point local-fields lp-reliability congestion-marking}\n";
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001114
Junxiao Shi1f481fa2017-01-26 15:14:43 +00001115BOOST_FIXTURE_TEST_CASE(Status, StatusFixture<FaceModule>)
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001116{
1117 this->fetchStatus();
1118 FaceStatus payload1;
1119 payload1.setFaceId(134)
1120 .setRemoteUri("udp4://233.252.0.4:6363")
1121 .setLocalUri("udp4://192.0.2.1:6363")
1122 .setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL)
1123 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERMANENT)
1124 .setLinkType(ndn::nfd::LINK_TYPE_MULTI_ACCESS)
1125 .setNInInterests(22562)
Junxiao Shif03d4792017-04-06 16:41:22 +00001126 .setNInData(22031)
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001127 .setNInNacks(63)
1128 .setNOutInterests(30121)
Junxiao Shif03d4792017-04-06 16:41:22 +00001129 .setNOutData(20940)
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001130 .setNOutNacks(1218)
1131 .setNInBytes(2522915)
1132 .setNOutBytes(1353592);
1133 FaceStatus payload2;
1134 payload2.setFaceId(745)
1135 .setRemoteUri("fd://75")
1136 .setLocalUri("unix:///var/run/nfd.sock")
1137 .setFaceScope(ndn::nfd::FACE_SCOPE_LOCAL)
1138 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND)
1139 .setLinkType(ndn::nfd::LINK_TYPE_POINT_TO_POINT)
Eric Newberryde332452018-01-30 11:45:32 -07001140 .setBaseCongestionMarkingInterval(100_ms)
1141 .setDefaultCongestionThreshold(65536)
Eric Newberry4f8dd962018-06-17 21:32:07 -07001142 .setMtu(8800)
Eric Newberry6d932e82016-11-24 05:05:43 +00001143 .setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, true)
Eric Newberry84d3adc2017-08-09 23:31:40 -04001144 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, true)
Eric Newberryde332452018-01-30 11:45:32 -07001145 .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, true)
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001146 .setNInInterests(18998)
Junxiao Shif03d4792017-04-06 16:41:22 +00001147 .setNInData(26701)
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001148 .setNInNacks(147)
1149 .setNOutInterests(34779)
Junxiao Shif03d4792017-04-06 16:41:22 +00001150 .setNOutData(17028)
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001151 .setNOutNacks(1176)
1152 .setNInBytes(4672308)
1153 .setNOutBytes(8957187);
1154 this->sendDataset("/localhost/nfd/faces/list", payload1, payload2);
1155 this->prepareStatusOutput();
1156
1157 BOOST_CHECK(statusXml.is_equal(STATUS_XML));
1158 BOOST_CHECK(statusText.is_equal(STATUS_TEXT));
1159}
1160
1161BOOST_AUTO_TEST_SUITE_END() // TestFaceModule
Junxiao Shi331ade72016-08-19 14:07:19 +00001162BOOST_AUTO_TEST_SUITE_END() // Nfdc
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001163
1164} // namespace tests
Junxiao Shi331ade72016-08-19 14:07:19 +00001165} // namespace nfdc
Junxiao Shi38f4ce92016-08-04 10:01:52 +00001166} // namespace tools
1167} // namespace nfd