From 58bb1fa266d7d96c88b05a2c4727bdcde812e639 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Mon, 7 Dec 2009 12:49:19 +0000 Subject: [PATCH] 2009-12-07 Tatsuhiro Tsujikawa Specified defaultSize as an argument for easy testing. * src/util.cc * src/util.h * test/UtilTest.cc --- ChangeLog | 7 +++++++ src/util.cc | 8 ++++---- src/util.h | 4 +++- test/UtilTest.cc | 17 ++++++++++++++++- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index fe274e2d..48d3622f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-12-07 Tatsuhiro Tsujikawa + + Specified defaultSize as an argument for easy testing. + * src/util.cc + * src/util.h + * test/UtilTest.cc + 2009-12-06 Tatsuhiro Tsujikawa Release 1.7.1 diff --git a/src/util.cc b/src/util.cc index 1fd5c847..03361a7f 100644 --- a/src/util.cc +++ b/src/util.cc @@ -575,23 +575,23 @@ static void computeTailPieces void parsePrioritizePieceRange (std::vector& result, const std::string& src, const std::vector >& fileEntries, - size_t pieceLength) + size_t pieceLength, + uint64_t defaultSize) { - const uint64_t DEFAULT_SIZE = 1024*1024; std::vector indexes; std::vector parts; split(src, std::back_inserter(parts), ",", true); for(std::vector::const_iterator i = parts.begin(); i != parts.end(); ++i) { if((*i) == "head") { - computeHeadPieces(indexes, fileEntries, pieceLength, DEFAULT_SIZE); + computeHeadPieces(indexes, fileEntries, pieceLength, defaultSize); } else if(util::startsWith(*i, "head=")) { std::string sizestr = std::string((*i).begin()+(*i).find("=")+1, (*i).end()); computeHeadPieces(indexes, fileEntries, pieceLength, std::max((int64_t)0, getRealSize(sizestr))); } else if((*i) == "tail") { - computeTailPieces(indexes, fileEntries, pieceLength, DEFAULT_SIZE); + computeTailPieces(indexes, fileEntries, pieceLength, defaultSize); } else if(util::startsWith(*i, "tail=")) { std::string sizestr = std::string((*i).begin()+(*i).find("=")+1, (*i).end()); diff --git a/src/util.h b/src/util.h index 3f3c60f6..a7095a54 100644 --- a/src/util.h +++ b/src/util.h @@ -203,12 +203,14 @@ IntSequence parseIntRange(const std::string& src); // parameter, SIZE. For example, if "head=SIZE" is specified, pieces // in the range of first SIZE bytes of each file get higher // priority. SIZE can include K or M(1K = 1024, 1M = 1024K). +// If SIZE is omitted, SIZE=defaultSize is used. // // sample: head=512K,tail=512K void parsePrioritizePieceRange (std::vector& result, const std::string& src, const std::vector >& fileEntries, - size_t pieceLength); + size_t pieceLength, + uint64_t defaultSize = 1048576 /* 1MiB */); // this function temporarily put here std::string getContentDispositionFilename(const std::string& header); diff --git a/test/UtilTest.cc b/test/UtilTest.cc index 4653eb8f..f189f0f1 100644 --- a/test/UtilTest.cc +++ b/test/UtilTest.cc @@ -861,6 +861,13 @@ void UtilTest::testParsePrioritizePieceRange() CPPUNIT_ASSERT_EQUAL((size_t)3, result[2]); CPPUNIT_ASSERT_EQUAL((size_t)4, result[3]); result.clear(); + util::parsePrioritizePieceRange(result, "head", entries, pieceLength, 1024); + CPPUNIT_ASSERT_EQUAL((size_t)4, result.size()); + CPPUNIT_ASSERT_EQUAL((size_t)0, result[0]); + CPPUNIT_ASSERT_EQUAL((size_t)1, result[1]); + CPPUNIT_ASSERT_EQUAL((size_t)3, result[2]); + CPPUNIT_ASSERT_EQUAL((size_t)4, result[3]); + result.clear(); util::parsePrioritizePieceRange(result, "tail=1K", entries, pieceLength); CPPUNIT_ASSERT_EQUAL((size_t)4, result.size()); CPPUNIT_ASSERT_EQUAL((size_t)0, result[0]); @@ -868,6 +875,13 @@ void UtilTest::testParsePrioritizePieceRange() CPPUNIT_ASSERT_EQUAL((size_t)3, result[2]); CPPUNIT_ASSERT_EQUAL((size_t)6, result[3]); result.clear(); + util::parsePrioritizePieceRange(result, "tail", entries, pieceLength, 1024); + CPPUNIT_ASSERT_EQUAL((size_t)4, result.size()); + CPPUNIT_ASSERT_EQUAL((size_t)0, result[0]); + CPPUNIT_ASSERT_EQUAL((size_t)2, result[1]); + CPPUNIT_ASSERT_EQUAL((size_t)3, result[2]); + CPPUNIT_ASSERT_EQUAL((size_t)6, result[3]); + result.clear(); util::parsePrioritizePieceRange(result, "head=1,tail=1", entries, pieceLength); CPPUNIT_ASSERT_EQUAL((size_t)4, result.size()); CPPUNIT_ASSERT_EQUAL((size_t)0, result[0]); @@ -875,7 +889,8 @@ void UtilTest::testParsePrioritizePieceRange() CPPUNIT_ASSERT_EQUAL((size_t)3, result[2]); CPPUNIT_ASSERT_EQUAL((size_t)6, result[3]); result.clear(); - util::parsePrioritizePieceRange(result, "head,tail", entries, pieceLength); + util::parsePrioritizePieceRange(result, "head=300M,tail=300M", + entries, pieceLength); CPPUNIT_ASSERT_EQUAL((size_t)7, result.size()); for(size_t i = 0; i < 7; ++i) { CPPUNIT_ASSERT_EQUAL(i, result[i]);