示例#1
0
TEST_F(TestLink, InterestSelectedDelegation)
{
  Link link;
  link.setName(Name("test"));
  link.addDelegation(10,  Name("/test1"));
  link.addDelegation(20,  Name("/test2"));
  link.addDelegation(100, Name("/test3"));

  keyChain_->sign(link, certificateName_);

  Blob linkEncoding = link.wireEncode();

  Interest interestA;
  interestA.setLinkWireEncoding(linkEncoding);
  ASSERT_TRUE(interestA.getSelectedDelegationIndex() < 0);

  interestA.setSelectedDelegationIndex
    (link.getDelegations().find(Name("test2")));
  ASSERT_TRUE(interestA.getSelectedDelegationIndex() >= 0);
  Link* link2 = interestA.getLink();
  ASSERT_EQ
    (Name("test2"),
     link2->getDelegations().get(interestA.getSelectedDelegationIndex()).getName());

  interestA.setSelectedDelegationIndex(-1);
  ASSERT_TRUE(interestA.getSelectedDelegationIndex() < 0);
}
示例#2
0
    virtual uint64_t
    expressInterest
      (const Interest& interest, const OnData& onData,
       const OnTimeout& onTimeout, const OnNetworkNack& onNetworkNack,
       WireFormat& wireFormat = *WireFormat::getDefaultWireFormat())
    {
      if (interest.getLink()->getDelegations().size() != 3)
        throw runtime_error
          ("TestFace::expressInterest: The Interest link does not the expected number of delegates");

      if (interest.matchesName(contentData_->getName())) {
        *contentCount_ = 1;
        onData(ptr_lib::make_shared<Interest>(interest), contentData_);
      }
      else if (interest.matchesName(cKeyData_->getName())) {
        *cKeyCount_ = 1;
        onData(ptr_lib::make_shared<Interest>(interest), cKeyData_);
      }
      else if (interest.matchesName(dKeyData_->getName())) {
        *dKeyCount_ = 1;
        onData(ptr_lib::make_shared<Interest>(interest), dKeyData_);
      }
      else
        onTimeout(ptr_lib::make_shared<Interest>(interest));

      return 0;
    }
示例#3
0
TEST_F(TestLink, DecodeInterestWithLink)
{
  Interest interest;
  interest.wireDecode(Blob(InterestWithLink, sizeof(InterestWithLink)));
  Link* link = interest.getLink();

  ASSERT_TRUE(link) << "Interest link object not specified";
  ASSERT_EQ(Name("/local/ndn/prefix"), link->getName());

  const DelegationSet& delegations = link->getDelegations();
  for (size_t i = 0; i < delegations.size(); ++i) {
    if (i == 0) {
      ASSERT_EQ(10, delegations.get(i).getPreference());
      ASSERT_EQ(Name("local"), delegations.get(i).getName());
    }
    if (i == 1) {
      ASSERT_EQ(20, delegations.get(i).getPreference());
      ASSERT_EQ(Name("ndn"), delegations.get(i).getName());
    }
  }

  ASSERT_TRUE(interest.getSelectedDelegationIndex() >= 0) <<
    "Interest selected delegation not specified";
  ASSERT_EQ
    (Name("local"),
     delegations.get(interest.getSelectedDelegationIndex()).getName());
}
示例#4
0
TEST_F(TestLink, InterestLinkObject)
{
  Link link1;
  link1.setName(Name("test"));
  link1.addDelegation(10,  Name("/test1"));
  link1.addDelegation(20,  Name("/test2"));
  link1.addDelegation(100, Name("/test3"));

  keyChain_->sign(link1, certificateName_);

  Blob linkEncoding = link1.wireEncode();

  Interest interestA;
  interestA.setLinkWireEncoding(linkEncoding);
  Link* link2 = interestA.getLink();

  ASSERT_TRUE(link2);
  Name name = link2->getName();
  ASSERT_EQ(Name("test"), name);

  const DelegationSet& delegations = link2->getDelegations();
  for (size_t i = 0; i < delegations.size(); ++i) {
    if (i == 0) {
      ASSERT_EQ(10, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test1"), delegations.get(i).getName());
    }
    if (i == 1) {
      ASSERT_EQ(20, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test2"), delegations.get(i).getName());
    }
    if (i == 2) {
      ASSERT_EQ(100, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test3"), delegations.get(i).getName());
    }
  }

  interestA.setLinkWireEncoding(Blob(LINK, sizeof(LINK)));
  Link* link3 = interestA.getLink();
  ASSERT_EQ(2, link3->getDelegations().size());

  interestA.unsetLink();
  ASSERT_EQ(false, interestA.hasLink());
}
示例#5
0
TEST_F(TestLink, InterestLinkObjectWrongContentType)
{
  Interest interest;

  interest.wireDecode
    (Blob(InterestWithLinkWrongContentType, sizeof(InterestWithLinkWrongContentType)));

  ASSERT_THROW
    (interest.getLink(), runtime_error) <<
     "Expected error decoding a link with the wrong content type";
}
示例#6
0
TEST_F(TestLink, InterestLinkObjectNoMetaInfo)
{
  Interest interest;

  interest.wireDecode
    (Blob(InterestWithLinkNoMetaInfo, sizeof(InterestWithLinkNoMetaInfo)));

  ASSERT_THROW
    (interest.getLink(), runtime_error) <<
     "Expected error decoding a link with no meta info";
}
示例#7
0
TEST_F(TestLink, DecodeInterestWithLinkNonDecreasingOrder)
{
  Interest interest;

  interest.wireDecode(Blob
    (InterestWithLinkNonDecreasingOrder, sizeof(InterestWithLinkNonDecreasingOrder)));
  Link* link = interest.getLink();
  ASSERT_TRUE(interest.getSelectedDelegationIndex() >= 0);
  ASSERT_EQ
    (Name("ndn"),
     link->getDelegations().get(interest.getSelectedDelegationIndex()).getName());
}
示例#8
0
    virtual uint64_t
    expressInterest
      (const Interest& interest, const OnData& onData,
       const OnTimeout& onTimeout, const OnNetworkNack& onNetworkNack,
       WireFormat& wireFormat = *WireFormat::getDefaultWireFormat())
    {
      if (expectedInterest_ != interest.getName())
        throw runtime_error("TestFace::expressInterest: Not the expectedInterest_");
      if (interest.getLink()->getDelegations().size() != 3)
        throw runtime_error
          ("TestFace::expressInterest: The Interest link does not the expected number of delegates");
      ++(*timeoutCount_);
      onTimeout(ptr_lib::make_shared<Interest>(interest));

      return 0;
    }
示例#9
0
TEST_F(TestLink, EncodeDecodeInterestWithLink)
{
  Link link1;
  link1.setName(Name("test"));
  link1.addDelegation(10,  Name("/test1"));
  link1.addDelegation(20,  Name("/test2"));
  link1.addDelegation(100, Name("/test3"));

  keyChain_->sign(link1, certificateName_);

  Interest interestA;
  interestA.setName(Name("/Test/Encode/Decode/With/Link"));
  interestA.setChildSelector(1);
  interestA.setInterestLifetimeMilliseconds(10000);
  interestA.setLinkWireEncoding(link1.wireEncode());

  Blob interestEncoding = interestA.wireEncode();
  Interest interestB;
  interestB.wireDecode(interestEncoding);

  ASSERT_EQ(interestA.getName(), interestB.getName());

  Link* link2 = interestB.getLink();
  ASSERT_TRUE(link2) << "Interest link object not specified";
  const DelegationSet& delegations = link2->getDelegations();
  for (size_t i = 0; i < delegations.size(); ++i) {
    if (i == 0) {
      ASSERT_EQ(10, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test1"), delegations.get(i).getName());
    }
    if (i == 1) {
      ASSERT_EQ(20, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test2"), delegations.get(i).getName());
    }
    if (i == 2) {
      ASSERT_EQ(100, delegations.get(i).getPreference());
      ASSERT_EQ(Name("/test3"), delegations.get(i).getName());
    }
  }
}