summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-01-24 15:55:34 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-01-24 15:55:34 +0000
commitea6d9493c865e217e2bc5c3f886cc9a4547867da (patch)
treee9c735896456c50da47ceb67f0faf5a3a9f5a456 /test
parenta1df7a762e67e24699611f11aa836b7bbe15faab (diff)
2007-01-23 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add chunk checksum validation: * src/MetalinkEntry.h (MetalinkChunkChecksum.h): New include. (chunkChecksum): New variable. * src/Request.h (method): New variable. (setMethod): New function. (getMethod): New function. (METHOD_GET): New static constant. (METHOD_HEAD): New static constant. * src/Xml2MetalinkProcessor.h (getPieceHash): New function. * src/PieceStorage.h (markAllPiecesDone): New function. (checkIntegrity): New function. * src/FileAllocator.h (NullFileAllocationMonitor.h): New include. (FileAllocator): Initialize fileAllocationMonitor with new NullFileAllocationMonitor(). * src/MultiDiskAdaptor.h (messageDigest.h): Remove include. (ctx): Removed. (hashUpdate): Added ctx. (MultiDiskAdaptor): Removed ctx. (sha1Sum): Renamed as messageDigest. (messageDigest): New function. * src/UrlRequestInfo.h (HeadResult): New class. (digestAlgo): New variable. (chunkChecksumLength): New variable. (chunkChecksums): New variable. (getHeadResult): New function. (UrlRequestInfo): Added digestAlgo, chunkChecksumLength. (setDigestAlgo): New function. (setChunkChecksumLength): New function. (setChunkChecksums): New function. * src/DefaultPieceStorage.cc (DiskAdaptorWriter.h): New include. (ChunkChecksumValidator.h): New include. (markAllPiecesDone): New function. (checkIntegrity): New function. * src/DefaultBtContext.h (getPieceHashes): New function. * src/TorrentRequestInfo.cc (execute): Try to validate chunk checksum if file already exists and .aria2 file doesn't there and user allows aria2 to overwrite it. * src/messageDigest.h (~MessageDigestContext): Added digestFree(). * src/MetalinkRequestInfo.cc (execute): Set digestAlgo, chunkChecksum, chunkChecksums to reqInfo. * src/DiskAdaptor.h (messageDigest.h): New include. (sha1Sum): Renamed as messageDigest. (messageDigest): New function. * src/DownloadCommand.h (PeerStat.h): New include. (maxDownloadSpeedLimit): New variable. (startupIdleTime): New variable. (lowestDownloadSpeedLimit): New variable. (peerStat): New variable. (setMaxDownloadSpeedLimit): New function. (setStartupIdleTime): New function. (setLowestDownloadSPeedLimit): New function. * src/BtContext.h (getPieceHashes): New function. * src/main.cc (main): Set PREF_REALTIME_CHUNK_CHECKSUM and PREF_CHECK_INTEGRITY option to true for testing purpose. * src/BtPieceMessage.cc (checkPieceHash): Use messageDigest * src/DownloadEngine.cc (SetDescriptor): Removed. (AccumulateActiveCommand): Removed. (waitData): Rewritten. (updateFdSet): Rewritten. * src/MultiDiskAdaptor.cc (hashUpdate): Added ctx. (sha1Sum): Renamed as messageDigest. (messageDigest): New function. * src/BitfieldMan.h (isBitRangeSet): New function. (unsetBitRange): New function. * src/ByteArrayDiskWriter.h (sha1Sum): Renamed as messageDigest. (messageDigest): New function. * src/ConsoleDownloadEngine.cc (calculateStatistics): If nspeed < 0 then set nspeed to 0. * src/DiskWriter.h (messageDigest.h): New include. (sha1Sum): Renamed as messageDigest. (messageDigest): New function. * src/ChunkChecksumValidator.h: New class. * src/DiskAdaptorWriter.h: New class. * src/prefs.h (PREF_REALTIME_CHUNK_CHECKSUM): New definition. (PREF_CHECK_INTEGRITY): New definition. * src/HttpResponseCommand.cc (handleDefaultEncoding): Added method "HEAD" handling. Removed the call to e->segmentMan->shouldCancelDownloadForSafety(). (handleOtherEncoding): Added the call to e->segmentMan->shouldCancelDownloadForSafety(). (createHttpDownloadCommand): Set maxDownloadSpeedLimit, startupIdleTime, lowestDownloadSpeedLimit to command. * src/SegmentMan.h (getSegmentEntryByIndex): New function. (getSegmentEntryByCuid): New function. (getSegmentEntryIteratorByCuid): New function. (diskWriter): DiskWriter -> DiskWriterHandle (pieceHashes): New variable. (chunkHashLength): New variable. (digestAlgo): New variable. (FindPeerStat): Removed. (getPeerStat): Rewritten. (markAllPiecesDone): New function. (checkIntegrity): New function. (tryChunkChecksumValidation): New function. (isChunkChecksumValidationReady): New function. * src/BitfieldMan.cc (BitfieldMan): Initialized bitfieldLength, blocks to 0. (BitfieldMan): Initialized blockLength, totalLength, bitfieldLength, blocks to 0. (isBitRangeSet): New function. (unsetBitRange): New function. * src/FtpNegotiateCommand.cc (executeInternal): Set maxDownloadSpeedLimit, startupIdleTime, lowestDownloadSpeedLimit to command. (recvSize): Added method "HEAD" handling. Removed the call to e->segmentMan->shouldCancelDownloadForSafety(). * src/AbstractSingleDiskAdaptor.cc (sha1Sum): Renamed as messageDigest. (messageDigest): New function. * src/AbstractSingleDiskAdaptor.h (sha1Sum): Renamed as messageDigest. (messageDigest): New function. * src/Util.h (indexRange): New function. * src/MetalinkEntry.cc (MetalinkEntry): Initialized chunkChecksum to 0. * src/ShaVisitor.cc (~ShaVisitor): Removed the call to ctx.digestFree(). * src/SegmentMan.cc (ChunkChecksumValidator.h): New include. (SegmentMan): Initialized chunkHashLength to 0. Initialized digestAlgo to DIGEST_ALGO_SHA1. (~SegmentMan): Removed diskWriter. (FindSegmentEntryByIndex): Removed. (FindSegmentEntryByCuid): Removed. (checkoutSegment): Rewritten. (findSlowerSegmentEntry): Rewritten. (getSegment): Rewritten. (updateSegment): Rewritten. (completeSegment): Rewritten. (markAllPiecesDone): New function. (checkIntegrity): New function. (isChunkChecksumValidationReady): New function. (tryChunkChecksumValidation): New function. * src/Xml2MetalinkProcessor.cc (getEntry): Get size and set it to entry. Get chunk checksum and set it to entry. (getPieceHash): New function. * src/Util.cc (sha1Sum): Removed ctx.digestFree() (fileChecksum): Removed ctx.digestFree() (indexRange): New function. * src/Request.cc (METHOD_GET): New variable. (METHOD_HEAD): New variable. (Request): Added method. * src/UrlRequestInfo.cc (FatalException.h): New include. (message.h): New include. (operator<<): Added operator<< for class HeadResult. (getHeadResult): New function. (execute): Get filename and size in separate download engine. * src/ChunkChecksumValidator.cc: New class. * src/DownloadCommand.cc: (DownloadCommand): Added peerStat. (executeInternal): Use maxDownloadSpeedLimit member instead of getting the value from Option. The buffer size is now 16KB. Use peerStat member instead of getting it from SegmentMan. Use startupIdleTime member instead of gettingit from Option. Added chunk checksum validation. * src/AbstractDiskWriter.cc (AbstractDiskWriter): Removed ctx. (~AbstractDiskWriter): Removed ctx.digestFree() (writeDataInternal): Returns the return value of write. (readDataInternal): Returns the return value of read. (sha1Sum): Renamed as messageDigest (messageDigest): New function. * src/AbstractDiwkWriter.h (messageDigest.h): Removed include. (ctx): Removed. (sha1Sum): Renamed as messageDigest (messageDigest): New function. * src/DefaultPieceStorage.h (markAllPiecesDone): New function. (checkIntegrity): New function. * src/NullFileAllocationMonitor.h: New class.
Diffstat (limited to 'test')
-rw-r--r--test/ChunkChecksumValidatorTest.cc135
-rw-r--r--test/ConsoleFileAllocationMonitorTest.cc1
-rw-r--r--test/DefaultDiskWriterTest.cc10
-rw-r--r--test/Makefile.am3
-rw-r--r--test/Makefile.in7
-rw-r--r--test/MockBtContext.h4
-rw-r--r--test/MockPieceStorage.h4
-rw-r--r--test/MultiDiskAdaptorTest.cc12
-rw-r--r--test/MultiDiskWriterTest.cc12
-rw-r--r--test/Xml2MetalinkProcessorTest.cc14
-rw-r--r--test/chunkChecksumTestFile250.txt1
-rw-r--r--test/test.xml5
12 files changed, 187 insertions, 21 deletions
diff --git a/test/ChunkChecksumValidatorTest.cc b/test/ChunkChecksumValidatorTest.cc
new file mode 100644
index 00000000..88aa6279
--- /dev/null
+++ b/test/ChunkChecksumValidatorTest.cc
@@ -0,0 +1,135 @@
+#include "ChunkChecksumValidator.h"
+#include "DefaultDiskWriter.h"
+#include <cppunit/extensions/HelperMacros.h>
+
+using namespace std;
+
+class ChunkChecksumValidatorTest:public CppUnit::TestFixture {
+
+ CPPUNIT_TEST_SUITE(ChunkChecksumValidatorTest);
+ CPPUNIT_TEST(testValidate);
+ CPPUNIT_TEST(testValidate2);
+ CPPUNIT_TEST(testValidate3);
+ CPPUNIT_TEST(testValidate4);
+ CPPUNIT_TEST_SUITE_END();
+private:
+
+ static const char* csArray[];// = { "29b0e7878271645fffb7eec7db4a7473a1c00bc1",
+ // "4df75a661cb7eb2733d9cdaa7f772eae3a4e2976",
+ // "0a4ea2f7dd7c52ddf2099a444ab2184b4d341bdb" };
+public:
+ void setUp() {
+ }
+
+ void testValidate();
+ void testValidate2();
+ void testValidate3();
+ void testValidate4();
+};
+
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ChunkChecksumValidatorTest );
+
+const char* ChunkChecksumValidatorTest::csArray[] = { "29b0e7878271645fffb7eec7db4a7473a1c00bc1",
+ "4df75a661cb7eb2733d9cdaa7f772eae3a4e2976",
+ "0a4ea2f7dd7c52ddf2099a444ab2184b4d341bdb" };
+
+void ChunkChecksumValidatorTest::testValidate() {
+ BitfieldMan bitfieldMan(100, 250);
+ bitfieldMan.setAllBit();
+ Strings checksums(&csArray[0], &csArray[3]);
+
+ DefaultDiskWriterHandle diskWriter = new DefaultDiskWriter();
+ diskWriter->openExistingFile("chunkChecksumTestFile250.txt");
+
+ ChunkChecksumValidator validator;
+ validator.setDiskWriter(diskWriter);
+
+ validator.validate(&bitfieldMan, checksums, 100);
+
+ CPPUNIT_ASSERT(bitfieldMan.isAllBitSet());
+
+ checksums[1] = "ffffffffffffffffffffffffffffffffffffffff";
+
+ validator.validate(&bitfieldMan, checksums, 100);
+
+ CPPUNIT_ASSERT(bitfieldMan.isBitSet(0));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(1));
+ CPPUNIT_ASSERT(bitfieldMan.isBitSet(2));
+}
+
+void ChunkChecksumValidatorTest::testValidate2() {
+ BitfieldMan bitfieldMan(50, 250);
+ bitfieldMan.setAllBit();
+ Strings checksums(&csArray[0], &csArray[3]);
+
+ DefaultDiskWriterHandle diskWriter = new DefaultDiskWriter();
+ diskWriter->openExistingFile("chunkChecksumTestFile250.txt");
+
+ ChunkChecksumValidator validator;
+ validator.setDiskWriter(diskWriter);
+
+ validator.validate(&bitfieldMan, checksums, 100);
+
+ CPPUNIT_ASSERT(bitfieldMan.isAllBitSet());
+
+ checksums[1] = "ffffffffffffffffffffffffffffffffffffffff";
+ validator.validate(&bitfieldMan, checksums, 100);
+
+ CPPUNIT_ASSERT(bitfieldMan.isBitSet(0));
+ CPPUNIT_ASSERT(bitfieldMan.isBitSet(1));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(2));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(3));
+ CPPUNIT_ASSERT(bitfieldMan.isBitSet(4));
+}
+
+void ChunkChecksumValidatorTest::testValidate3() {
+ BitfieldMan bitfieldMan(50, 250);
+ bitfieldMan.setAllBit();
+ Strings checksums;
+ checksums.push_back("898a81b8e0181280ae2ee1b81e269196d91e869a");
+
+ DefaultDiskWriterHandle diskWriter = new DefaultDiskWriter();
+ diskWriter->openExistingFile("chunkChecksumTestFile250.txt");
+
+ ChunkChecksumValidator validator;
+ validator.setDiskWriter(diskWriter);
+
+ validator.validate(&bitfieldMan, checksums, 250);
+
+ CPPUNIT_ASSERT(bitfieldMan.isAllBitSet());
+
+ checksums[0] = "ffffffffffffffffffffffffffffffffffffffff";
+
+ validator.validate(&bitfieldMan, checksums, 250);
+
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(0));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(1));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(2));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(3));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(4));
+}
+
+void ChunkChecksumValidatorTest::testValidate4() {
+ BitfieldMan bitfieldMan(70, 250);
+ bitfieldMan.setAllBit();
+ Strings checksums(&csArray[0], &csArray[3]);
+
+ DefaultDiskWriterHandle diskWriter = new DefaultDiskWriter();
+ diskWriter->openExistingFile("chunkChecksumTestFile250.txt");
+
+ ChunkChecksumValidator validator;
+ validator.setDiskWriter(diskWriter);
+
+ validator.validate(&bitfieldMan, checksums, 100);
+
+ CPPUNIT_ASSERT(bitfieldMan.isAllBitSet());
+
+ checksums[1] = "ffffffffffffffffffffffffffffffffffffffff";
+ validator.validate(&bitfieldMan, checksums, 100);
+
+ CPPUNIT_ASSERT(bitfieldMan.isBitSet(0));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(1));
+ CPPUNIT_ASSERT(!bitfieldMan.isBitSet(2));
+ CPPUNIT_ASSERT(bitfieldMan.isBitSet(3));
+}
diff --git a/test/ConsoleFileAllocationMonitorTest.cc b/test/ConsoleFileAllocationMonitorTest.cc
index cef4e6b9..caaa87bc 100644
--- a/test/ConsoleFileAllocationMonitorTest.cc
+++ b/test/ConsoleFileAllocationMonitorTest.cc
@@ -31,7 +31,6 @@ void ConsoleFileAllocationMonitorTest::testShowProgress() {
for(uint64_t i = monitor.getMinValue(); i <= monitor.getMaxValue(); i += 1234343) {
monitor.setCurrentValue(i);
monitor.showProgress();
- usleep(5);
}
monitor.setCurrentValue(monitor.getMaxValue());
monitor.showProgress();
diff --git a/test/DefaultDiskWriterTest.cc b/test/DefaultDiskWriterTest.cc
index dc939918..c0588793 100644
--- a/test/DefaultDiskWriterTest.cc
+++ b/test/DefaultDiskWriterTest.cc
@@ -7,7 +7,7 @@ using namespace std;
class DefaultDiskWriterTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(DefaultDiskWriterTest);
- CPPUNIT_TEST(testSha1Sum);
+ CPPUNIT_TEST(testMessageDigest);
CPPUNIT_TEST_SUITE_END();
private:
@@ -15,21 +15,21 @@ public:
void setUp() {
}
- void testSha1Sum();
+ void testMessageDigest();
};
CPPUNIT_TEST_SUITE_REGISTRATION( DefaultDiskWriterTest );
-void DefaultDiskWriterTest::testSha1Sum() {
+void DefaultDiskWriterTest::testMessageDigest() {
DefaultDiskWriter dw;
dw.openExistingFile("4096chunk.txt");
CPPUNIT_ASSERT_EQUAL(string("608cabc0f2fa18c260cafd974516865c772363d5"),
- dw.sha1Sum(0, 4096));
+ dw.messageDigest(0, 4096, DIGEST_ALGO_SHA1));
CPPUNIT_ASSERT_EQUAL(string("7a4a9ae537ebbbb826b1060e704490ad0f365ead"),
- dw.sha1Sum(5, 100));
+ dw.messageDigest(5, 100, DIGEST_ALGO_SHA1));
dw.closeFile();
}
diff --git a/test/Makefile.am b/test/Makefile.am
index 22570cda..cadd4fba 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -58,7 +58,8 @@ aria2c_SOURCES = AllTest.cc\
FixedNumberRandomizer.h\
MockBtMessageFactory.h\
MockBtMessage.h\
- ConsoleFileAllocationMonitorTest.cc
+ ConsoleFileAllocationMonitorTest.cc\
+ ChunkChecksumValidatorTest.cc
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
diff --git a/test/Makefile.in b/test/Makefile.in
index 649dee7e..d5feb1da 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -89,7 +89,8 @@ am_aria2c_OBJECTS = AllTest.$(OBJEXT) RequestTest.$(OBJEXT) \
BtSuggestPieceMessageTest.$(OBJEXT) \
BtUnchokeMessageTest.$(OBJEXT) \
BtHandshakeMessageTest.$(OBJEXT) \
- ConsoleFileAllocationMonitorTest.$(OBJEXT)
+ ConsoleFileAllocationMonitorTest.$(OBJEXT) \
+ ChunkChecksumValidatorTest.$(OBJEXT)
aria2c_OBJECTS = $(am_aria2c_OBJECTS)
am__DEPENDENCIES_1 =
aria2c_DEPENDENCIES = ../src/libaria2c.a $(am__DEPENDENCIES_1)
@@ -311,7 +312,8 @@ aria2c_SOURCES = AllTest.cc\
FixedNumberRandomizer.h\
MockBtMessageFactory.h\
MockBtMessage.h\
- ConsoleFileAllocationMonitorTest.cc
+ ConsoleFileAllocationMonitorTest.cc\
+ ChunkChecksumValidatorTest.cc
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
@@ -396,6 +398,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtRequestMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtSuggestPieceMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtUnchokeMessageTest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChunkChecksumValidatorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChunkedEncodingTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConsoleFileAllocationMonitorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieBoxTest.Po@am__quote@
diff --git a/test/MockBtContext.h b/test/MockBtContext.h
index fdc0f880..eaadabf6 100644
--- a/test/MockBtContext.h
+++ b/test/MockBtContext.h
@@ -43,6 +43,10 @@ public:
return pieceHashes.at(index);
}
+ virtual const Strings& getPieceHashes() const {
+ return pieceHashes;
+ }
+
void addPieceHash(const string pieceHash) {
pieceHashes.push_back(pieceHash);
}
diff --git a/test/MockPieceStorage.h b/test/MockPieceStorage.h
index 76929d3a..5c818bac 100644
--- a/test/MockPieceStorage.h
+++ b/test/MockPieceStorage.h
@@ -146,6 +146,10 @@ public:
}
virtual void removeAdvertisedPiece(int elapsed) {}
+
+ virtual void markAllPiecesDone() {}
+
+ virtual void checkIntegrity() {}
};
typedef SharedHandle<MockPieceStorage> MockPieceStorageHandle;
diff --git a/test/MultiDiskAdaptorTest.cc b/test/MultiDiskAdaptorTest.cc
index 5f9437f7..f672c421 100644
--- a/test/MultiDiskAdaptorTest.cc
+++ b/test/MultiDiskAdaptorTest.cc
@@ -9,7 +9,7 @@ class MultiDiskAdaptorTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(MultiDiskAdaptorTest);
CPPUNIT_TEST(testWriteData);
CPPUNIT_TEST(testReadData);
- CPPUNIT_TEST(testSha1Sum);
+ CPPUNIT_TEST(testMessageDigest);
CPPUNIT_TEST_SUITE_END();
private:
Option* option;
@@ -30,7 +30,7 @@ public:
void testWriteData();
void testReadData();
- void testSha1Sum();
+ void testMessageDigest();
};
@@ -134,7 +134,7 @@ void MultiDiskAdaptorTest::testReadData() {
CPPUNIT_ASSERT_EQUAL(string("1234567890ABCDEFGHIJKLMNO"), string((char*)buf));
}
-void MultiDiskAdaptorTest::testSha1Sum() {
+void MultiDiskAdaptorTest::testMessageDigest() {
FileEntryHandle entry1(new FileEntry("file1r.txt", 15, 0));
FileEntryHandle entry2(new FileEntry("file2r.txt", 7, 15));
FileEntryHandle entry3(new FileEntry("file3r.txt", 3, 22));
@@ -146,11 +146,11 @@ void MultiDiskAdaptorTest::testSha1Sum() {
adaptor->setFileEntries(entries);
adaptor->openFile();
- string sha1sum = adaptor->sha1Sum(0, 25);
+ string sha1sum = adaptor->messageDigest(0, 25, DIGEST_ALGO_SHA1);
CPPUNIT_ASSERT_EQUAL(string("76495faf71ca63df66dce99547d2c58da7266d9e"), sha1sum);
- sha1sum = adaptor->sha1Sum(15, 7);
+ sha1sum = adaptor->messageDigest(15, 7, DIGEST_ALGO_SHA1);
CPPUNIT_ASSERT_EQUAL(string("737660d816fb23c2d5bc74f62d9b01b852b2aaca"), sha1sum);
- sha1sum = adaptor->sha1Sum(10, 14);
+ sha1sum = adaptor->messageDigest(10, 14, DIGEST_ALGO_SHA1);
CPPUNIT_ASSERT_EQUAL(string("6238bf61dd8df8f77156b2378e9e39cd3939680c"), sha1sum);
adaptor->closeFile();
}
diff --git a/test/MultiDiskWriterTest.cc b/test/MultiDiskWriterTest.cc
index 80e9972c..3415be2e 100644
--- a/test/MultiDiskWriterTest.cc
+++ b/test/MultiDiskWriterTest.cc
@@ -9,7 +9,7 @@ class MultiDiskWriterTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(MultiDiskWriterTest);
CPPUNIT_TEST(testWriteData);
CPPUNIT_TEST(testReadData);
- CPPUNIT_TEST(testSha1Sum);
+ CPPUNIT_TEST(testMessageDigest);
CPPUNIT_TEST_SUITE_END();
private:
@@ -19,7 +19,7 @@ public:
void testWriteData();
void testReadData();
- void testSha1Sum();
+ void testMessageDigest();
};
@@ -120,7 +120,7 @@ void MultiDiskWriterTest::testReadData() {
CPPUNIT_ASSERT_EQUAL(string("1234567890ABCDEFGHIJKLMNO"), string(buf));
}
-void MultiDiskWriterTest::testSha1Sum() {
+void MultiDiskWriterTest::testMessageDigest() {
FileEntryHandle entry1(new FileEntry("file1r.txt", 15, 0));
FileEntryHandle entry2(new FileEntry("file2r.txt", 7, 15));
FileEntryHandle entry3(new FileEntry("file3r.txt", 3, 22));
@@ -132,11 +132,11 @@ void MultiDiskWriterTest::testSha1Sum() {
dw.setFileEntries(entries);
dw.openFile(".");
- string sha1sum = dw.sha1Sum(0, 25);
+ string sha1sum = dw.messageDigest(0, 25, DIGEST_ALGO_SHA1);
CPPUNIT_ASSERT_EQUAL(string("76495faf71ca63df66dce99547d2c58da7266d9e"), sha1sum);
- sha1sum = dw.sha1Sum(15, 7);
+ sha1sum = dw.messageDigest(15, 7, DIGEST_ALGO_SHA1);
CPPUNIT_ASSERT_EQUAL(string("737660d816fb23c2d5bc74f62d9b01b852b2aaca"), sha1sum);
- sha1sum = dw.sha1Sum(10, 14);
+ sha1sum = dw.messageDigest(10, 14, DIGEST_ALGO_SHA1);
CPPUNIT_ASSERT_EQUAL(string("6238bf61dd8df8f77156b2378e9e39cd3939680c"), sha1sum);
dw.closeFile();
}
diff --git a/test/Xml2MetalinkProcessorTest.cc b/test/Xml2MetalinkProcessorTest.cc
index 31831ba9..c4b60c64 100644
--- a/test/Xml2MetalinkProcessorTest.cc
+++ b/test/Xml2MetalinkProcessorTest.cc
@@ -1,4 +1,5 @@
#include "Xml2MetalinkProcessor.h"
+#include "Exception.h"
#include <cppunit/extensions/HelperMacros.h>
using namespace std;
@@ -26,6 +27,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION( Xml2MetalinkProcessorTest );
void Xml2MetalinkProcessorTest::testParseFile() {
Xml2MetalinkProcessor proc;
+ try {
MetalinkerHandle metalinker = proc.parseFile("test.xml");
MetalinkEntries::iterator entryItr = metalinker->entries.begin();
@@ -55,10 +57,22 @@ void Xml2MetalinkProcessorTest::testParseFile() {
entryItr++;
MetalinkEntryHandle entry2 = *entryItr;
+ CPPUNIT_ASSERT_EQUAL((uint64_t)345689, entry2->size);
CPPUNIT_ASSERT_EQUAL(string("0.5.1"), entry2->version);
CPPUNIT_ASSERT_EQUAL(string("ja-JP"), entry2->language);
CPPUNIT_ASSERT_EQUAL(string("Linux-m68k"), entry2->os);
CPPUNIT_ASSERT_EQUAL(string("4c255b0ed130f5ea880f0aa061c3da0487e251cc"),
entry2->checksum.getMessageDigest());
+ CPPUNIT_ASSERT_EQUAL((size_t)2, entry2->chunkChecksum->pieceHashes.size());
+ CPPUNIT_ASSERT_EQUAL((uint32_t)266144, entry2->chunkChecksum->pieceLength);
+ CPPUNIT_ASSERT_EQUAL(string("179463a88d79cbf0b1923991708aead914f26142"),
+ entry2->chunkChecksum->pieceHashes.at(0));
+ CPPUNIT_ASSERT_EQUAL(string("fecf8bc9a1647505fe16746f94e97a477597dbf3"),
+ entry2->chunkChecksum->pieceHashes.at(1));
+
CPPUNIT_ASSERT(DIGEST_ALGO_SHA1 == entry2->checksum.getDigestAlgo());
+ } catch(Exception* e) {
+ cerr << e->getMsg() << endl;
+ delete e;
+ }
}
diff --git a/test/chunkChecksumTestFile250.txt b/test/chunkChecksumTestFile250.txt
new file mode 100644
index 00000000..3ed5fc61
--- /dev/null
+++ b/test/chunkChecksumTestFile250.txt
@@ -0,0 +1 @@
+0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij \ No newline at end of file
diff --git a/test/test.xml b/test/test.xml
index e0473e16..58cb04d3 100644
--- a/test/test.xml
+++ b/test/test.xml
@@ -20,12 +20,17 @@
</resources>
</file>
<file name="aria2-0.5.1.tar.bz2">
+ <size>345689</size>
<version>0.5.1</version>
<language>ja-JP</language>
<os>Linux-m68k</os>
<verification>
<hash type="md5">92296e19c406d77d21bda0bb944eac46</hash>
<hash type="sha1">4c255b0ed130f5ea880f0aa061c3da0487e251cc</hash>
+ <pieces length="262144" type="sha1">
+ <hash pieces="0">179463a88d79cbf0b1923991708aead914f26142</hash>
+ <hash pieces="1">fecf8bc9a1647505fe16746f94e97a477597dbf3</hash>
+ </pieces>
</verification>
<resources>
<url type="ftp" preference="100">ftp://ftphost/aria2-0.5.1.tar.bz2</url>