MultiFileAllocationIteratorTest.cc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "MultiFileAllocationIterator.h"
  2. #include "File.h"
  3. #include "MultiDiskAdaptor.h"
  4. #include <cppunit/extensions/HelperMacros.h>
  5. class MultiFileAllocationIteratorTest:public CppUnit::TestFixture {
  6. CPPUNIT_TEST_SUITE(MultiFileAllocationIteratorTest);
  7. CPPUNIT_TEST(testAllocate);
  8. CPPUNIT_TEST_SUITE_END();
  9. private:
  10. public:
  11. void setUp() {}
  12. void testAllocate();
  13. };
  14. CPPUNIT_TEST_SUITE_REGISTRATION( MultiFileAllocationIteratorTest );
  15. void MultiFileAllocationIteratorTest::testAllocate()
  16. {
  17. string dir = "/tmp";
  18. string topDir = "aria2_MultiFileAllocationIteratorTest_testAllocate";
  19. string fname1 = "file1";
  20. string fname2 = "file2";
  21. string fname3 = "file3";
  22. string fname4 = "file4";
  23. string fname5 = "file5";
  24. string fname6 = "file6";
  25. int64_t length1 = 32769;
  26. int64_t length2 = 0;
  27. int64_t length3 = 8;
  28. int64_t length4 = 10;
  29. int64_t length5 = 20;
  30. int64_t length6 = 30;
  31. try {
  32. MultiDiskAdaptorHandle diskAdaptor = new MultiDiskAdaptor();
  33. diskAdaptor->setStoreDir(dir);
  34. diskAdaptor->setTopDir(topDir);
  35. int64_t offset = 0;
  36. FileEntryHandle fileEntry1 = new FileEntry(fname1,
  37. length1,
  38. offset);
  39. offset += length1;
  40. FileEntryHandle fileEntry2 = new FileEntry(fname2,
  41. length2,
  42. offset);
  43. offset += length2;
  44. FileEntryHandle fileEntry3 = new FileEntry(fname3,
  45. length3,
  46. offset);
  47. offset += length3;
  48. FileEntryHandle fileEntry4 = new FileEntry(fname4,
  49. length4,
  50. offset);
  51. fileEntry4->setRequested(false);
  52. offset += length4;
  53. FileEntryHandle fileEntry5 = new FileEntry(fname5,
  54. length5,
  55. offset);
  56. offset += length5;
  57. FileEntryHandle fileEntry6 = new FileEntry(fname6,
  58. length6,
  59. offset);
  60. fileEntry6->setRequested(false);
  61. FileEntries fs;
  62. fs.push_back(fileEntry1);
  63. fs.push_back(fileEntry2);
  64. fs.push_back(fileEntry3);
  65. fs.push_back(fileEntry4);
  66. fs.push_back(fileEntry5);
  67. fs.push_back(fileEntry6);
  68. diskAdaptor->setFileEntries(fs);
  69. // we have to open file first.
  70. diskAdaptor->initAndOpenFile();
  71. MultiFileAllocationIteratorHandle itr = diskAdaptor->fileAllocationIterator();
  72. while(!itr->finished()) {
  73. itr->allocateChunk();
  74. }
  75. CPPUNIT_ASSERT_EQUAL((int64_t)length1, File(dir+"/"+topDir+"/"+fname1).size());
  76. CPPUNIT_ASSERT_EQUAL((int64_t)length2, File(dir+"/"+topDir+"/"+fname2).size());
  77. CPPUNIT_ASSERT_EQUAL((int64_t)length3, File(dir+"/"+topDir+"/"+fname3).size());
  78. CPPUNIT_ASSERT_EQUAL((int64_t)0, File(dir+"/"+topDir+"/"+fname4).size());
  79. CPPUNIT_ASSERT_EQUAL((int64_t)length5, File(dir+"/"+topDir+"/"+fname5).size());
  80. CPPUNIT_ASSERT_EQUAL((int64_t)0, File(dir+"/"+topDir+"/"+fname6).size());
  81. } catch(Exception* e) {
  82. cerr << e->getMsg() << endl;
  83. delete e;
  84. CPPUNIT_FAIL("exception was thrown");
  85. }
  86. }