diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-28 14:22:28 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-28 14:22:28 +0000 |
| commit | 5a2f398eca68b2b0330ddcec2b222bf76875f82f (patch) | |
| tree | eb916885f04126e7e48b56fe02de6b44f0493c17 /test | |
| parent | a022a1826bb573028f264bc6edbc564c0d488bbc (diff) | |
2007-11-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added direct I/O support. The current implementation uses O_DIRECT,
which is not posix standard and is tested on linux 2.6.21.
Currently only file allocation uses direct I/O.
* src/SingleFileAllocationIterator.{h, cc}
* test/SingleFileAllocationIteratorTest.cc
* src/MultiFileAllocationIterator.{h, cc}
* test/MultiFileAllocationIteratorTest.cc
* src/BinaryStream.h
* src/DiskWriter.h
* src/AbstractDiskWriter.{h, cc}
* src/ByteArrayDiskWriter.h
* src/DiskAdaptor.h
* src/AbstractSingleDiskAdaptor.{h, cc}
* src/MultiDiskAdaptor.{h, cc}
* src/FileAllocationEntry.cc
* src/Util.{h, cc}
* src/OptionHandlerFactory.cc
* src/prefs.h
* src/version_usage.cc
* src/option_processing.cc
Moved FileAllocationMan::markCurrentFileAllocationEntryDone() to
handleException.
* src/MultiFileAllocationIterator.cc
Added EINTR handling
* src/SocketCore.cc
Diffstat (limited to 'test')
| -rw-r--r-- | test/MultiFileAllocationIteratorTest.cc | 23 | ||||
| -rw-r--r-- | test/SingleFileAllocationIteratorTest.cc | 33 |
2 files changed, 22 insertions, 34 deletions
diff --git a/test/MultiFileAllocationIteratorTest.cc b/test/MultiFileAllocationIteratorTest.cc index 1ce89acb..9428d84f 100644 --- a/test/MultiFileAllocationIteratorTest.cc +++ b/test/MultiFileAllocationIteratorTest.cc @@ -7,7 +7,7 @@ class MultiFileAllocationIteratorTest:public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(MultiFileAllocationIteratorTest); CPPUNIT_TEST(testAllocate); - CPPUNIT_TEST(testMakeFileEntries); + CPPUNIT_TEST(testMakeDiskWriterEntries); CPPUNIT_TEST_SUITE_END(); private: @@ -15,13 +15,13 @@ public: void setUp() {} void testAllocate(); - void testMakeFileEntries(); + void testMakeDiskWriterEntries(); }; CPPUNIT_TEST_SUITE_REGISTRATION( MultiFileAllocationIteratorTest ); -void MultiFileAllocationIteratorTest::testMakeFileEntries() +void MultiFileAllocationIteratorTest::testMakeDiskWriterEntries() { FileEntryHandle fs[] = { new FileEntry("file1", 1536, 0), @@ -43,24 +43,27 @@ void MultiFileAllocationIteratorTest::testMakeFileEntries() fs[8]->setRequested(false); fs[9]->setRequested(false); + string storeDir = "/tmp/aria2_MultiFileAllocationIteratorTest_testMakeDiskWriterEntries"; MultiDiskAdaptorHandle diskAdaptor = new MultiDiskAdaptor(); diskAdaptor->setFileEntries(FileEntries(&fs[0], &fs[10])); diskAdaptor->setPieceLength(1024); + diskAdaptor->setStoreDir(storeDir); + diskAdaptor->openFile(); MultiFileAllocationIteratorHandle itr = diskAdaptor->fileAllocationIterator(); - FileEntries entries = itr->getFileEntries(); + DiskWriterEntries entries = itr->getDiskWriterEntries(); 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()); + CPPUNIT_ASSERT_EQUAL(storeDir+string("/file1"), entries[0]->getFilePath(storeDir)); + CPPUNIT_ASSERT_EQUAL(storeDir+string("/file2"), entries[1]->getFilePath(storeDir)); + CPPUNIT_ASSERT_EQUAL(storeDir+string("/file3"), entries[2]->getFilePath(storeDir)); + CPPUNIT_ASSERT_EQUAL(storeDir+string("/file6"), entries[3]->getFilePath(storeDir)); + CPPUNIT_ASSERT_EQUAL(storeDir+string("/file7"), entries[4]->getFilePath(storeDir)); + CPPUNIT_ASSERT_EQUAL(storeDir+string("/file8"), entries[5]->getFilePath(storeDir)); } void MultiFileAllocationIteratorTest::testAllocate() diff --git a/test/SingleFileAllocationIteratorTest.cc b/test/SingleFileAllocationIteratorTest.cc index 050d0a19..4cdb7d39 100644 --- a/test/SingleFileAllocationIteratorTest.cc +++ b/test/SingleFileAllocationIteratorTest.cc @@ -1,7 +1,6 @@ #include "SingleFileAllocationIterator.h" #include "File.h" #include "DefaultDiskWriter.h" -#include "DirectDiskAdaptor.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> @@ -31,38 +30,24 @@ void SingleFileAllocationIteratorTest::testAllocate() string fname = "aria2_SingleFileAllocationIteratorTest_testAllocate"; string fn = dir+"/"+fname; ofstream of(fn.c_str()); - of << "0123456789"; - of.close(); File x(fn); CPPUNIT_ASSERT_EQUAL((int64_t)10, x.size()); - - DefaultDiskWriterHandle writer = new DefaultDiskWriter(); - DirectDiskAdaptorHandle diskAdaptor = new DirectDiskAdaptor(); - diskAdaptor->setDiskWriter(writer); - diskAdaptor->setTotalLength(16*1024*2+8*1024); - diskAdaptor->setStoreDir(dir); - FileEntryHandle fileEntry = new FileEntry(fname, - diskAdaptor->getTotalLength(), - 0); - FileEntries fs; - fs.push_back(fileEntry); - diskAdaptor->setFileEntries(fs); + DefaultDiskWriter writer; + int64_t offset = 10; + int64_t totalLength = 16*1024*2+8*1024; // we have to open file first. - diskAdaptor->openFile(); - SingleFileAllocationIteratorHandle itr = diskAdaptor->fileAllocationIterator(); - - itr->allocateChunk(); - CPPUNIT_ASSERT(!itr->finished()); - itr->allocateChunk(); - CPPUNIT_ASSERT(!itr->finished()); - itr->allocateChunk(); - CPPUNIT_ASSERT(itr->finished()); + writer.openExistingFile(fn); + SingleFileAllocationIterator itr(&writer, offset, totalLength); + itr.init(); + while(!itr.finished()) { + itr.allocateChunk(); + } File f(fn); CPPUNIT_ASSERT_EQUAL((int64_t)40960, f.size()); } |
