blob: 698a52571b068c7a22803e7c3b0854b6aeb8f00f [file] [log] [blame]
Yanbiao Li73860e32015-08-19 16:30:16 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Junxiao Shi60286192017-07-26 01:07:48 +00002/*
Eric Newberry0c3e57b2018-01-25 20:54:46 -07003 * Copyright (c) 2014-2018, Regents of the University of California,
Yanbiao Li73860e32015-08-19 16:30:16 -07004 * 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
Yanbiao Li58ba3f92017-02-15 14:27:18 +000026#include "mgmt/face-manager.hpp"
Eric Newberry0c3e57b2018-01-25 20:54:46 -070027#include "face/generic-link-service.hpp"
Eric Newberry42602412016-08-27 09:33:18 -070028#include "face-manager-command-fixture.hpp"
29#include "nfd-manager-common-fixture.hpp"
Junxiao Shib84e6742016-07-19 13:16:22 +000030
Yanbiao Li73860e32015-08-19 16:30:16 -070031namespace nfd {
32namespace tests {
33
Yanbiao Li73860e32015-08-19 16:30:16 -070034BOOST_AUTO_TEST_SUITE(Mgmt)
35BOOST_AUTO_TEST_SUITE(TestFaceManager)
36
37BOOST_FIXTURE_TEST_SUITE(CreateFace, BaseFixture)
38
Yanbiao Li73860e32015-08-19 16:30:16 -070039class TcpFaceOnDemand
40{
41public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -040042 static ControlParameters
Yanbiao Li73860e32015-08-19 16:30:16 -070043 getParameters()
44 {
45 return ControlParameters()
46 .setUri("tcp4://127.0.0.1:26363")
47 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND);
48 }
49};
50
51class TcpFacePersistent
52{
53public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -040054 static ControlParameters
Yanbiao Li73860e32015-08-19 16:30:16 -070055 getParameters()
56 {
57 return ControlParameters()
58 .setUri("tcp4://127.0.0.1:26363")
59 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
60 }
61};
62
63class TcpFacePermanent
64{
65public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -040066 static ControlParameters
Yanbiao Li73860e32015-08-19 16:30:16 -070067 getParameters()
68 {
69 return ControlParameters()
70 .setUri("tcp4://127.0.0.1:26363")
71 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERMANENT);
72 }
73};
74
75class UdpFaceOnDemand
76{
77public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -040078 static ControlParameters
Yanbiao Li73860e32015-08-19 16:30:16 -070079 getParameters()
80 {
81 return ControlParameters()
82 .setUri("udp4://127.0.0.1:26363")
83 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_ON_DEMAND);
84 }
85};
86
Yanbiao Li73860e32015-08-19 16:30:16 -070087class UdpFacePersistent
88{
89public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -040090 static ControlParameters
Yanbiao Li73860e32015-08-19 16:30:16 -070091 getParameters()
92 {
93 return ControlParameters()
94 .setUri("udp4://127.0.0.1:26363")
95 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT);
96 }
97};
98
99class UdpFacePermanent
100{
101public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400102 static ControlParameters
Yanbiao Li73860e32015-08-19 16:30:16 -0700103 getParameters()
104 {
105 return ControlParameters()
106 .setUri("udp4://127.0.0.1:26363")
107 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERMANENT);
108 }
109};
110
Eric Newberryf40551a2016-09-05 15:41:16 -0700111class LocalTcpFaceLocalFieldsEnabled
112{
113public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400114 static ControlParameters
Eric Newberryf40551a2016-09-05 15:41:16 -0700115 getParameters()
116 {
117 return ControlParameters()
118 .setUri("tcp4://127.0.0.1:26363")
119 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
120 .setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, true);
121 }
122};
123
124class LocalTcpFaceLocalFieldsDisabled
125{
126public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400127 static ControlParameters
Eric Newberryf40551a2016-09-05 15:41:16 -0700128 getParameters()
129 {
130 return ControlParameters()
131 .setUri("tcp4://127.0.0.1:26363")
132 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
133 .setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, false);
134 }
135};
136
137class NonLocalUdpFaceLocalFieldsEnabled // won't work because non-local scope
138{
139public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400140 static ControlParameters
Eric Newberryf40551a2016-09-05 15:41:16 -0700141 getParameters()
142 {
143 return ControlParameters()
144 .setUri("udp4://127.0.0.1:26363")
145 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
146 .setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, true);
147 }
148};
149
150class NonLocalUdpFaceLocalFieldsDisabled
151{
152public:
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400153 static ControlParameters
Eric Newberryf40551a2016-09-05 15:41:16 -0700154 getParameters()
155 {
156 return ControlParameters()
157 .setUri("udp4://127.0.0.1:26363")
158 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
159 .setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, false);
160 }
161};
162
Eric Newberry2642cd22017-07-13 21:34:53 -0400163class TcpFaceLpReliabilityEnabled
164{
165public:
166 static ControlParameters
167 getParameters()
168 {
169 return ControlParameters()
170 .setUri("tcp4://127.0.0.1:26363")
171 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
172 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, true);
173 }
174};
175
176class TcpFaceLpReliabilityDisabled
177{
178public:
179 static ControlParameters
180 getParameters()
181 {
182 return ControlParameters()
183 .setUri("tcp4://127.0.0.1:26363")
184 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
185 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, false);
186 }
187};
188
189class UdpFaceLpReliabilityEnabled
190{
191public:
192 static ControlParameters
193 getParameters()
194 {
195 return ControlParameters()
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700196 .setUri("udp4://127.0.0.1:26363")
Eric Newberry2642cd22017-07-13 21:34:53 -0400197 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
198 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, true);
199 }
200};
201
202class UdpFaceLpReliabilityDisabled
203{
204public:
205 static ControlParameters
206 getParameters()
207 {
208 return ControlParameters()
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700209 .setUri("udp4://127.0.0.1:26363")
Eric Newberry2642cd22017-07-13 21:34:53 -0400210 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
211 .setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, false);
212 }
213};
214
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700215class TcpFaceCongestionMarkingEnabled
216{
217public:
218 static ControlParameters
219 getParameters()
220 {
221 return ControlParameters()
222 .setUri("tcp4://127.0.0.1:26363")
223 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
224 .setBaseCongestionMarkingInterval(50_ms)
225 .setDefaultCongestionThreshold(1000)
226 .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, true);
227 }
228};
229
230class TcpFaceCongestionMarkingDisabled
231{
232public:
233 static ControlParameters
234 getParameters()
235 {
236 return ControlParameters()
237 .setUri("tcp4://127.0.0.1:26363")
238 .setFacePersistency(ndn::nfd::FACE_PERSISTENCY_PERSISTENT)
239 .setBaseCongestionMarkingInterval(50_ms)
240 .setDefaultCongestionThreshold(1000)
241 .setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, false);
242 }
243};
244
Junxiao Shi38c7d9e2017-04-13 14:22:50 +0000245class FaceUriMalformed
246{
247public:
248 static ControlParameters
249 getParameters()
250 {
251 return ControlParameters()
252 .setUri("tcp4://127.0.0.1:not-a-port");
253 }
254};
255
256class FaceUriNonCanonical
257{
258public:
259 static ControlParameters
260 getParameters()
261 {
262 return ControlParameters()
263 .setUri("udp://localhost");
264 }
265};
266
267class FaceUriUnsupportedScheme
268{
269public:
270 static ControlParameters
271 getParameters()
272 {
273 return ControlParameters()
274 .setUri("dev://eth0");
275 }
276};
277
Yanbiao Li73860e32015-08-19 16:30:16 -0700278namespace mpl = boost::mpl;
279
Eric Newberry42602412016-08-27 09:33:18 -0700280// pairs of CreateCommand and Success/Failure status
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400281using TestCases = mpl::vector<
282 mpl::pair<TcpFaceOnDemand, CommandFailure<406>>,
Eric Newberryb5aa7f52016-09-03 20:36:12 -0700283 mpl::pair<TcpFacePersistent, CommandSuccess>,
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400284 mpl::pair<TcpFacePermanent, CommandSuccess>,
Eric Newberryb5aa7f52016-09-03 20:36:12 -0700285 mpl::pair<UdpFaceOnDemand, CommandFailure<406>>,
286 mpl::pair<UdpFacePersistent, CommandSuccess>,
287 mpl::pair<UdpFacePermanent, CommandSuccess>,
Eric Newberryf40551a2016-09-05 15:41:16 -0700288 mpl::pair<LocalTcpFaceLocalFieldsEnabled, CommandSuccess>,
289 mpl::pair<LocalTcpFaceLocalFieldsDisabled, CommandSuccess>,
290 mpl::pair<NonLocalUdpFaceLocalFieldsEnabled, CommandFailure<406>>,
Junxiao Shi38c7d9e2017-04-13 14:22:50 +0000291 mpl::pair<NonLocalUdpFaceLocalFieldsDisabled, CommandSuccess>,
Eric Newberry2642cd22017-07-13 21:34:53 -0400292 mpl::pair<TcpFaceLpReliabilityEnabled, CommandSuccess>,
293 mpl::pair<TcpFaceLpReliabilityDisabled, CommandSuccess>,
294 mpl::pair<UdpFaceLpReliabilityEnabled, CommandSuccess>,
295 mpl::pair<UdpFaceLpReliabilityDisabled, CommandSuccess>,
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700296 mpl::pair<TcpFaceCongestionMarkingEnabled, CommandSuccess>,
297 mpl::pair<TcpFaceCongestionMarkingDisabled, CommandSuccess>,
Junxiao Shi38c7d9e2017-04-13 14:22:50 +0000298 mpl::pair<FaceUriMalformed, CommandFailure<400>>,
299 mpl::pair<FaceUriNonCanonical, CommandFailure<400>>,
300 mpl::pair<FaceUriUnsupportedScheme, CommandFailure<406>>>;
Yanbiao Li73860e32015-08-19 16:30:16 -0700301
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400302BOOST_FIXTURE_TEST_CASE_TEMPLATE(NewFace, T, TestCases, FaceManagerCommandFixture)
Yanbiao Li73860e32015-08-19 16:30:16 -0700303{
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400304 using FaceType = typename T::first;
305 using CreateResult = typename T::second;
Yanbiao Li73860e32015-08-19 16:30:16 -0700306
Junxiao Shi8a1f1702017-07-03 00:05:08 +0000307 Interest req = makeControlCommandRequest("/localhost/nfd/faces/create", FaceType::getParameters());
Yanbiao Li73860e32015-08-19 16:30:16 -0700308
309 bool hasCallbackFired = false;
Junxiao Shi8a1f1702017-07-03 00:05:08 +0000310 this->node1.face.onSendData.connect([this, req, &hasCallbackFired] (const Data& response) {
311 if (!req.getName().isPrefixOf(response.getName())) {
Eric Newberry42602412016-08-27 09:33:18 -0700312 return;
313 }
Yanbiao Li73860e32015-08-19 16:30:16 -0700314
Eric Newberry42602412016-08-27 09:33:18 -0700315 ControlResponse actual(response.getContent().blockFromValue());
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400316 ControlResponse expected(CreateResult::getExpected());
Eric Newberry42602412016-08-27 09:33:18 -0700317 BOOST_TEST_MESSAGE(actual.getText());
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000318 BOOST_CHECK_EQUAL(expected.getCode(), actual.getCode());
Yanbiao Li73860e32015-08-19 16:30:16 -0700319
Eric Newberry42602412016-08-27 09:33:18 -0700320 if (actual.getBody().hasWire()) {
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400321 ControlParameters expectedParams(FaceType::getParameters());
Eric Newberry42602412016-08-27 09:33:18 -0700322 ControlParameters actualParams(actual.getBody());
Yanbiao Li73860e32015-08-19 16:30:16 -0700323
Eric Newberry42602412016-08-27 09:33:18 -0700324 BOOST_CHECK(actualParams.hasFaceId());
325 BOOST_CHECK_EQUAL(expectedParams.getFacePersistency(), actualParams.getFacePersistency());
326
Eric Newberryb5aa7f52016-09-03 20:36:12 -0700327 if (actual.getCode() == 200) {
328 if (expectedParams.hasFlags()) {
Eric Newberryf40551a2016-09-05 15:41:16 -0700329 BOOST_CHECK_EQUAL(expectedParams.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED),
330 actualParams.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED));
Eric Newberry2642cd22017-07-13 21:34:53 -0400331 BOOST_CHECK_EQUAL(expectedParams.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED),
332 actualParams.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED));
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700333 BOOST_CHECK_EQUAL(expectedParams.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED),
334 actualParams.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED));
Eric Newberryb5aa7f52016-09-03 20:36:12 -0700335 }
336 else {
Eric Newberryf40551a2016-09-05 15:41:16 -0700337 // local fields are disabled by default
338 BOOST_CHECK_EQUAL(actualParams.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED), false);
Eric Newberry2642cd22017-07-13 21:34:53 -0400339 BOOST_CHECK_EQUAL(actualParams.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED), false);
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700340 BOOST_CHECK_EQUAL(actualParams.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED), false);
341 }
342
343 if (expectedParams.hasBaseCongestionMarkingInterval()) {
344 BOOST_CHECK_EQUAL(expectedParams.getBaseCongestionMarkingInterval(),
345 actualParams.getBaseCongestionMarkingInterval());
346 }
347 else {
348 BOOST_CHECK_EQUAL(actualParams.getBaseCongestionMarkingInterval(), 100_ms);
349 }
350
351 if (expectedParams.hasDefaultCongestionThreshold()) {
352 BOOST_CHECK_EQUAL(expectedParams.getDefaultCongestionThreshold(),
353 actualParams.getDefaultCongestionThreshold());
354 }
355 else {
356 BOOST_CHECK_EQUAL(actualParams.getDefaultCongestionThreshold(), 65536);
Eric Newberryb5aa7f52016-09-03 20:36:12 -0700357 }
358 }
359 else {
Yanbiao Li73860e32015-08-19 16:30:16 -0700360 BOOST_CHECK_EQUAL(expectedParams.getUri(), actualParams.getUri());
Yanbiao Li73860e32015-08-19 16:30:16 -0700361 }
Eric Newberry42602412016-08-27 09:33:18 -0700362 }
Eric Newberryb5aa7f52016-09-03 20:36:12 -0700363
364 if (actual.getCode() != 200) {
Junxiao Shi38c7d9e2017-04-13 14:22:50 +0000365 FaceUri uri;
366 if (uri.parse(FaceType::getParameters().getUri())) {
367 // ensure face not created
Davide Pesaventob5eee202017-09-21 23:59:22 -0400368 const auto& faceTable = this->node1.faceTable;
Junxiao Shi38c7d9e2017-04-13 14:22:50 +0000369 BOOST_CHECK(std::none_of(faceTable.begin(), faceTable.end(), [uri] (Face& face) {
370 return face.getRemoteUri() == uri;
371 }));
372 }
373 else {
374 // do not check malformed FaceUri
375 }
Eric Newberryb5aa7f52016-09-03 20:36:12 -0700376 }
377
Eric Newberry42602412016-08-27 09:33:18 -0700378 hasCallbackFired = true;
379 });
Yanbiao Li73860e32015-08-19 16:30:16 -0700380
Junxiao Shi8a1f1702017-07-03 00:05:08 +0000381 this->node1.face.receive(req);
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700382 this->advanceClocks(1_ms, 5);
Yanbiao Li73860e32015-08-19 16:30:16 -0700383
384 BOOST_CHECK(hasCallbackFired);
385}
386
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000387BOOST_FIXTURE_TEST_CASE(ExistingFace, FaceManagerCommandFixture)
Yanbiao Li73860e32015-08-19 16:30:16 -0700388{
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000389 using FaceType = UdpFacePersistent;
Yanbiao Li73860e32015-08-19 16:30:16 -0700390
391 {
392 // create face
Junxiao Shi8a1f1702017-07-03 00:05:08 +0000393 Interest req = makeControlCommandRequest("/localhost/nfd/faces/create", FaceType::getParameters());
394 this->node1.face.receive(req);
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700395 this->advanceClocks(1_ms, 5);
Yanbiao Li73860e32015-08-19 16:30:16 -0700396 }
397
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000398 // find the created face
Davide Pesaventoa3c9ddb2017-04-10 22:15:24 -0400399 auto foundFace = this->node1.findFaceByUri(FaceType::getParameters().getUri());
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000400 BOOST_REQUIRE(foundFace != nullptr);
Yanbiao Li73860e32015-08-19 16:30:16 -0700401
402 {
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000403 // re-create face
Junxiao Shi8a1f1702017-07-03 00:05:08 +0000404 Interest req = makeControlCommandRequest("/localhost/nfd/faces/create", FaceType::getParameters());
Yanbiao Li73860e32015-08-19 16:30:16 -0700405
406 bool hasCallbackFired = false;
Junxiao Shib84e6742016-07-19 13:16:22 +0000407 this->node1.face.onSendData.connect(
Davide Pesaventoac238f22017-09-12 15:19:40 -0400408 [req, foundFace, &hasCallbackFired] (const Data& response) {
Junxiao Shi8a1f1702017-07-03 00:05:08 +0000409 if (!req.getName().isPrefixOf(response.getName())) {
Yanbiao Li73860e32015-08-19 16:30:16 -0700410 return;
411 }
412
413 ControlResponse actual(response.getContent().blockFromValue());
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000414 BOOST_REQUIRE_EQUAL(actual.getCode(), 409);
Yanbiao Li73860e32015-08-19 16:30:16 -0700415
Yanbiao Li73860e32015-08-19 16:30:16 -0700416 ControlParameters actualParams(actual.getBody());
Yanbiao Li58ba3f92017-02-15 14:27:18 +0000417 BOOST_CHECK_EQUAL(foundFace->getId(), actualParams.getFaceId());
418 BOOST_CHECK_EQUAL(foundFace->getRemoteUri().toString(), actualParams.getUri());
419 BOOST_CHECK_EQUAL(foundFace->getPersistency(), actualParams.getFacePersistency());
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700420 auto linkService = dynamic_cast<face::GenericLinkService*>(foundFace->getLinkService());
421 BOOST_CHECK_EQUAL(linkService->getOptions().baseCongestionMarkingInterval,
422 actualParams.getBaseCongestionMarkingInterval());
423 BOOST_CHECK_EQUAL(linkService->getOptions().defaultCongestionThreshold,
424 actualParams.getDefaultCongestionThreshold());
Yanbiao Li73860e32015-08-19 16:30:16 -0700425
426 hasCallbackFired = true;
427 });
428
Junxiao Shi8a1f1702017-07-03 00:05:08 +0000429 this->node1.face.receive(req);
Eric Newberry0c3e57b2018-01-25 20:54:46 -0700430 this->advanceClocks(1_ms, 5);
Yanbiao Li73860e32015-08-19 16:30:16 -0700431
432 BOOST_CHECK(hasCallbackFired);
433 }
434}
435
436BOOST_AUTO_TEST_SUITE_END() // CreateFace
437BOOST_AUTO_TEST_SUITE_END() // TestFaceManager
438BOOST_AUTO_TEST_SUITE_END() // Mgmt
439
Weiwei Liuf5aee942016-03-19 07:00:42 +0000440} // namespace tests
441} // namespace nfd