12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #include "DirectDiskAdaptor.h"
- #include <cppunit/extensions/HelperMacros.h>
- #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;
- auto entry = std::make_shared<FileEntry>(
- dir + "/aria2_DirectDiskAdaptorTest_testCutTrailingGarbage", 256, 0);
- createFile(entry->getPath(), entry->getLength() + 100);
- auto fileEntries = std::vector<std::shared_ptr<FileEntry>>{entry};
- DirectDiskAdaptor adaptor;
- adaptor.setDiskWriter(make_unique<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()
- {
- auto adaptor = std::make_shared<DirectDiskAdaptor>();
- ByteArrayDiskWriter* dw;
- {
- auto sdw = make_unique<ByteArrayDiskWriter>();
- dw = sdw.get();
- adaptor->setDiskWriter(std::move(sdw));
- }
- WrDiskCacheEntry cache{adaptor};
- std::string data1(4_k, '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(4_k, data1.c_str()));
- adaptor->writeCache(&cache);
- CPPUNIT_ASSERT_EQUAL(data1, dw->getString().substr(4_k));
- 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
|