blob: fe4b45cf48d90af2e88abc376a5858f94c2e0f11 [file] [log] [blame]
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventoc2e12b42017-07-09 20:35:09 -04002/*
Junxiao Shie4603e12022-01-05 19:12:25 +00003 * Copyright (c) 2013-2022 Regents of the University of California.
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
Davide Pesavento7e780642018-11-24 15:51:34 -050022#include "ndn-cxx/link.hpp"
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -070023
Davide Pesavento4c1ad4c2020-11-16 21:12:02 -050024#include "tests/test-common.hpp"
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -070025
26namespace ndn {
27namespace tests {
28
Davide Pesaventoeee3e822016-11-26 19:19:34 +010029BOOST_AUTO_TEST_SUITE(TestLink)
30
Junxiao Shid21abd32017-06-30 02:56:40 +000031const uint8_t GOOD_LINK[] = {
Junxiao Shie4603e12022-01-05 19:12:25 +0000320x06, 0xd0, // Data
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -070033 0x07, 0x14, // Name
34 0x08, 0x05,
35 0x6c, 0x6f, 0x63, 0x61, 0x6c,
36 0x08, 0x03,
37 0x6e, 0x64, 0x6e,
38 0x08, 0x06,
39 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
40 0x14, 0x07, // MetaInfo
41 0x18, 0x01, // ContentType
42 0x01,
43 0x19, 0x02, // FreshnessPeriod
44 0x27, 0x10,
Junxiao Shie4603e12022-01-05 19:12:25 +000045 0x15, 0x10, // Content
46 0x07, 0x07, // Name
47 0x08, 0x05,
48 0x6c, 0x6f, 0x63, 0x61, 0x6c,
49 0x07, 0x05, // Name
50 0x08, 0x03,
51 0x6e, 0x64, 0x6e,
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -070052 0x16, 0x1b, // SignatureInfo
53 0x1b, 0x01, // SignatureType
54 0x01,
55 0x1c, 0x16, // KeyLocator
56 0x07, 0x14, // Name
57 0x08, 0x04,
58 0x74, 0x65, 0x73, 0x74,
59 0x08, 0x03,
60 0x6b, 0x65, 0x79,
61 0x08, 0x07,
62 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
63 0x17, 0x80, // SignatureValue
64 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
65 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
66 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
67 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
68 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
69 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
70 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
71 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
72 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
73 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
74};
75
Junxiao Shid21abd32017-06-30 02:56:40 +000076BOOST_AUTO_TEST_SUITE(EncodeDecode)
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -070077
78BOOST_AUTO_TEST_CASE(Decode)
79{
Davide Pesaventofbea4fc2022-02-08 07:26:04 -050080 Link link(Block{GOOD_LINK});
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -070081 BOOST_CHECK_EQUAL(link.getName(), Name("/local/ndn/prefix"));
Junxiao Shie4603e12022-01-05 19:12:25 +000082 BOOST_TEST(link.getDelegationList() == std::vector<Name>({"/local", "/ndn"}),
83 boost::test_tools::per_element());
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -070084}
85
Junxiao Shid21abd32017-06-30 02:56:40 +000086BOOST_AUTO_TEST_CASE(DecodeBadContentType)
Spyridon Mastorakisc8188b32015-04-18 18:33:38 -070087{
Davide Pesaventofbea4fc2022-02-08 07:26:04 -050088 Data linkData(Block{GOOD_LINK});
Junxiao Shid21abd32017-06-30 02:56:40 +000089 linkData.setContentType(tlv::ContentType_Key);
90 Block badLink = linkData.wireEncode();
91
Davide Pesaventofbea4fc2022-02-08 07:26:04 -050092 BOOST_CHECK_THROW(Link{badLink}, Link::Error);
Junxiao Shid21abd32017-06-30 02:56:40 +000093 Link link;
94 BOOST_CHECK_THROW(link.wireDecode(badLink), Link::Error);
95}
96
97BOOST_AUTO_TEST_CASE(Encode)
98{
Junxiao Shie4603e12022-01-05 19:12:25 +000099 Link link1("/test", {"/test1", "/test2", "/test3"});
Junxiao Shid21abd32017-06-30 02:56:40 +0000100 signData(link1);
101 Block wire = link1.wireEncode();
102
103 Link link2(wire);
104 BOOST_CHECK_EQUAL(link2.getName(), "/test");
Junxiao Shie4603e12022-01-05 19:12:25 +0000105 BOOST_TEST(link2.getDelegationList() == std::vector<Name>({"/test1", "/test2", "/test3"}),
106 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000107}
108
109BOOST_AUTO_TEST_SUITE_END() // EncodeDecode
110
111BOOST_AUTO_TEST_SUITE(Modify)
112
113BOOST_AUTO_TEST_CASE(SetDelegationList)
114{
115 Link link("/test");
Junxiao Shie4603e12022-01-05 19:12:25 +0000116 BOOST_CHECK(link.getDelegationList().empty());
Junxiao Shid21abd32017-06-30 02:56:40 +0000117
Junxiao Shie4603e12022-01-05 19:12:25 +0000118 link.setDelegationList(std::vector<Name>({"/test1", "/test2"}));
119 BOOST_TEST(link.getDelegationList() == std::vector<Name>({"/test1", "/test2"}),
120 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000121}
122
123BOOST_AUTO_TEST_CASE(AddDelegation)
124{
Junxiao Shie4603e12022-01-05 19:12:25 +0000125 Link link1("/test", {"/test1", "/test2", "/test3"});
126 BOOST_TEST(link1.getDelegationList() == std::vector<Name>({"/test1", "/test2", "/test3"}),
127 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000128
Junxiao Shie4603e12022-01-05 19:12:25 +0000129 BOOST_CHECK(link1.addDelegation("/test4"));
130 BOOST_TEST(link1.getDelegationList() == std::vector<Name>({"/test1", "/test2", "/test3", "/test4"}),
131 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000132
Junxiao Shie4603e12022-01-05 19:12:25 +0000133 BOOST_CHECK(!link1.addDelegation("/test2"));
134 BOOST_TEST(link1.getDelegationList() == std::vector<Name>({"/test1", "/test2", "/test3", "/test4"}),
135 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000136
137 signData(link1);
138 Link link2(link1.wireEncode());
Junxiao Shie4603e12022-01-05 19:12:25 +0000139 BOOST_TEST(link2.getDelegationList() == std::vector<Name>({"/test1", "/test2", "/test3", "/test4"}),
140 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000141}
142
143BOOST_AUTO_TEST_CASE(RemoveDelegation)
144{
Junxiao Shie4603e12022-01-05 19:12:25 +0000145 Link link1("/test", {"/test1", "/test2", "/test3"});
146 BOOST_TEST(link1.getDelegationList() == std::vector<Name>({"/test1", "/test2", "/test3"}),
147 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000148
Junxiao Shie4603e12022-01-05 19:12:25 +0000149 BOOST_CHECK(!link1.removeDelegation("/test4")); // non-existent
150 BOOST_TEST(link1.getDelegationList() == std::vector<Name>({"/test1", "/test2", "/test3"}),
151 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000152
Junxiao Shie4603e12022-01-05 19:12:25 +0000153 BOOST_CHECK(link1.removeDelegation("/test2"));
154 BOOST_TEST(link1.getDelegationList() == std::vector<Name>({"/test1", "/test3"}),
155 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000156
157 signData(link1);
158 Link link2(link1.wireEncode());
Junxiao Shie4603e12022-01-05 19:12:25 +0000159 BOOST_TEST(link2.getDelegationList() == std::vector<Name>({"/test1", "/test3"}),
160 boost::test_tools::per_element());
Junxiao Shid21abd32017-06-30 02:56:40 +0000161
162 link1.removeDelegation("/test1");
163 link1.removeDelegation("/test3");
Junxiao Shie4603e12022-01-05 19:12:25 +0000164 BOOST_CHECK(link1.getDelegationList().empty());
Junxiao Shid21abd32017-06-30 02:56:40 +0000165}
166
167BOOST_AUTO_TEST_SUITE_END() // Modify
168
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100169BOOST_AUTO_TEST_SUITE_END() // TestLink
Spyridon Mastorakis3b54e852015-04-07 08:03:25 -0700170
171} // namespace tests
172} // namespace ndn