BOOST_FIXTURE_TEST_CASE(TripleWithInitialSegmentFetching, Fixture) { ValidatorNull nullValidator; SegmentFetcher::fetch(face, Interest("/hello/world", time::seconds(1000)), nullValidator, bind(&Fixture::onComplete, this, _1), bind(&Fixture::onError, this, _1)); advanceClocks(time::milliseconds(1), 10); face.receive(*makeDataSegment("/hello/world/version0", 1, false)); advanceClocks(time::milliseconds(1), 10); face.receive(*makeDataSegment("/hello/world/version0", 0, false)); advanceClocks(time::milliseconds(1), 10); face.receive(*makeDataSegment("/hello/world/version0", 1, false)); advanceClocks(time::milliseconds(1), 10); face.receive(*makeDataSegment("/hello/world/version0", 2, true)); advanceClocks(time::milliseconds(1), 10); BOOST_CHECK_EQUAL(nErrors, 0); BOOST_CHECK_EQUAL(nDatas, 1); BOOST_CHECK_EQUAL(dataSize, 42); BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 4); BOOST_CHECK_EQUAL(face.sentData.size(), 0); { const Interest& interest = face.sentInterests[0]; BOOST_CHECK_EQUAL(interest.getName(), "/hello/world"); BOOST_CHECK_EQUAL(interest.getMustBeFresh(), true); BOOST_CHECK_EQUAL(interest.getChildSelector(), 1); } { const Interest& interest = face.sentInterests[1]; BOOST_CHECK_EQUAL(interest.getName(), "/hello/world/version0/%00%00"); BOOST_CHECK_EQUAL(interest.getMustBeFresh(), false); BOOST_CHECK_EQUAL(interest.getChildSelector(), 0); } { const Interest& interest = face.sentInterests[2]; BOOST_CHECK_EQUAL(interest.getName(), "/hello/world/version0/%00%01"); BOOST_CHECK_EQUAL(interest.getMustBeFresh(), false); BOOST_CHECK_EQUAL(interest.getChildSelector(), 0); } { const Interest& interest = face.sentInterests[3]; BOOST_CHECK_EQUAL(interest.getName(), "/hello/world/version0/%00%02"); BOOST_CHECK_EQUAL(interest.getMustBeFresh(), false); BOOST_CHECK_EQUAL(interest.getChildSelector(), 0); } }
BOOST_FIXTURE_TEST_CASE(MultipleSegmentFetching, Fixture) { ValidatorNull nullValidator; SegmentFetcher::fetch(face, Interest("/hello/world", time::seconds(1000)), nullValidator, bind(&Fixture::onComplete, this, _1), bind(&Fixture::onError, this, _1)); advanceClocks(time::milliseconds(1), 10); for (uint64_t i = 0; i < 400; i++) { advanceClocks(time::milliseconds(1), 10); face.receive(*makeDataSegment("/hello/world/version0", i, false)); } advanceClocks(time::milliseconds(1), 10); face.receive(*makeDataSegment("/hello/world/version0", 400, true)); advanceClocks(time::milliseconds(1), 10); BOOST_CHECK_EQUAL(nErrors, 0); BOOST_CHECK_EQUAL(nDatas, 1); }
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(SegmentValidationFailure, Fixture) { ValidatorFailed failedValidator; SegmentFetcher::fetch(face, Interest("/hello/world", time::seconds(1000)), failedValidator, bind(&Fixture::onComplete, this, _1), bind(&Fixture::onError, this, _1)); advanceClocks(time::milliseconds(1), 10); face.receive(*makeDataSegment("/hello/world/version0", 0, true)); advanceClocks(time::milliseconds(1), 10); BOOST_CHECK_EQUAL(nErrors, 1); BOOST_CHECK_EQUAL(lastError, static_cast<uint32_t>(SegmentFetcher::SEGMENT_VALIDATION_FAIL)); BOOST_CHECK_EQUAL(nDatas, 0); }
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")); }