management: add CachingPolicy to LocalControlHeader
Breaks: NFD:commit:9cfeecaa2ffad1a1be79aed2321dcc7d042ecc5f
Breaks: ndnSIM:commit:ffe2586cfc466935c0632a5a64384f0fda709086
Change-Id: Idcce2b7ee9be31b55f9ec16c17e915d93974bff4
Refs: #2183
diff --git a/tests/unit-tests/test-data.cpp b/tests/unit-tests/test-data.cpp
index 2493b89..2f8329b 100644
--- a/tests/unit-tests/test-data.cpp
+++ b/tests/unit-tests/test-data.cpp
@@ -120,6 +120,19 @@
0x0a, 0xb6
};
+const uint8_t DataWithLocalControlHeader[] = {
+ 0x50, 0x29, 0x53, 0x02, 0x60, 0x00,
+ 0x06, 0x23, 0x07, 0x03, 0x08, 0x01, 0x41, 0x14, 0x04, 0x19, 0x02, 0x27, 0x10, 0x15,
+ 0x09, 0x73, 0x6F, 0x6D, 0x65, 0x44, 0x61, 0x74, 0x61, 0x00, 0x16, 0x05, 0x1B, 0x01,
+ 0x01, 0x1C, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
+};
+
+const uint8_t DataWithoutLocalControlHeader[] = {
+ 0x06, 0x23, 0x07, 0x03, 0x08, 0x01, 0x41, 0x14, 0x04, 0x19, 0x02, 0x27, 0x10, 0x15,
+ 0x09, 0x73, 0x6F, 0x6D, 0x65, 0x44, 0x61, 0x74, 0x61, 0x00, 0x16, 0x05, 0x1B, 0x01,
+ 0x01, 0x1C, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
+};
+
BOOST_AUTO_TEST_CASE(DataEqualityChecks)
{
using namespace time;
@@ -200,6 +213,114 @@
BOOST_CHECK_EQUAL(a != b, false);
}
+BOOST_AUTO_TEST_CASE(EncodeWithLocalHeader)
+{
+ Data data("ndn:/A");
+ data.setFreshnessPeriod(time::seconds(10));
+ static const uint8_t someData[] = "someData";
+ data.setContent(someData, sizeof(someData));
+ data.setSignature(SignatureSha256WithRsa());
+ data.setCachingPolicy(nfd::LocalControlHeader::CachingPolicy::NO_CACHE);
+
+ BOOST_CHECK(!data.hasWire());
+
+ Block headerBlock =
+ data.getLocalControlHeader().wireEncode(data, nfd::LocalControlHeader::ENCODE_CACHING_POLICY);
+
+ BOOST_CHECK(data.hasWire());
+ BOOST_CHECK(headerBlock.hasWire());
+
+ BOOST_CHECK_NE(headerBlock.wire(), data.wireEncode().wire());
+ BOOST_CHECK_NE(headerBlock.size(), data.wireEncode().size());
+ BOOST_CHECK_EQUAL(headerBlock.size(), 6);
+
+ BOOST_CHECK_EQUAL_COLLECTIONS(DataWithLocalControlHeader,
+ DataWithLocalControlHeader + 6,
+ headerBlock.begin(), headerBlock.end());
+
+ data.setFreshnessPeriod(time::seconds(1000));
+
+ Block updatedHeaderBlock = data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_CACHING_POLICY);
+ BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 6);
+
+ // only length should have changed
+ BOOST_CHECK_EQUAL_COLLECTIONS(updatedHeaderBlock.begin() + 2, updatedHeaderBlock.end(),
+ headerBlock.begin() + 2, headerBlock.end());
+
+ // adding IncomingFaceId
+ data.setIncomingFaceId(10);
+ updatedHeaderBlock =
+ data.getLocalControlHeader().wireEncode(data, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID
+ | nfd::LocalControlHeader::ENCODE_CACHING_POLICY);
+ BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 9);
+
+ // masking CachingPolicy
+ updatedHeaderBlock = data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID);
+ BOOST_CHECK_EQUAL(updatedHeaderBlock.size(), 5);
+
+ // masking everything
+ BOOST_CHECK_THROW(data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_NONE),
+ nfd::LocalControlHeader::Error);
+}
+
+BOOST_AUTO_TEST_CASE(DecodeWithLocalHeader)
+{
+ Block wireBlock(DataWithLocalControlHeader, sizeof(DataWithLocalControlHeader));
+ const Block& payload = nfd::LocalControlHeader::getPayload(wireBlock);
+ BOOST_REQUIRE_NE(&payload, &wireBlock);
+
+ BOOST_CHECK_EQUAL(payload.type(), static_cast<uint32_t>(tlv::Data));
+ BOOST_CHECK_EQUAL(wireBlock.type(), static_cast<uint32_t>(tlv::nfd::LocalControlHeader));
+
+ Data data(payload);
+ BOOST_CHECK(!data.getLocalControlHeader().hasCachingPolicy());
+ BOOST_CHECK(!data.getLocalControlHeader().hasIncomingFaceId());
+
+ data.getLocalControlHeader().wireDecode(wireBlock);
+
+ BOOST_CHECK_EQUAL(data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_CACHING_POLICY).size(),
+ 6);
+
+ BOOST_CHECK(data.getLocalControlHeader().hasCachingPolicy());
+ BOOST_CHECK(!data.getLocalControlHeader().hasIncomingFaceId());
+
+ BOOST_CHECK_THROW(data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_NONE),
+ nfd::LocalControlHeader::Error);
+
+ BOOST_CHECK_THROW(data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID),
+ nfd::LocalControlHeader::Error);
+
+ BOOST_CHECK_NO_THROW(data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_CACHING_POLICY));
+ BOOST_CHECK_NO_THROW(
+ data.getLocalControlHeader().wireEncode(data, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
+ nfd::LocalControlHeader::ENCODE_CACHING_POLICY));
+
+ BOOST_CHECK_NE((void*)data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
+ nfd::LocalControlHeader::ENCODE_CACHING_POLICY)
+ .wire(),
+ (void*)wireBlock.wire());
+
+ BOOST_CHECK_EQUAL(data.getLocalControlHeader()
+ .wireEncode(data, nfd::LocalControlHeader::ENCODE_INCOMING_FACE_ID |
+ nfd::LocalControlHeader::ENCODE_CACHING_POLICY).size(),
+ 6);
+}
+
+BOOST_AUTO_TEST_CASE(DecodeWithoutLocalHeader)
+{
+ Block wireBlock(DataWithoutLocalControlHeader, sizeof(DataWithoutLocalControlHeader));
+ const Block& payload = nfd::LocalControlHeader::getPayload(wireBlock);
+ BOOST_CHECK_EQUAL(&payload, &wireBlock);
+}
+
class TestDataFixture
{
public: