SegmentManTest.cc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. Segment2 seg1;
  36. segmentMan.getSegment2(seg1, 1);
  37. seg1.writtenLength = seg1.length;
  38. segmentMan.completeSegment2(1, seg1);
  39. Segment2 seg2;
  40. segmentMan.getSegment2(seg2, 2);
  41. seg2.writtenLength = 512*1024;
  42. segmentMan.updateSegment2(2, seg2);
  43. Segment2 seg3;
  44. segmentMan.getSegment2(seg3, 3);
  45. seg2.writtenLength = 512*1024;
  46. segmentMan.updateSegment2(2, seg2);
  47. segmentMan.save();
  48. CPPUNIT_ASSERT(saveFile.exists());
  49. SegmentMan segmentManLoad;
  50. segmentManLoad.ufilename = filename;
  51. segmentManLoad.load();
  52. CPPUNIT_ASSERT_EQUAL(segmentMan.totalSize, segmentManLoad.totalSize);
  53. Segment2 seg2Load;
  54. segmentManLoad.getSegment2(seg2Load, 2, seg2.index);
  55. CPPUNIT_ASSERT_EQUAL(seg2, seg2Load);
  56. Segment2 seg3Load;
  57. segmentManLoad.getSegment2(seg3Load, 3, seg3.index);
  58. CPPUNIT_ASSERT_EQUAL(seg3, seg3Load);
  59. CPPUNIT_ASSERT_EQUAL(segmentMan.getDownloadLength(), segmentManLoad.getDownloadLength());
  60. } catch(Exception* e) {
  61. cerr << e->getMsg() << endl;
  62. delete e;
  63. }
  64. }
  65. void SegmentManTest::testNullBitfield() {
  66. SegmentMan segmentMan;
  67. Option op;
  68. op.put(PREF_SEGMENT_SIZE, Util::itos(1024*1024));
  69. segmentMan.option = &op;
  70. Segment2 segment;
  71. CPPUNIT_ASSERT(segmentMan.getSegment2(segment, 1));
  72. CPPUNIT_ASSERT_EQUAL(Segment2(0, 0, 0), segment);
  73. Segment2 segment2;
  74. CPPUNIT_ASSERT(!segmentMan.getSegment2(segment2, 2));
  75. long long int totalLength = 1024*1024;
  76. segment.writtenLength = totalLength;
  77. CPPUNIT_ASSERT(segmentMan.updateSegment2(1, segment));
  78. CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
  79. CPPUNIT_ASSERT(segmentMan.completeSegment2(1, segment));
  80. CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
  81. }
  82. void SegmentManTest::testCancelSegmentOnNullBitfield() {
  83. SegmentMan segmentMan;
  84. Segment2 segment;
  85. CPPUNIT_ASSERT(segmentMan.getSegment2(segment, 1));
  86. CPPUNIT_ASSERT(segmentMan.cancelSegment2(1, segment));
  87. CPPUNIT_ASSERT(segmentMan.getSegment2(segment, 1));
  88. }