DirectDiskAdaptorTest.cc 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "DirectDiskAdaptor.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "FileEntry.h"
  4. #include "DefaultDiskWriter.h"
  5. #include "Exception.h"
  6. #include "util.h"
  7. #include "TestUtil.h"
  8. #include "ByteArrayDiskWriter.h"
  9. #include "WrDiskCacheEntry.h"
  10. namespace aria2 {
  11. class DirectDiskAdaptorTest:public CppUnit::TestFixture {
  12. CPPUNIT_TEST_SUITE(DirectDiskAdaptorTest);
  13. CPPUNIT_TEST(testCutTrailingGarbage);
  14. CPPUNIT_TEST(testWriteCache);
  15. CPPUNIT_TEST_SUITE_END();
  16. public:
  17. void setUp() {}
  18. void tearDown() {}
  19. void testCutTrailingGarbage();
  20. void testWriteCache();
  21. };
  22. CPPUNIT_TEST_SUITE_REGISTRATION(DirectDiskAdaptorTest);
  23. void DirectDiskAdaptorTest::testCutTrailingGarbage()
  24. {
  25. std::string dir = A2_TEST_OUT_DIR;
  26. SharedHandle<FileEntry> entry
  27. (new FileEntry(dir+"/aria2_DirectDiskAdaptorTest_testCutTrailingGarbage",
  28. 256, 0));
  29. createFile(entry->getPath(), entry->getLength()+100);
  30. std::vector<SharedHandle<FileEntry> > fileEntries;
  31. fileEntries.push_back(entry);
  32. DirectDiskAdaptor adaptor;
  33. adaptor.setDiskWriter
  34. (SharedHandle<DiskWriter>(new DefaultDiskWriter(entry->getPath())));
  35. adaptor.setTotalLength(entry->getLength());
  36. adaptor.setFileEntries(fileEntries.begin(), fileEntries.end());
  37. adaptor.openFile();
  38. adaptor.cutTrailingGarbage();
  39. CPPUNIT_ASSERT_EQUAL((int64_t)entry->getLength(),
  40. File(entry->getPath()).size());
  41. }
  42. void DirectDiskAdaptorTest::testWriteCache()
  43. {
  44. SharedHandle<DirectDiskAdaptor> adaptor(new DirectDiskAdaptor());
  45. SharedHandle<ByteArrayDiskWriter> dw(new ByteArrayDiskWriter());
  46. adaptor->setDiskWriter(dw);
  47. WrDiskCacheEntry cache(adaptor);
  48. std::string data1(4096, '1'), data2(4094, '2');
  49. cache.cacheData(createDataCell(5, data1.c_str()));
  50. cache.cacheData(createDataCell(5+data1.size(), data2.c_str()));
  51. adaptor->writeCache(&cache);
  52. CPPUNIT_ASSERT_EQUAL(data1+data2, dw->getString().substr(5));
  53. cache.clear();
  54. dw->setString("");
  55. cache.cacheData(createDataCell(4096, data1.c_str()));
  56. adaptor->writeCache(&cache);
  57. CPPUNIT_ASSERT_EQUAL(data1, dw->getString().substr(4096));
  58. cache.clear();
  59. dw->setString("???????");
  60. cache.cacheData(createDataCell(0, "abc"));
  61. cache.cacheData(createDataCell(4, "efg"));
  62. adaptor->writeCache(&cache);
  63. CPPUNIT_ASSERT_EQUAL(std::string("abc?efg"), dw->getString());
  64. }
  65. } // namespace aria2