blob: 66c25dc7c42ea5d9e6435b525fb0a3fe45355891 [file] [log] [blame]
Alexander Afanasyevc169a812014-05-20 20:37:29 -04001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -08002/**
Spyridon Mastorakis429634f2015-02-19 17:35:33 -08003 * Copyright (c) 2013-2015 Regents of the University of California.
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07006 *
Alexander Afanasyevc169a812014-05-20 20:37:29 -04007 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080020 */
21
Alexander Afanasyev09c613f2014-01-29 00:23:58 -080022#include "interest.hpp"
Junxiao Shi2af905b2014-11-27 13:10:54 -070023#include "interest-filter.hpp"
Junxiao Shiaf8eeea2014-03-31 20:10:56 -070024#include "data.hpp"
25#include "security/signature-sha256-with-rsa.hpp"
Yingdi Yubf6a2812014-06-17 15:32:11 -070026#include "security/digest-sha256.hpp"
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -070027#include "security/key-chain.hpp"
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -070028#include "encoding/buffer-stream.hpp"
Junxiao Shiaf8eeea2014-03-31 20:10:56 -070029
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070030#include "boost-test.hpp"
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080031
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -080032namespace ndn {
Alexander Afanasyev90164962014-03-06 08:29:59 +000033namespace tests {
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080034
35BOOST_AUTO_TEST_SUITE(TestInterest)
36
37const uint8_t Interest1[] = {
Alexander Afanasyev117f5ef2015-06-03 15:07:24 -070038 0x05, 0x59, // NDN Interest
Alexander Afanasyev4b456282014-02-13 00:34:34 -080039 0x07, 0x14, // Name
40 0x08, 0x5, // NameComponent
Alexander Afanasyev636e9f12014-01-07 12:01:03 -080041 0x6c, 0x6f, 0x63, 0x61, 0x6c,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080042 0x08, 0x3, // NameComponent
Alexander Afanasyev636e9f12014-01-07 12:01:03 -080043 0x6e, 0x64, 0x6e,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080044 0x08, 0x6, // NameComponent
Alexander Afanasyev636e9f12014-01-07 12:01:03 -080045 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
Junxiao Shib332e782014-03-31 14:23:46 -070046 0x09, 0x37, // Selectors
Alexander Afanasyev4b456282014-02-13 00:34:34 -080047 0x0d, 0x1, 0x1, // MinSuffix
48 0x0e, 0x1, 0x1, // MaxSuffix
Junxiao Shib332e782014-03-31 14:23:46 -070049 0x1c, 0x16, // KeyLocator
50 0x07, 0x14, // Name
51 0x08, 0x04,
52 0x74, 0x65, 0x73, 0x74,
53 0x08, 0x03,
54 0x6b, 0x65, 0x79,
55 0x08, 0x07,
56 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080057 0x10, 0x14, // Exclude
58 0x08, 0x4, // NameComponent
Alexander Afanasyev636e9f12014-01-07 12:01:03 -080059 0x61, 0x6c, 0x65, 0x78,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080060 0x08, 0x4, // NameComponent
Alexander Afanasyev636e9f12014-01-07 12:01:03 -080061 0x78, 0x78, 0x78, 0x78,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080062 0x13, 0x0, // Any
63 0x08, 0x4, // NameComponent
Alexander Afanasyev636e9f12014-01-07 12:01:03 -080064 0x79, 0x79, 0x79, 0x79,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080065 0x11, 0x1, // ChildSelector
Alexander Afanasyev636e9f12014-01-07 12:01:03 -080066 0x1,
Alexander Afanasyeve881e932014-06-08 14:47:03 +030067 0x0a, 0x4, // Nonce
68 0x1, 0x0, 0x0, 0x00,
Alexander Afanasyeve881e932014-06-08 14:47:03 +030069 0x0c, // InterestLifetime
70 0x2, 0x3, 0xe8
71};
72
73const uint8_t Interest2[] = {
Alexander Afanasyev117f5ef2015-06-03 15:07:24 -070074 0x05, 0x59, // NDN Interest
Alexander Afanasyeve881e932014-06-08 14:47:03 +030075 0x07, 0x14, // Name
76 0x08, 0x5, // NameComponent
77 0x6c, 0x6f, 0x63, 0x61, 0x6c,
78 0x08, 0x3, // NameComponent
79 0x6e, 0x64, 0x6e,
80 0x08, 0x6, // NameComponent
81 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
82 0x09, 0x37, // Selectors
83 0x0d, 0x1, 0x1, // MinSuffix
84 0x0e, 0x1, 0x1, // MaxSuffix
85 0x1c, 0x16, // KeyLocator
86 0x07, 0x14, // Name
87 0x08, 0x04,
88 0x74, 0x65, 0x73, 0x74,
89 0x08, 0x03,
90 0x6b, 0x65, 0x79,
91 0x08, 0x07,
92 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
93 0x10, 0x14, // Exclude
94 0x08, 0x4, // NameComponent
95 0x61, 0x6c, 0x65, 0x78,
96 0x08, 0x4, // NameComponent
97 0x78, 0x78, 0x78, 0x78,
98 0x13, 0x0, // Any
99 0x08, 0x4, // NameComponent
100 0x79, 0x79, 0x79, 0x79,
101 0x11, 0x1, // ChildSelector
102 0x1,
103 0x0a, 0x4, // Nonce
104 0x2, 0x0, 0x0, 0x00,
Alexander Afanasyev4b456282014-02-13 00:34:34 -0800105 0x0c, // InterestLifetime
Alexander Afanasyev636e9f12014-01-07 12:01:03 -0800106 0x2, 0x3, 0xe8
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800107};
108
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700109const uint8_t InterestWithLink[] = {
110 0x05, 0xfb, // Interest
111 0x07, 0x14, // Name
112 0x08, 0x5, // NameComponent
113 0x6c, 0x6f, 0x63, 0x61, 0x6c,
114 0x08, 0x3, // NameComponent
115 0x6e, 0x64, 0x6e,
116 0x08, 0x6, // NameComponent
117 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
118 0x0a, 0x4, // Nonce
119 0x1, 0x0, 0x0, 0x00,
120 0x06, 0xda, // Data
121 0x07, 0x14, // Name
122 0x08, 0x05,
123 0x6c, 0x6f, 0x63, 0x61, 0x6c,
124 0x08, 0x03,
125 0x6e, 0x64, 0x6e,
126 0x08, 0x06,
127 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
128 0x14, 0x07, // MetaInfo
129 0x18, 0x01, // ContentType
130 0x01,
131 0x19, 0x02, // FreshnessPeriod
132 0x27, 0x10,
133 0x15, 0x1a, // Content
134 0x1f, 0x0c, // LinkDelegation
135 0x1e, 0x01, // LinkPreference
136 0x0a,
137 0x07, 0x07, // Name
138 0x08, 0x05,
139 0x6c, 0x6f, 0x63, 0x61, 0x6c,
140 0x1f, 0x0a, // LinkDelegation
141 0x1e, 0x01, // LinkPreference
142 0x14,
143 0x07, 0x05, // Name
144 0x08, 0x03,
145 0x6e, 0x64, 0x6e,
146 0x16, 0x1b, // SignatureInfo
147 0x1b, 0x01, // SignatureType
148 0x01,
149 0x1c, 0x16, // KeyLocator
150 0x07, 0x14, // Name
151 0x08, 0x04,
152 0x74, 0x65, 0x73, 0x74,
153 0x08, 0x03,
154 0x6b, 0x65, 0x79,
155 0x08, 0x07,
156 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
157 0x17, 0x80, // SignatureValue
158 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
159 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
160 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
161 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
162 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
163 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
164 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
165 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
166 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
167 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1,
168 0x20, 0x01, // SelectedDelegation
169 0x00
170};
171
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700172const uint8_t LINK[] = {
173 0x06, 0xda, // Data
174 0x07, 0x14, // Name
175 0x08, 0x05,
176 0x6c, 0x6f, 0x63, 0x61, 0x6c,
177 0x08, 0x03,
178 0x6e, 0x64, 0x6e,
179 0x08, 0x06,
180 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
181 0x14, 0x07, // MetaInfo
182 0x18, 0x01, // ContentType
183 0x01,
184 0x19, 0x02, // FreshnessPeriod
185 0x27, 0x10,
186 0x15, 0x1a, // Content
187 0x1f, 0x0c, // LinkDelegation
188 0x1e, 0x01, // LinkPreference
189 0x0a,
190 0x07, 0x07, // Name
191 0x08, 0x05,
192 0x6c, 0x6f, 0x63, 0x61, 0x6c,
193 0x1f, 0x0a, // LinkDelegation
194 0x1e, 0x01, // LinkPreference
195 0x14,
196 0x07, 0x05, // Name
197 0x08, 0x03,
198 0x6e, 0x64, 0x6e,
199 0x16, 0x1b, // SignatureInfo
200 0x1b, 0x01, // SignatureType
201 0x01,
202 0x1c, 0x16, // KeyLocator
203 0x07, 0x14, // Name
204 0x08, 0x04,
205 0x74, 0x65, 0x73, 0x74,
206 0x08, 0x03,
207 0x6b, 0x65, 0x79,
208 0x08, 0x07,
209 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
210 0x17, 0x80, // SignatureValue
211 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
212 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
213 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
214 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
215 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
216 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
217 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
218 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
219 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
220 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
221};
222
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700223const uint8_t InterestWithLinkMissingContentType[] = {
224 0x05, 0xf8, // Interest
225 0x07, 0x14, // Name
226 0x08, 0x5, // NameComponent
227 0x6c, 0x6f, 0x63, 0x61, 0x6c,
228 0x08, 0x3, // NameComponent
229 0x6e, 0x64, 0x6e,
230 0x08, 0x6, // NameComponent
231 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
232 0x0a, 0x4, // Nonce
233 0x1, 0x0, 0x0, 0x00,
234 0x06, 0xd7, // Data
235 0x07, 0x14, // Name
236 0x08, 0x05,
237 0x6c, 0x6f, 0x63, 0x61, 0x6c,
238 0x08, 0x03,
239 0x6e, 0x64, 0x6e,
240 0x08, 0x06,
241 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
242 0x14, 0x04, // MetaInfo
243 0x19, 0x02, // FreshnessPeriod
244 0x27, 0x10,
245 0x15, 0x1a, // Content
246 0x1f, 0x0c, // LinkDelegation
247 0x1e, 0x01, // LinkPreference
248 0x0a,
249 0x07, 0x07, // Name
250 0x08, 0x05,
251 0x6c, 0x6f, 0x63, 0x61, 0x6c,
252 0x1f, 0x0a, // LinkDelegation
253 0x1e, 0x01, // LinkPreference
254 0x14,
255 0x07, 0x05, // Name
256 0x08, 0x03,
257 0x6e, 0x64, 0x6e,
258 0x16, 0x1b, // SignatureInfo
259 0x1b, 0x01, // SignatureType
260 0x01,
261 0x1c, 0x16, // KeyLocator
262 0x07, 0x14, // Name
263 0x08, 0x04,
264 0x74, 0x65, 0x73, 0x74,
265 0x08, 0x03,
266 0x6b, 0x65, 0x79,
267 0x08, 0x07,
268 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
269 0x17, 0x80, // SignatureValue
270 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
271 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
272 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
273 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
274 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
275 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
276 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
277 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
278 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
279 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1,
280 0x20, 0x01, // SelectedDelegation
281 0x00
282};
283
284const uint8_t InterestWithLinkNoMetaInfo[] = {
285 0x05, 0xf2, // Interest
286 0x07, 0x14, // Name
287 0x08, 0x5, // NameComponent
288 0x6c, 0x6f, 0x63, 0x61, 0x6c,
289 0x08, 0x3, // NameComponent
290 0x6e, 0x64, 0x6e,
291 0x08, 0x6, // NameComponent
292 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
293 0x0a, 0x4, // Nonce
294 0x1, 0x0, 0x0, 0x00,
295 0x06, 0xd1, // Data
296 0x07, 0x14, // Name
297 0x08, 0x05,
298 0x6c, 0x6f, 0x63, 0x61, 0x6c,
299 0x08, 0x03,
300 0x6e, 0x64, 0x6e,
301 0x08, 0x06,
302 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
303 0x15, 0x1a, // Content
304 0x1f, 0x0c, // LinkDelegation
305 0x1e, 0x01, // LinkPreference
306 0x0a,
307 0x07, 0x07, // Name
308 0x08, 0x05,
309 0x6c, 0x6f, 0x63, 0x61, 0x6c,
310 0x1f, 0x0a, // LinkPreference
311 0x1e, 0x01, // LinkPreference
312 0x14,
313 0x07, 0x05, // Name
314 0x08, 0x03,
315 0x6e, 0x64, 0x6e,
316 0x16, 0x1b, // SignatureInfo
317 0x1b, 0x01, // SignatureType
318 0x01,
319 0x1c, 0x16, // KeyLocator
320 0x07, 0x14, // Name
321 0x08, 0x04,
322 0x74, 0x65, 0x73, 0x74,
323 0x08, 0x03,
324 0x6b, 0x65, 0x79,
325 0x08, 0x07,
326 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
327 0x17, 0x80, // SignatureValue
328 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
329 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
330 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
331 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
332 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
333 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
334 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
335 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
336 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
337 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1,
338 0x20, 0x01, // SelectedDelegation
339 0x00
340};
341
342const uint8_t InterestWithLinkWrongContentType[] = {
343 0x05, 0xfb, // Interest
344 0x07, 0x14, // Name
345 0x08, 0x5, // NameComponent
346 0x6c, 0x6f, 0x63, 0x61, 0x6c,
347 0x08, 0x3, // NameComponent
348 0x6e, 0x64, 0x6e,
349 0x08, 0x6, // NameComponent
350 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
351 0x0a, 0x4, // Nonce
352 0x1, 0x0, 0x0, 0x00,
353 0x06, 0xda, // Data
354 0x07, 0x14, // Name
355 0x08, 0x05,
356 0x6c, 0x6f, 0x63, 0x61, 0x6c,
357 0x08, 0x03,
358 0x6e, 0x64, 0x6e,
359 0x08, 0x06,
360 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
361 0x14, 0x07, // MetaInfo
362 0x18, 0x01, // ContentType
363 0x00,
364 0x19, 0x02, // FreshnessPeriod
365 0x27, 0x10,
366 0x15, 0x1a, // Content
367 0x1f, 0x0c, // LinkDelegation
368 0x1e, 0x01, // LinkPreference
369 0x0a,
370 0x07, 0x07, // Name
371 0x08, 0x05,
372 0x6c, 0x6f, 0x63, 0x61, 0x6c,
373 0x1f, 0x0a, // LinkDelegation
374 0x1e, 0x01, // LinkPreference
375 0x14,
376 0x07, 0x05, // Name
377 0x08, 0x03,
378 0x6e, 0x64, 0x6e,
379 0x16, 0x1b, // SignatureInfo
380 0x1b, 0x01, // SignatureType
381 0x01,
382 0x1c, 0x16, // KeyLocator
383 0x07, 0x14, // Name
384 0x08, 0x04,
385 0x74, 0x65, 0x73, 0x74,
386 0x08, 0x03,
387 0x6b, 0x65, 0x79,
388 0x08, 0x07,
389 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
390 0x17, 0x80, // SignatureValue
391 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
392 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
393 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
394 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
395 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
396 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
397 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
398 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
399 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
400 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1,
401 0x20, 0x01, // SelectedDelegation
402 0x00
403};
404
405const uint8_t InterestWithSelectedDelegationButNoLink[] = {
406 0x05, 0x1f, // Interest
407 0x07, 0x14, // Name
408 0x08, 0x5, // NameComponent
409 0x6c, 0x6f, 0x63, 0x61, 0x6c,
410 0x08, 0x3, // NameComponent
411 0x6e, 0x64, 0x6e,
412 0x08, 0x6, // NameComponent
413 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
414 0x0a, 0x4, // Nonce
415 0x1, 0x0, 0x0, 0x00,
416 0x20, 0x01, // SelectedDelegation
417 0x00
418};
419
420const uint8_t InterestWithLinkNotNonIntegerSelectedDelegation[] = {
421 0x05, 0xfb, // Interest
422 0x07, 0x14, // Name
423 0x08, 0x5, // NameComponent
424 0x6c, 0x6f, 0x63, 0x61, 0x6c,
425 0x08, 0x3, // NameComponent
426 0x6e, 0x64, 0x6e,
427 0x08, 0x6, // NameComponent
428 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
429 0x0a, 0x4, // Nonce
430 0x1, 0x0, 0x0, 0x00,
431 0x06, 0xda, // Data
432 0x07, 0x14, // Name
433 0x08, 0x05,
434 0x6c, 0x6f, 0x63, 0x61, 0x6c,
435 0x08, 0x03,
436 0x6e, 0x64, 0x6e,
437 0x08, 0x06,
438 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
439 0x14, 0x07, // MetaInfo
440 0x18, 0x01, // ContentType
441 0x01,
442 0x19, 0x02, // FreshnessPeriod
443 0x27, 0x10,
444 0x15, 0x1a, // Content
445 0x1f, 0x0c, // LinkDelegation
446 0x1e, 0x01, // LinkPreference
447 0x0a,
448 0x07, 0x07, // Name
449 0x08, 0x05,
450 0x6c, 0x6f, 0x63, 0x61, 0x6c,
451 0x1f, 0x0a, // LinkDelegation
452 0x1e, 0x01, // LinkPreference
453 0x14,
454 0x07, 0x05, // Name
455 0x08, 0x03,
456 0x6e, 0x64, 0x6e,
457 0x16, 0x1b, // SignatureInfo
458 0x1b, 0x01, // SignatureType
459 0x01,
460 0x1c, 0x16, // KeyLocator
461 0x07, 0x14, // Name
462 0x08, 0x04,
463 0x74, 0x65, 0x73, 0x74,
464 0x08, 0x03,
465 0x6b, 0x65, 0x79,
466 0x08, 0x07,
467 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
468 0x17, 0x78, // SignatureValue
469 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
470 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
471 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
472 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
473 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
474 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
475 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
476 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
477 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
478 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7,
479 0x20, 0x03, // SelectedDelegation
480 0xAA, 0xAA, 0xAA
481};
482
483const uint8_t InterestWithLinkNonDecreasingOrder[] = {
484 0x05, 0xfb, // Interest
485 0x07, 0x14, // Name
486 0x08, 0x5, // NameComponent
487 0x6c, 0x6f, 0x63, 0x61, 0x6c,
488 0x08, 0x3, // NameComponent
489 0x6e, 0x64, 0x6e,
490 0x08, 0x6, // NameComponent
491 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
492 0x0a, 0x4, // Nonce
493 0x1, 0x0, 0x0, 0x00,
494 0x06, 0xda, // Data
495 0x07, 0x14, // Name
496 0x08, 0x05,
497 0x6c, 0x6f, 0x63, 0x61, 0x6c,
498 0x08, 0x03,
499 0x6e, 0x64, 0x6e,
500 0x08, 0x06,
501 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
502 0x14, 0x07, // MetaInfo
503 0x18, 0x01, // ContentType
504 0x01,
505 0x19, 0x02, // FreshnessPeriod
506 0x27, 0x10,
507 0x15, 0x1a, // Content
508 0x1f, 0x0c, // LinkDelegation
509 0x1e, 0x01, // LinkPreference
510 0x14,
511 0x07, 0x07, // Name
512 0x08, 0x05,
513 0x6c, 0x6f, 0x63, 0x61, 0x6c,
514 0x1f, 0x0a, // LinkDelegation
515 0x1e, 0x01, // LinkPreference
516 0x0a,
517 0x07, 0x05, // Name
518 0x08, 0x03,
519 0x6e, 0x64, 0x6e,
520 0x16, 0x1b, // SignatureInfo
521 0x1b, 0x01, // SignatureType
522 0x01,
523 0x1c, 0x16, // KeyLocator
524 0x07, 0x14, // Name
525 0x08, 0x04,
526 0x74, 0x65, 0x73, 0x74,
527 0x08, 0x03,
528 0x6b, 0x65, 0x79,
529 0x08, 0x07,
530 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
531 0x17, 0x80, // SignatureValue
532 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
533 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
534 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
535 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
536 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
537 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
538 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
539 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
540 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
541 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1,
542 0x20, 0x01, // SelectedDelegation
543 0x01
544};
545
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800546const uint8_t InterestWithLocalControlHeader[] = {
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300547 0x50, 0x25, 0x51, 0x01, 0x0a,
548 0x05, 0x20, 0x07, 0x14, 0x08, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x08, 0x03, 0x6e, 0x64,
549 0x6e, 0x08, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x09, 0x02, 0x12, 0x00, 0x0a, 0x04,
550 0x01, 0x00, 0x00, 0x00
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800551};
552
553const uint8_t InterestWithoutLocalControlHeader[] = {
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300554 0x05, 0x20, 0x07, 0x14, 0x08, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x08, 0x03, 0x6e, 0x64,
555 0x6e, 0x08, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x09, 0x02, 0x12, 0x00, 0x0a, 0x04,
556 0x01, 0x00, 0x00, 0x00
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800557};
558
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700559BOOST_AUTO_TEST_CASE(InterestEqualityChecks)
560{
561 // Interest ::= INTEREST-TYPE TLV-LENGTH
562 // Name
563 // Selectors?
564 // Nonce
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700565 // InterestLifetime?
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700566 // Link?
567 // SelectedDelegation?
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700568
569 Interest a;
570 Interest b;
571
572 // if nonce is not set, it will be set to a random value
573 a.setNonce(1);
574 b.setNonce(1);
575
576 BOOST_CHECK_EQUAL(a == b, true);
577 BOOST_CHECK_EQUAL(a != b, false);
578
579 // check comparison on Name
580 a.setName("ndn:/A");
581 BOOST_CHECK_EQUAL(a == b, false);
582 BOOST_CHECK_EQUAL(a != b, true);
583
584 b.setName("ndn:/B");
585 BOOST_CHECK_EQUAL(a == b, false);
586 BOOST_CHECK_EQUAL(a != b, true);
587
588 b.setName("ndn:/A");
589 BOOST_CHECK_EQUAL(a == b, true);
590 BOOST_CHECK_EQUAL(a != b, false);
591
592 // check comparison on Selectors
593 a.setChildSelector(1);
594 BOOST_CHECK_EQUAL(a == b, false);
595 BOOST_CHECK_EQUAL(a != b, true);
596
597 b.setChildSelector(1);
598 BOOST_CHECK_EQUAL(a == b, true);
599 BOOST_CHECK_EQUAL(a != b, false);
600
601 // check comparison on Nonce
602 a.setNonce(100);
603 BOOST_CHECK_EQUAL(a == b, false);
604 BOOST_CHECK_EQUAL(a != b, true);
605
606 b.setNonce(100);
607 BOOST_CHECK_EQUAL(a == b, true);
608 BOOST_CHECK_EQUAL(a != b, false);
609
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700610 // check comparison on InterestLifetime
611 a.setInterestLifetime(time::seconds(10));
612 BOOST_CHECK_EQUAL(a == b, false);
613 BOOST_CHECK_EQUAL(a != b, true);
614
615 b.setInterestLifetime(time::seconds(10));
616 BOOST_CHECK_EQUAL(a == b, true);
617 BOOST_CHECK_EQUAL(a != b, false);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700618
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700619 a.setLink(Block(LINK, sizeof(LINK)));
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700620 BOOST_CHECK_EQUAL(a == b, false);
621 BOOST_CHECK_EQUAL(a != b, true);
622
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700623 b.setLink(Block(LINK, sizeof(LINK)));
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700624 BOOST_CHECK_EQUAL(a == b, true);
625 BOOST_CHECK_EQUAL(a != b, false);
626
627 // Selected Delegation
628 BOOST_CHECK_EQUAL(a.hasSelectedDelegation(), false);
629 BOOST_CHECK_EQUAL(b.hasSelectedDelegation(), false);
630
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700631 a.setSelectedDelegation(Name("/local"));
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700632 BOOST_CHECK_EQUAL(a == b, false);
633 BOOST_CHECK_EQUAL(a != b, true);
634
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700635 b.setSelectedDelegation(Name("/local"));
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700636 BOOST_CHECK_EQUAL(a == b, true);
637 BOOST_CHECK_EQUAL(a != b, false);
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700638}
639
640BOOST_AUTO_TEST_CASE(SelectorsEqualityChecks)
641{
642 // Selectors ::= SELECTORS-TYPE TLV-LENGTH
643 // MinSuffixComponents?
644 // MaxSuffixComponents?
645 // PublisherPublicKeyLocator?
646 // Exclude?
647 // ChildSelector?
648 // MustBeFresh?
649
650 Selectors a;
651 Selectors b;
652 BOOST_CHECK_EQUAL(a == b, true);
653 BOOST_CHECK_EQUAL(a != b, false);
654
655 // MinSuffixComponents
656 a.setMinSuffixComponents(1);
657 BOOST_CHECK_EQUAL(a == b, false);
658 BOOST_CHECK_EQUAL(a != b, true);
659
660 b.setMinSuffixComponents(2);
661 BOOST_CHECK_EQUAL(a == b, false);
662 BOOST_CHECK_EQUAL(a != b, true);
663
664 b.setMinSuffixComponents(1);
665 BOOST_CHECK_EQUAL(a == b, true);
666 BOOST_CHECK_EQUAL(a != b, false);
667
668 // MaxSuffixComponents
669 a.setMaxSuffixComponents(10);
670 BOOST_CHECK_EQUAL(a == b, false);
671 BOOST_CHECK_EQUAL(a != b, true);
672
673 b.setMaxSuffixComponents(10);
674 BOOST_CHECK_EQUAL(a == b, true);
675 BOOST_CHECK_EQUAL(a != b, false);
676
677 // PublisherPublicKeyLocator
678 a.setPublisherPublicKeyLocator(KeyLocator("/key/Locator/name"));
679 BOOST_CHECK_EQUAL(a == b, false);
680 BOOST_CHECK_EQUAL(a != b, true);
681
682 b.setPublisherPublicKeyLocator(KeyLocator("/key/Locator/name"));
683 BOOST_CHECK_EQUAL(a == b, true);
684 BOOST_CHECK_EQUAL(a != b, false);
685
686 // Exclude
687 a.setExclude(Exclude().excludeOne(name::Component("exclude")));
688 BOOST_CHECK_EQUAL(a == b, false);
689 BOOST_CHECK_EQUAL(a != b, true);
690
691 b.setExclude(Exclude().excludeOne(name::Component("exclude")));
692 BOOST_CHECK_EQUAL(a == b, true);
693 BOOST_CHECK_EQUAL(a != b, false);
694
695 // ChildSelector
696 a.setChildSelector(1);
697 BOOST_CHECK_EQUAL(a == b, false);
698 BOOST_CHECK_EQUAL(a != b, true);
699
700 b.setChildSelector(1);
701 BOOST_CHECK_EQUAL(a == b, true);
702 BOOST_CHECK_EQUAL(a != b, false);
703
704 // MustBeFresh
705 a.setMustBeFresh(true);
706 BOOST_CHECK_EQUAL(a == b, false);
707 BOOST_CHECK_EQUAL(a != b, true);
708
709 b.setMustBeFresh(true);
710 BOOST_CHECK_EQUAL(a == b, true);
711 BOOST_CHECK_EQUAL(a != b, false);
712}
713
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700714BOOST_AUTO_TEST_CASE(LinkObject)
715{
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700716 Link link1("test", {{100, "/test3"}, {20, "/test2"}, {10, "/test1"}});
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700717 KeyChain keyChain;
718 keyChain.sign(link1);
719 Block wire = link1.wireEncode();
720
721 Interest a;
722 BOOST_REQUIRE_NO_THROW(a.setLink(wire));
723
724 BOOST_REQUIRE_NO_THROW(a.getLink());
725
726 Link link2 = a.getLink();
727 Name name = link2.getName();
728 BOOST_CHECK_EQUAL(Name("test"), name);
729 BOOST_CHECK_EQUAL(a.hasLink(), true);
730 Link::DelegationSet delegations;
731 delegations = link2.getDelegations();
732
733 auto i = delegations.begin();
734 BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
735 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test1"));
736 ++i;
737 BOOST_CHECK_EQUAL(std::get<0>(*i), 20);
738 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test2"));
739 ++i;
740 BOOST_CHECK_EQUAL(std::get<0>(*i), 100);
741 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test3"));
742
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700743 a.setLink(Block(LINK, sizeof(LINK)));
744 BOOST_CHECK_EQUAL(a.getLink().getDelegations().size(), 2);
745
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700746 a.unsetLink();
747 BOOST_CHECK_EQUAL(a.hasLink(), false);
748}
749
750BOOST_AUTO_TEST_CASE(SelectedDelegationChecks)
751{
752 Link link("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
753 KeyChain keyChain;
754 keyChain.sign(link);
755 Block wire = link.wireEncode();
756
757 Interest a;
758 a.setLink(wire);
759 BOOST_CHECK_EQUAL(a.hasSelectedDelegation(), false);
760
761 BOOST_REQUIRE_NO_THROW(a.setSelectedDelegation(Name("test2")));
762 BOOST_CHECK_EQUAL(a.getSelectedDelegation(), Name("test2"));
763
764 BOOST_REQUIRE_NO_THROW(a.setSelectedDelegation(uint32_t(2)));
765 BOOST_CHECK_EQUAL(a.getSelectedDelegation(), Name("test3"));
766
767 a.unsetSelectedDelegation();
768 BOOST_CHECK_EQUAL(a.hasSelectedDelegation(), false);
769}
770
771BOOST_AUTO_TEST_CASE(EncodeDecodeWithLink)
772{
773 Link link1("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
774 KeyChain keyChain;
775 keyChain.sign(link1);
776 Block wire = link1.wireEncode();
777
778 Interest a;
779 a.setName("/Test/Encode/Decode/With/Link");
780 a.setChildSelector(1);
781 a.setNonce(100);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700782 a.setInterestLifetime(time::seconds(10));
783 a.setLink(wire);
784
785 Block interestBlock = a.wireEncode();
786 Interest b(interestBlock);
787
788 BOOST_CHECK_EQUAL(a == b, true);
789
790 Link link2 = b.getLink();
791 Link::DelegationSet delegations;
792 delegations = link2.getDelegations();
793
794 auto i = delegations.begin();
795 BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
796 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test1"));
797 ++i;
798 BOOST_CHECK_EQUAL(std::get<0>(*i), 20);
799 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test2"));
800 ++i;
801 BOOST_CHECK_EQUAL(std::get<0>(*i), 100);
802 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test3"));
803
804}
805
806BOOST_AUTO_TEST_CASE(DecodeInterestWithLink)
807{
808 Block interestBlock(InterestWithLink, sizeof(InterestWithLink));
809
810 ndn::Interest i;
811 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
812 Link link = i.getLink();
813 BOOST_CHECK_EQUAL(link.getName(), Name("/local/ndn/prefix"));
814 Link::DelegationSet delegations = link.getDelegations();
815
816 auto it = delegations.begin();
817 BOOST_CHECK_EQUAL(std::get<0>(*it), 10);
818 BOOST_CHECK_EQUAL(std::get<1>(*it), Name("local"));
819 ++it;
820 BOOST_CHECK_EQUAL(std::get<0>(*it), 20);
821 BOOST_CHECK_EQUAL(std::get<1>(*it), Name("ndn"));
822
823 BOOST_REQUIRE_NO_THROW(i.getSelectedDelegation());
824 BOOST_CHECK_EQUAL(i.getSelectedDelegation(), Name("local"));
825}
826
827BOOST_AUTO_TEST_CASE(DecodeInterestWithLinkNonDecreasingOrder)
828{
829 Block interestBlock(InterestWithLinkNonDecreasingOrder,
830 sizeof(InterestWithLinkNonDecreasingOrder));
831
832 ndn::Interest i;
833 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
834 BOOST_REQUIRE_NO_THROW(i.getSelectedDelegation());
835 BOOST_CHECK_EQUAL(i.getSelectedDelegation(), Name("ndn"));
836}
837
838BOOST_AUTO_TEST_CASE(LinkObjectMissingContentType)
839{
840 Block interestBlock(InterestWithLinkMissingContentType,
841 sizeof(InterestWithLinkMissingContentType));
842
843 ndn::Interest i;
844 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
845 BOOST_REQUIRE_THROW(i.getLink(), Link::Error);
846}
847
848BOOST_AUTO_TEST_CASE(LinkObjectNoMetaInfo)
849{
850 Block interestBlock(InterestWithLinkNoMetaInfo,
851 sizeof(InterestWithLinkNoMetaInfo));
852
853 ndn::Interest i;
854 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700855 BOOST_CHECK_THROW(i.getLink(), tlv::Error);
856 BOOST_CHECK_THROW(i.getLink(), tlv::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700857}
858
859BOOST_AUTO_TEST_CASE(LinkObjectWrongContentType)
860{
861 Block interestBlock(InterestWithLinkWrongContentType,
862 sizeof(InterestWithLinkWrongContentType));
863
864 ndn::Interest i;
865 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700866 BOOST_CHECK_THROW(i.getLink(), Link::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700867}
868
869BOOST_AUTO_TEST_CASE(InterestContainingSelectedDelegationButNoLink)
870{
871 Block interestBlock(InterestWithSelectedDelegationButNoLink,
872 sizeof(InterestWithSelectedDelegationButNoLink));
873
874 ndn::Interest i;
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700875 BOOST_CHECK_THROW(i.wireDecode(interestBlock), Interest::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700876}
877
878BOOST_AUTO_TEST_CASE(SelectedDelegationIsNotNonNegativeInteger)
879{
880 Block interestBlock(InterestWithLinkNotNonIntegerSelectedDelegation,
881 sizeof(InterestWithLinkNotNonIntegerSelectedDelegation));
882
883 ndn::Interest i;
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700884 BOOST_CHECK_THROW(i.wireDecode(interestBlock), tlv::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700885}
886
887BOOST_AUTO_TEST_CASE(SelectedDelegationEqualToDelegationCount)
888{
889 Link link1("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
890 KeyChain keyChain;
891 keyChain.sign(link1);
892 Block wire = link1.wireEncode();
893
894 Interest a;
895 a.setName("/Test/Encode/Decode/With/Link");
896 a.setChildSelector(1);
897 a.setNonce(100);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700898 a.setInterestLifetime(time::seconds(10));
899 a.setLink(wire);
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700900 BOOST_CHECK_THROW(a.setSelectedDelegation(3), Interest::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700901}
902
903BOOST_AUTO_TEST_CASE(SelectedDelegationGreaterThanDelegationCount)
904{
905 Link link1("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
906 KeyChain keyChain;
907 keyChain.sign(link1);
908 Block wire = link1.wireEncode();
909
910 Interest a;
911 a.setName("/Test/Encode/Decode/With/Link");
912 a.setChildSelector(1);
913 a.setNonce(100);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700914 a.setInterestLifetime(time::seconds(10));
915 a.setLink(wire);
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700916 BOOST_CHECK_THROW(a.setSelectedDelegation(4), Interest::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700917}
918
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700919BOOST_AUTO_TEST_CASE(Decode)
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800920{
921 Block interestBlock(Interest1, sizeof(Interest1));
Alexander Afanasyev636e9f12014-01-07 12:01:03 -0800922
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800923 ndn::Interest i;
Alexander Afanasyev049f8f72013-12-26 19:07:15 -0800924 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800925
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700926 BOOST_CHECK_EQUAL(i.getName().toUri(), "/local/ndn/prefix");
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700927 BOOST_CHECK_EQUAL(i.getInterestLifetime(), time::milliseconds(1000));
928 BOOST_CHECK_EQUAL(i.getMinSuffixComponents(), 1);
929 BOOST_CHECK_EQUAL(i.getMaxSuffixComponents(), 1);
930 BOOST_CHECK_EQUAL(i.getPublisherPublicKeyLocator().getType(),
931 static_cast<uint32_t>(KeyLocator::KeyLocator_Name));
932 BOOST_CHECK_EQUAL(i.getPublisherPublicKeyLocator().getName(), "ndn:/test/key/locator");
933 BOOST_CHECK_EQUAL(i.getChildSelector(), 1);
934 BOOST_CHECK_EQUAL(i.getMustBeFresh(), false);
935 BOOST_CHECK_EQUAL(i.getExclude().toUri(), "alex,xxxx,*,yyyy");
936 BOOST_CHECK_EQUAL(i.getNonce(), 1U);
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700937 BOOST_CHECK_EQUAL(i.hasLink(), false);
938 BOOST_CHECK_EQUAL(i.hasSelectedDelegation(), false);
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800939}
940
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700941BOOST_AUTO_TEST_CASE(DecodeFromStream)
Alexander Afanasyev6835ad82014-02-12 10:07:20 -0800942{
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -0700943 boost::iostreams::stream<boost::iostreams::array_source> is(
944 reinterpret_cast<const char *>(Interest1), sizeof(Interest1));
Junxiao Shib332e782014-03-31 14:23:46 -0700945
Alexander Afanasyev9c578182014-05-14 17:28:28 -0700946 Block interestBlock = Block::fromStream(is);
Alexander Afanasyev6835ad82014-02-12 10:07:20 -0800947
948 ndn::Interest i;
949 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
950
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700951 BOOST_CHECK_EQUAL(i.getName().toUri(), "/local/ndn/prefix");
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700952 BOOST_CHECK_EQUAL(i.getInterestLifetime(), time::milliseconds(1000));
953 BOOST_CHECK_EQUAL(i.getMinSuffixComponents(), 1);
954 BOOST_CHECK_EQUAL(i.getMaxSuffixComponents(), 1);
955 BOOST_CHECK_EQUAL(i.getChildSelector(), 1);
956 BOOST_CHECK_EQUAL(i.getMustBeFresh(), false);
957 BOOST_CHECK_EQUAL(i.getExclude().toUri(), "alex,xxxx,*,yyyy");
958 BOOST_CHECK_EQUAL(i.getNonce(), 1U);
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700959 BOOST_CHECK_EQUAL(i.hasLink(), false);
960 BOOST_CHECK_EQUAL(i.hasSelectedDelegation(), false);
Alexander Afanasyev6835ad82014-02-12 10:07:20 -0800961}
962
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700963BOOST_AUTO_TEST_CASE(Encode)
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800964{
965 ndn::Interest i(ndn::Name("/local/ndn/prefix"));
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -0700966 i.setInterestLifetime(time::milliseconds(1000));
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800967 i.setMinSuffixComponents(1);
968 i.setMaxSuffixComponents(1);
Junxiao Shib332e782014-03-31 14:23:46 -0700969 i.setPublisherPublicKeyLocator(KeyLocator("ndn:/test/key/locator"));
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800970 i.setChildSelector(1);
971 i.setMustBeFresh(false);
Alexander Afanasyevc348f832014-02-17 16:35:17 -0800972 Exclude exclude;
973 exclude
Alexander Afanasyev52eb20d2014-02-06 18:25:54 -0800974 .excludeOne(name::Component("alex"))
975 .excludeRange(name::Component("xxxx"), name::Component("yyyy"));
Alexander Afanasyevc348f832014-02-17 16:35:17 -0800976 i.setExclude(exclude);
Alexander Afanasyev840139f2013-12-28 15:02:50 -0800977 i.setNonce(1);
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800978
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300979 BOOST_CHECK_EQUAL(i.hasWire(), false);
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800980 const Block &wire = i.wireEncode();
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300981 BOOST_CHECK_EQUAL(i.hasWire(), true);
Alexander Afanasyev809805d2014-02-17 17:20:33 -0800982
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700983 BOOST_CHECK_EQUAL_COLLECTIONS(Interest1, Interest1 + sizeof(Interest1),
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800984 wire.begin(), wire.end());
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800985
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300986 const uint8_t* originalWire = wire.wire();
987 i.setNonce(2);
988 BOOST_CHECK_EQUAL(i.hasWire(), true);
989 BOOST_CHECK_EQUAL(originalWire, i.wireEncode().wire());
990 BOOST_CHECK_EQUAL(i.hasWire(), true);
991
992 BOOST_CHECK_EQUAL_COLLECTIONS(Interest2, Interest2 + sizeof(Interest2),
993 wire.begin(), wire.end());
Alexander Afanasyeva0c5f832014-06-19 13:27:56 -0700994
995 std::ostringstream strStream;
996 BOOST_CHECK_NO_THROW(strStream << i);
997
998 BOOST_CHECK_EQUAL(strStream.str(),
999 "/local/ndn/prefix?"
1000 "ndn.MinSuffixComponents=1&ndn.MaxSuffixComponents=1&"
Alexander Afanasyev117f5ef2015-06-03 15:07:24 -07001001 "ndn.ChildSelector=1&"
Alexander Afanasyeva0c5f832014-06-19 13:27:56 -07001002 "ndn.InterestLifetime=1000&"
1003 "ndn.Nonce=2&ndn.Exclude=alex,xxxx,*,yyyy");
Alexander Afanasyevc3932172014-07-10 18:53:56 -07001004
1005 i.refreshNonce();
1006 BOOST_CHECK_EQUAL(i.hasWire(), true);
1007 BOOST_CHECK_EQUAL(originalWire, i.wireEncode().wire());
1008 BOOST_CHECK_NE(i.getNonce(), 2);
Alexander Afanasyeve881e932014-06-08 14:47:03 +03001009}
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001010
Alexander Afanasyevcac08382015-09-02 14:52:40 -07001011BOOST_AUTO_TEST_CASE(DecodeEncode) // this test case to ensure that wireDecode resets all the fields
1012{
1013 Interest i1;
1014 i1.setName("/test");
1015 i1.setMinSuffixComponents(100);
1016 i1.setNonce(10);
1017 i1.setInterestLifetime(time::seconds(10));
1018 i1.setLink(Block(LINK, sizeof(LINK)));
1019 i1.setSelectedDelegation(0);
1020
1021 Interest i2(i1.wireEncode());
1022
1023 BOOST_CHECK_EQUAL(i2.getName().toUri(), "/test");
1024 BOOST_CHECK_EQUAL(i2.getInterestLifetime(), time::seconds(10));
1025 BOOST_CHECK_EQUAL(i2.getMinSuffixComponents(), 100);
1026 BOOST_CHECK_EQUAL(i2.getNonce(), 10);
1027 BOOST_CHECK_EQUAL(i2.hasLink(), true);
1028 BOOST_CHECK_EQUAL(i2.hasSelectedDelegation(), true);
1029
1030 i2.wireDecode(Interest().wireEncode());
1031
1032 BOOST_CHECK_EQUAL(i2.getName().toUri(), "/");
1033 BOOST_CHECK_EQUAL(i2.getInterestLifetime(), DEFAULT_INTEREST_LIFETIME);
1034 BOOST_CHECK_EQUAL(i2.getMinSuffixComponents(), -1);
1035 BOOST_WARN_NE(i2.getNonce(), 10);
1036 BOOST_CHECK_EQUAL(i2.hasLink(), false);
1037 BOOST_CHECK_EQUAL(i2.hasSelectedDelegation(), false);
1038}
1039
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001040BOOST_AUTO_TEST_CASE(EncodeWithLocalHeader)
1041{
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001042 ndn::Interest interest(ndn::Name("/local/ndn/prefix"));
1043 interest.setMustBeFresh(true);
1044 interest.setIncomingFaceId(10);
1045 interest.setNonce(1);
Junxiao Shib332e782014-03-31 14:23:46 -07001046
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001047 BOOST_CHECK(!interest.hasWire());
Junxiao Shib332e782014-03-31 14:23:46 -07001048
Jiewen Tanc759a202015-01-29 23:31:09 -08001049 Block headerBlock =
1050 interest.getLocalControlHeader()
1051 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1052 nfd::LocalControlHeader::ENCODE_NEXT_HOP);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001053
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001054 BOOST_CHECK(interest.hasWire());
1055 BOOST_CHECK(headerBlock.hasWire());
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001056
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001057 BOOST_CHECK_NE(headerBlock.wire(), interest.wireEncode().wire());
1058 BOOST_CHECK_NE(headerBlock.size(), interest.wireEncode().size());
1059 BOOST_CHECK_EQUAL(headerBlock.size(), 5);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001060
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001061 BOOST_CHECK_EQUAL_COLLECTIONS(InterestWithLocalControlHeader,
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -07001062 InterestWithLocalControlHeader + 5,
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001063 headerBlock.begin(), headerBlock.end());
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001064
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001065 interest.setNonce(1000);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001066
Jiewen Tanc759a202015-01-29 23:31:09 -08001067 Block updatedHeaderBlock =
1068 interest.getLocalControlHeader()
1069 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1070 nfd::LocalControlHeader::ENCODE_NEXT_HOP);
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001071 BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 5);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001072
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001073 // only length should have changed
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -07001074 BOOST_CHECK_EQUAL_COLLECTIONS(updatedHeaderBlock.begin() + 2, updatedHeaderBlock.end(),
1075 headerBlock.begin() + 2, headerBlock.end());
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001076
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001077 // updating IncomingFaceId that keeps the length
1078 interest.setIncomingFaceId(100);
Jiewen Tanc759a202015-01-29 23:31:09 -08001079 updatedHeaderBlock =
1080 interest.getLocalControlHeader()
1081 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1082 nfd::LocalControlHeader::ENCODE_NEXT_HOP);
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001083 BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 5);
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -07001084 BOOST_CHECK_NE(*(updatedHeaderBlock.begin() + 4), *(headerBlock.begin() + 4));
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001085
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001086 // updating IncomingFaceId that increases the length by 2
1087 interest.setIncomingFaceId(1000);
Jiewen Tanc759a202015-01-29 23:31:09 -08001088 updatedHeaderBlock =
1089 interest.getLocalControlHeader()
1090 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1091 nfd::LocalControlHeader::ENCODE_NEXT_HOP);
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001092 BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 6);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001093
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001094 // adding NextHopId
1095 interest.setNextHopFaceId(1);
Jiewen Tanc759a202015-01-29 23:31:09 -08001096 updatedHeaderBlock =
1097 interest.getLocalControlHeader()
1098 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1099 nfd::LocalControlHeader::ENCODE_NEXT_HOP);
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001100 BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 9);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001101
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001102 // masking IncomingFaceId
Jiewen Tanc759a202015-01-29 23:31:09 -08001103 updatedHeaderBlock = interest.getLocalControlHeader()
1104 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_NEXT_HOP);
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001105 BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 5);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001106
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001107 // masking NextHopId
Jiewen Tanc759a202015-01-29 23:31:09 -08001108 updatedHeaderBlock =
1109 interest.getLocalControlHeader()
1110 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID);
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001111 BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 6);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001112
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001113 // masking everything
Jiewen Tanc759a202015-01-29 23:31:09 -08001114 BOOST_CHECK_THROW(interest.getLocalControlHeader()
1115 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_NONE),
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001116 nfd::LocalControlHeader::Error);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001117}
1118
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001119
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -07001120BOOST_AUTO_TEST_CASE(DecodeWithLocalHeader)
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001121{
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001122 Block wireBlock(InterestWithLocalControlHeader, sizeof(InterestWithLocalControlHeader));
1123 const Block& payload = nfd::LocalControlHeader::getPayload(wireBlock);
1124 BOOST_REQUIRE_NE(&payload, &wireBlock);
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -08001125
Steve DiBenedetto54ce6682014-07-22 13:22:57 -06001126 BOOST_CHECK_EQUAL(payload.type(), static_cast<uint32_t>(tlv::Interest));
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -07001127 BOOST_CHECK_EQUAL(wireBlock.type(), static_cast<uint32_t>(tlv::nfd::LocalControlHeader));
Junxiao Shib332e782014-03-31 14:23:46 -07001128
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001129 Interest interest(payload);
1130 BOOST_CHECK(!interest.getLocalControlHeader().hasIncomingFaceId());
1131 BOOST_CHECK(!interest.getLocalControlHeader().hasNextHopFaceId());
1132
1133 BOOST_REQUIRE_NO_THROW(interest.getLocalControlHeader().wireDecode(wireBlock));
1134
Jiewen Tanc759a202015-01-29 23:31:09 -08001135 BOOST_CHECK_EQUAL(
1136 interest.getLocalControlHeader()
1137 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1138 nfd::LocalControlHeader::ENCODE_NEXT_HOP).size(),
1139 5);
Junxiao Shib332e782014-03-31 14:23:46 -07001140
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001141 BOOST_CHECK_EQUAL(interest.getIncomingFaceId(), 10);
1142 BOOST_CHECK(!interest.getLocalControlHeader().hasNextHopFaceId());
1143
Jiewen Tanc759a202015-01-29 23:31:09 -08001144 BOOST_CHECK_THROW(interest.getLocalControlHeader()
1145 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_NONE),
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001146 nfd::LocalControlHeader::Error);
1147
Jiewen Tanc759a202015-01-29 23:31:09 -08001148 BOOST_CHECK_THROW(interest.getLocalControlHeader()
1149 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_NEXT_HOP),
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001150 nfd::LocalControlHeader::Error);
1151
Jiewen Tanc759a202015-01-29 23:31:09 -08001152 BOOST_CHECK_NO_THROW(
1153 interest.getLocalControlHeader()
1154 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID));
1155 BOOST_CHECK_NO_THROW(
1156 interest.getLocalControlHeader()
1157 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1158 nfd::LocalControlHeader::ENCODE_NEXT_HOP));
Junxiao Shib332e782014-03-31 14:23:46 -07001159
Jiewen Tanc759a202015-01-29 23:31:09 -08001160 BOOST_CHECK_NE(
1161 (void*)interest.getLocalControlHeader()
1162 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1163 nfd::LocalControlHeader::ENCODE_NEXT_HOP)
1164 .wire(),
1165 (void*)wireBlock.wire());
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001166
Jiewen Tanc759a202015-01-29 23:31:09 -08001167 BOOST_CHECK_EQUAL(interest.getLocalControlHeader()
1168 .wireEncode(interest, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
1169 nfd::LocalControlHeader::ENCODE_NEXT_HOP).size(),
1170 5);
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001171}
1172
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -07001173BOOST_AUTO_TEST_CASE(DecodeWithoutLocalHeader)
Alexander Afanasyev5964fb72014-02-18 12:42:45 -08001174{
1175 Block wireBlock(InterestWithoutLocalControlHeader, sizeof(InterestWithoutLocalControlHeader));
1176 const Block& payload = nfd::LocalControlHeader::getPayload(wireBlock);
1177 BOOST_CHECK_EQUAL(&payload, &wireBlock);
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -08001178}
1179
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001180BOOST_AUTO_TEST_CASE(MatchesData)
1181{
1182 Interest interest;
1183 interest.setName("ndn:/A")
1184 .setMinSuffixComponents(2)
1185 .setMaxSuffixComponents(2)
1186 .setPublisherPublicKeyLocator(KeyLocator("ndn:/B"))
1187 .setExclude(Exclude().excludeBefore(name::Component("C")));
1188
1189 Data data("ndn:/A/D");
Yingdi Yu4a557052014-07-09 16:40:37 -07001190 SignatureSha256WithRsa signature(KeyLocator("ndn:/B"));
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001191 data.setSignature(signature);
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001192 data.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001193 BOOST_CHECK_EQUAL(interest.matchesData(data), true);
1194
1195 Data data1 = data;
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001196 data1.setName("ndn:/A"); // violates MinSuffixComponents
1197 data1.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001198 BOOST_CHECK_EQUAL(interest.matchesData(data1), false);
1199
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001200 interest.setMinSuffixComponents(1);
1201 BOOST_CHECK_EQUAL(interest.matchesData(data1), true);
1202 interest.setMinSuffixComponents(2);
1203
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001204 Data data2 = data;
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001205 data2.setName("ndn:/A/E/F"); // violates MaxSuffixComponents
1206 data2.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001207 BOOST_CHECK_EQUAL(interest.matchesData(data2), false);
1208
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001209 interest.setMaxSuffixComponents(3);
1210 BOOST_CHECK_EQUAL(interest.matchesData(data2), true);
1211 interest.setMaxSuffixComponents(2);
1212
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001213 Data data3 = data;
Yingdi Yu4a557052014-07-09 16:40:37 -07001214 SignatureSha256WithRsa signature3(KeyLocator("ndn:/G")); // violates PublisherPublicKeyLocator
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001215 data3.setSignature(signature3);
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001216 data3.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001217 BOOST_CHECK_EQUAL(interest.matchesData(data3), false);
1218
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001219 interest.setPublisherPublicKeyLocator(KeyLocator("ndn:/G"));
1220 BOOST_CHECK_EQUAL(interest.matchesData(data3), true);
1221 interest.setPublisherPublicKeyLocator(KeyLocator("ndn:/B"));
1222
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001223 Data data4 = data;
Yingdi Yubf6a2812014-06-17 15:32:11 -07001224 DigestSha256 signature4; // violates PublisherPublicKeyLocator
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001225 data4.setSignature(signature4);
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001226 data4.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001227 BOOST_CHECK_EQUAL(interest.matchesData(data4), false);
1228
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001229 interest.setPublisherPublicKeyLocator(KeyLocator());
1230 BOOST_CHECK_EQUAL(interest.matchesData(data4), true);
1231 interest.setPublisherPublicKeyLocator(KeyLocator("ndn:/B"));
1232
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001233 Data data5 = data;
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001234 data5.setName("ndn:/A/C"); // violates Exclude
1235 data5.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001236 BOOST_CHECK_EQUAL(interest.matchesData(data5), false);
1237
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001238 interest.setExclude(Exclude().excludeBefore(name::Component("A")));
1239 BOOST_CHECK_EQUAL(interest.matchesData(data5), true);
1240 interest.setExclude(Exclude().excludeBefore(name::Component("C")));
1241
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001242 Data data6 = data;
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001243 data6.setName("ndn:/H/I"); // violates Name
1244 data6.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001245 BOOST_CHECK_EQUAL(interest.matchesData(data6), false);
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001246
1247 Data data7 = data;
1248 data7.setName("ndn:/A/B");
1249 data7.wireEncode();
1250
1251 interest = Interest()
Alexander Afanasyev56860f52014-11-07 11:51:17 -08001252 .setName("/A/B/sha256digest=D548DECEFC4B880720DC9257A8D815E9DF4465E63742EE55C29133055DAA67C2");
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001253 BOOST_CHECK_EQUAL(interest.matchesData(data7), true);
1254
1255 interest = Interest()
1256 .setName("/A/B/%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00"
1257 "%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00");
1258 BOOST_CHECK_EQUAL(interest.matchesData(data7), false); // violates implicit digest
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001259}
1260
Alexander Afanasyev90164962014-03-06 08:29:59 +00001261BOOST_AUTO_TEST_CASE(InterestFilterMatching)
1262{
1263 BOOST_CHECK_EQUAL(InterestFilter("/a").doesMatch("/a/b"), true);
1264 BOOST_CHECK_EQUAL(InterestFilter("/a/b").doesMatch("/a/b"), true);
1265 BOOST_CHECK_EQUAL(InterestFilter("/a/b/c").doesMatch("/a/b"), false);
1266
1267 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b>").doesMatch("/a/b"), true);
1268 BOOST_CHECK_EQUAL(InterestFilter("/a/b", "<b>").doesMatch("/a/b"), false);
1269
1270 BOOST_CHECK_EQUAL(InterestFilter("/a/b", "<b>").doesMatch("/a/b/c/b"), false);
1271 BOOST_CHECK_EQUAL(InterestFilter("/a/b", "<>*<b>").doesMatch("/a/b/c/b"), true);
1272
1273 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b>").doesMatch("/a/b/c/d"), false);
1274 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b><>*").doesMatch("/a/b/c/d"), true);
1275 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b><>*").doesMatch("/a/b"), true);
1276 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b><>+").doesMatch("/a/b"), false);
1277 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b><>+").doesMatch("/a/b/c"), true);
1278}
1279
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -08001280BOOST_AUTO_TEST_SUITE_END()
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -08001281
Alexander Afanasyev90164962014-03-06 08:29:59 +00001282} // namespace tests
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -08001283} // namespace ndn