blob: 27cdff3c15bbbae82d1d8d789f21d32c17db7970 [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 Afanasyevff2d08f2014-04-07 18:28:25 -0700546BOOST_AUTO_TEST_CASE(InterestEqualityChecks)
547{
548 // Interest ::= INTEREST-TYPE TLV-LENGTH
549 // Name
550 // Selectors?
551 // Nonce
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700552 // InterestLifetime?
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700553 // Link?
554 // SelectedDelegation?
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700555
556 Interest a;
557 Interest b;
558
559 // if nonce is not set, it will be set to a random value
560 a.setNonce(1);
561 b.setNonce(1);
562
563 BOOST_CHECK_EQUAL(a == b, true);
564 BOOST_CHECK_EQUAL(a != b, false);
565
566 // check comparison on Name
567 a.setName("ndn:/A");
568 BOOST_CHECK_EQUAL(a == b, false);
569 BOOST_CHECK_EQUAL(a != b, true);
570
571 b.setName("ndn:/B");
572 BOOST_CHECK_EQUAL(a == b, false);
573 BOOST_CHECK_EQUAL(a != b, true);
574
575 b.setName("ndn:/A");
576 BOOST_CHECK_EQUAL(a == b, true);
577 BOOST_CHECK_EQUAL(a != b, false);
578
579 // check comparison on Selectors
580 a.setChildSelector(1);
581 BOOST_CHECK_EQUAL(a == b, false);
582 BOOST_CHECK_EQUAL(a != b, true);
583
584 b.setChildSelector(1);
585 BOOST_CHECK_EQUAL(a == b, true);
586 BOOST_CHECK_EQUAL(a != b, false);
587
588 // check comparison on Nonce
589 a.setNonce(100);
590 BOOST_CHECK_EQUAL(a == b, false);
591 BOOST_CHECK_EQUAL(a != b, true);
592
593 b.setNonce(100);
594 BOOST_CHECK_EQUAL(a == b, true);
595 BOOST_CHECK_EQUAL(a != b, false);
596
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700597 // check comparison on InterestLifetime
598 a.setInterestLifetime(time::seconds(10));
599 BOOST_CHECK_EQUAL(a == b, false);
600 BOOST_CHECK_EQUAL(a != b, true);
601
602 b.setInterestLifetime(time::seconds(10));
603 BOOST_CHECK_EQUAL(a == b, true);
604 BOOST_CHECK_EQUAL(a != b, false);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700605
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700606 a.setLink(Block(LINK, sizeof(LINK)));
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700607 BOOST_CHECK_EQUAL(a == b, false);
608 BOOST_CHECK_EQUAL(a != b, true);
609
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700610 b.setLink(Block(LINK, sizeof(LINK)));
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700611 BOOST_CHECK_EQUAL(a == b, true);
612 BOOST_CHECK_EQUAL(a != b, false);
613
614 // Selected Delegation
615 BOOST_CHECK_EQUAL(a.hasSelectedDelegation(), false);
616 BOOST_CHECK_EQUAL(b.hasSelectedDelegation(), false);
617
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700618 a.setSelectedDelegation(Name("/local"));
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700619 BOOST_CHECK_EQUAL(a == b, false);
620 BOOST_CHECK_EQUAL(a != b, true);
621
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700622 b.setSelectedDelegation(Name("/local"));
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700623 BOOST_CHECK_EQUAL(a == b, true);
624 BOOST_CHECK_EQUAL(a != b, false);
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700625}
626
627BOOST_AUTO_TEST_CASE(SelectorsEqualityChecks)
628{
629 // Selectors ::= SELECTORS-TYPE TLV-LENGTH
630 // MinSuffixComponents?
631 // MaxSuffixComponents?
632 // PublisherPublicKeyLocator?
633 // Exclude?
634 // ChildSelector?
635 // MustBeFresh?
636
637 Selectors a;
638 Selectors b;
639 BOOST_CHECK_EQUAL(a == b, true);
640 BOOST_CHECK_EQUAL(a != b, false);
641
642 // MinSuffixComponents
643 a.setMinSuffixComponents(1);
644 BOOST_CHECK_EQUAL(a == b, false);
645 BOOST_CHECK_EQUAL(a != b, true);
646
647 b.setMinSuffixComponents(2);
648 BOOST_CHECK_EQUAL(a == b, false);
649 BOOST_CHECK_EQUAL(a != b, true);
650
651 b.setMinSuffixComponents(1);
652 BOOST_CHECK_EQUAL(a == b, true);
653 BOOST_CHECK_EQUAL(a != b, false);
654
655 // MaxSuffixComponents
656 a.setMaxSuffixComponents(10);
657 BOOST_CHECK_EQUAL(a == b, false);
658 BOOST_CHECK_EQUAL(a != b, true);
659
660 b.setMaxSuffixComponents(10);
661 BOOST_CHECK_EQUAL(a == b, true);
662 BOOST_CHECK_EQUAL(a != b, false);
663
664 // PublisherPublicKeyLocator
665 a.setPublisherPublicKeyLocator(KeyLocator("/key/Locator/name"));
666 BOOST_CHECK_EQUAL(a == b, false);
667 BOOST_CHECK_EQUAL(a != b, true);
668
669 b.setPublisherPublicKeyLocator(KeyLocator("/key/Locator/name"));
670 BOOST_CHECK_EQUAL(a == b, true);
671 BOOST_CHECK_EQUAL(a != b, false);
672
673 // Exclude
674 a.setExclude(Exclude().excludeOne(name::Component("exclude")));
675 BOOST_CHECK_EQUAL(a == b, false);
676 BOOST_CHECK_EQUAL(a != b, true);
677
678 b.setExclude(Exclude().excludeOne(name::Component("exclude")));
679 BOOST_CHECK_EQUAL(a == b, true);
680 BOOST_CHECK_EQUAL(a != b, false);
681
682 // ChildSelector
683 a.setChildSelector(1);
684 BOOST_CHECK_EQUAL(a == b, false);
685 BOOST_CHECK_EQUAL(a != b, true);
686
687 b.setChildSelector(1);
688 BOOST_CHECK_EQUAL(a == b, true);
689 BOOST_CHECK_EQUAL(a != b, false);
690
691 // MustBeFresh
692 a.setMustBeFresh(true);
693 BOOST_CHECK_EQUAL(a == b, false);
694 BOOST_CHECK_EQUAL(a != b, true);
695
696 b.setMustBeFresh(true);
697 BOOST_CHECK_EQUAL(a == b, true);
698 BOOST_CHECK_EQUAL(a != b, false);
699}
700
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700701BOOST_AUTO_TEST_CASE(LinkObject)
702{
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700703 Link link1("test", {{100, "/test3"}, {20, "/test2"}, {10, "/test1"}});
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700704 KeyChain keyChain;
705 keyChain.sign(link1);
706 Block wire = link1.wireEncode();
707
708 Interest a;
709 BOOST_REQUIRE_NO_THROW(a.setLink(wire));
710
711 BOOST_REQUIRE_NO_THROW(a.getLink());
712
713 Link link2 = a.getLink();
714 Name name = link2.getName();
715 BOOST_CHECK_EQUAL(Name("test"), name);
716 BOOST_CHECK_EQUAL(a.hasLink(), true);
717 Link::DelegationSet delegations;
718 delegations = link2.getDelegations();
719
720 auto i = delegations.begin();
721 BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
722 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test1"));
723 ++i;
724 BOOST_CHECK_EQUAL(std::get<0>(*i), 20);
725 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test2"));
726 ++i;
727 BOOST_CHECK_EQUAL(std::get<0>(*i), 100);
728 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test3"));
729
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700730 a.setLink(Block(LINK, sizeof(LINK)));
731 BOOST_CHECK_EQUAL(a.getLink().getDelegations().size(), 2);
732
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700733 a.unsetLink();
734 BOOST_CHECK_EQUAL(a.hasLink(), false);
735}
736
737BOOST_AUTO_TEST_CASE(SelectedDelegationChecks)
738{
739 Link link("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
740 KeyChain keyChain;
741 keyChain.sign(link);
742 Block wire = link.wireEncode();
743
744 Interest a;
745 a.setLink(wire);
746 BOOST_CHECK_EQUAL(a.hasSelectedDelegation(), false);
747
748 BOOST_REQUIRE_NO_THROW(a.setSelectedDelegation(Name("test2")));
749 BOOST_CHECK_EQUAL(a.getSelectedDelegation(), Name("test2"));
750
751 BOOST_REQUIRE_NO_THROW(a.setSelectedDelegation(uint32_t(2)));
752 BOOST_CHECK_EQUAL(a.getSelectedDelegation(), Name("test3"));
753
754 a.unsetSelectedDelegation();
755 BOOST_CHECK_EQUAL(a.hasSelectedDelegation(), false);
756}
757
758BOOST_AUTO_TEST_CASE(EncodeDecodeWithLink)
759{
760 Link link1("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
761 KeyChain keyChain;
762 keyChain.sign(link1);
763 Block wire = link1.wireEncode();
764
765 Interest a;
766 a.setName("/Test/Encode/Decode/With/Link");
767 a.setChildSelector(1);
768 a.setNonce(100);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700769 a.setInterestLifetime(time::seconds(10));
770 a.setLink(wire);
771
772 Block interestBlock = a.wireEncode();
773 Interest b(interestBlock);
774
775 BOOST_CHECK_EQUAL(a == b, true);
776
777 Link link2 = b.getLink();
778 Link::DelegationSet delegations;
779 delegations = link2.getDelegations();
780
781 auto i = delegations.begin();
782 BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
783 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test1"));
784 ++i;
785 BOOST_CHECK_EQUAL(std::get<0>(*i), 20);
786 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test2"));
787 ++i;
788 BOOST_CHECK_EQUAL(std::get<0>(*i), 100);
789 BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test3"));
790
791}
792
793BOOST_AUTO_TEST_CASE(DecodeInterestWithLink)
794{
795 Block interestBlock(InterestWithLink, sizeof(InterestWithLink));
796
797 ndn::Interest i;
798 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
799 Link link = i.getLink();
800 BOOST_CHECK_EQUAL(link.getName(), Name("/local/ndn/prefix"));
801 Link::DelegationSet delegations = link.getDelegations();
802
803 auto it = delegations.begin();
804 BOOST_CHECK_EQUAL(std::get<0>(*it), 10);
805 BOOST_CHECK_EQUAL(std::get<1>(*it), Name("local"));
806 ++it;
807 BOOST_CHECK_EQUAL(std::get<0>(*it), 20);
808 BOOST_CHECK_EQUAL(std::get<1>(*it), Name("ndn"));
809
810 BOOST_REQUIRE_NO_THROW(i.getSelectedDelegation());
811 BOOST_CHECK_EQUAL(i.getSelectedDelegation(), Name("local"));
812}
813
814BOOST_AUTO_TEST_CASE(DecodeInterestWithLinkNonDecreasingOrder)
815{
816 Block interestBlock(InterestWithLinkNonDecreasingOrder,
817 sizeof(InterestWithLinkNonDecreasingOrder));
818
819 ndn::Interest i;
820 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
821 BOOST_REQUIRE_NO_THROW(i.getSelectedDelegation());
822 BOOST_CHECK_EQUAL(i.getSelectedDelegation(), Name("ndn"));
823}
824
825BOOST_AUTO_TEST_CASE(LinkObjectMissingContentType)
826{
827 Block interestBlock(InterestWithLinkMissingContentType,
828 sizeof(InterestWithLinkMissingContentType));
829
830 ndn::Interest i;
831 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
832 BOOST_REQUIRE_THROW(i.getLink(), Link::Error);
833}
834
835BOOST_AUTO_TEST_CASE(LinkObjectNoMetaInfo)
836{
837 Block interestBlock(InterestWithLinkNoMetaInfo,
838 sizeof(InterestWithLinkNoMetaInfo));
839
840 ndn::Interest i;
841 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700842 BOOST_CHECK_THROW(i.getLink(), tlv::Error);
843 BOOST_CHECK_THROW(i.getLink(), tlv::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700844}
845
846BOOST_AUTO_TEST_CASE(LinkObjectWrongContentType)
847{
848 Block interestBlock(InterestWithLinkWrongContentType,
849 sizeof(InterestWithLinkWrongContentType));
850
851 ndn::Interest i;
852 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700853 BOOST_CHECK_THROW(i.getLink(), Link::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700854}
855
856BOOST_AUTO_TEST_CASE(InterestContainingSelectedDelegationButNoLink)
857{
858 Block interestBlock(InterestWithSelectedDelegationButNoLink,
859 sizeof(InterestWithSelectedDelegationButNoLink));
860
861 ndn::Interest i;
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700862 BOOST_CHECK_THROW(i.wireDecode(interestBlock), Interest::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700863}
864
865BOOST_AUTO_TEST_CASE(SelectedDelegationIsNotNonNegativeInteger)
866{
867 Block interestBlock(InterestWithLinkNotNonIntegerSelectedDelegation,
868 sizeof(InterestWithLinkNotNonIntegerSelectedDelegation));
869
870 ndn::Interest i;
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700871 BOOST_CHECK_THROW(i.wireDecode(interestBlock), tlv::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700872}
873
874BOOST_AUTO_TEST_CASE(SelectedDelegationEqualToDelegationCount)
875{
876 Link link1("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
877 KeyChain keyChain;
878 keyChain.sign(link1);
879 Block wire = link1.wireEncode();
880
881 Interest a;
882 a.setName("/Test/Encode/Decode/With/Link");
883 a.setChildSelector(1);
884 a.setNonce(100);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700885 a.setInterestLifetime(time::seconds(10));
886 a.setLink(wire);
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700887 BOOST_CHECK_THROW(a.setSelectedDelegation(3), Interest::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700888}
889
890BOOST_AUTO_TEST_CASE(SelectedDelegationGreaterThanDelegationCount)
891{
892 Link link1("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
893 KeyChain keyChain;
894 keyChain.sign(link1);
895 Block wire = link1.wireEncode();
896
897 Interest a;
898 a.setName("/Test/Encode/Decode/With/Link");
899 a.setChildSelector(1);
900 a.setNonce(100);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700901 a.setInterestLifetime(time::seconds(10));
902 a.setLink(wire);
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700903 BOOST_CHECK_THROW(a.setSelectedDelegation(4), Interest::Error);
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -0700904}
905
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700906BOOST_AUTO_TEST_CASE(Decode)
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800907{
908 Block interestBlock(Interest1, sizeof(Interest1));
Alexander Afanasyev636e9f12014-01-07 12:01:03 -0800909
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800910 ndn::Interest i;
Alexander Afanasyev049f8f72013-12-26 19:07:15 -0800911 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800912
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700913 BOOST_CHECK_EQUAL(i.getName().toUri(), "/local/ndn/prefix");
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700914 BOOST_CHECK_EQUAL(i.getInterestLifetime(), time::milliseconds(1000));
915 BOOST_CHECK_EQUAL(i.getMinSuffixComponents(), 1);
916 BOOST_CHECK_EQUAL(i.getMaxSuffixComponents(), 1);
917 BOOST_CHECK_EQUAL(i.getPublisherPublicKeyLocator().getType(),
918 static_cast<uint32_t>(KeyLocator::KeyLocator_Name));
919 BOOST_CHECK_EQUAL(i.getPublisherPublicKeyLocator().getName(), "ndn:/test/key/locator");
920 BOOST_CHECK_EQUAL(i.getChildSelector(), 1);
921 BOOST_CHECK_EQUAL(i.getMustBeFresh(), false);
922 BOOST_CHECK_EQUAL(i.getExclude().toUri(), "alex,xxxx,*,yyyy");
923 BOOST_CHECK_EQUAL(i.getNonce(), 1U);
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700924 BOOST_CHECK_EQUAL(i.hasLink(), false);
925 BOOST_CHECK_EQUAL(i.hasSelectedDelegation(), false);
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800926}
927
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700928BOOST_AUTO_TEST_CASE(DecodeFromStream)
Alexander Afanasyev6835ad82014-02-12 10:07:20 -0800929{
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -0700930 boost::iostreams::stream<boost::iostreams::array_source> is(
931 reinterpret_cast<const char *>(Interest1), sizeof(Interest1));
Junxiao Shib332e782014-03-31 14:23:46 -0700932
Alexander Afanasyev9c578182014-05-14 17:28:28 -0700933 Block interestBlock = Block::fromStream(is);
Alexander Afanasyev6835ad82014-02-12 10:07:20 -0800934
935 ndn::Interest i;
936 BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
937
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700938 BOOST_CHECK_EQUAL(i.getName().toUri(), "/local/ndn/prefix");
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700939 BOOST_CHECK_EQUAL(i.getInterestLifetime(), time::milliseconds(1000));
940 BOOST_CHECK_EQUAL(i.getMinSuffixComponents(), 1);
941 BOOST_CHECK_EQUAL(i.getMaxSuffixComponents(), 1);
942 BOOST_CHECK_EQUAL(i.getChildSelector(), 1);
943 BOOST_CHECK_EQUAL(i.getMustBeFresh(), false);
944 BOOST_CHECK_EQUAL(i.getExclude().toUri(), "alex,xxxx,*,yyyy");
945 BOOST_CHECK_EQUAL(i.getNonce(), 1U);
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700946 BOOST_CHECK_EQUAL(i.hasLink(), false);
947 BOOST_CHECK_EQUAL(i.hasSelectedDelegation(), false);
Alexander Afanasyev6835ad82014-02-12 10:07:20 -0800948}
949
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700950BOOST_AUTO_TEST_CASE(Encode)
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800951{
952 ndn::Interest i(ndn::Name("/local/ndn/prefix"));
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -0700953 i.setInterestLifetime(time::milliseconds(1000));
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800954 i.setMinSuffixComponents(1);
955 i.setMaxSuffixComponents(1);
Junxiao Shib332e782014-03-31 14:23:46 -0700956 i.setPublisherPublicKeyLocator(KeyLocator("ndn:/test/key/locator"));
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800957 i.setChildSelector(1);
958 i.setMustBeFresh(false);
Alexander Afanasyevc348f832014-02-17 16:35:17 -0800959 Exclude exclude;
960 exclude
Alexander Afanasyev52eb20d2014-02-06 18:25:54 -0800961 .excludeOne(name::Component("alex"))
962 .excludeRange(name::Component("xxxx"), name::Component("yyyy"));
Alexander Afanasyevc348f832014-02-17 16:35:17 -0800963 i.setExclude(exclude);
Alexander Afanasyev840139f2013-12-28 15:02:50 -0800964 i.setNonce(1);
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800965
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300966 BOOST_CHECK_EQUAL(i.hasWire(), false);
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800967 const Block &wire = i.wireEncode();
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300968 BOOST_CHECK_EQUAL(i.hasWire(), true);
Alexander Afanasyev809805d2014-02-17 17:20:33 -0800969
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -0700970 BOOST_CHECK_EQUAL_COLLECTIONS(Interest1, Interest1 + sizeof(Interest1),
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800971 wire.begin(), wire.end());
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800972
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300973 const uint8_t* originalWire = wire.wire();
974 i.setNonce(2);
975 BOOST_CHECK_EQUAL(i.hasWire(), true);
976 BOOST_CHECK_EQUAL(originalWire, i.wireEncode().wire());
977 BOOST_CHECK_EQUAL(i.hasWire(), true);
978
979 BOOST_CHECK_EQUAL_COLLECTIONS(Interest2, Interest2 + sizeof(Interest2),
980 wire.begin(), wire.end());
Alexander Afanasyeva0c5f832014-06-19 13:27:56 -0700981
982 std::ostringstream strStream;
983 BOOST_CHECK_NO_THROW(strStream << i);
984
985 BOOST_CHECK_EQUAL(strStream.str(),
986 "/local/ndn/prefix?"
987 "ndn.MinSuffixComponents=1&ndn.MaxSuffixComponents=1&"
Alexander Afanasyev117f5ef2015-06-03 15:07:24 -0700988 "ndn.ChildSelector=1&"
Alexander Afanasyeva0c5f832014-06-19 13:27:56 -0700989 "ndn.InterestLifetime=1000&"
990 "ndn.Nonce=2&ndn.Exclude=alex,xxxx,*,yyyy");
Alexander Afanasyevc3932172014-07-10 18:53:56 -0700991
992 i.refreshNonce();
993 BOOST_CHECK_EQUAL(i.hasWire(), true);
994 BOOST_CHECK_EQUAL(originalWire, i.wireEncode().wire());
995 BOOST_CHECK_NE(i.getNonce(), 2);
Alexander Afanasyeve881e932014-06-08 14:47:03 +0300996}
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800997
Alexander Afanasyevcac08382015-09-02 14:52:40 -0700998BOOST_AUTO_TEST_CASE(DecodeEncode) // this test case to ensure that wireDecode resets all the fields
999{
1000 Interest i1;
1001 i1.setName("/test");
1002 i1.setMinSuffixComponents(100);
1003 i1.setNonce(10);
1004 i1.setInterestLifetime(time::seconds(10));
1005 i1.setLink(Block(LINK, sizeof(LINK)));
1006 i1.setSelectedDelegation(0);
1007
1008 Interest i2(i1.wireEncode());
1009
1010 BOOST_CHECK_EQUAL(i2.getName().toUri(), "/test");
1011 BOOST_CHECK_EQUAL(i2.getInterestLifetime(), time::seconds(10));
1012 BOOST_CHECK_EQUAL(i2.getMinSuffixComponents(), 100);
1013 BOOST_CHECK_EQUAL(i2.getNonce(), 10);
1014 BOOST_CHECK_EQUAL(i2.hasLink(), true);
1015 BOOST_CHECK_EQUAL(i2.hasSelectedDelegation(), true);
1016
1017 i2.wireDecode(Interest().wireEncode());
1018
1019 BOOST_CHECK_EQUAL(i2.getName().toUri(), "/");
1020 BOOST_CHECK_EQUAL(i2.getInterestLifetime(), DEFAULT_INTEREST_LIFETIME);
1021 BOOST_CHECK_EQUAL(i2.getMinSuffixComponents(), -1);
1022 BOOST_WARN_NE(i2.getNonce(), 10);
1023 BOOST_CHECK_EQUAL(i2.hasLink(), false);
1024 BOOST_CHECK_EQUAL(i2.hasSelectedDelegation(), false);
1025}
1026
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001027BOOST_AUTO_TEST_CASE(MatchesData)
1028{
1029 Interest interest;
1030 interest.setName("ndn:/A")
1031 .setMinSuffixComponents(2)
1032 .setMaxSuffixComponents(2)
1033 .setPublisherPublicKeyLocator(KeyLocator("ndn:/B"))
1034 .setExclude(Exclude().excludeBefore(name::Component("C")));
1035
1036 Data data("ndn:/A/D");
Yingdi Yu4a557052014-07-09 16:40:37 -07001037 SignatureSha256WithRsa signature(KeyLocator("ndn:/B"));
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001038 data.setSignature(signature);
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001039 data.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001040 BOOST_CHECK_EQUAL(interest.matchesData(data), true);
1041
1042 Data data1 = data;
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001043 data1.setName("ndn:/A"); // violates MinSuffixComponents
1044 data1.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001045 BOOST_CHECK_EQUAL(interest.matchesData(data1), false);
1046
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001047 interest.setMinSuffixComponents(1);
1048 BOOST_CHECK_EQUAL(interest.matchesData(data1), true);
1049 interest.setMinSuffixComponents(2);
1050
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001051 Data data2 = data;
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001052 data2.setName("ndn:/A/E/F"); // violates MaxSuffixComponents
1053 data2.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001054 BOOST_CHECK_EQUAL(interest.matchesData(data2), false);
1055
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001056 interest.setMaxSuffixComponents(3);
1057 BOOST_CHECK_EQUAL(interest.matchesData(data2), true);
1058 interest.setMaxSuffixComponents(2);
1059
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001060 Data data3 = data;
Yingdi Yu4a557052014-07-09 16:40:37 -07001061 SignatureSha256WithRsa signature3(KeyLocator("ndn:/G")); // violates PublisherPublicKeyLocator
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001062 data3.setSignature(signature3);
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001063 data3.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001064 BOOST_CHECK_EQUAL(interest.matchesData(data3), false);
1065
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001066 interest.setPublisherPublicKeyLocator(KeyLocator("ndn:/G"));
1067 BOOST_CHECK_EQUAL(interest.matchesData(data3), true);
1068 interest.setPublisherPublicKeyLocator(KeyLocator("ndn:/B"));
1069
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001070 Data data4 = data;
Yingdi Yubf6a2812014-06-17 15:32:11 -07001071 DigestSha256 signature4; // violates PublisherPublicKeyLocator
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001072 data4.setSignature(signature4);
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001073 data4.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001074 BOOST_CHECK_EQUAL(interest.matchesData(data4), false);
1075
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001076 interest.setPublisherPublicKeyLocator(KeyLocator());
1077 BOOST_CHECK_EQUAL(interest.matchesData(data4), true);
1078 interest.setPublisherPublicKeyLocator(KeyLocator("ndn:/B"));
1079
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001080 Data data5 = data;
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001081 data5.setName("ndn:/A/C"); // violates Exclude
1082 data5.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001083 BOOST_CHECK_EQUAL(interest.matchesData(data5), false);
1084
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001085 interest.setExclude(Exclude().excludeBefore(name::Component("A")));
1086 BOOST_CHECK_EQUAL(interest.matchesData(data5), true);
1087 interest.setExclude(Exclude().excludeBefore(name::Component("C")));
1088
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001089 Data data6 = data;
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001090 data6.setName("ndn:/H/I"); // violates Name
1091 data6.wireEncode();
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001092 BOOST_CHECK_EQUAL(interest.matchesData(data6), false);
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001093
1094 Data data7 = data;
1095 data7.setName("ndn:/A/B");
1096 data7.wireEncode();
1097
1098 interest = Interest()
Alexander Afanasyev56860f52014-11-07 11:51:17 -08001099 .setName("/A/B/sha256digest=D548DECEFC4B880720DC9257A8D815E9DF4465E63742EE55C29133055DAA67C2");
Alexander Afanasyev3b703102014-06-13 17:01:14 -07001100 BOOST_CHECK_EQUAL(interest.matchesData(data7), true);
1101
1102 interest = Interest()
1103 .setName("/A/B/%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00"
1104 "%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00");
1105 BOOST_CHECK_EQUAL(interest.matchesData(data7), false); // violates implicit digest
Junxiao Shiaf8eeea2014-03-31 20:10:56 -07001106}
1107
Alexander Afanasyev90164962014-03-06 08:29:59 +00001108BOOST_AUTO_TEST_CASE(InterestFilterMatching)
1109{
1110 BOOST_CHECK_EQUAL(InterestFilter("/a").doesMatch("/a/b"), true);
1111 BOOST_CHECK_EQUAL(InterestFilter("/a/b").doesMatch("/a/b"), true);
1112 BOOST_CHECK_EQUAL(InterestFilter("/a/b/c").doesMatch("/a/b"), false);
1113
1114 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b>").doesMatch("/a/b"), true);
1115 BOOST_CHECK_EQUAL(InterestFilter("/a/b", "<b>").doesMatch("/a/b"), false);
1116
1117 BOOST_CHECK_EQUAL(InterestFilter("/a/b", "<b>").doesMatch("/a/b/c/b"), false);
1118 BOOST_CHECK_EQUAL(InterestFilter("/a/b", "<>*<b>").doesMatch("/a/b/c/b"), true);
1119
1120 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b>").doesMatch("/a/b/c/d"), false);
1121 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b><>*").doesMatch("/a/b/c/d"), true);
1122 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b><>*").doesMatch("/a/b"), true);
1123 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b><>+").doesMatch("/a/b"), false);
1124 BOOST_CHECK_EQUAL(InterestFilter("/a", "<b><>+").doesMatch("/a/b/c"), true);
1125}
1126
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -08001127BOOST_AUTO_TEST_SUITE_END()
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -08001128
Alexander Afanasyev90164962014-03-06 08:29:59 +00001129} // namespace tests
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -08001130} // namespace ndn