summaryrefslogtreecommitdiff
path: root/test/IteratableChunkChecksumValidatorTest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-05-03 06:26:44 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-05-03 06:26:44 +0000
commitee229c6f00a0a01b99e37d91c14060a29d41a3a6 (patch)
treef1c7f4e174bf0fe9942e5427e953b9d3328aebc2 /test/IteratableChunkChecksumValidatorTest.cc
parentd0b485cba0c2f83a0db3a2e6300a95a3d75d75b7 (diff)
2009-05-03 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that with --check-integrity option aria2 reports downloaded file size is 0 even if some parts of file is correctly downloaded. This bug is reproducible for the download that a file includes last piece is missing. This bug doesn't reveal for single-torrent with file allocation on. * src/IteratableChecksumValidator.cc * test/IteratableChecksumValidatorTest.cc
Diffstat (limited to 'test/IteratableChunkChecksumValidatorTest.cc')
-rw-r--r--test/IteratableChunkChecksumValidatorTest.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/IteratableChunkChecksumValidatorTest.cc b/test/IteratableChunkChecksumValidatorTest.cc
index 4fd1f629..bc89a19f 100644
--- a/test/IteratableChunkChecksumValidatorTest.cc
+++ b/test/IteratableChunkChecksumValidatorTest.cc
@@ -15,6 +15,7 @@ class IteratableChunkChecksumValidatorTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(IteratableChunkChecksumValidatorTest);
CPPUNIT_TEST(testValidate);
+ CPPUNIT_TEST(testValidate_readError);
CPPUNIT_TEST_SUITE_END();
private:
@@ -24,6 +25,7 @@ public:
}
void testValidate();
+ void testValidate_readError();
};
@@ -70,4 +72,34 @@ void IteratableChunkChecksumValidatorTest::testValidate() {
CPPUNIT_ASSERT(ps->hasPiece(2));
}
+void IteratableChunkChecksumValidatorTest::testValidate_readError() {
+ Option option;
+ SharedHandle<SingleFileDownloadContext> dctx
+ (new SingleFileDownloadContext(100, 500, "chunkChecksumTestFile250.txt"));
+ std::deque<std::string> hashes(&csArray[0], &csArray[3]);
+ hashes.push_back("ffffffffffffffffffffffffffffffffffffffff");
+ hashes.push_back("ffffffffffffffffffffffffffffffffffffffff");
+ dctx->setPieceHashes(hashes);
+ dctx->setPieceHashAlgo("sha1");
+ SharedHandle<DefaultPieceStorage> ps(new DefaultPieceStorage(dctx, &option));
+ ps->initStorage();
+ ps->getDiskAdaptor()->openFile();
+
+ IteratableChunkChecksumValidator validator(dctx, ps);
+ validator.init();
+
+ while(!validator.finished()) {
+ validator.validateChunk();
+ }
+
+ CPPUNIT_ASSERT(ps->hasPiece(0));
+ CPPUNIT_ASSERT(ps->hasPiece(1));
+ CPPUNIT_ASSERT(!ps->hasPiece(2)); // #2 piece is not valid because
+ // #program expects its size is
+ // #100, but it reads only 50
+ // #bytes and raises error.
+ CPPUNIT_ASSERT(!ps->hasPiece(3));
+ CPPUNIT_ASSERT(!ps->hasPiece(4));
+}
+
} // namespace aria2