WrDiskCacheTest.cc 2.1 KB

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