#include "DirectDiskAdaptor.h" #include #include "FileEntry.h" #include "DefaultDiskWriter.h" #include "Exception.h" #include "util.h" #include "TestUtil.h" #include "ByteArrayDiskWriter.h" #include "WrDiskCacheEntry.h" namespace aria2 { class DirectDiskAdaptorTest:public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(DirectDiskAdaptorTest); CPPUNIT_TEST(testCutTrailingGarbage); CPPUNIT_TEST(testWriteCache); CPPUNIT_TEST_SUITE_END(); public: void setUp() {} void tearDown() {} void testCutTrailingGarbage(); void testWriteCache(); }; CPPUNIT_TEST_SUITE_REGISTRATION(DirectDiskAdaptorTest); void DirectDiskAdaptorTest::testCutTrailingGarbage() { std::string dir = A2_TEST_OUT_DIR; SharedHandle entry (new FileEntry(dir+"/aria2_DirectDiskAdaptorTest_testCutTrailingGarbage", 256, 0)); createFile(entry->getPath(), entry->getLength()+100); std::vector > fileEntries; fileEntries.push_back(entry); DirectDiskAdaptor adaptor; adaptor.setDiskWriter (SharedHandle(new DefaultDiskWriter(entry->getPath()))); adaptor.setTotalLength(entry->getLength()); adaptor.setFileEntries(fileEntries.begin(), fileEntries.end()); adaptor.openFile(); adaptor.cutTrailingGarbage(); CPPUNIT_ASSERT_EQUAL((int64_t)entry->getLength(), File(entry->getPath()).size()); } void DirectDiskAdaptorTest::testWriteCache() { SharedHandle adaptor(new DirectDiskAdaptor()); SharedHandle dw(new ByteArrayDiskWriter()); adaptor->setDiskWriter(dw); WrDiskCacheEntry cache(adaptor); std::string data1(4096, '1'), data2(4094, '2'); cache.cacheData(createDataCell(5, data1.c_str())); cache.cacheData(createDataCell(5+data1.size(), data2.c_str())); adaptor->writeCache(&cache); CPPUNIT_ASSERT_EQUAL(data1+data2, dw->getString().substr(5)); cache.clear(); dw->setString(""); cache.cacheData(createDataCell(4096, data1.c_str())); adaptor->writeCache(&cache); CPPUNIT_ASSERT_EQUAL(data1, dw->getString().substr(4096)); cache.clear(); dw->setString("???????"); cache.cacheData(createDataCell(0, "abc")); cache.cacheData(createDataCell(4, "efg")); adaptor->writeCache(&cache); CPPUNIT_ASSERT_EQUAL(std::string("abc?efg"), dw->getString()); } } // namespace aria2