WrDiskCacheTest.cc 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "WrDiskCache.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 WrDiskCacheTest : public CppUnit::TestFixture {
  9. CPPUNIT_TEST_SUITE(WrDiskCacheTest);
  10. CPPUNIT_TEST(testAdd);
  11. CPPUNIT_TEST_SUITE_END();
  12. std::shared_ptr<DirectDiskAdaptor> adaptor_;
  13. ByteArrayDiskWriter* writer_;
  14. public:
  15. void setUp()
  16. {
  17. adaptor_ = std::make_shared<DirectDiskAdaptor>();
  18. auto dw = make_unique<ByteArrayDiskWriter>();
  19. writer_ = dw.get();
  20. adaptor_->setDiskWriter(std::move(dw));
  21. }
  22. void testAdd();
  23. };
  24. CPPUNIT_TEST_SUITE_REGISTRATION(WrDiskCacheTest);
  25. void WrDiskCacheTest::testAdd()
  26. {
  27. WrDiskCache dc(20);
  28. CPPUNIT_ASSERT_EQUAL((size_t)0, dc.getSize());
  29. WrDiskCacheEntry e1(adaptor_);
  30. e1.cacheData(createDataCell(0, "who knows?"));
  31. CPPUNIT_ASSERT(dc.add(&e1));
  32. CPPUNIT_ASSERT_EQUAL((size_t)10, dc.getSize());
  33. WrDiskCacheEntry e2(adaptor_);
  34. e2.cacheData(createDataCell(21, "seconddata"));
  35. CPPUNIT_ASSERT(dc.add(&e2));
  36. CPPUNIT_ASSERT_EQUAL((size_t)20, dc.getSize());
  37. WrDiskCacheEntry e3(adaptor_);
  38. e3.cacheData(createDataCell(10, "hello"));
  39. CPPUNIT_ASSERT(dc.add(&e3));
  40. CPPUNIT_ASSERT_EQUAL((size_t)15, dc.getSize());
  41. // e1 is flushed to the disk
  42. CPPUNIT_ASSERT_EQUAL(std::string("who knows?"), writer_->getString());
  43. CPPUNIT_ASSERT_EQUAL((size_t)0, e1.getSize());
  44. e3.cacheData(createDataCell(15, " world"));
  45. CPPUNIT_ASSERT(dc.update(&e3, 6));
  46. // e3 is flushed to the disk
  47. CPPUNIT_ASSERT_EQUAL(std::string("who knows?hello world"),
  48. writer_->getString());
  49. CPPUNIT_ASSERT_EQUAL((size_t)0, e3.getSize());
  50. CPPUNIT_ASSERT_EQUAL((size_t)10, dc.getSize());
  51. e2.cacheData(createDataCell(31, "01234567890"));
  52. CPPUNIT_ASSERT(dc.update(&e2, 11));
  53. // e2 is flushed to the disk
  54. CPPUNIT_ASSERT_EQUAL(
  55. std::string("who knows?hello worldseconddata01234567890"),
  56. writer_->getString());
  57. CPPUNIT_ASSERT_EQUAL((size_t)0, e2.getSize());
  58. CPPUNIT_ASSERT_EQUAL((size_t)0, dc.getSize());
  59. }
  60. } // namespace aria2