link: simplify with DelegationList
refs #4055
Change-Id: Id8280037beb7d128cda8faa8ed1ed21e2209ba97
diff --git a/tests/unit-tests/link.t.cpp b/tests/unit-tests/link.t.cpp
index 6e29a5e..a12793a 100644
--- a/tests/unit-tests/link.t.cpp
+++ b/tests/unit-tests/link.t.cpp
@@ -24,14 +24,14 @@
#include "encoding/buffer-stream.hpp"
#include "boost-test.hpp"
-#include "identity-management-fixture.hpp"
+#include "make-interest-data.hpp"
namespace ndn {
namespace tests {
BOOST_AUTO_TEST_SUITE(TestLink)
-const uint8_t LinkTest[] = {
+const uint8_t GOOD_LINK[] = {
0x06, 0xda, // Data
0x07, 0x14, // Name
0x08, 0x05,
@@ -82,322 +82,137 @@
0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
};
-const uint8_t IncorrectContentTypeLink[] = {
-0x06, 0xda, // Data
- 0x07, 0x14, // Name
- 0x08, 0x05,
- 0x6c, 0x6f, 0x63, 0x61, 0x6c,
- 0x08, 0x03,
- 0x6e, 0x64, 0x6e,
- 0x08, 0x06,
- 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
- 0x14, 0x07, // MetaInfo
- 0x18, 0x01, // ContentType
- 0x02,
- 0x19, 0x02, // FreshnessPeriod
- 0x27, 0x10,
- 0x15, 0x1a, // Content
- 0x1f, 0x0c, // LinkDelegation
- 0x1e, 0x01, // LinkPreference
- 0x0a,
- 0x07, 0x07, // Name
- 0x08, 0x05,
- 0x6c, 0x6f, 0x63, 0x61, 0x6c,
- 0x1f, 0x0a, // LinkDelegation
- 0x1e, 0x01, // LinkPreference
- 0x14,
- 0x07, 0x05, // Name
- 0x08, 0x03,
- 0x6e, 0x64, 0x6e,
- 0x16, 0x1b, // SignatureInfo
- 0x1b, 0x01, // SignatureType
- 0x01,
- 0x1c, 0x16, // KeyLocator
- 0x07, 0x14, // Name
- 0x08, 0x04,
- 0x74, 0x65, 0x73, 0x74,
- 0x08, 0x03,
- 0x6b, 0x65, 0x79,
- 0x08, 0x07,
- 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
- 0x17, 0x80, // SignatureValue
- 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
- 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
- 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
- 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
- 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
- 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
- 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
- 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
- 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
- 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
-};
-
-const uint8_t MissingPreferenceLink[] = {
-0x06, 0xd7, // Data
- 0x07, 0x14, // Name
- 0x08, 0x05,
- 0x6c, 0x6f, 0x63, 0x61, 0x6c,
- 0x08, 0x03,
- 0x6e, 0x64, 0x6e,
- 0x08, 0x06,
- 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
- 0x14, 0x07, // MetaInfo
- 0x18, 0x01, // ContentType
- 0x01,
- 0x19, 0x02, // FreshnessPeriod
- 0x27, 0x10,
- 0x15, 0x17, // Content
- 0x1f, 0x09, // LinkDelegation
- 0x07, 0x07, // Name
- 0x08, 0x05,
- 0x6c, 0x6f, 0x63, 0x61, 0x6c,
- 0x1f, 0x0a, // LinkDelegation
- 0x1e, 0x01, // LinkPreference
- 0x14,
- 0x07, 0x05, // Name
- 0x08, 0x03,
- 0x6e, 0x64, 0x6e,
- 0x16, 0x1b, // SignatureInfo
- 0x1b, 0x01, // SignatureType
- 0x01,
- 0x1c, 0x16, // KeyLocator
- 0x07, 0x14, // Name
- 0x08, 0x04,
- 0x74, 0x65, 0x73, 0x74,
- 0x08, 0x03,
- 0x6b, 0x65, 0x79,
- 0x08, 0x07,
- 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
- 0x17, 0x80, // SignatureValue
- 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
- 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
- 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
- 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
- 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
- 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
- 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
- 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
- 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
- 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
-};
-
-const uint8_t MissingNameLink[] = {
-0x06, 0xd1, // Data
- 0x07, 0x14, // Name
- 0x08, 0x05,
- 0x6c, 0x6f, 0x63, 0x61, 0x6c,
- 0x08, 0x03,
- 0x6e, 0x64, 0x6e,
- 0x08, 0x06,
- 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
- 0x14, 0x07, // MetaInfo
- 0x18, 0x01, // ContentType
- 0x01,
- 0x19, 0x02, // FreshnessPeriod
- 0x27, 0x10,
- 0x15, 0x11, // Content
- 0x1f, 0x03, // LinkDelegation
- 0x1e, 0x01, // LinkPreference
- 0x0a,
- 0x1f, 0x0a, // LinkDelegation
- 0x1e, 0x01, // LinkPreference
- 0x14,
- 0x07, 0x05, // Name
- 0x08, 0x03,
- 0x6e, 0x64, 0x6e,
- 0x16, 0x1b, // SignatureInfo
- 0x1b, 0x01, // SignatureType
- 0x01,
- 0x1c, 0x16, // KeyLocator
- 0x07, 0x14, // Name
- 0x08, 0x04,
- 0x74, 0x65, 0x73, 0x74,
- 0x08, 0x03,
- 0x6b, 0x65, 0x79,
- 0x08, 0x07,
- 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
- 0x17, 0x80, // SignatureValue
- 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
- 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
- 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
- 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
- 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
- 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
- 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
- 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
- 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
- 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
-};
-
-BOOST_AUTO_TEST_CASE(PairParsingCheck)
-{
- Link link("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
- BOOST_CHECK_EQUAL(link.getDelegations().size(), static_cast<uint32_t>(3));
-}
-
-BOOST_AUTO_TEST_CASE(CheckInsertDelegation)
-{
- Link link("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
-
- link.addDelegation(30, Name("test4"));
- Link::DelegationSet delegations = link.getDelegations();
- int counter = 0;
- for (auto i = delegations.begin(); i != delegations.end(); i++) {
- counter++;
- if (counter == 1)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test1"));
- }
- if (counter == 2)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 20);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test2"));
- }
- if (counter == 3)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 30);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test4"));
- }
- if (counter == 4)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 100);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test3"));
- }
- }
-}
-
-BOOST_AUTO_TEST_CASE(CheckRemoveDelegation)
-{
- Link link("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
-
- link.removeDelegation(Name("test2"));
- Link::DelegationSet delegations = link.getDelegations();
- int counter = 0;
- for (auto i = delegations.begin(); i != delegations.end(); i++) {
- counter++;
- if (counter == 1)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test1"));
- }
- if (counter == 2)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 100);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test3"));
- }
- }
-}
-
-BOOST_FIXTURE_TEST_CASE(CheckEncodeDecode, IdentityManagementFixture)
-{
- Link link1("test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
- m_keyChain.sign(link1);
- Block wire = link1.wireEncode();
-
- Link link2;
- link2.wireDecode(wire);
- Name name = link2.getName();
- BOOST_CHECK_EQUAL(Name("test"), name);
-
- Link::DelegationSet delegations;
- delegations = link2.getDelegations();
- int counter = 0;
- for (auto i = delegations.begin(); i != delegations.end(); i++) {
- counter++;
- if (counter == 1)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test1"));
- }
- if (counter == 2)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 20);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test2"));
- }
- if (counter == 3)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 100);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test3"));
- }
- }
-
- Link link3(wire);
- name = link3.getName();
- BOOST_CHECK_EQUAL(Name("test"), name);
-
- delegations = link3.getDelegations();
- counter = 0;
- for (auto i = delegations.begin(); i != delegations.end(); i++) {
- counter++;
- if (counter == 1)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test1"));
- }
- if (counter == 2)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 20);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test2"));
- }
- if (counter == 3)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 100);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("test3"));
- }
- }
-}
+BOOST_AUTO_TEST_SUITE(EncodeDecode)
BOOST_AUTO_TEST_CASE(Decode)
{
- Block linkBlock(LinkTest, sizeof(LinkTest));
- Link link(linkBlock);
+ Link link(Block(GOOD_LINK, sizeof(GOOD_LINK)));
BOOST_CHECK_EQUAL(link.getName(), Name("/local/ndn/prefix"));
- Link::DelegationSet delegations = link.getDelegations();
- int counter = 0;
-
- for (auto i = delegations.begin(); i != delegations.end(); i++) {
- counter++;
- if (counter == 1)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 10);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("local"));
- }
- if (counter == 2)
- {
- BOOST_CHECK_EQUAL(std::get<0>(*i), 20);
- BOOST_CHECK_EQUAL(std::get<1>(*i), Name("ndn"));
- }
- }
+ BOOST_CHECK_EQUAL(link.getDelegationList(),
+ DelegationList({{10, Name("/local")}, {20, Name("/ndn")}}));
}
-BOOST_AUTO_TEST_CASE(CountDelegationFromWire)
+BOOST_AUTO_TEST_CASE(DecodeBadContentType)
{
- Block linkBlock(LinkTest, sizeof(LinkTest));
+ Data linkData(Block(GOOD_LINK, sizeof(GOOD_LINK)));
+ linkData.setContentType(tlv::ContentType_Key);
+ Block badLink = linkData.wireEncode();
+
+ BOOST_CHECK_THROW((Link(badLink)), Link::Error);
+ Link link;
+ BOOST_CHECK_THROW(link.wireDecode(badLink), Link::Error);
+}
+
+BOOST_AUTO_TEST_CASE(Encode)
+{
+ Link link1("/test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
+ signData(link1);
+ Block wire = link1.wireEncode();
+
+ Link link2(wire);
+ BOOST_CHECK_EQUAL(link2.getName(), "/test");
+ BOOST_CHECK_EQUAL(link2.getDelegationList(),
+ DelegationList({{10, "/test1"}, {20, "/test2"}, {100, "/test3"}}));
+}
+
+BOOST_AUTO_TEST_SUITE_END() // EncodeDecode
+
+BOOST_AUTO_TEST_SUITE(Modify)
+
+BOOST_AUTO_TEST_CASE(SetDelegationList)
+{
+ Link link("/test");
+ BOOST_CHECK_EQUAL(link.getDelegationList(), DelegationList());
+
+ link.setDelegationList(DelegationList({{10, "/test1"}, {20, "/test2"}}));
+ BOOST_CHECK_EQUAL(link.getDelegationList(), DelegationList({{10, "/test1"}, {20, "/test2"}}));
+}
+
+BOOST_AUTO_TEST_CASE(AddDelegation)
+{
+ Link link1("/test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
+ BOOST_CHECK_EQUAL(link1.getDelegationList(),
+ DelegationList({{10, "/test1"}, {20, "/test2"}, {100, "/test3"}}));
+
+ link1.addDelegation(30, "/test4");
+ BOOST_CHECK_EQUAL(link1.getDelegationList(),
+ DelegationList({{10, "/test1"}, {20, "/test2"}, {30, "/test4"}, {100, "/test3"}}));
+
+ link1.addDelegation(40, "/test2");
+ BOOST_CHECK_EQUAL(link1.getDelegationList(),
+ DelegationList({{10, "/test1"}, {30, "/test4"}, {40, "/test2"}, {100, "/test3"}}));
+
+ signData(link1);
+ Link link2(link1.wireEncode());
+ BOOST_CHECK_EQUAL(link2.getDelegationList(),
+ DelegationList({{10, "/test1"}, {30, "/test4"}, {40, "/test2"}, {100, "/test3"}}));
+}
+
+BOOST_AUTO_TEST_CASE(RemoveDelegation)
+{
+ Link link1("/test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
+ BOOST_CHECK_EQUAL(link1.getDelegationList(),
+ DelegationList({{10, "/test1"}, {20, "/test2"}, {100, "/test3"}}));
+
+ link1.removeDelegation("/test4"); // non-existent
+ BOOST_CHECK_EQUAL(link1.getDelegationList(),
+ DelegationList({{10, "/test1"}, {20, "/test2"}, {100, "/test3"}}));
+
+ link1.removeDelegation("/test2");
+ BOOST_CHECK_EQUAL(link1.getDelegationList(),
+ DelegationList({{10, "/test1"}, {100, "/test3"}}));
+
+ signData(link1);
+ Link link2(link1.wireEncode());
+ BOOST_CHECK_EQUAL(link2.getDelegationList(),
+ DelegationList({{10, "/test1"}, {100, "/test3"}}));
+
+ link1.removeDelegation("/test1");
+ link1.removeDelegation("/test3");
+ BOOST_CHECK_EQUAL(link1.getDelegationList(), DelegationList());
+}
+
+BOOST_AUTO_TEST_SUITE_END() // Modify
+
+BOOST_AUTO_TEST_SUITE(Deprecated)
+
+BOOST_AUTO_TEST_CASE(PairInitializerList)
+{
+ Link link("/test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
+ Link::DelegationSet ds = link.getDelegations();
+ BOOST_REQUIRE_EQUAL(ds.size(), 3);
+ BOOST_CHECK_EQUAL(ds.begin()->first, 10);
+ BOOST_CHECK_EQUAL(ds.begin()->second, "/test1");
+}
+
+BOOST_AUTO_TEST_CASE(DelegationSet)
+{
+ Link link("/test", {{10, "/test1"}, {20, "/test2"}, {100, "/test3"}});
+ Link::DelegationSet ds = link.getDelegations();
+ BOOST_REQUIRE_EQUAL(ds.size(), 3);
+ BOOST_CHECK_EQUAL(ds.begin()->first, 10);
+ BOOST_CHECK_EQUAL(ds.begin()->second, "/test1");
+}
+
+BOOST_AUTO_TEST_CASE(FromWire)
+{
+ Block linkBlock(GOOD_LINK, sizeof(GOOD_LINK));
+
BOOST_CHECK_EQUAL(Link::countDelegationsFromWire(linkBlock), 2);
+
+ auto del0 = Link::getDelegationFromWire(linkBlock, 0);
+ BOOST_CHECK_EQUAL(std::get<0>(del0), 10);
+ BOOST_CHECK_EQUAL(std::get<1>(del0), "/local");
+ auto del1 = Link::getDelegationFromWire(linkBlock, 1);
+ BOOST_CHECK_EQUAL(std::get<0>(del1), 20);
+ BOOST_CHECK_EQUAL(std::get<1>(del1), "/ndn");
+ BOOST_CHECK_THROW(Link::getDelegationFromWire(linkBlock, 2), std::out_of_range);
+
+ BOOST_CHECK_EQUAL(Link::findDelegationFromWire(linkBlock, "/local"), 0);
+ BOOST_CHECK_EQUAL(Link::findDelegationFromWire(linkBlock, "/none"), -1);
}
-BOOST_AUTO_TEST_CASE(IncorrectContentType)
-{
- Block linkBlock(IncorrectContentTypeLink, sizeof(IncorrectContentTypeLink));
- Link link;
- BOOST_REQUIRE_THROW(link.wireDecode(linkBlock), Link::Error);
-}
-
-BOOST_AUTO_TEST_CASE(MissingPreferenceEncoding)
-{
- Block linkBlock(MissingPreferenceLink, sizeof(MissingPreferenceLink));
- Link link;
- BOOST_REQUIRE_THROW(link.wireDecode(linkBlock), Link::Error);
-}
-
-BOOST_AUTO_TEST_CASE(MissingNameEncoding)
-{
- Block linkBlock(MissingNameLink, sizeof(MissingNameLink));
- Link link;
- BOOST_REQUIRE_THROW(link.wireDecode(linkBlock), Link::Error);
-}
+BOOST_AUTO_TEST_SUITE_END() // Deprecated
BOOST_AUTO_TEST_SUITE_END() // TestLink