SegmentManTest.cc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "SegmentMan.h"
  2. #include "File.h"
  3. #include "prefs.h"
  4. #include "Util.h"
  5. #include <cppunit/extensions/HelperMacros.h>
  6. using namespace std;
  7. class SegmentManTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(SegmentManTest);
  9. CPPUNIT_TEST(testSaveAndLoad);
  10. CPPUNIT_TEST(testNullBitfield);
  11. CPPUNIT_TEST(testCancelSegmentOnNullBitfield);
  12. CPPUNIT_TEST_SUITE_END();
  13. private:
  14. public:
  15. void setUp() {
  16. }
  17. void testSaveAndLoad();
  18. void testNullBitfield();
  19. void testCancelSegmentOnNullBitfield();
  20. };
  21. CPPUNIT_TEST_SUITE_REGISTRATION( SegmentManTest );
  22. void SegmentManTest::testSaveAndLoad() {
  23. string filename = "save-temp";
  24. string aria2filename = filename+".aria2";
  25. File saveFile(aria2filename);
  26. if(saveFile.exists()) {
  27. saveFile.remove();
  28. assert(!saveFile.exists());
  29. }
  30. try {
  31. SegmentMan segmentMan;
  32. segmentMan.totalSize = 10*1024*1024;
  33. segmentMan.ufilename = filename;
  34. segmentMan.initBitfield(1024*1024, segmentMan.totalSize);
  35. SegmentHandle seg1 = segmentMan.getSegment(1);
  36. seg1->writtenLength = seg1->length;
  37. segmentMan.completeSegment(1, seg1);
  38. SegmentHandle seg2 = segmentMan.getSegment(2);
  39. seg2->writtenLength = 512*1024;
  40. //segmentMan.updateSegment(2, seg2);
  41. SegmentHandle seg3 = segmentMan.getSegment(3);
  42. seg3->writtenLength = 512*1024;
  43. //segmentMan.updateSegment(2, seg2);
  44. segmentMan.save();
  45. CPPUNIT_ASSERT(saveFile.exists());
  46. SegmentMan segmentManLoad;
  47. segmentManLoad.ufilename = filename;
  48. segmentManLoad.load();
  49. CPPUNIT_ASSERT_EQUAL(segmentMan.totalSize, segmentManLoad.totalSize);
  50. SegmentHandle seg2Load = segmentManLoad.getSegment(2, seg2->index);
  51. CPPUNIT_ASSERT_EQUAL(seg2, seg2Load);
  52. SegmentHandle seg3Load = segmentManLoad.getSegment(3, seg3->index);
  53. CPPUNIT_ASSERT_EQUAL(seg3, seg3Load);
  54. CPPUNIT_ASSERT_EQUAL(segmentMan.getDownloadLength(), segmentManLoad.getDownloadLength());
  55. } catch(Exception* e) {
  56. cerr << e->getMsg() << endl;
  57. delete e;
  58. }
  59. }
  60. void SegmentManTest::testNullBitfield() {
  61. SegmentMan segmentMan;
  62. Option op;
  63. op.put(PREF_SEGMENT_SIZE, Util::itos(1024*1024));
  64. segmentMan.option = &op;
  65. SegmentHandle segment = segmentMan.getSegment(1);
  66. CPPUNIT_ASSERT(!segment.isNull());
  67. CPPUNIT_ASSERT_EQUAL(0, segment->index);
  68. CPPUNIT_ASSERT_EQUAL(0, segment->length);
  69. CPPUNIT_ASSERT_EQUAL(0, segment->segmentLength);
  70. CPPUNIT_ASSERT_EQUAL(0, segment->writtenLength);
  71. SegmentHandle segment2 = segmentMan.getSegment(2);
  72. CPPUNIT_ASSERT(segment2.isNull());
  73. int64_t totalLength = 1024*1024;
  74. segment->writtenLength = totalLength;
  75. CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
  76. CPPUNIT_ASSERT(segmentMan.completeSegment(1, segment));
  77. CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
  78. }
  79. void SegmentManTest::testCancelSegmentOnNullBitfield() {
  80. SegmentMan segmentMan;
  81. SegmentHandle segment = segmentMan.getSegment(1);
  82. CPPUNIT_ASSERT(!segment.isNull());
  83. segmentMan.cancelSegment(1);
  84. CPPUNIT_ASSERT(!segmentMan.getSegment(1).isNull());
  85. }