瀏覽代碼

2009-12-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Specified defaultSize as an argument for easy testing.
	* src/util.cc
	* src/util.h
	* test/UtilTest.cc
Tatsuhiro Tsujikawa 16 年之前
父節點
當前提交
58bb1fa266
共有 4 個文件被更改,包括 30 次插入6 次删除
  1. 7 0
      ChangeLog
  2. 4 4
      src/util.cc
  3. 3 1
      src/util.h
  4. 16 1
      test/UtilTest.cc

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+2009-12-07  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Specified defaultSize as an argument for easy testing.
+	* src/util.cc
+	* src/util.h
+	* test/UtilTest.cc
+
 2009-12-06  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Release 1.7.1

+ 4 - 4
src/util.cc

@@ -575,23 +575,23 @@ static void computeTailPieces
 void parsePrioritizePieceRange
 (std::vector<size_t>& result, const std::string& src,
  const std::vector<SharedHandle<FileEntry> >& fileEntries,
- size_t pieceLength)
+ size_t pieceLength,
+ uint64_t defaultSize)
 {
-  const uint64_t DEFAULT_SIZE = 1024*1024;
   std::vector<size_t> indexes;
   std::vector<std::string> parts;
   split(src, std::back_inserter(parts), ",", true);
   for(std::vector<std::string>::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());

+ 3 - 1
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<size_t>& result, const std::string& src,
  const std::vector<SharedHandle<FileEntry> >& fileEntries,
- size_t pieceLength);
+ size_t pieceLength,
+ uint64_t defaultSize = 1048576 /* 1MiB */);
 
 // this function temporarily put here
 std::string getContentDispositionFilename(const std::string& header);

+ 16 - 1
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]);