blob: b0f78f9e62482836235f35fa06c6bece2552bd38 [file] [log] [blame]
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -04001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Alexander Afanasyev57e00362016-06-23 13:22:54 -07003 * Copyright (c) 2013-2016 Regents of the University of California.
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -04004 *
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 "face.hpp"
23#include "util/scheduler.hpp"
24#include "security/key-chain.hpp"
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -080025#include "util/dummy-client-face.hpp"
Alexander Afanasyev3a6da362015-12-29 20:31:03 -080026#include "transport/tcp-transport.hpp"
Alexander Afanasyev57e00362016-06-23 13:22:54 -070027#include "transport/unix-transport.hpp"
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -040028
29#include "boost-test.hpp"
Alexander Afanasyeve4f8c3b2016-06-23 16:03:48 -070030#include "identity-management-time-fixture.hpp"
31#include "key-chain-fixture.hpp"
Spyridon Mastorakis429634f2015-02-19 17:35:33 -080032#include "make-interest-data.hpp"
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -040033
34namespace ndn {
35namespace tests {
36
Junxiao Shia60d9362014-11-12 09:38:21 -070037using ndn::util::DummyClientFace;
Junxiao Shia60d9362014-11-12 09:38:21 -070038
Alexander Afanasyeve4f8c3b2016-06-23 16:03:48 -070039class FaceFixture : public IdentityManagementTimeFixture
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -040040{
41public:
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -080042 explicit
Junxiao Shia1ea5062014-12-27 22:33:39 -070043 FaceFixture(bool enableRegistrationReply = true)
Alexander Afanasyeve4f8c3b2016-06-23 16:03:48 -070044 : face(io, m_keyChain, { true, enableRegistrationReply })
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -040045 {
46 }
47
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -080048public:
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -080049 DummyClientFace face;
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -040050};
51
Junxiao Shia1ea5062014-12-27 22:33:39 -070052class FacesNoRegistrationReplyFixture : public FaceFixture
Junxiao Shia60d9362014-11-12 09:38:21 -070053{
54public:
55 FacesNoRegistrationReplyFixture()
Junxiao Shia1ea5062014-12-27 22:33:39 -070056 : FaceFixture(false)
Junxiao Shia60d9362014-11-12 09:38:21 -070057 {
58 }
59};
60
Junxiao Shia1ea5062014-12-27 22:33:39 -070061BOOST_FIXTURE_TEST_SUITE(TestFace, FaceFixture)
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -040062
Junxiao Shi103d8ed2016-08-07 20:34:10 +000063BOOST_AUTO_TEST_SUITE(Consumer)
64
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -040065BOOST_AUTO_TEST_CASE(ExpressInterestData)
66{
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -080067 size_t nData = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -080068 face.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
69 [&] (const Interest& i, const Data& d) {
70 BOOST_CHECK(i.getName().isPrefixOf(d.getName()));
71 BOOST_CHECK_EQUAL(i.getName(), "/Hello/World");
72 ++nData;
73 },
Junxiao Shi103d8ed2016-08-07 20:34:10 +000074 bind([] { BOOST_FAIL("Unexpected Nack"); }),
75 bind([] { BOOST_FAIL("Unexpected timeout"); }));
Eric Newberry83872fd2015-08-06 17:01:24 -070076
77 advanceClocks(time::milliseconds(1), 40);
78
Junxiao Shi85d90832016-08-04 03:19:46 +000079 face.receive(*makeData("/Bye/World/a"));
80 face.receive(*makeData("/Hello/World/a"));
Eric Newberry83872fd2015-08-06 17:01:24 -070081
82 advanceClocks(time::milliseconds(1), 100);
83
84 BOOST_CHECK_EQUAL(nData, 1);
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -080085 BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
86 BOOST_CHECK_EQUAL(face.sentData.size(), 0);
Eric Newberry83872fd2015-08-06 17:01:24 -070087
88 size_t nTimeouts = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -080089 face.expressInterest(Interest("/Hello/World/a/2", time::milliseconds(50)),
90 bind([]{}),
91 bind([]{}),
Junxiao Shi103d8ed2016-08-07 20:34:10 +000092 bind([&nTimeouts] { ++nTimeouts; }));
Eric Newberry83872fd2015-08-06 17:01:24 -070093 advanceClocks(time::milliseconds(10), 100);
94 BOOST_CHECK_EQUAL(nTimeouts, 1);
95}
96
Junxiao Shi76e0eb22016-08-08 05:54:10 +000097BOOST_AUTO_TEST_CASE(ExpressInterestEmptyDataCallback)
98{
99 face.expressInterest(Interest("/Hello/World"),
100 nullptr,
101 bind([] { BOOST_FAIL("Unexpected Nack"); }),
102 bind([] { BOOST_FAIL("Unexpected timeout"); }));
103 advanceClocks(time::milliseconds(1));
104
105 BOOST_CHECK_NO_THROW(do {
106 face.receive(*makeData("/Hello/World/a"));
107 advanceClocks(time::milliseconds(1));
108 } while (false));
109}
110
Eric Newberry83872fd2015-08-06 17:01:24 -0700111// test case for deprecated expressInterest implementation
112BOOST_AUTO_TEST_CASE(DeprecatedExpressInterestData)
113{
114 size_t nData = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800115 face.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000116 [&] (const Interest& i, Data& d) {
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800117 BOOST_CHECK(i.getName().isPrefixOf(d.getName()));
118 ++nData;
119 },
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000120 bind([] { BOOST_FAIL("Unexpected timeout"); }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400121
Alexander Afanasyev9d158f02015-02-17 21:30:19 -0800122 advanceClocks(time::milliseconds(1), 40);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400123
Junxiao Shi85d90832016-08-04 03:19:46 +0000124 face.receive(*makeData("/Bye/World/a"));
125 face.receive(*makeData("/Hello/World/a"));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800126
Alexander Afanasyev9d158f02015-02-17 21:30:19 -0800127 advanceClocks(time::milliseconds(1), 100);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400128
129 BOOST_CHECK_EQUAL(nData, 1);
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800130 BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
131 BOOST_CHECK_EQUAL(face.sentData.size(), 0);
Alexander Afanasyev9d158f02015-02-17 21:30:19 -0800132
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800133 face.expressInterest(Interest("/Hello/World/a", time::milliseconds(50)),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000134 [&] (const Interest& i, Data& d) {
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800135 BOOST_CHECK(i.getName().isPrefixOf(d.getName()));
136 ++nData;
137 },
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000138 bind([] { BOOST_FAIL("Unexpected timeout"); }));
Alexander Afanasyev9d158f02015-02-17 21:30:19 -0800139 advanceClocks(time::milliseconds(1), 40);
Junxiao Shi85d90832016-08-04 03:19:46 +0000140 face.receive(*makeData("/Hello/World/a/1/xxxxx"));
Alexander Afanasyev9d158f02015-02-17 21:30:19 -0800141
142 advanceClocks(time::milliseconds(1), 100);
143
144 BOOST_CHECK_EQUAL(nData, 2);
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800145 BOOST_CHECK_EQUAL(face.sentInterests.size(), 2);
146 BOOST_CHECK_EQUAL(face.sentData.size(), 0);
Alexander Afanasyev9d158f02015-02-17 21:30:19 -0800147
148 size_t nTimeouts = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800149 face.expressInterest(Interest("/Hello/World/a/2", time::milliseconds(50)),
150 bind([]{}),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000151 bind([&nTimeouts] { ++nTimeouts; }));
Alexander Afanasyev9d158f02015-02-17 21:30:19 -0800152 advanceClocks(time::milliseconds(10), 100);
153 BOOST_CHECK_EQUAL(nTimeouts, 1);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400154}
155
156BOOST_AUTO_TEST_CASE(ExpressInterestTimeout)
157{
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800158 size_t nTimeouts = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800159 face.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000160 bind([] { BOOST_FAIL("Unexpected Data"); }),
161 bind([] { BOOST_FAIL("Unexpected Nack"); }),
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800162 [&nTimeouts] (const Interest& i) {
163 BOOST_CHECK_EQUAL(i.getName(), "/Hello/World");
164 ++nTimeouts;
165 });
Eric Newberry83872fd2015-08-06 17:01:24 -0700166
167 advanceClocks(time::milliseconds(10), 100);
168
169 BOOST_CHECK_EQUAL(nTimeouts, 1);
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800170 BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
171 BOOST_CHECK_EQUAL(face.sentData.size(), 0);
172 BOOST_CHECK_EQUAL(face.sentNacks.size(), 0);
Eric Newberry83872fd2015-08-06 17:01:24 -0700173}
174
Junxiao Shi76e0eb22016-08-08 05:54:10 +0000175BOOST_AUTO_TEST_CASE(ExpressInterestEmptyTimeoutCallback)
176{
177 face.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
178 bind([] { BOOST_FAIL("Unexpected Data"); }),
179 bind([] { BOOST_FAIL("Unexpected Nack"); }),
180 nullptr);
181 advanceClocks(time::milliseconds(40));
182
183 BOOST_CHECK_NO_THROW(do {
184 advanceClocks(time::milliseconds(6), 2);
185 } while (false));
186}
187
Eric Newberry83872fd2015-08-06 17:01:24 -0700188// test case for deprecated expressInterest implementation
189BOOST_AUTO_TEST_CASE(DeprecatedExpressInterestTimeout)
190{
191 size_t nTimeouts = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800192 face.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000193 bind([] { BOOST_FAIL("Unexpected data"); }),
194 bind([&nTimeouts] { ++nTimeouts; }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400195
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800196 advanceClocks(time::milliseconds(10), 100);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400197
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400198 BOOST_CHECK_EQUAL(nTimeouts, 1);
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800199 BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
200 BOOST_CHECK_EQUAL(face.sentData.size(), 0);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400201}
202
Eric Newberry83872fd2015-08-06 17:01:24 -0700203BOOST_AUTO_TEST_CASE(ExpressInterestNack)
204{
205 size_t nNacks = 0;
206
207 Interest interest("/Hello/World", time::milliseconds(50));
208
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800209 face.expressInterest(interest,
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000210 bind([] { BOOST_FAIL("Unexpected Data"); }),
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800211 [&] (const Interest& i, const lp::Nack& n) {
212 BOOST_CHECK(i.getName().isPrefixOf(n.getInterest().getName()));
213 BOOST_CHECK_EQUAL(i.getName(), "/Hello/World");
214 BOOST_CHECK_EQUAL(n.getReason(), lp::NackReason::DUPLICATE);
215 ++nNacks;
216 },
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000217 bind([] { BOOST_FAIL("Unexpected timeout"); }));
Eric Newberry83872fd2015-08-06 17:01:24 -0700218
219 advanceClocks(time::milliseconds(1), 40);
220
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800221 lp::Nack nack(face.sentInterests[0]);
Eric Newberry83872fd2015-08-06 17:01:24 -0700222 nack.setReason(lp::NackReason::DUPLICATE);
223
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800224 BOOST_CHECK_EQUAL(face.sentNacks.size(), 0);
Eric Newberry83872fd2015-08-06 17:01:24 -0700225
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800226 face.receive(nack);
Eric Newberry83872fd2015-08-06 17:01:24 -0700227
228 advanceClocks(time::milliseconds(1), 100);
229
230 BOOST_CHECK_EQUAL(nNacks, 1);
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800231 BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
Eric Newberry83872fd2015-08-06 17:01:24 -0700232}
233
Junxiao Shi76e0eb22016-08-08 05:54:10 +0000234BOOST_AUTO_TEST_CASE(ExpressInterestEmptyNackCallback)
235{
236 face.expressInterest(Interest("/Hello/World"),
237 bind([] { BOOST_FAIL("Unexpected Data"); }),
238 nullptr,
239 bind([] { BOOST_FAIL("Unexpected timeout"); }));
240 advanceClocks(time::milliseconds(1));
241
242 BOOST_CHECK_NO_THROW(do {
243 face.receive(makeNack(face.sentInterests.at(0), lp::NackReason::DUPLICATE));
244 advanceClocks(time::milliseconds(1));
245 } while (false));
246}
247
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800248BOOST_AUTO_TEST_CASE(RemovePendingInterest)
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400249{
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800250 const PendingInterestId* interestId =
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800251 face.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000252 bind([] { BOOST_FAIL("Unexpected data"); }),
253 bind([] { BOOST_FAIL("Unexpected nack"); }),
254 bind([] { BOOST_FAIL("Unexpected timeout"); }));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800255 advanceClocks(time::milliseconds(10));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400256
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800257 face.removePendingInterest(interestId);
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800258 advanceClocks(time::milliseconds(10));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400259
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000260 face.receive(*makeData("/Hello/World/%21"));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800261 advanceClocks(time::milliseconds(10), 100);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400262}
263
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000264BOOST_AUTO_TEST_CASE(RemoveAllPendingInterests)
Ilya Moiseenko56b0bf82015-11-08 11:14:28 -0500265{
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800266 face.expressInterest(Interest("/Hello/World/0", time::milliseconds(50)),
267 bind([] { BOOST_FAIL("Unexpected data"); }),
268 bind([] { BOOST_FAIL("Unexpected nack"); }),
269 bind([] { BOOST_FAIL("Unexpected timeout"); }));
Ilya Moiseenko56b0bf82015-11-08 11:14:28 -0500270
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800271 face.expressInterest(Interest("/Hello/World/1", time::milliseconds(50)),
272 bind([] { BOOST_FAIL("Unexpected data"); }),
273 bind([] { BOOST_FAIL("Unexpected nack"); }),
274 bind([] { BOOST_FAIL("Unexpected timeout"); }));
Ilya Moiseenko56b0bf82015-11-08 11:14:28 -0500275
276 advanceClocks(time::milliseconds(10));
277
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800278 face.removeAllPendingInterests();
Ilya Moiseenko56b0bf82015-11-08 11:14:28 -0500279 advanceClocks(time::milliseconds(10));
280
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800281 BOOST_CHECK_EQUAL(face.getNPendingInterests(), 0);
Ilya Moiseenko56b0bf82015-11-08 11:14:28 -0500282
Junxiao Shi85d90832016-08-04 03:19:46 +0000283 face.receive(*makeData("/Hello/World/0"));
284 face.receive(*makeData("/Hello/World/1"));
Ilya Moiseenko56b0bf82015-11-08 11:14:28 -0500285 advanceClocks(time::milliseconds(10), 100);
286}
287
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000288BOOST_AUTO_TEST_CASE(DestructionWithoutCancellingPendingInterests) // Bug #2518
289{
290 {
291 DummyClientFace face2(io, m_keyChain);
292 face2.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
293 bind([]{}), bind([]{}));
294 advanceClocks(time::milliseconds(10), 10);
295 }
296
297 advanceClocks(time::milliseconds(10), 10);
298 // should not segfault
299}
300
301BOOST_AUTO_TEST_SUITE_END() // Consumer
302
303BOOST_AUTO_TEST_SUITE(Producer)
304
305BOOST_AUTO_TEST_CASE(PutNack)
306{
307 lp::Nack nack(Interest("/Hello/World", time::milliseconds(50)));
308 nack.setReason(lp::NackReason::NO_ROUTE);
309
310 BOOST_CHECK_EQUAL(face.sentNacks.size(), 0);
311
312 face.put(nack);
313
314 advanceClocks(time::milliseconds(10));
315
316 BOOST_CHECK_EQUAL(face.sentNacks.size(), 1);
317}
Ilya Moiseenko56b0bf82015-11-08 11:14:28 -0500318
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400319BOOST_AUTO_TEST_CASE(SetUnsetInterestFilter)
320{
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800321 size_t nInterests = 0;
322 size_t nRegs = 0;
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400323 const RegisteredPrefixId* regPrefixId =
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800324 face.setInterestFilter("/Hello/World",
325 bind([&nInterests] { ++nInterests; }),
326 bind([&nRegs] { ++nRegs; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000327 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800328 advanceClocks(time::milliseconds(10), 10);
329 BOOST_CHECK_EQUAL(nRegs, 1);
330 BOOST_CHECK_EQUAL(nInterests, 0);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400331
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000332 face.receive(Interest("/Hello/World/%21"));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800333 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400334
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800335 BOOST_CHECK_EQUAL(nRegs, 1);
336 BOOST_CHECK_EQUAL(nInterests, 1);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400337
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000338 face.receive(Interest("/Bye/World/%21"));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800339 advanceClocks(time::milliseconds(10000), 10);
340 BOOST_CHECK_EQUAL(nInterests, 1);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400341
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000342 face.receive(Interest("/Hello/World/%21/2"));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800343 advanceClocks(time::milliseconds(10), 10);
344 BOOST_CHECK_EQUAL(nInterests, 2);
345
346 // removing filter
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800347 face.unsetInterestFilter(regPrefixId);
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800348 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400349
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000350 face.receive(Interest("/Hello/World/%21/3"));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800351 BOOST_CHECK_EQUAL(nInterests, 2);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400352
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000353 face.unsetInterestFilter(static_cast<const RegisteredPrefixId*>(nullptr));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800354 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400355
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000356 face.unsetInterestFilter(static_cast<const InterestFilterId*>(nullptr));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800357 advanceClocks(time::milliseconds(10), 10);
358}
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400359
Junxiao Shi76e0eb22016-08-08 05:54:10 +0000360BOOST_AUTO_TEST_CASE(SetInterestFilterEmptyInterestCallback)
361{
362 face.setInterestFilter("/A", nullptr);
363 advanceClocks(time::milliseconds(1));
364
365 BOOST_CHECK_NO_THROW(do {
366 face.receive(*makeInterest("/A/1"));
367 advanceClocks(time::milliseconds(1));
368 } while (false));
369}
370
Joao Pereira0b3cac52015-07-02 14:49:49 -0400371BOOST_AUTO_TEST_CASE(SetUnsetInterestFilterWithoutSucessCallback)
372{
373 size_t nInterests = 0;
374 const RegisteredPrefixId* regPrefixId =
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800375 face.setInterestFilter("/Hello/World",
376 bind([&nInterests] { ++nInterests; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000377 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Joao Pereira0b3cac52015-07-02 14:49:49 -0400378 advanceClocks(time::milliseconds(10), 10);
379 BOOST_CHECK_EQUAL(nInterests, 0);
380
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000381 face.receive(Interest("/Hello/World/%21"));
Joao Pereira0b3cac52015-07-02 14:49:49 -0400382 advanceClocks(time::milliseconds(10), 10);
383
384 BOOST_CHECK_EQUAL(nInterests, 1);
385
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000386 face.receive(Interest("/Bye/World/%21"));
Joao Pereira0b3cac52015-07-02 14:49:49 -0400387 advanceClocks(time::milliseconds(10000), 10);
388 BOOST_CHECK_EQUAL(nInterests, 1);
389
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000390 face.receive(Interest("/Hello/World/%21/2"));
Joao Pereira0b3cac52015-07-02 14:49:49 -0400391 advanceClocks(time::milliseconds(10), 10);
392 BOOST_CHECK_EQUAL(nInterests, 2);
393
394 // removing filter
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800395 face.unsetInterestFilter(regPrefixId);
Joao Pereira0b3cac52015-07-02 14:49:49 -0400396 advanceClocks(time::milliseconds(10), 10);
397
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000398 face.receive(Interest("/Hello/World/%21/3"));
Joao Pereira0b3cac52015-07-02 14:49:49 -0400399 BOOST_CHECK_EQUAL(nInterests, 2);
400
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000401 face.unsetInterestFilter(static_cast<const RegisteredPrefixId*>(nullptr));
Joao Pereira0b3cac52015-07-02 14:49:49 -0400402 advanceClocks(time::milliseconds(10), 10);
403
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000404 face.unsetInterestFilter(static_cast<const InterestFilterId*>(nullptr));
Joao Pereira0b3cac52015-07-02 14:49:49 -0400405 advanceClocks(time::milliseconds(10), 10);
406}
407
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800408BOOST_FIXTURE_TEST_CASE(SetInterestFilterFail, FacesNoRegistrationReplyFixture)
409{
410 // don't enable registration reply
411 size_t nRegFailed = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800412 face.setInterestFilter("/Hello/World",
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000413 bind([] { BOOST_FAIL("Unexpected Interest"); }),
414 bind([] { BOOST_FAIL("Unexpected success of setInterestFilter"); }),
415 bind([&nRegFailed] { ++nRegFailed; }));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800416
417 advanceClocks(time::milliseconds(10), 10);
418 BOOST_CHECK_EQUAL(nRegFailed, 0);
419
420 advanceClocks(time::milliseconds(1000), 10);
421 BOOST_CHECK_EQUAL(nRegFailed, 1);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400422}
423
Joao Pereira0b3cac52015-07-02 14:49:49 -0400424BOOST_FIXTURE_TEST_CASE(SetInterestFilterFailWithoutSuccessCallback, FacesNoRegistrationReplyFixture)
425{
426 // don't enable registration reply
427 size_t nRegFailed = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800428 face.setInterestFilter("/Hello/World",
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000429 bind([] { BOOST_FAIL("Unexpected Interest"); }),
430 bind([&nRegFailed] { ++nRegFailed; }));
Joao Pereira0b3cac52015-07-02 14:49:49 -0400431
432 advanceClocks(time::milliseconds(10), 10);
433 BOOST_CHECK_EQUAL(nRegFailed, 0);
434
435 advanceClocks(time::milliseconds(1000), 10);
436 BOOST_CHECK_EQUAL(nRegFailed, 1);
437}
438
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400439BOOST_AUTO_TEST_CASE(RegisterUnregisterPrefix)
440{
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800441 size_t nRegSuccesses = 0;
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400442 const RegisteredPrefixId* regPrefixId =
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800443 face.registerPrefix("/Hello/World",
444 bind([&nRegSuccesses] { ++nRegSuccesses; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000445 bind([] { BOOST_FAIL("Unexpected registerPrefix failure"); }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400446
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800447 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400448 BOOST_CHECK_EQUAL(nRegSuccesses, 1);
449
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800450 size_t nUnregSuccesses = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800451 face.unregisterPrefix(regPrefixId,
452 bind([&nUnregSuccesses] { ++nUnregSuccesses; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000453 bind([] { BOOST_FAIL("Unexpected unregisterPrefix failure"); }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400454
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800455 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400456 BOOST_CHECK_EQUAL(nUnregSuccesses, 1);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400457}
458
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800459BOOST_FIXTURE_TEST_CASE(RegisterUnregisterPrefixFail, FacesNoRegistrationReplyFixture)
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400460{
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800461 size_t nRegFailures = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800462 face.registerPrefix("/Hello/World",
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000463 bind([] { BOOST_FAIL("Unexpected registerPrefix success"); }),
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800464 bind([&nRegFailures] { ++nRegFailures; }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400465
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800466 advanceClocks(time::milliseconds(1000), 100);
467 BOOST_CHECK_EQUAL(nRegFailures, 1);
468}
469
470BOOST_AUTO_TEST_CASE(SimilarFilters)
471{
472 size_t nInInterests1 = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800473 face.setInterestFilter("/Hello/World",
474 bind([&nInInterests1] { ++nInInterests1; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000475 nullptr,
476 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800477
478 size_t nInInterests2 = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800479 face.setInterestFilter("/Hello",
480 bind([&nInInterests2] { ++nInInterests2; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000481 nullptr,
482 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400483
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800484 size_t nInInterests3 = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800485 face.setInterestFilter("/Los/Angeles/Lakers",
486 bind([&nInInterests3] { ++nInInterests3; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000487 nullptr,
488 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400489
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800490 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400491
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000492 face.receive(Interest("/Hello/World/%21"));
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800493 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400494
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800495 BOOST_CHECK_EQUAL(nInInterests1, 1);
496 BOOST_CHECK_EQUAL(nInInterests2, 1);
497 BOOST_CHECK_EQUAL(nInInterests3, 0);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400498}
499
500BOOST_AUTO_TEST_CASE(SetRegexFilterError)
501{
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800502 face.setInterestFilter(InterestFilter("/Hello/World", "<><b><c>?"),
503 [] (const Name&, const Interest&) {
504 BOOST_FAIL("InterestFilter::Error should have been triggered");
505 },
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000506 nullptr,
507 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400508
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800509 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400510
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800511 BOOST_REQUIRE_THROW(face.receive(Interest("/Hello/World/XXX/b/c")), InterestFilter::Error);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400512}
513
514BOOST_AUTO_TEST_CASE(SetRegexFilter)
515{
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800516 size_t nInInterests = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800517 face.setInterestFilter(InterestFilter("/Hello/World", "<><b><c>?"),
518 bind([&nInInterests] { ++nInInterests; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000519 nullptr,
520 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400521
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800522 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400523
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800524 face.receive(Interest("/Hello/World/a")); // shouldn't match
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400525 BOOST_CHECK_EQUAL(nInInterests, 0);
526
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800527 face.receive(Interest("/Hello/World/a/b")); // should match
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400528 BOOST_CHECK_EQUAL(nInInterests, 1);
529
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800530 face.receive(Interest("/Hello/World/a/b/c")); // should match
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400531 BOOST_CHECK_EQUAL(nInInterests, 2);
532
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800533 face.receive(Interest("/Hello/World/a/b/d")); // should not match
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400534 BOOST_CHECK_EQUAL(nInInterests, 2);
535}
536
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400537BOOST_AUTO_TEST_CASE(SetRegexFilterAndRegister)
538{
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800539 size_t nInInterests = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800540 face.setInterestFilter(InterestFilter("/Hello/World", "<><b><c>?"),
541 bind([&nInInterests] { ++nInInterests; }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400542
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800543 size_t nRegSuccesses = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800544 face.registerPrefix("/Hello/World",
545 bind([&nRegSuccesses] { ++nRegSuccesses; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000546 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400547
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800548 advanceClocks(time::milliseconds(10), 10);
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400549 BOOST_CHECK_EQUAL(nRegSuccesses, 1);
550
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800551 face.receive(Interest("/Hello/World/a")); // shouldn't match
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400552 BOOST_CHECK_EQUAL(nInInterests, 0);
553
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800554 face.receive(Interest("/Hello/World/a/b")); // should match
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400555 BOOST_CHECK_EQUAL(nInInterests, 1);
556
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800557 face.receive(Interest("/Hello/World/a/b/c")); // should match
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400558 BOOST_CHECK_EQUAL(nInInterests, 2);
559
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800560 face.receive(Interest("/Hello/World/a/b/d")); // should not match
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400561 BOOST_CHECK_EQUAL(nInInterests, 2);
562}
563
Junxiao Shia1ea5062014-12-27 22:33:39 -0700564BOOST_FIXTURE_TEST_CASE(SetInterestFilterNoReg, FacesNoRegistrationReplyFixture) // Bug 2318
565{
566 // This behavior is specific to DummyClientFace.
567 // Regular Face won't accept incoming packets until something is sent.
568
569 int hit = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800570 face.setInterestFilter(Name("/"), bind([&hit] { ++hit; }));
571 face.processEvents(time::milliseconds(-1));
Junxiao Shia1ea5062014-12-27 22:33:39 -0700572
573 auto interest = make_shared<Interest>("/A");
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800574 face.receive(*interest);
575 face.processEvents(time::milliseconds(-1));
Junxiao Shia1ea5062014-12-27 22:33:39 -0700576
577 BOOST_CHECK_EQUAL(hit, 1);
578}
579
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000580BOOST_AUTO_TEST_SUITE_END() // Producer
581
Alexander Afanasyev8e158542014-11-18 00:47:18 -0500582BOOST_AUTO_TEST_CASE(ProcessEvents)
583{
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800584 face.processEvents(time::milliseconds(-1)); // io_service::reset()/poll() inside
Alexander Afanasyev8e158542014-11-18 00:47:18 -0500585
Alexander Afanasyevd3a55b22014-11-18 19:23:28 -0800586 size_t nRegSuccesses = 0;
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800587 face.registerPrefix("/Hello/World",
588 bind([&nRegSuccesses] { ++nRegSuccesses; }),
Junxiao Shi103d8ed2016-08-07 20:34:10 +0000589 bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
Alexander Afanasyev8e158542014-11-18 00:47:18 -0500590
591 // io_service::poll() without reset
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800592 face.getIoService().poll();
Alexander Afanasyev8e158542014-11-18 00:47:18 -0500593 BOOST_CHECK_EQUAL(nRegSuccesses, 0);
594
Alexander Afanasyev9bdbb832015-12-30 12:54:22 -0800595 face.processEvents(time::milliseconds(-1)); // io_service::reset()/poll() inside
Alexander Afanasyev8e158542014-11-18 00:47:18 -0500596 BOOST_CHECK_EQUAL(nRegSuccesses, 1);
597}
598
Alexander Afanasyeve4f8c3b2016-06-23 16:03:48 -0700599struct PibDirWithDefaultTpm
600{
601 const std::string PATH = "build/keys-with-default-tpm";
602};
603
604BOOST_FIXTURE_TEST_CASE(FaceTransport, PibDirFixture<PibDirWithDefaultTpm>)
Alexander Afanasyev3a6da362015-12-29 20:31:03 -0800605{
606 KeyChain keyChain;
Alexander Afanasyeve4f8c3b2016-06-23 16:03:48 -0700607 boost::asio::io_service io;
Alexander Afanasyev3a6da362015-12-29 20:31:03 -0800608
609 BOOST_CHECK(Face().getTransport() != nullptr);
610
Alexander Afanasyevbb64c172015-12-29 20:32:45 -0800611 BOOST_CHECK(Face(shared_ptr<Transport>()).getTransport() != nullptr);
612 BOOST_CHECK(Face(shared_ptr<Transport>(), io).getTransport() != nullptr);
613 BOOST_CHECK(Face(shared_ptr<Transport>(), io, keyChain).getTransport() != nullptr);
Alexander Afanasyev3a6da362015-12-29 20:31:03 -0800614
615 auto transport = make_shared<TcpTransport>("localhost", "6363"); // no real io operations will be scheduled
616 BOOST_CHECK(Face(transport).getTransport() == transport);
617 BOOST_CHECK(Face(transport, io).getTransport() == transport);
618 BOOST_CHECK(Face(transport, io, keyChain).getTransport() == transport);
619}
620
Alexander Afanasyevcf490552016-06-27 22:51:36 -0700621BOOST_AUTO_TEST_SUITE(CustomizeTransport)
622
623class WithEnv : private IdentityManagementTimeFixture
624{
625public:
626 WithEnv()
627 {
628 if (getenv("NDN_CLIENT_TRANSPORT") != nullptr) {
629 m_oldTransport = getenv("NDN_CLIENT_TRANSPORT");
630 unsetenv("NDN_CLIENT_TRANSPORT");
631 }
632 }
633
634 void
635 configure(const std::string& faceUri)
636 {
637 setenv("NDN_CLIENT_TRANSPORT", faceUri.c_str(), true);
638 }
639
640 ~WithEnv()
641 {
642 if (!m_oldTransport.empty()) {
643 setenv("NDN_CLIENT_TRANSPORT", m_oldTransport.c_str(), true);
644 }
645 else {
646 unsetenv("NDN_CLIENT_TRANSPORT");
647 }
648 }
649
650private:
651 std::string m_oldTransport;
652};
653
654class WithConfig : private TestHomeFixture<DefaultPibDir>
655{
656public:
657 void
658 configure(const std::string& faceUri)
659 {
660 createClientConf({"transport=" + faceUri});
661 }
662};
663
664class WithEnvAndConfig : public WithEnv, public WithConfig
665{
666};
667
668typedef boost::mpl::vector<WithEnv, WithConfig> ConfigOptions;
669
670BOOST_FIXTURE_TEST_CASE(NoConfig, WithEnvAndConfig) // fixture configures test HOME and PIB/TPM path
Alexander Afanasyev57e00362016-06-23 13:22:54 -0700671{
672 shared_ptr<Face> face;
673 BOOST_REQUIRE_NO_THROW(face = make_shared<Face>());
674 BOOST_CHECK(dynamic_pointer_cast<UnixTransport>(face->getTransport()) != nullptr);
Alexander Afanasyev57e00362016-06-23 13:22:54 -0700675}
676
Alexander Afanasyevcf490552016-06-27 22:51:36 -0700677BOOST_FIXTURE_TEST_CASE_TEMPLATE(Unix, T, ConfigOptions, T)
678{
679 this->configure("unix://some/path");
Alexander Afanasyev57e00362016-06-23 13:22:54 -0700680
Alexander Afanasyevcf490552016-06-27 22:51:36 -0700681 shared_ptr<Face> face;
682 BOOST_REQUIRE_NO_THROW(face = make_shared<Face>());
683 BOOST_CHECK(dynamic_pointer_cast<UnixTransport>(face->getTransport()) != nullptr);
684}
685
686BOOST_FIXTURE_TEST_CASE_TEMPLATE(Tcp, T, ConfigOptions, T)
687{
688 this->configure("tcp://127.0.0.1:6000");
689
690 shared_ptr<Face> face;
691 BOOST_REQUIRE_NO_THROW(face = make_shared<Face>());
692 BOOST_CHECK(dynamic_pointer_cast<TcpTransport>(face->getTransport()) != nullptr);
693}
694
695BOOST_FIXTURE_TEST_CASE_TEMPLATE(WrongTransport, T, ConfigOptions, T)
696{
697 this->configure("wrong-transport:");
698
699 BOOST_CHECK_THROW(make_shared<Face>(), ConfigFile::Error);
700}
701
702BOOST_FIXTURE_TEST_CASE_TEMPLATE(WrongUri, T, ConfigOptions, T)
703{
704 this->configure("wrong-uri");
705
706 BOOST_CHECK_THROW(make_shared<Face>(), ConfigFile::Error);
707}
708
709BOOST_FIXTURE_TEST_CASE(EnvOverride, WithEnvAndConfig)
710{
711 this->WithEnv::configure("tcp://127.0.0.1:6000");
712 this->WithConfig::configure("unix://some/path");
713
714 shared_ptr<Face> face;
715 BOOST_REQUIRE_NO_THROW(face = make_shared<Face>());
716 BOOST_CHECK(dynamic_pointer_cast<TcpTransport>(face->getTransport()) != nullptr);
717}
718
719BOOST_FIXTURE_TEST_CASE(ExplicitTransport, WithEnvAndConfig)
720{
721 this->WithEnv::configure("wrong-uri");
722 this->WithConfig::configure("wrong-transport:");
723
724 auto transport = make_shared<UnixTransport>("unix://some/path");
725 shared_ptr<Face> face;
726 BOOST_REQUIRE_NO_THROW(face = make_shared<Face>(transport));
727 BOOST_CHECK(dynamic_pointer_cast<UnixTransport>(face->getTransport()) != nullptr);
728}
729
730BOOST_AUTO_TEST_SUITE_END() // CustomizeTransport
Alexander Afanasyev57e00362016-06-23 13:22:54 -0700731BOOST_AUTO_TEST_SUITE_END() // TestFace
732
733} // namespace tests
Alexander Afanasyev5fc795f2014-10-20 23:06:56 -0400734} // namespace ndn