diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-05-03 06:26:44 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-05-03 06:26:44 +0000 |
| commit | ee229c6f00a0a01b99e37d91c14060a29d41a3a6 (patch) | |
| tree | f1c7f4e174bf0fe9942e5427e953b9d3328aebc2 /test/IteratableChunkChecksumValidatorTest.cc | |
| parent | d0b485cba0c2f83a0db3a2e6300a95a3d75d75b7 (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.cc | 32 |
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 |
