WrDiskCacheEntryTest.cc 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "WrDiskCacheEntry.h"
  2. #include <cstring>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. #include "TestUtil.h"
  5. #include "DirectDiskAdaptor.h"
  6. #include "ByteArrayDiskWriter.h"
  7. namespace aria2 {
  8. class WrDiskCacheEntryTest:public CppUnit::TestFixture {
  9. CPPUNIT_TEST_SUITE(WrDiskCacheEntryTest);
  10. CPPUNIT_TEST(testWriteToDisk);
  11. CPPUNIT_TEST(testAppend);
  12. CPPUNIT_TEST(testClear);
  13. CPPUNIT_TEST_SUITE_END();
  14. std::shared_ptr<DirectDiskAdaptor> adaptor_;
  15. ByteArrayDiskWriter* writer_;
  16. public:
  17. void setUp()
  18. {
  19. adaptor_ = std::make_shared<DirectDiskAdaptor>();
  20. auto dw = make_unique<ByteArrayDiskWriter>();
  21. writer_ = dw.get();
  22. adaptor_->setDiskWriter(std::move(dw));
  23. }
  24. void testWriteToDisk();
  25. void testAppend();
  26. void testClear();
  27. };
  28. CPPUNIT_TEST_SUITE_REGISTRATION( WrDiskCacheEntryTest );
  29. void WrDiskCacheEntryTest::testWriteToDisk()
  30. {
  31. WrDiskCacheEntry e(adaptor_);
  32. e.cacheData(createDataCell(0, "??01234567", 2));
  33. e.cacheData(createDataCell(8, "890"));
  34. e.writeToDisk();
  35. CPPUNIT_ASSERT_EQUAL((size_t)0, e.getSize());
  36. CPPUNIT_ASSERT_EQUAL(std::string("01234567890"), writer_->getString());
  37. }
  38. void WrDiskCacheEntryTest::testAppend()
  39. {
  40. WrDiskCacheEntry e(adaptor_);
  41. auto cell = new WrDiskCacheEntry::DataCell{};
  42. cell->goff = 0;
  43. size_t capacity = 6;
  44. size_t offset = 2;
  45. cell->data = new unsigned char[offset+capacity];
  46. memcpy(cell->data, "??foo", 3);
  47. cell->offset = offset;
  48. cell->len = 3;
  49. cell->capacity = capacity;
  50. e.cacheData(cell);
  51. CPPUNIT_ASSERT_EQUAL((size_t)3,
  52. e.append(3, (const unsigned char*)"barbaz", 6));
  53. CPPUNIT_ASSERT_EQUAL((size_t)6, cell->len);
  54. CPPUNIT_ASSERT_EQUAL((size_t)6, e.getSize());
  55. CPPUNIT_ASSERT_EQUAL((size_t)0,
  56. e.append(7, (const unsigned char*)"FOO", 3));
  57. }
  58. void WrDiskCacheEntryTest::testClear()
  59. {
  60. WrDiskCacheEntry e(adaptor_);
  61. e.cacheData(createDataCell(0, "foo"));
  62. e.clear();
  63. CPPUNIT_ASSERT_EQUAL((size_t)0, e.getSize());
  64. CPPUNIT_ASSERT_EQUAL(std::string(), writer_->getString());
  65. }
  66. } // namespace aria2