summaryrefslogtreecommitdiff
path: root/test/SegmentManTest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-06-30 17:03:57 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-06-30 17:03:57 +0000
commitcf19dce8553d8a05f5d307835ea3c429d9eb63f2 (patch)
tree7326cc88a21d711218179d722c667dfaeaae249b /test/SegmentManTest.cc
parentcece2bc896b941d0c9b9d441460b5d32989268bd (diff)
2009-07-01 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
HTTP pipelining is now working. Fixed Segmention fault in BitfieldMan's copy ctor. * src/AbstractCommand.cc * src/BitfieldMan.cc * src/BitfieldMan.h * src/DownloadCommand.cc * src/HttpDownloadCommand.cc * src/HttpRequest.cc * src/SegmentMan.cc * src/SegmentMan.h * test/BitfieldManTest.cc * test/SegmentManTest.cc
Diffstat (limited to 'test/SegmentManTest.cc')
-rw-r--r--test/SegmentManTest.cc45
1 files changed, 44 insertions, 1 deletions
diff --git a/test/SegmentManTest.cc b/test/SegmentManTest.cc
index 082c4842..aac84893 100644
--- a/test/SegmentManTest.cc
+++ b/test/SegmentManTest.cc
@@ -16,6 +16,7 @@ class SegmentManTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(SegmentManTest);
CPPUNIT_TEST(testNullBitfield);
CPPUNIT_TEST(testCompleteSegment);
+ CPPUNIT_TEST(testGetSegment_sameFileEntry);
CPPUNIT_TEST_SUITE_END();
private:
@@ -26,7 +27,7 @@ public:
void testNullBitfield();
void testCompleteSegment();
void testGetPeerStat();
- void testGetSegment_segmentForward();
+ void testGetSegment_sameFileEntry();
};
@@ -81,4 +82,46 @@ void SegmentManTest::testCompleteSegment()
CPPUNIT_ASSERT_EQUAL((size_t)2, segments[1]->getIndex());
}
+void SegmentManTest::testGetSegment_sameFileEntry()
+{
+ Option op;
+ SharedHandle<DownloadContext> dctx(new DownloadContext());
+ dctx->setPieceLength(2);
+ SharedHandle<FileEntry> fileEntries[] = {
+ SharedHandle<FileEntry>(new FileEntry("file1", 3, 0)),
+ SharedHandle<FileEntry>(new FileEntry("file2", 6, 3)),
+ SharedHandle<FileEntry>(new FileEntry("file3", 1, 9))
+ };
+ dctx->setFileEntries(&fileEntries[0], &fileEntries[3]);
+ SharedHandle<DefaultPieceStorage> ps(new DefaultPieceStorage(dctx, &op));
+ SegmentMan segman(&op, dctx, ps);
+
+ std::deque<SharedHandle<Segment> > segments;
+ segman.getSegment(segments, 1, fileEntries[1], 4);
+ // See 3 segments are returned, not 4 because the part of file1 is
+ // not filled in segment#1
+ CPPUNIT_ASSERT_EQUAL((size_t)3, segments.size());
+
+ SharedHandle<Segment> segmentNo1 = segman.getSegment(2, 1);
+ // Fill the part of file1 in segment#1
+ segmentNo1->updateWrittenLength(1);
+ segman.cancelSegment(2);
+
+ segman.cancelSegment(1);
+ segments.clear();
+ segman.getSegment(segments, 1, fileEntries[1], 4);
+ CPPUNIT_ASSERT_EQUAL((size_t)4, segments.size());
+
+ segman.cancelSegment(1);
+ SharedHandle<Segment> segmentNo4 = segman.getSegment(1, 4);
+ // Fill the part of file2 in segment#4
+ segmentNo4->updateWrittenLength(1);
+ segman.cancelSegment(1);
+
+ segments.clear();
+ segman.getSegment(segments, 1, fileEntries[1], 4);
+ // segment#4 is not returned because the part of file2 is filled.
+ CPPUNIT_ASSERT_EQUAL((size_t)3, segments.size());
+}
+
} // namespace aria2