2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Fixed the bug that exception is thrown when 
MultiDiskAdaptor::size() is
	called if the number of file entries are greater than max open 
files.
	* src/AbstractSingleDiskAdaptor.cc
	* src/AbstractSingleDiskAdaptor.h
	* src/DiskAdaptor.h
	* src/MultiDiskAdaptor.cc
	* src/MultiDiskAdaptor.h
	* test/MultiDiskAdaptorTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2008-09-07 08:29:09 +00:00
parent 5fb94a3af0
commit 390538d0b5
7 changed files with 47 additions and 5 deletions

View File

@ -1,3 +1,14 @@
2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug that exception is thrown when MultiDiskAdaptor::size() is
called if the number of file entries are greater than max open files.
* src/AbstractSingleDiskAdaptor.cc
* src/AbstractSingleDiskAdaptor.h
* src/DiskAdaptor.h
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* test/MultiDiskAdaptorTest.cc
2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added a constuctor that receives struct timeval.

View File

@ -78,7 +78,7 @@ bool AbstractSingleDiskAdaptor::fileExists()
return File(getFilePath()).exists();
}
uint64_t AbstractSingleDiskAdaptor::size() const
uint64_t AbstractSingleDiskAdaptor::size()
{
return diskWriter->size();
}

View File

@ -66,7 +66,7 @@ public:
virtual bool fileExists();
virtual uint64_t size() const;
virtual uint64_t size();
virtual void truncate(uint64_t length);

View File

@ -68,7 +68,7 @@ public:
virtual std::string getFilePath() = 0;
virtual uint64_t size() const = 0;
virtual uint64_t size() = 0;
// optional behavior
virtual void truncate(uint64_t length) {}

View File

@ -411,11 +411,12 @@ bool MultiDiskAdaptor::fileExists()
}
// TODO call DiskWriter::openFile() before calling this function.
uint64_t MultiDiskAdaptor::size() const
uint64_t MultiDiskAdaptor::size()
{
uint64_t size = 0;
for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); ++itr) {
openIfNot(*itr, &DiskWriterEntry::openFile, _cachedTopDirPath);
size += (*itr)->size();
}
return size;

View File

@ -147,7 +147,7 @@ public:
return getTopDirPath();
}
virtual uint64_t size() const;
virtual uint64_t size();
virtual SharedHandle<FileAllocationIterator> fileAllocationIterator();

View File

@ -17,6 +17,7 @@ class MultiDiskAdaptorTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testWriteData);
CPPUNIT_TEST(testReadData);
CPPUNIT_TEST(testCutTrailingGarbage);
CPPUNIT_TEST(testSize);
CPPUNIT_TEST_SUITE_END();
private:
SharedHandle<MultiDiskAdaptor> adaptor;
@ -31,6 +32,7 @@ public:
void testWriteData();
void testReadData();
void testCutTrailingGarbage();
void testSize();
};
@ -167,4 +169,32 @@ void MultiDiskAdaptorTest::testCutTrailingGarbage()
File(topDirPath+"/"+entries[1]->getPath()).size());
}
void MultiDiskAdaptorTest::testSize()
{
std::string dir = "/tmp";
std::string topDir = ".";
std::string topDirPath = dir+"/"+topDir;
std::string prefix = "aria2_MultiDiskAdaptorTest_testSize_";
SharedHandle<FileEntry> entries[] = {
SharedHandle<FileEntry>(new FileEntry(prefix+"1", 1, 0)),
SharedHandle<FileEntry>(new FileEntry(prefix+"2", 1, 1))
};
for(size_t i = 0; i < arrayLength(entries); ++i) {
createFile(topDirPath+"/"+entries[i]->getPath(),
entries[i]->getLength());
}
std::deque<SharedHandle<FileEntry> > fileEntries
(&entries[0], &entries[arrayLength(entries)]);
MultiDiskAdaptor adaptor;
adaptor.setStoreDir(dir);
adaptor.setTopDir(topDir);
adaptor.setFileEntries(fileEntries);
adaptor.setMaxOpenFiles(1);
adaptor.openFile();
CPPUNIT_ASSERT_EQUAL((uint64_t)2, adaptor.size());
}
} // namespace aria2