diff --git a/tests/unit-tests/delegation-list.t.cpp b/tests/unit-tests/delegation-list.t.cpp
index 5961af5..b98c67a 100644
--- a/tests/unit-tests/delegation-list.t.cpp
+++ b/tests/unit-tests/delegation-list.t.cpp
@@ -181,8 +181,7 @@
 
 BOOST_AUTO_TEST_CASE(InsertReplace)
 {
-  DelegationList dl;
-  dl.insert(2, "/A");
+  DelegationList dl({{2, "/A"}});
   dl.insert(Delegation{1, "/A"}, DelegationList::INS_REPLACE);
   BOOST_CHECK_EQUAL(dl.size(), 1);
   BOOST_CHECK_EQUAL(dl.at(0).preference, 1);
@@ -195,8 +194,7 @@
 
 BOOST_AUTO_TEST_CASE(InsertAppend)
 {
-  DelegationList dl;
-  dl.insert(2, "/A");
+  DelegationList dl({{2, "/A"}});
   dl.insert(Delegation{1, "/A"}, DelegationList::INS_APPEND);
   BOOST_CHECK_EQUAL(dl.size(), 2);
   BOOST_CHECK_EQUAL(dl.at(0).preference, 1);
@@ -209,8 +207,7 @@
 
 BOOST_AUTO_TEST_CASE(InsertSkip)
 {
-  DelegationList dl;
-  dl.insert(2, "/A");
+  DelegationList dl({{2, "/A"}});
   dl.insert(Delegation{1, "/A"}, DelegationList::INS_SKIP);
   BOOST_CHECK_EQUAL(dl.size(), 1);
   BOOST_CHECK_EQUAL(dl.at(0).preference, 2);
diff --git a/tests/unit-tests/interest.t.cpp b/tests/unit-tests/interest.t.cpp
index 3e31438..295af50 100644
--- a/tests/unit-tests/interest.t.cpp
+++ b/tests/unit-tests/interest.t.cpp
@@ -221,7 +221,7 @@
 };
 
 const uint8_t InterestWithLinkMissingContentType[] = {
-  0x05,  0xf8, // Interest
+  0x05,  0xf5, // Interest
       0x07,  0x14, // Name
           0x08,  0x5, // NameComponent
               0x6c,  0x6f,  0x63,  0x61,  0x6c,
@@ -276,13 +276,11 @@
                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,
-      0x20, 0x01, // SelectedDelegation
-          0x00
+               0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
 };
 
 const uint8_t InterestWithLinkNoMetaInfo[] = {
-  0x05,  0xf2, // Interest
+  0x05,  0xef, // Interest
       0x07,  0x14, // Name
           0x08,  0x5, // NameComponent
               0x6c,  0x6f,  0x63,  0x61,  0x6c,
@@ -334,13 +332,11 @@
                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,
-      0x20, 0x01, // SelectedDelegation
-          0x00
+               0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
 };
 
 const uint8_t InterestWithLinkWrongContentType[] = {
-  0x05,  0xfb, // Interest
+  0x05,  0xf8, // Interest
       0x07,  0x14, // Name
           0x08,  0x5, // NameComponent
               0x6c,  0x6f,  0x63,  0x61,  0x6c,
@@ -397,9 +393,7 @@
                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,
-      0x20, 0x01, // SelectedDelegation
-          0x00
+               0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
 };
 
 const uint8_t InterestWithSelectedDelegationButNoLink[] = {
@@ -932,9 +926,7 @@
   Block interestBlock(InterestWithLinkMissingContentType,
                       sizeof(InterestWithLinkMissingContentType));
 
-  ndn::Interest i;
-  BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
-  BOOST_REQUIRE_THROW(i.getLink(), Link::Error);
+  BOOST_CHECK_THROW(Interest(interestBlock).getLink(), tlv::Error);
 }
 
 BOOST_AUTO_TEST_CASE(LinkObjectNoMetaInfo)
@@ -942,10 +934,7 @@
   Block interestBlock(InterestWithLinkNoMetaInfo,
                       sizeof(InterestWithLinkNoMetaInfo));
 
-  ndn::Interest i;
-  BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
-  BOOST_CHECK_THROW(i.getLink(), tlv::Error);
-  BOOST_CHECK_THROW(i.getLink(), tlv::Error);
+  BOOST_CHECK_THROW(Interest(interestBlock).getLink(), tlv::Error);
 }
 
 BOOST_AUTO_TEST_CASE(LinkObjectWrongContentType)
@@ -953,9 +942,7 @@
   Block interestBlock(InterestWithLinkWrongContentType,
                       sizeof(InterestWithLinkWrongContentType));
 
-  ndn::Interest i;
-  BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
-  BOOST_CHECK_THROW(i.getLink(), Link::Error);
+  BOOST_CHECK_THROW(Interest(interestBlock).getLink(), tlv::Error);
 }
 
 BOOST_AUTO_TEST_CASE(InterestContainingSelectedDelegationButNoLink)
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
 
