BOOST_FIXTURE_TEST_CASE(SegmentFetcherCongestionNack, Fixture) { SegmentFetcher::fetch(face, Interest("/hello/world", time::seconds(1000)), make_shared<ValidatorNull>(), bind(&Fixture::onComplete, this, _1), bind(&Fixture::onError, this, _1)); advanceClocks(time::milliseconds(1), 10); // receive nack for the original interest nackLastInterest(lp::NackReason::CONGESTION); // receive nack due to Congestion for the reexpressed interests for (uint32_t i = 1; i <= SegmentFetcher::MAX_INTEREST_REEXPRESS; ++i) { nackLastInterest(lp::NackReason::CONGESTION); } BOOST_CHECK_EQUAL(face.sentInterests.size(), (SegmentFetcher::MAX_INTEREST_REEXPRESS + 1)); BOOST_CHECK_EQUAL(lastError, static_cast<uint32_t>(SegmentFetcher::NACK_ERROR)); }
BOOST_FIXTURE_TEST_CASE(ZeroComponentName, Fixture) { SegmentFetcher::fetch(face, Interest("ndn:/"), make_shared<ValidatorNull>(), bind(&Fixture::onComplete, this, _1), bind(&Fixture::onError, this, _1)); advanceClocks(time::milliseconds(10)); nackLastInterest(lp::NackReason::DUPLICATE); face.receive(*makeDataSegment("/hello/world", 0, true)); BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 2); BOOST_CHECK_EQUAL(face.sentInterests[0].getName(), ndn::Name("ndn:/")); BOOST_CHECK_EQUAL(face.sentInterests[1].getName(), ndn::Name("ndn:/")); BOOST_REQUIRE_EQUAL(nData, 1); }
BOOST_FIXTURE_TEST_CASE(SegmentZero, Fixture) { int nNacks = 2; ndn::Name interestName("ndn:/A"); SegmentFetcher::fetch(face, Interest(interestName), make_shared<ValidatorNull>(), bind(&Fixture::onComplete, this, _1), bind(&Fixture::onError, this, _1)); advanceClocks(time::milliseconds(1000)); for (uint64_t segmentNo = 0; segmentNo <= 3; segmentNo++) { if (segmentNo == 1) { while (nNacks--) { nackLastInterest(lp::NackReason::CONGESTION); advanceClocks(time::milliseconds(10)); } } auto data = makeDataSegment(interestName, segmentNo, segmentNo == 3); face.receive(*data); advanceClocks(time::milliseconds(10)); } // Total number of sent interests should be 6: one interest for segment zero and segment one each, // two re-expressed interests for segment one after getting nack twice, and two interests for // segment two and three BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 6); BOOST_CHECK_EQUAL(face.sentInterests[0].getName(), ndn::Name("ndn:/A")); BOOST_CHECK_EQUAL(face.sentInterests[1].getName(), ndn::Name("ndn:/A/%00%01")); BOOST_CHECK_EQUAL(face.sentInterests[2].getName(), ndn::Name("ndn:/A/%00%01")); BOOST_CHECK_EQUAL(face.sentInterests[3].getName(), ndn::Name("ndn:/A/%00%01")); BOOST_CHECK_EQUAL(face.sentInterests[4].getName(), ndn::Name("ndn:/A/%00%02")); BOOST_CHECK_EQUAL(face.sentInterests[5].getName(), ndn::Name("ndn:/A/%00%03")); }