2007-11-20 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Preallocate non-requested file which is adjacent forward to 
requested
	file('requested' files means the files given in --select-file 
option)
	if they share a same piece.
	This fixes long pause in the file system which doesn't support 
sparse
	files like FAT32 while downloading.
	* src/MultiFileAllocationIterator.{h, cc}
	* test/MultiFileAllocationIteratorTest.cc
	* src/FileEntry.{h, cc}

	Removed unused _option.
	* src/MultiDiskAdaptor.h
	* test/MultiDiskAdaptorTest.cc
	* src/DefaultPieceStorage.cc

	Set the default value of --seed-ratio to 1.0.
	If 0.0 is given, then seeding continues regardless of share 
ratio.
	* src/version_usage.cc
	* src/option_processing.cc
	* src/BtSetup.cc
	* doc/aria2c.1.txt
	* doc/aria2c.1

	Fixed: Selective download is not working in BitTorrent
	* src/RequestGroup.cc

	Introduced Sequence class. Use this instead of 
Util::unfoldRange()
	* src/PieceStorage.h
	* test/MockPieceStorage.h
	* src/UnknownLengthPieceStorage.h
	* src/DefaultPieceStorage.{h, cc}
	* src/Metalink2RequestGroup.cc
	* src/RequestGroup.cc
	* src/Sequence.h
	* test/SequenceTest.cc
	* src/IntSequence.h
	* src/message.h
	* src/Util.{h, cc}
	* test/UtilTest.cc

	Added new function 'parse' to catch exception thrown by 
subclass's
	parseArg
	* src/OptionHandler.h
	* src/OptionParser.cc
	* src/NameMatchOptionHandler.h
	* src/OptionHandlerImpl.h
	* test/OptionHandlerTest.cc

	Added IntegerRangeOptionHandler. Used for --listen-port and
	--select-file. Now --listen-port accepts range of port.
	* src/OptionHandlerFactory.cc
	* src/version_usage.cc
	* src/OptionHandlerImpl.h
	* src/option_processing.cc
	* src/BtSetup.cc
	* src/PeerListenCommand.{h, cc}
	* doc/aria2c.1.txt
	* doc/aria2c.1
	
	Implemented operator< for Exception class to provide easy way to 
print
	exception stack trace.
	* src/Exception.{h, cc}
	* src/main.cc
	* src/option_processing.cc
This commit is contained in:
Tatsuhiro Tsujikawa
2007-11-21 16:14:40 +00:00
parent 59fb4066fb
commit c9e3d51054
46 changed files with 873 additions and 211 deletions

View File

@@ -7,6 +7,7 @@ class MultiFileAllocationIteratorTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(MultiFileAllocationIteratorTest);
CPPUNIT_TEST(testAllocate);
CPPUNIT_TEST(testMakeFileEntries);
CPPUNIT_TEST_SUITE_END();
private:
@@ -14,11 +15,54 @@ public:
void setUp() {}
void testAllocate();
void testMakeFileEntries();
};
CPPUNIT_TEST_SUITE_REGISTRATION( MultiFileAllocationIteratorTest );
void MultiFileAllocationIteratorTest::testMakeFileEntries()
{
FileEntryHandle fs[] = {
new FileEntry("file1", 1536, 0),
new FileEntry("file2", 2048, 1536),
new FileEntry("file3", 1024, 3584),
new FileEntry("file4", 1024, 4608),
new FileEntry("file5", 1024, 5632),
new FileEntry("file6", 1024, 6656),
new FileEntry("file7", 256, 7680),
new FileEntry("file8", 768, 7936),
new FileEntry("file9", 256, 8704),
new FileEntry("fileA", 256, 8960),
};
fs[1]->setRequested(false);
fs[3]->setRequested(false);
fs[4]->setRequested(false);
fs[5]->setRequested(false);
fs[6]->setRequested(false);
fs[8]->setRequested(false);
fs[9]->setRequested(false);
MultiDiskAdaptorHandle diskAdaptor = new MultiDiskAdaptor();
diskAdaptor->setFileEntries(FileEntries(&fs[0], &fs[10]));
diskAdaptor->setPieceLength(1024);
MultiFileAllocationIteratorHandle itr = diskAdaptor->fileAllocationIterator();
FileEntries entries = itr->getFileEntries();
sort(entries.begin(), entries.end());
CPPUNIT_ASSERT_EQUAL((size_t)6, entries.size());
CPPUNIT_ASSERT_EQUAL(string("file1"), entries[0]->getPath());
CPPUNIT_ASSERT_EQUAL(string("file2"), entries[1]->getPath());
CPPUNIT_ASSERT_EQUAL(string("file3"), entries[2]->getPath());
CPPUNIT_ASSERT_EQUAL(string("file6"), entries[3]->getPath());
CPPUNIT_ASSERT_EQUAL(string("file7"), entries[4]->getPath());
CPPUNIT_ASSERT_EQUAL(string("file8"), entries[5]->getPath());
}
void MultiFileAllocationIteratorTest::testAllocate()
{
string dir = "/tmp";